节点接入

    用户可以通过 Yurtadm join 将云端节点、边缘节点加入 OpenYurt 集群。注意,在加入节点时,需要在节点上安装运行时,并关闭交换分区。

    执行以下命令加入边缘节点:

    执行以下命令加入云端节点:

    当边缘节点runtime为containerd时,需要配置cri-socket参数,如上面执行命令加入边缘节点改为:

    1. $ _output/local/bin/linux/amd64/yurtadm join 1.2.3.4:6443 --token=zffaj3.a5vjzf09qn9ft3gt --node-type=edge --discovery-token-unsafe-skip-ca-verification --cri-socket=/run/containerd/containerd.sock --v=5

    对参数的解释:

    • 1.2.3.4:6443: apiserver 的地址
    • --token:bootstrap token
    • --node-type:openyurt 节点类型,可以为:cloud 或者 edge

    如何编译yurtadm二进制,可以参考链接

    • kubeadm
    • kubectl
    • kubelet
    • kube-proxy

    1.2 yurtadm reset

    当需要删除使用 yurtadm join 加入的节点时,可以使用 yurtadm reset。下面是详细步骤:

    在 master 节点上:

    1. kubectl drain {NodeName} --delete-local-data --force --ignore-daemonsets
    2. kubectl delete node {NodeName}

    在 join 的节点上:

    1. 执行 yurtadm reset
    1. yurtadm reset

    2. 在存量的K8s节点上安装OpenYurt Node组件

    下述操作,仅仅针对已经是Kubernetes集群的工作节点。

    OpenYurt需要根据节点的openyurt.io/is-edge-worker标签区分云端节点和边缘节点,从而在云边断联情况下判断是否驱逐节点上Pod. 假设我们的节点us-west-1.192.168.0.88是一个边缘节点,则

    1. $ kubectl label node us-west-1.192.168.0.88 openyurt.io/is-edge-worker=true
    2. node/us-west-1.192.168.0.88 labeled
    1. $ kubectl annotate node us-west-1.192.168.0.88 node.beta.openyurt.io/autonomy=true

    如果希望使用OpenYurt的单元化管理能力,我们可以将该节点加入节点池中:

    1. $ cat <<EOF | kubectl apply -f -
    2. apiVersion: apps.openyurt.io/v1alpha1
    3. kind: NodePool
    4. metadata:
    5. name: worker
    6. spec:
    7. type: Edge
    8. EOF
    9. $ kubectl label node us-west-1.192.168.0.87 apps.openyurt.io/desired-nodepool=worker

    2.2 部署Edge工作模式的Yurthub

    • 从获取yurthub.yaml,执行如下修改后上传到边缘节点的/etc/kubernets/manifests目录。
    • 获取 apiserver 的地址 (即ip:port) 和 bootstrap token ,用于替换模板文件 yurthub.yaml 中的对应值

    在下面的命令中,我们假设 apiserver 的地址是 1.2.3.4:5678,bootstrap token 是 07401b.f395accd246ae52d

    1. $ vi /etc/kubernetes/manifests/yurt-hub.yaml
    2. ...
    3. command:
    4. - yurthub
    5. - --v=2
    6. - --server-addr=https://1.2.3.4:5678
    7. - --node-name=$(NODE_NAME)
    8. - --join-token=07401b.f395accd246ae52d

    Yurthub 将在几分钟内准备就绪。

    接下来需要重置kubelet服务,让kubelet通过Yurthub访问apiserver (以下步骤假设我们以root身份登录到边缘节点)。由于 kubelet 会通过 http 连接 Yurthub,所以我们为 kubelet 服务创建一个新的 kubeconfig 文件。

    为了让 kubelet 使用新的 kubeconfig,我们编辑 kubelet 服务的 drop-in 文件(即 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 或者 在 CentOS 系统上))。

    1. sed -i "s|KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=\/etc\/kubernetes\/bootstrap-kubelet.conf\ --kubeconfig=\/etc\/kubernetes\/kubelet.conf|KUBELET_KUBECONFIG_ARGS=--kubeconfig=\/var\/lib\/openyurt\/kubelet.conf|g" \
    2. /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

    然后,我们重启 kubelet 服务。

    1. # assume we are logged in to the edge node already
    2. $ systemctl daemon-reload && systemctl restart kubelet
    1. $ kubectl get nodes
    2. NAME STATUS ROLES AGE VERSION
    3. us-west-1.192.168.0.87 Ready <none> 3d23h v1.20.11
    4. us-west-1.192.168.0.88 Ready <none> 3d23h v1.20.11

    2.4 重建节点上的Pods

    当安装完Yurthub并且调整好Kubelet配置后,为了让节点上所有Pods(Yurthub除外)都可以通过Yurthub访问Kube-apiserver,所有需要重建节点上所有Pods(Yurthub pod除外)。请务必确认该操作对生产环境的影响后再执行。

    1. $ kubectl get pod -A -o wide | grep us-west-1.192.168.0.88
    2. kube-system yurt-hub-us-west-1.192.168.0.88 1/1 Running 0 19d 172.16.0.32 us-west-1.192.168.0.88 <none> <none>
    3. kube-system coredns-qq6dk 1/1 Running 0 19d 10.148.2.197 us-west-1.192.168.0.88 <none> <none>
    4. kube-system kube-flannel-ds-j698r 1/1 Running 0 19d 172.16.0.32 us-west-1.192.168.0.88 <none> <none>
    5. kube-system kube-proxy-f5qvr 1/1 Running 0 19d 172.16.0.32 us-west-1.192.168.0.88 <none> <none>
    6. // 删除节点上所有pods(Yurthub pod除外)
    7. $ kubectl -n kube-system delete pod coredns-qq6dk kube-flannel-ds-j698r kube-proxy-f5qvr
    8. // 确认节点上所有pods正常运行
    9. $ kubectl get pod -A -o wide | grep us-west-1.192.168.0.88
    10. kube-system yurt-hub-us-west-1.192.168.0.88 1/1 Running 0 19d 172.16.0.32 us-west-1.192.168.0.88 <none> <none>
    11. kube-system coredns-qq6ad 1/1 Running 0 19d 10.148.2.198 us-west-1.192.168.0.88 <none> <none>
    12. kube-system kube-flannel-ds-j123d 1/1 Running 0 19d 172.16.0.32 us-west-1.192.168.0.88 <none> <none>