当前位置: 首页 > news >正文

RK3588 + 银河麒麟部署 swarm 集群指南-续(自己应用程序部署)

RK3588 + 银河麒麟部署 swarm 集群指南
继上面的swarm部署demo程序hello-world之后,本文介绍并记录了自己的应用程序在集群中部署的过程。

一、创建应用程序

	源码见:udp_client.c。功能为通过udp周期性(5s)的给192.168.137.1的8888端口发送消息。使用rk3588的交叉编译环境编译生成udp_client。

二、创建docker

	创建一个Dockerfile来打包应用。

0、确保打包的文件权限

	chmod 777 udp_client

1、创建Dockerfile

	内容如下:# 使用scratch基础镜像(完全空镜像)FROM scratch# 复制可执行文件COPY udp_client /udp_client# 设置启动命令(注意:scratch镜像没有shell,必须使用JSON格式)CMD ["/udp_client"]

2、构建镜像

	docker build -t udp-client:latest .   //注意“.”不要忘记

3、验证镜像

	docker images | grep udp-client打印如下:udp-client    latest    1511c5cf5392   13 seconds ago           652kB

三、搭建私有仓

1、 配置所有节点允许不安全的registry

	# 在每个节点上编辑Docker配置文件sudo vi /etc/docker/daemon.json添加{"insecure-registries": ["192.168.137.224:5000"]}sudo systemctl daemon-reloadsudo systemctl restart dockerdocker info  # 验证配置生效

2、创建Registry服务

	//拉取,如果拉取失败,可以在pc平台拉取,但是要加上--platform arm64docker pull registry:latestdocker pull swr.cn-east-2.myhuaweicloud.com/library/registry:latest# 创建挂载目录sudo mkdir -p /var/lib/registry# 设置权限(registry 容器以非 root 用户运行)sudo chown -R 1000:1000 /var/lib/registry# 验证目录存在ls -ld /var/lib/registrydocker run -d \--name registry \-p 5000:5000 \-v /var/lib/registry:/var/lib/registry \-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \registry:latest//验证仓  curl http://localhost:5000/v2/_catalog打印如下:{"repositories":[""]}

3、 标记并推送镜像到本地Registry

	# 标记镜像指向本地registrydocker tag udp-client:latest 192.168.137.224:5000/udp-client:latest# 推送镜像到registrydocker push 192.168.137.224:5000/udp-client:latest# 验证推送成功,在所有的节点访问curl http://192.168.137.224:5000/v2/_catalog打印如下:{"repositories":["udp-client"]}

四、在swarm集群中部署

1、本地镜像方式部署服务

	如果没有私有仓,可以是把应用包分发到每一个节点上。# 将镜像保存为 tar 文件sudo docker save udp-client:latest > udp-client.tar# 查看生成的文件ls -lh udp-client.tar//每个节点本地镜像导入# 从 tar 文件导入镜像docker load -i udp-client.tar# 每个节点验证镜像已导入docker images | grep udp-client# 使用service方式部署docker service create --name udp-client --replicas 3 --restart-condition any udp-client:latest# 查看服务状态docker service ls# 查看具体服务详情docker service ps udp-client# 查看服务日志docker service logs udp-client

