ACK One注冊集群功能允許您將本地數據中心或其他云廠商的Kubernetes集群接入阿里云容器服務管理平臺,實現統一管理,快速搭建混合云環境。通過這種方式,您可以有效地管理和擴展計算資源,以應對業務需求。當本地數據中心的計算資源受限時,您可以通過云上節點池功能,擴展云端計算資源,從而滿足業務的增長需求。本文介紹如何創建和使用云上節點池。
前提條件
已創建注冊集群,并已將本地數據中心自建Kubernetes集群接入注冊集群。具體操作,請參見通過控制臺創建注冊集群。
本地數據中心自建Kubernetes集群的網絡與云上注冊集群使用的專有網絡VPC互通。具體操作,請參見入門概述。
本地數據中心自建Kubernetes集群必須使用私網方式導入代理配置接入注冊集群。具體操作,請參見將目標集群接入注冊集群。
已通過kubectl連接注冊集群。具體操作,請參見獲取集群KubeConfig并通過kubectl工具連接集群。
操作步驟
在創建集群并為其添加節點的過程中,首先需要將添加節點的腳本地址配置到集群配置項中。因此,首要任務是準備腳本并且配置阿里云系統環境變量。為了幫助您快速完成節點添加腳本的配置,請根據下列步驟完成后續操作。
需要根據您的自身環境和上圖中的判斷條件,最終確定您使用自定義腳本還是獲取節點示例腳本。
示例腳本僅支持基于yum軟件包管理系統的操作系統。
步驟一(A):為自定義腳本添加阿里云環境變量
檢查是否為GPU節點(可選)。
當通過節點池添加ECS節點的時候,出于業務的需要,可能需要GPU節點,可以通過如下的腳本來判斷節點是否為GPU節點。
#!/bin/bash # 檢查lspci是否安裝 if ! which lspci &>/dev/null; then yum -y install pciutils fi # 檢查節點是否存在GPU設備 if lspci | grep -i nvidia &>/dev/null; then echo "該節點為GPU節點,請安裝相關驅動。" fi
GPU節點不同于普通的ECS節點,需要安裝驅動包、device plugin以及配置運行時等。相關操作,請參見GPU節點安裝新版本驅動。
需要您提前準備自定義腳本,以確保注冊集群的節點池能夠正確同步節點狀態,并滿足云上調度需求。自定義腳本必須接收阿里云注冊集群下發的系統環境變量。接收系統環境變量的方法取決于集群的搭建方式。目前,Kubernetes集群的搭建方式主要有二進制方式和kubeadm方式,以下分別說明這兩種方式下如何接收環境變量。
kubeadm方式搭建Kubernetes集群
大多數Kubernetes集群是通過官方工具kubeadm搭建的,這也是官方推薦的方式。如果您使用kubeadm搭建集群,需要在自定義添加節點的腳本中追加以下內容。
.... ####### <新增部分。 # 配置Node Labels,Taints,Node Name,Provider ID。 KUBELET_CONFIG_FILE="/etc/sysconfig/kubelet" if [[ $ALIBABA_CLOUD_LABELS != "" ]];then option="--node-labels" if grep -- "${option}=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@${option}=@${option}=${ALIBABA_CLOUD_LABELS},@g" $KUBELET_CONFIG_FILE elif grep "KUBELET_EXTRA_ARGS=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@KUBELET_EXTRA_ARGS=@KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_LABELS} @g" $KUBELET_CONFIG_FILE else sed -i "/^\[Service\]/a\Environment=\"KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_LABELS}\"" $KUBELET_CONFIG_FILE fi fi if [[ $ALIBABA_CLOUD_TAINTS != "" ]];then option="--register-with-taints" if grep -- "${option}=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@${option}=@${option}=${ALIBABA_CLOUD_TAINTS},@g" $KUBELET_CONFIG_FILE elif grep "KUBELET_EXTRA_ARGS=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@KUBELET_EXTRA_ARGS=@KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_TAINTS} @g" $KUBELET_CONFIG_FILE else sed -i "/^\[Service\]/a\Environment=\"KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_TAINTS}\"" $KUBELET_CONFIG_FILE fi fi if [[ $ALIBABA_CLOUD_NODE_NAME != "" ]];then option="--hostname-override" if grep -- "${option}=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@${option}=@${option}=${ALIBABA_CLOUD_NODE_NAME},@g" $KUBELET_CONFIG_FILE elif grep "KUBELET_EXTRA_ARGS=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@KUBELET_EXTRA_ARGS=@KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_NODE_NAME} @g" $KUBELET_CONFIG_FILE else sed -i "/^\[Service\]/a\Environment=\"KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_NODE_NAME}\"" $KUBELET_CONFIG_FILE fi fi if [[ $ALIBABA_CLOUD_PROVIDER_ID != "" ]];then option="--provider-id" if grep -- "${option}=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@${option}=@${option}=${ALIBABA_CLOUD_PROVIDER_ID},@g" $KUBELET_CONFIG_FILE elif grep "KUBELET_EXTRA_ARGS=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@KUBELET_EXTRA_ARGS=@KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_PROVIDER_ID} @g" $KUBELET_CONFIG_FILE else sed -i "/^\[Service\]/a\Environment=\"KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_PROVIDER_ID}\"" $KUBELET_CONFIG_FILE fi fi ####### 新增部分>。 # 重啟運行時以及kubelet等。 ....
二進制方式搭建Kubernetes集群
通過Kubernetes二進制文件來搭建集群。這種方法需要在自定義腳本中修改kubelet的啟動配置,以便于接收阿里云注冊集群的環境變量。通常情況下,默認的
kubelet.service
文件位于/usr/lib/systemd/system/
目錄下。cat >/usr/lib/systemd/system/kubelet.service <<EOF # 忽略客戶配置的位置。 ... [Service] ExecStart=/data0/kubernetes/bin/kubelet \\ # 需要修改的部分。 --node-ip=${ALIBABA_CLOUD_NODE_NAME} \\ --hostname-override=${ALIBABA_CLOUD_NODE_NAME} \\ --node-labels=${ALIBABA_CLOUD_LABELS} \\ --provider-id=${ALIBABA_CLOUD_PROVIDER_ID} \\ --register-with-taints=${ALIBABA_CLOUD_TAINTS} \\ .... --v=4 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF
需要接收阿里云注冊集群下發的系統環境變量具體參數及其說明如下所示。
系統環境變量 | 說明 | 示例 |
ALIBABA_CLOUD_PROVIDER_ID | 自定義節點添加腳本中必須接收并進行配置,否則會影響注冊集群的正常運行。 | ALIBABA_CLOUD_PROVIDER_ID=cn-shenzhen.i-wz92ewt14n9wx9mo*** |
ALIBABA_CLOUD_NODE_NAME | 自定義節點添加腳本中必須接收并進行配置,否則會導致注冊集群節點池中節點狀態異常。 | ALIBABA_CLOUD_NODE_NAME=cn-shenzhen.192.168.1.*** |
ALIBABA_CLOUD_LABELS | 自定義節點添加腳本中必須接收并進行配置,否則會影響節點池管理狀態異常以及后續工作負載在云上云下的調度。 | ALIBABA_CLOUD_LABELS=alibabacloud.com/nodepool-id=np0e2031e952c4492bab32f512ce142***,ack.aliyun.com=cc3df6d939b0d4463b493b82d0d670***,alibabacloud.com/instance-id=i-wz960ockeekr3dok0***,alibabacloud.com/external=true,workload=cpu 其中workload=cpu是用戶在節點池中配置的用戶自定義節點標簽,其他都為系統下發的節點標簽。 |
ALIBABA_CLOUD_TAINTS | 自定義節點添加腳本中必須接收并進行配置,否則節點池中的污點配置將不會生效。 | ALIBABA_CLOUD_TAINTS=workload=ack:NoSchedule |
在完成以上所有操作后,請跳轉到步驟二:保存并上傳腳本到文件服務器。
步驟一(B):創建添加節點腳本
獲取系統相關信息。
集群版本大于等于1.18
運行如下命令獲取IDC Kubernetes集群版本號。后續設置到示例腳本環境變量
KUBE_VERSION
中。kubectl get no $(kubectl get nodes -l node-role.kubernetes.io/control-plane -o json | jq -r '.items[0].metadata.name') -o json | jq -r '.status.nodeInfo.kubeletVersion'
輸出示例:
v1.14.10
運行如下命令獲取IDC Kubernetes集群運行時以及版本號。后續設置到示例腳本環境變量
RUNTIME_VERSION
中。kubectl get no $(kubectl get nodes -l node-role.kubernetes.io/control-plane -o json | jq -r '.items[0].metadata.name') -o json | jq -r '.status.nodeInfo.containerRuntimeVersion'
輸出示例:
docker://18.6.3 # Docker運行時。 containerd://1.4.3 # Containerd運行時。
運行如下命令獲取kubeadm 添加節點完整命令。后續設置到示例腳本環境變量
KUBEADM_JOIN_CMD
中。# --ttl 0 很重要。需要設置為永不過期,避免節點池彈性伸縮失效。 kubeadm token create --ttl 0 --print-join-command
輸出示例:
kubeadm join 192.168.8.XXX:6443 --token k8xsq8.4oo8va9wcqpb*** --discovery-token-ca-cert-hash sha256:cb5fc894ab965dfbc4c194e1065869268f8845c3ec40f78f9021dde24610d***
集群版本小于1.18
運行如下命令獲取IDC Kubernetes集群版本號。后續設置到示例腳本環境變量
KUBE_VERSION
中。kubectl get no $(kubectl get nodes -l node-role.kubernetes.io/master -o json | jq -r '.items[0].metadata.name') -o json | jq -r '.status.nodeInfo.kubeletVersion'
輸出示例:
v1.14.10
運行如下命令獲取IDC Kubernetes集群運行時以及版本號。后續設置到示例腳本環境變量
RUNTIME_VERSION
中。kubectl get no $(kubectl get nodes -l node-role.kubernetes.io/master -o json | jq -r '.items[0].metadata.name') -o json | jq -r '.status.nodeInfo.containerRuntimeVersion'
輸出示例:
docker://18.6.3 # Docker運行時。 containerd://1.4.3 # Containerd運行時。
運行如下命令獲取kubeadm 添加節點完整命令。后續設置到示例腳本環境變量
KUBEADM_JOIN_CMD
中。# --ttl 0 很重要。需要設置為永不過期,避免節點池彈性伸縮失效。 kubeadm token create --ttl 0 --print-join-command
輸出示例:
kubeadm join 192.168.8.XXX:6443 --token k8xsq8.4oo8va9wcqpb*** --discovery-token-ca-cert-hash sha256:cb5fc894ab965dfbc4c194e1065869268f8845c3ec40f78f9021dde24610d***
獲取示例腳本。
說明示例腳本僅適用于普通的ECS節點,如果您是GPU節點,請提交工單獲取研發團隊支持。
根據您獲取的IDC Kubernetes集群版本號、運行時以及版本號等信息,在示例腳本環境變量位置設置具體的值。
Docker + Kubernetes
#!/bin/bash # IDC Kubernetes集群版本號。 export KUBE_VERSION=<KUBE_VERSION> # IDC Kubernetes集群Docker版本號。 export RUNTIME_VERSION=<RUNTIME_VERSION> # IDC Kubernetes集群 kubeadm join 命令。 export KUBEADM_JOIN_CMD=<KUBEADM_JOIN_CMD> # 關閉防火墻。 systemctl stop firewalld systemctl disable firewalld systemctl is-enabled firewalld # 關閉selinux。 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config setenforce 0 # 關閉swap分區。 sed -i '/swap/s/^/#/g' /etc/fstab swapoff -a # 配置內核參數。 cat > /etc/sysctl.d/Kubernetes.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 EOF sysctl --system # 安裝ipadmin。 yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git cat > /etc/modules-load.d/ipvs.conf <<EOF ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack EOF systemctl enable --now systemd-modules-load # 配置Docker yum源。 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安裝必要的依賴組件并且導入Docker官方提供的yum源。 yum install -y yum-utils device-mapper-persistent-data lvm2 # 查看可安裝版本。 yum list docker-ce --showduplicates | sort -r # 我們直接安裝最新版本的DFocker。 yum install -y docker-ce-$RUNTIME_VERSION docker-ce-cli-$RUNTIME_VERSION containerd.io ## Create /etc/docker directory. mkdir /etc/docker # Setup daemon. cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] } EOF mkdir -p /etc/systemd/system/docker.service.d # Restart Docker. systemctl daemon-reload systemctl restart docker systemctl enable docker # 安裝Kubernetes。 cat >/etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF yum install -y kubelet-$KUBE_VERSION kubeadm-$KUBE_VERSION kubectl-$KUBE_VERSION --disableexcludes=kubernetes # 配置kubelet.service。 cat >/etc/systemd/system/kubelet.service <<EOF # ! IMPORTANT ! # This configuration is managed and generated by ACK # please do not edit it to avoid unexpected failures [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=http://kubernetes.io/docs/ [Service] ExecStart=/usr/bin/kubelet Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target EOF # <<< 該處為配置阿里云注冊集群環境變量部分,請勿刪除。 # 配置node labels,taints,node name,provider id。 KUBELET_CONFIG_FILE="/etc/sysconfig/kubelet" if [[ $ALIBABA_CLOUD_LABELS != "" ]];then option="--node-labels" if grep -- "${option}=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@${option}=@${option}=${ALIBABA_CLOUD_LABELS},@g" $KUBELET_CONFIG_FILE elif grep "KUBELET_EXTRA_ARGS=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@KUBELET_EXTRA_ARGS=@KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_LABELS} @g" $KUBELET_CONFIG_FILE else sed -i "/^\[Service\]/a\Environment=\"KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_LABELS}\"" $KUBELET_CONFIG_FILE fi fi if [[ $ALIBABA_CLOUD_TAINTS != "" ]];then option="--register-with-taints" if grep -- "${option}=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@${option}=@${option}=${ALIBABA_CLOUD_TAINTS},@g" $KUBELET_CONFIG_FILE elif grep "KUBELET_EXTRA_ARGS=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@KUBELET_EXTRA_ARGS=@KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_TAINTS} @g" $KUBELET_CONFIG_FILE else sed -i "/^\[Service\]/a\Environment=\"KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_TAINTS}\"" $KUBELET_CONFIG_FILE fi fi if [[ $ALIBABA_CLOUD_NODE_NAME != "" ]];then option="--hostname-override" if grep -- "${option}=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@${option}=@${option}=${ALIBABA_CLOUD_NODE_NAME},@g" $KUBELET_CONFIG_FILE elif grep "KUBELET_EXTRA_ARGS=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@KUBELET_EXTRA_ARGS=@KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_NODE_NAME} @g" $KUBELET_CONFIG_FILE else sed -i "/^\[Service\]/a\Environment=\"KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_NODE_NAME}\"" $KUBELET_CONFIG_FILE fi fi if [[ $ALIBABA_CLOUD_PROVIDER_ID != "" ]];then option="--provider-id" if grep -- "${option}=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@${option}=@${option}=${ALIBABA_CLOUD_PROVIDER_ID},@g" $KUBELET_CONFIG_FILE elif grep "KUBELET_EXTRA_ARGS=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@KUBELET_EXTRA_ARGS=@KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_PROVIDER_ID} @g" $KUBELET_CONFIG_FILE else sed -i "/^\[Service\]/a\Environment=\"KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_PROVIDER_ID}\"" $KUBELET_CONFIG_FILE fi fi # 該處為配置阿里云注冊集群環境變量部分,請勿刪除>>>。 systemctl enable kubelet systemctl start kubelet # 執行kubeadm join。 $KUBEADM_JOIN_CMD
Containerd + Kubernetes
#!/bin/bash # IDC Kubernetes集群版本號。 export KUBE_VERSION=<KUBE_VERSION> # IDC Kubernetes集群Containerd版本號。 export RUNTIME_VERSION=<RUNTIME_VERSION> # IDC Kubernetes集群 kubeadm join 命令。 export KUBEADM_JOIN_CMD=<KUBEADM_JOIN_CMD> # 關閉防火墻。 systemctl stop firewalld systemctl disable firewalld systemctl is-enabled firewalld # 關閉selinux。 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config setenforce 0 # 關閉swap分區。 sed -i '/swap/s/^/#/g' /etc/fstab swapoff -a # 配置內核參數。 cat > /etc/sysctl.d/Kubernetes.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 EOF sysctl --system # 安裝ipadmin。 yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git cat > /etc/modules-load.d/ipvs.conf <<EOF ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack EOF systemctl enable --now systemd-modules-load #安裝和配置Containerd。 yum -y install yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 配置Containerd。 cat >>/etc/modules-load.d/containerd.conf <<EOF overlay br_netfilter EOF # 立刻加載overlay模塊。 modprobe overlay # 立刻加載br_netfilter模塊。 modprobe br_netfilter # 安裝Containerd。 yum install containerd.io-$RUNTIME_VERSION -y cat >>/etc/crictl.yaml <<EOF runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false pull-image-on-create: false disable-pull-on-run: false EOF mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml # 使用systemd管理cgroups。 sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml # 配置sadnbox image從阿里云拉取。 sed -i '/sandbox_image/s/registry.k8s.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"#' /etc/containerd/config.toml # 啟動Containerd。 systemctl enable containerd systemctl start containerd # 安裝kubernetes。 cat >/etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF yum -y install kubeadm-$KUBE_VERSION kubectl-$KUBE_VERSION kubelet-$KUBE_VERSION # 配置kubelet.service。 cat >/etc/systemd/system/kubelet.service <<EOF # ! IMPORTANT ! # This configuration is managed and generated by ACK # please do not edit it to avoid unexpected failures [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=http://kubernetes.io/docs/ [Service] ExecStart=/usr/bin/kubelet Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target EOF # 創建kubelet.service.d。 #mkdir -p /etc/systemd/system/kubelet.service.d # <<< 該處為配置阿里云注冊集群環境變量部分,請勿刪除。 # 配置node labels,taints,node name,provider id。 KUBELET_CONFIG_FILE="/etc/sysconfig/kubelet" if [[ $ALIBABA_CLOUD_LABELS != "" ]];then option="--node-labels" if grep -- "${option}=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@${option}=@${option}=${ALIBABA_CLOUD_LABELS},@g" $KUBELET_CONFIG_FILE elif grep "KUBELET_EXTRA_ARGS=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@KUBELET_EXTRA_ARGS=@KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_LABELS} @g" $KUBELET_CONFIG_FILE else sed -i "/^\[Service\]/a\Environment=\"KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_LABELS}\"" $KUBELET_CONFIG_FILE fi fi if [[ $ALIBABA_CLOUD_TAINTS != "" ]];then option="--register-with-taints" if grep -- "${option}=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@${option}=@${option}=${ALIBABA_CLOUD_TAINTS},@g" $KUBELET_CONFIG_FILE elif grep "KUBELET_EXTRA_ARGS=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@KUBELET_EXTRA_ARGS=@KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_TAINTS} @g" $KUBELET_CONFIG_FILE else sed -i "/^\[Service\]/a\Environment=\"KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_TAINTS}\"" $KUBELET_CONFIG_FILE fi fi if [[ $ALIBABA_CLOUD_NODE_NAME != "" ]];then option="--hostname-override" if grep -- "${option}=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@${option}=@${option}=${ALIBABA_CLOUD_NODE_NAME},@g" $KUBELET_CONFIG_FILE elif grep "KUBELET_EXTRA_ARGS=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@KUBELET_EXTRA_ARGS=@KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_NODE_NAME} @g" $KUBELET_CONFIG_FILE else sed -i "/^\[Service\]/a\Environment=\"KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_NODE_NAME}\"" $KUBELET_CONFIG_FILE fi fi if [[ $ALIBABA_CLOUD_PROVIDER_ID != "" ]];then option="--provider-id" if grep -- "${option}=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@${option}=@${option}=${ALIBABA_CLOUD_PROVIDER_ID},@g" $KUBELET_CONFIG_FILE elif grep "KUBELET_EXTRA_ARGS=" $KUBELET_CONFIG_FILE &> /dev/null;then sed -i "s@KUBELET_EXTRA_ARGS=@KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_PROVIDER_ID} @g" $KUBELET_CONFIG_FILE else sed -i "/^\[Service\]/a\Environment=\"KUBELET_EXTRA_ARGS=${option}=${ALIBABA_CLOUD_PROVIDER_ID}\"" $KUBELET_CONFIG_FILE fi fi # 該處為配置阿里云注冊集群環境變量部分,請勿刪除>>>。 systemctl enable kubelet systemctl start kubelet # 執行kubeadm join 。 $KUBEADM_JOIN_CMD
步驟二:保存并上傳腳本到文件服務器
您需要將自定義腳本或改造后的腳本保存在文件服務器上,例如存放在OSS Bucket上。示例存放地址為https://kubelet-****.oss-cn-hangzhou-internal.aliyuncs.com/join-ecs-nodes.sh
。
步驟三:修改ack-cluster-agent配置項
完成腳本上傳并獲取文件地址后,需要將腳本地址更新到kube-system
命名空間中ack-agent-config
配置項的addNodeScriptPath
字段。
# 執行kubectl 命令,編輯ack-agent-config。
kubectl edit cm ack-agent-config -n kube-system
# 修改addNodeScriptPath字段內容,更新后配置如下。
apiVersion: v1
data:
addNodeScriptPath: https://kubelet-****.oss-cn-hangzhou-internal.aliyuncs.com/join-ecs-nodes.sh
kind: ConfigMap
metadata:
name: ack-agent-config
namespace: kube-system
必須先完成此步驟配置,才能創建節點池,否則擴容時無法獲取自定義腳本配置,導致擴容失敗。