工作节点操作
将工作节点加入到集群中。
请参见视频流引擎获取DemoVideoEngine.tar.gz软件包,获取后将软件包上传至服务器的“/home/k8s”目录。
- 容器存储隔离和大小设置。该步骤服务器重启后需重新执行。
1 2 3 4 5
cd /home/k8s tar -xvf DemoVideoEngine.tar.gz k8s/ cd /home/k8s/k8s/DevicesPlugin chmod +x storage_manager.sh ./storage_manager.sh $ACTION $STORAGE_START_INDEX $STORAGE_END_INDEX $STORAGE_SIZE_GB $IMG_BASE
命令参数说明如表1所示。
表1 容器存储隔离和大小设置参数说明 参数
说明
ACTION
参数值为create或delete,创建或者删除。
STORAGE_START_INDEX
数据卷删除或创建起始编号。
STORAGE_END_INDEX
数据卷删除或创建结束编号,结束编号必须大于或者等于起始编号。
STORAGE_SIZE_GB
存储大小,单位为GB。删除时可不传。
IMG_BASE
基础数据卷img文件,若无基础数据卷可不传,基础数据卷img文件制作请参考制作基础数据卷。删除时可不传。参数STORAGE_SIZE_GB和IMG_BASE只传其中一个。
例如:
- 创建100个存储大小为32GB的存储隔离数据卷,名称为video1~video100。
1
./storage_manager.sh create 1 100 32
- 如果在此基础上,要增加20个存储大小为32GB的存储隔离数据卷,名称为video101~video120。
1
./storage_manager.sh create 101 120 32
- 删除名称为video1~video100数据卷。
1
./storage_manager.sh delete 1 100
- 如果在此基础上,要删除名称为video101~video120这剩余20个数据卷。
1
./storage_manager.sh delete 101 120
- 通过videobase.img为基础制作名为video1~video100的数据卷。
1
./storage_manager.sh create 1 100 /home/mount/img/videobase.img
若已执行该步骤命令,重新修改某个编号的数据卷存储大小时需先删除对应编号的数据卷再重新创建。
- 创建100个存储大小为32GB的存储隔离数据卷,名称为video1~video100。
- 执行在master初始化成功时保存的图1红框中加入集群的token命令。
例如:
1 2
kubeadm join xx.xx.xx.xx:xxxx --token 7h0hpd.1av4cdcb4fb0on5x \ --discovery-token-ca-cert-hash sha256:357c6d1dbefe6f7adf3c80987a90d3765965b1c43e1757b655ea8586c8ade10a
- 工作节点重启后,重新加入集群时,需保证此工作节点可运行视频流云手机。
- xx.xx.xx.xx为IP地址,xxxx为映射端口号。
- 加入集群的token命令若失效可重新在master节点执行如下命令重新生成。
1
kubeadm token create --print-join-command
- 查看集群状态。
- 需在master节点查看状态。
1
kubectl get nodes -A -o wide
期望是此工作节点的状态(STATUS)列是Ready,运行时(CONTAINER-RUNTIME)列是containerd://x.x.x。
- 需在master节点查看pod状态。
1
kubectl get pod -A -o wide
期望是此工作节点上的pod的状态(STATUS)列都是Running。
- 在此工作节点查看容器状态。
1
crictl ps
期望是所有的容器状态(STATE)列都是Running。
- 需在master节点查看状态。
- (可选)配置NUMA亲和。
- 编译环境配置和插件时需要保证Golang版本1.23或以上,将新的1.23版本的Golang go目录放至“/usr/lib”下,将“go/bin/go”和“go/bin/gofmt”放至“/usr/bin”下。
1 2 3
systemctl stop kubeletexport GOROOT=/usr/lib/go go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.io,direct
- 请参见视频流引擎获取K8s NUMA亲和插件软件包topo-affinity-plugin-master.zip,获取后将软件包上传至服务器的“/home/k8s”目录。
- 解压topo-affinity-plugin-master.zip,进入软件包目录并编译插件。
1 2 3 4
unzip topo-affinity-plugin-master.zip cd topo-affinity-plugin-master go mod tidy make build
构建完成后,请确认在“bin”目录下生成“kunpeng-tap”二进制文件。
- 安装containerd运行时的版本。
make install-service-containerd
如果需要修改启动参数,则在源代码目录下的“hack/kunpeng-tap.service.containerd”文件的“ExecStart=”下进行修改,用户可根据需求修改相关参数后启动。参数说明请参见表2。
[Unit] Description=Kunpeng Topology-Affinity Plugin Service After=network.target [Service] ExecStart=/usr/local/bin/kunpeng-tap --runtime-proxy-endpoint="/var/run/kunpeng/tap-runtime-proxy.sock" \ --container-runtime-service-endpoint="/var/run/containerd/containerd.sock" --container-runtime-mode="Containerd" \ --resource-policy="topology-aware" --v=2 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
表2 启动参数说明 参数名称
参数描述
默认值
说明
container-runtime-mode
插件对接的容器运行时,对应集群运行时设置Docker或Containerd。
Containerd
依照K8s集群使用的容器运行时决定。
resource-policy
容器资源的优化策略,目前支持numa-aware和topology-aware。
- numa-aware策略支持Burstable类型容器进行CPU的NUMA亲和。
- topology-aware策略提供Socket、Die、NUMA等拓扑层次的CPU亲和,支持内存、GPU的优化配置。
topology-aware
依照需求进行选择。
v
日志信息等级,调整范围2至5。
2
等级越高,日志输出越详细。
- 启动TAP服务。
make start-service
启动成功后回显信息中输出的Status为active。
- 修改并重启Kubelet。
- 重启前先需确保该节点上未部署容器。
- 修改kubelet参数配置文件“/var/lib/kubelet/kubeadm-flags.env”。初始配置内容如下:
1
KUBELET_KUBEADM_ARGS="... --container-runtime=remote --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock ..."
修改为如下内容:1
KUBELET_KUBEADM_ARGS="... --container-runtime=remote --container-runtime-endpoint=unix:///var/run/kunpeng/tap-runtime-proxy.sock ..."
- 重新启动kubelet并查看,并查看是否重启成功。
1 2 3
systemctl daemon-reload systemctl restart kubelet systemctl status kubelet
卸载TAP插件步骤:
- “/var/lib/kubelet/kubeadm-flags.env”文件为初始配置内容并重启kubelet。
systemctl daemon-reload systemctl restart kubelet systemctl status kubelet
- 进入“topology-affinity-plugin”源码目录,并执行插件卸载命令。
cd /home/k8s/topo-affinity-plugin-master make uninstall-service
- “/var/lib/kubelet/kubeadm-flags.env”文件为初始配置内容并重启kubelet。
- 编译环境配置和插件时需要保证Golang版本1.23或以上,将新的1.23版本的Golang go目录放至“/usr/lib”下,将“go/bin/go”和“go/bin/gofmt”放至“/usr/bin”下。