---
title: 工作节点操作
description: "将工作节点加入到集群中。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2530/armnative15/kunpengcpsvideo_20_0081.html
sourcePath: /source/zh/kunpengboostkithistory/2530/armnative15/kunpengcpsvideo_20_0081.html
indexId: 93c63a84b40bba120c1a996678930370230054f2c285c185a3026fa2d3bb054f79
---
# 工作节点操作

将工作节点加入到集群中。

请参见视频流引擎获取DemoVideoEngine.tar.gz软件包，获取后将软件包上传至服务器的“/home/k8s”目录。

1. 容器存储隔离和大小设置。该步骤服务器重启后需重新执行。
```
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

若已执行该步骤命令，重新修改某个编号的数据卷存储大小时需先删除对应编号的数据卷再重新创建。


2. 修改containerd镜像配置，根据master节点拉取的镜像中pause的版本更改config.toml的配置，以图1 镜像拉取信息中registry.aliyuncs.com/google_containers/pause:3.9为例
  1 sed -i 's|sandbox_image =.*|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|g' /etc/containerd/config.toml

3. 执行在master节点集群初始化成功时保存的3.2.2-图2 集群初始化成功打印信息红框中加入集群的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

4. 拷贝master节点的kube config文件到工作节点
  1 2 3 4 rm -rf $HOME/.kube mkdir -p $HOME/.kube sudo scp root@xxx.xxx.xxx.xxx:$HOME/.kube/config $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

5. 查看集群状态。

  a. 需在master节点查看状态。
    1 kubectl get nodes -A -o wide

    期望是此工作节点的状态（STATUS）列是Ready，运行时（CONTAINER-RUNTIME）列是containerd://x.x.x。

  b. 需在master节点查看pod状态。
    1 kubectl get pod -A -o wide

    期望是此工作节点上的pod的状态（STATUS）列都是Running。

  c. 在此工作节点查看容器状态。
    1 crictl ps

    期望是所有的容器状态（STATE）列都是Running

6. （可选）配置NUMA亲和。

  a. 编译环境配置和插件时需要保证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

  b. 请参见    视频流引擎
获取K8s NUMA亲和插件软件包topo-affinity-plugin-master.zip，获取后将软件包上传至服务器的“/home/k8s”目录。
  c. 解压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”二进制文件。

  d. 安装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 | 等级越高，日志输出越详细。 |


  e. 启动TAP服务。

```
make start-service
```


    启动成功后回显信息中输出的Status为active。

  f. 修改并重启Kubelet。

    1. 重启前需确保该节点上未部署容器。
    2. 修改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 ..."

  g. 重新启动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
