混合集群的添加云上节点的方式依赖本地数据中心自建Kubernetes集群的搭建方式,例如使用Kubeadm搭建、使用Kubernetes二进制文件搭建或者使用Rancher平台搭建等。本文将介绍如何使用自定义节点添加脚本。

步骤一:编写自定义节点添加脚本

kubelet配置的示例代码如下所示。
cat >/usr/lib/systemd/system/kubelet.service <<EOF
[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service
[Service]
ExecStart=/data0/kubernetes/bin/kubelet \\
  --node-ip=${ALIBABA_CLOUD_NODE_NAME} \\
  --hostname-override=${ALIBABA_CLOUD_NODE_NAME} \\
  --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \\
  --config=/var/lib/kubelet/config.yaml \\
  --kubeconfig=/etc/kubernetes/kubelet.conf \\
  --cert-dir=/etc/kubernetes/pki/ \\
  --cni-bin-dir=/opt/cni/bin \\
  --cni-cache-dir=/opt/cni/cache \\
  --cni-conf-dir=/etc/cni/net.d \\
  --logtostderr=false \\
  --log-dir=/var/log/kubernetes/logs \\
  --log-file=/var/log/kubernetes/logs/kubelet.log \\
  --node-labels=${ALIBABA_CLOUD_LABELS} \\
  --root-dir=/var/lib/kubelet \\
  --provider-id=${ALIBABA_CLOUD_PROVIDE_ID} \\
  --register-with-taints=${ALIBABA_CLOUD_TAINTS} \\
  --v=4
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
在编写自定义节点添加脚本时需要注意必须接收阿里云注册集群下发的系统环境变量,如下所示。
系统环境变量 说明 示例
ALIBABA_CLOUD_PROVIDE_ID 自定义节点添加脚本中必须接收并进行配置,否则会影响注册集群管理异常。 ALIBABA_CLOUD_PROVIDE_ID=cn-shenzhen.i-wz92ewt14n9wx9mol2cd
ALIBABA_CLOUD_NODE_NAME 自定义节点添加脚本中必须接收并进行配置,否则会导致注册集群节点池中节点状态异常。 ALIBABA_CLOUD_NODE_NAME=cn-shenzhen.192.168.1.113
ALIBABA_CLOUD_LABELS 自定义节点添加脚本中必须接收并进行配置,否则会影响节点池管理状态异常以及后续工作负载在云上云下的调度。 ALIBABA_CLOUD_LABELS=alibabacloud.com/nodepool-id=np0e2031e952c4492bab32f512ce1422f6,ack.aliyun.com=cc3df6d939b0d4463b493b82d0d670c66,alibabacloud.com/instance-id=i-wz960ockeekr3dok06kr,alibabacloiud.com/external=true,workload=cpu

其中workload=cpu是用户在节点池中配置的用户自定义节点标签,其他都为系统下发的节点标签。

ALIBABA_CLOUD_TAINTS 自定义节点添加脚本中必须接收并进行配置,否则节点池中的污点配置将不会生效。 ALIBABA_CLOUD_TAINTS=workload=ack:NoSchedule

步骤二:保存自定义脚本

将自定义脚本保存在HTTP文件服务器上,例如存放在OSS Bucket上。示例地址为https://kubelet-liusheng.oss-ap-southeast-3-internal.aliyuncs.com/attachnode.sh

步骤三:使用自定义脚本

  1. 将本地数据中心集群接入注册集群。具体操作,请参见创建注册集群并接入本地数据中心集群
    注册集群的Agent组件会自动在kube-system下创建名为ack-agent-config的ConfigMap,初始化配置如下所示。
    apiVersion: v1
    data:
      addNodeScriptPath: ""
      enableNodepool: "true"
      isInit: "true"
    kind: ConfigMap
    metadata:
      name: ack-agent-config
      namespace: kube-system
  2. 将自定义节点添加脚本的路径https://kubelet-liusheng.oss-ap-southeast-3-internal.aliyuncs.com/attachnode.sh配置到addNodeScriptPath字段区域并保存。
    命令示例如下所示。
    apiVersion: v1
    data:
      addNodeScriptPath: https://kubelet-liusheng.oss-ap-southeast-3-internal.aliyuncs.com/attachnode.sh 
      enableNodepool: "true"
      isInit: "true"
    kind: ConfigMap
    metadata:
      name: ack-agent-config
      namespace: kube-system