日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

在注冊集群中創建節點池

ACK One注冊集群功能允許您將本地數據中心或其他云廠商的Kubernetes集群接入阿里云容器服務管理平臺,實現統一管理,快速搭建混合云環境。通過這種方式,您可以有效地管理和擴展計算資源,以應對業務需求。當本地數據中心的計算資源受限時,您可以通過云上節點池功能,擴展云端計算資源,從而滿足業務的增長需求。本文介紹如何創建和使用云上節點池。

前提條件

操作步驟

image

在創建集群并為其添加節點的過程中,首先需要將添加節點的腳本地址配置到集群配置項中。因此,首要任務是準備腳本并且配置阿里云系統環境變量。為了幫助您快速完成節點添加腳本的配置,請根據下列步驟完成后續操作。

說明
  • 需要根據您的自身環境和上圖中的判斷條件,最終確定您使用自定義腳本還是獲取節點示例腳本。

  • 示例腳本僅支持基于yum軟件包管理系統的操作系統。

步驟一(A):為自定義腳本添加阿里云環境變量

  1. 檢查是否為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節點安裝新版本驅動。

  2. 需要您提前準備自定義腳本,以確保注冊集群的節點池能夠正確同步節點狀態,并滿足云上調度需求。自定義腳本必須接收阿里云注冊集群下發的系統環境變量。接收系統環境變量的方法取決于集群的搭建方式。目前,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. 獲取系統相關信息。

    集群版本大于等于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*** 
  2. 獲取示例腳本。

    說明
    • 示例腳本僅適用于普通的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
重要

必須先完成此步驟配置,才能創建節點池,否則擴容時無法獲取自定義腳本配置,導致擴容失敗。

步驟四:創建節點池

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇節點管理 > 節點池。

  3. 節點池頁面,根據需求創建節點池并擴容節點。具體操作,請參見創建節點池。