2、私有仓方式部署服务

	前提:参考一、二。三、四、完成应用“udp-v2”的docker镜像制作,私有仓搭建,镜像上传私有仓。# 部署服务 docker service create --name udp-v2 --replicas 3 --restart-condition any 192.168.137.224:5000/udp-v2:latest打印如下:22qskkbjme4lgp4zam46sfhhxoverall progress: 3 out of 3 tasks 1/3: running   [==================================================>] 2/3: running   [==================================================>] 3/3: running   [==================================================>] verify: Service converged 注:要点时间。# 查看服务状态 docker service ls打印如下:ID             NAME      MODE         REPLICAS   IMAGE                                PORTS22qskkbjme4l   udp-v2    replicated   3/3        192.168.137.224:5000/udp-v2:latest # 查看具体服务详情 docker service ps udp-v2打印如下:ID             NAME       IMAGE                                NODE          DESIRED STATE   CURRENT STATE                    ERROR     PORTSx6h3lqqhso1r   udp-v2.1   192.168.137.224:5000/udp-v2:latest   worker-2      Running         Running less than a second ago             7efawg6x749a   udp-v2.2   192.168.137.224:5000/udp-v2:latest   worker-1      Running         Running less than a second ago             bgtttbytfzyb   udp-v2.3   192.168.137.224:5000/udp-v2:latest   master-node   Running         Running 8 minutes ago  注:由于我的三个节点时间不一致,导致“CURRENT”的显示也有点怪。master-node的时间为:2021年 01月 01日 星期五 12:57:29 CSTworker-1的时间为:2021年 01月 01日 星期五 20:25:10 CSTworker-1的时间为:2021年 01月 01日 星期五 20:25:13 CST# 查看服务日志 docker service logs udp-v2无打印。

3、电脑端验证

UDP-v2代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>#define SERVER_IP "192.168.137.1"//pc
#define PORT 8888
#define MESSAGE_PREFIX "v2 send : "
#define INTERVAL 5  // 发送间隔(秒)int main() {int sockfd;struct sockaddr_in server_addr;char buffer[256];int seq = 1;// 创建UDP套接字if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {perror("Socket creation failed");exit(EXIT_FAILURE);}memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(PORT);if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr) <= 0) {perror("Invalid address / Address not supported");close(sockfd);exit(EXIT_FAILURE);}while (1) {sprintf(buffer, "%s%08d.", MESSAGE_PREFIX, seq++);if (sendto(sockfd, buffer, strlen(buffer), 0, (const struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {perror("Send failed");} else {printf("Sent: %s\n", buffer);}sleep(INTERVAL);}close(sockfd);return 0;
}

wireshark抓包如下:
在这里插入图片描述

http://www.dtcms.com/a/482007.html

相关文章:

  • 为什么我选择用 Rust 构建全栈后台管理系统?
  • 一篇文章讲清 UPD协议 与 TCP协议
  • 武邑网站建设价格wordpress 8小时
  • SSM高校职称申报系统337gs(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 深度解析:Linux sudo权限配置中的 %wheel ALL=(ALL:ALL) ALL 到底是什么意思?
  • d3.js:学习积累
  • ESLint
  • 大米CMS支付漏洞复现报告
  • SAP MM采购申请审批接口分享
  • 自定义类型:结构体、联合和枚举
  • iOS 是开源的吗?苹果系统的封闭与开放边界全解析(含开发与开心上架(Appuploader)实战)
  • 网站建设费 项目经费通用网址通用网站查询
  • 知道网站域名怎么联系wordpress插件的安装目录下
  • 网站建设价格与方案wordpress抓取别人网站
  • 服务网格 Service Mesh:微服务通信的终极进化
  • 计算机理论学习Day14
  • Spring Cloud OpenFeign + Nacos 实战教程:像调用本地方法一样调用远程微服务
  • Java求职面试: 互联网医疗场景中的缓存技术与监控运维应用
  • 【论文精读】InstanceCap:通过实例感知提升文本到视频生成效果
  • 如何将 iPhone 同步到新电脑而不会丢失数据
  • yolov8 检测
  • 男女性直接做的视频网站石家庄市城乡建设局网站
  • 有什么网站可以做婚庆视频素材平面设计公司企业logo设计
  • Python爬虫绕过Google reCAPTCHA终极指南
  • 使用docker本地部署dify
  • 极米CC极光黑金升级版无屏电视自动对焦不准如何检测
  • 一些可用于排序的函数(2542. 最大子序列的分数)
  • 灵象工具箱v0.1.5版本更新
  • 医疗网络功能虚拟化与深度强化学习的动态流量调度优化研究(上)
  • 廊坊做网站上海公司电话网站用excel做数据库吗