Los clústeres registrados de ACK One permiten conectar clústeres de Kubernetes locales o de terceros a la plataforma de contenedores de Alibaba Cloud para una gestión unificada y operaciones de nube híbrida. Cuando la capacidad de cómputo local es limitada, puede escalar horizontalmente con node pools en la nube mediante ECS. Este tema explica cómo crear scripts personalizados para node pools en la nube.
Requisitos previos
Antes de empezar:
Límites
Los scripts de ejemplo solo admiten sistemas operativos que utilizan YUM (Yellowdog Updater, Modified) como gestor de paquetes.
Los scripts de ejemplo se aplican únicamente a nodos ECS estándar. Para nodos acelerados por GPU, envíe un ticket al equipo de I+D para solicitar un script personalizado.
Los nodos acelerados por GPU requieren controladores y complementos de dispositivo. Consulte Manually update the NVIDIA driver of a node .
Descripción general

El proceso consta de tres pasos:
Preparar el script del nodo: adapte un script personalizado existente o parta de un ejemplo.
Cargar el script en un servidor de archivos accesible desde su clúster registrado.
Registrar la ruta del script en el ConfigMap ack-agent-config para su recuperación durante el escalado horizontal.
Elija una ruta para el paso 1:
|
Situación
|
Acción
|
|
Script de arranque existente
|
Utilice el Paso 1(A): agregue las variables de entorno de Alibaba Cloud necesarias
|
|
Sin script de arranque existente
|
Utilice el Paso 1(B): descargue y personalice un ejemplo
|
Paso 1(A): Agregar variables de entorno de Alibaba Cloud a un script existente
El clúster registrado inyecta cuatro variables de entorno durante el escalado horizontal para la gestión del node pool.
Importante
ALIBABA_CLOUD_PROVIDER_ID es obligatoria para el funcionamiento del clúster registrado. Si falta en su script, el clúster no funcionará correctamente.
Las cuatro variables de entorno son:
|
Variable
|
Obligatoria
|
Efecto si falta
|
Valor de ejemplo
|
|
ALIBABA_CLOUD_PROVIDER_ID
|
Sí
|
El clúster registrado no funciona correctamente
|
cn-shenzhen.i-wz92ewt14n9wx9mo***
|
|
ALIBABA_CLOUD_NODE_NAME
|
Sí
|
Los nodos pueden entrar en un estado anómalo
|
cn-shenzhen.192.168.1.***
|
|
ALIBABA_CLOUD_LABELS
|
Sí
|
Pueden fallar la gestión del node pool y la programación de cargas de trabajo
|
alibabacloud.com/nodepool-id=np0e2031e952c4492bab32f512ce142*,ack.aliyun.com=cc3df6d939b0d4463b493b82d0d670*,alibabacloud.com/instance-id=i-wz960ockeekr3dok0***,alibabacloud.com/external=true,workload=cpu
|
|
ALIBABA_CLOUD_TAINTS
|
Sí
|
Los taints del node pool no surten efecto
|
workload=ack:NoSchedule
|
En ALIBABA_CLOUD_LABELS , solo workload=cpu es personalizada (definida en la configuración del node pool). Las demás etiquetas son del sistema.
Agregue el bloque de inyección de variables según el método de instalación de su clúster.
Clúster creado con kubeadm
Inserte este bloque después de la configuración principal del nodo y antes de reiniciar kubelet.
####### Begin: Alibaba Cloud environment variable injection
# Configure node labels, taints, node name, and 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
####### End: Alibaba Cloud environment variable injection
Continúe con Step 2: Upload the script.
Clúster instalado con archivos binarios
Para clústeres instalados con archivos binarios de Kubernetes, modifique la configuración de arranque de kubelet. El archivo kubelet.service suele encontrarse en /usr/lib/systemd/system/.
cat /usr/lib/systemd/system/kubelet.service EOF
# Custom configurations are not shown.
...
[Service]
ExecStart=/data0/kubernetes/bin/kubelet \
# Add the following flags:
--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
Continúe con Step 2: Upload the script.
Paso 1(B): Usar un script de ejemplo
Si no cuenta con un script de arranque existente, utilice uno de los ejemplos siguientes. Hay ejemplos disponibles para Docker y containerd.
Recopilar los valores necesarios
Recopile tres valores de su clúster externo:
Paso 1: Obtener la versión de Kubernetes
Obtenga la versión de Kubernetes:
Para Kubernetes 1.18 y versiones posteriores (utilice la etiqueta control-plane):
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'
Para versiones anteriores a Kubernetes 1.18 (utilice la etiqueta master):
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'
Salida esperada:
Guarde el resultado como KUBE_VERSION.
Paso 2: Obtener el runtime de contenedores y su versión
Para Kubernetes 1.18 y versiones posteriores:
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'
Para versiones anteriores a Kubernetes 1.18:
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'
Salida esperada:
docker://18.6.3 # Docker runtime
containerd://1.4.3 # containerd runtime
Guarde el número de versión (sin el prefijo docker:// ni containerd://) como RUNTIME_VERSION.
Paso 3: Generar el comando de unión de kubeadm
Importante
El parámetro --ttl 0 es obligatorio. Sin él, el token de unión caduca y el Auto Scaling se detiene.
kubeadm token create --ttl 0 --print-join-command
Salida esperada:
kubeadm join 192.168.8.XXX:6443 --token k8xsq8.4oo8va9wcqpb*** \
--discovery-token-ca-cert-hash sha256:cb5fc894ab965dfbc4c194e1065869268f8845c3ec40f78f9021dde24610d***
Guarde el resultado como KUBEADM_JOIN_CMD.
Script de ejemplo: Docker
Reemplace los tres marcadores de posición con los valores recopilados:
KUBE_VERSION — Versión de Kubernetes (por ejemplo, 1.21.0)
RUNTIME_VERSION — Versión de Docker (por ejemplo, 18.6.3)
KUBEADM_JOIN_CMD — Comando completo kubeadm join ...
Expand to view the code
#!/bin/bash
# The Kubernetes version of the external cluster.
export KUBE_VERSION=KUBE_VERSION
# The Docker version of the external cluster.
export RUNTIME_VERSION=RUNTIME_VERSION
# The kubeadm join command.
export KUBEADM_JOIN_CMD=KUBEADM_JOIN_CMD
# Disable the firewall.
systemctl stop firewalld
systemctl disable firewalld
systemctl is-enabled firewalld
# Disable SELinux.
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
# Disable swap partitions.
sed -i '/swap/s/^/#/g' /etc/fstab
swapoff -a
# Configure kernel parameters.
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
# Install network and system utilities.
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
# Configure the Docker YUM source.
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Install Docker dependencies.
yum install -y yum-utils device-mapper-persistent-data lvm2
# View the available Docker versions.
yum list docker-ce --showduplicates | sort -r
# Install Docker.
yum install -y docker-ce-$RUNTIME_VERSION docker-ce-cli-$RUNTIME_VERSION containerd.io
# Configure the Docker daemon.
mkdir /etc/docker
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
# Start Docker.
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
# Configure the Kubernetes YUM source.
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
# Configure 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
# The environment variables of the registered cluster. Do not delete the settings.
# Configure node labels, taints, node name, and 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
# The environment variables of the registered cluster. Do not delete the settings.
systemctl enable kubelet
systemctl start kubelet
# Join the cluster.
$KUBEADM_JOIN_CMD
Script de ejemplo: containerd
Reemplace los tres marcadores de posición con los valores recopilados:
KUBE_VERSION — Versión de Kubernetes (por ejemplo, 1.21.0)
RUNTIME_VERSION — Versión de containerd (por ejemplo, 1.4.3)
KUBEADM_JOIN_CMD — Comando completo kubeadm join ...
Expand to view the code
#!/bin/bash
# The Kubernetes version of the external cluster.
export KUBE_VERSION=KUBE_VERSION
# The containerd version of the external cluster.
export RUNTIME_VERSION=RUNTIME_VERSION
# The kubeadm join command.
export KUBEADM_JOIN_CMD=KUBEADM_JOIN_CMD
# Disable the firewall.
systemctl stop firewalld
systemctl disable firewalld
systemctl is-enabled firewalld
# Disable SELinux.
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
# Disable swap partitions.
sed -i '/swap/s/^/#/g' /etc/fstab
swapoff -a
# Configure kernel parameters.
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
# Install network and system utilities.
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
# Install and configure 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
# Load required kernel modules.
cat /etc/modules-load.d/containerd.conf EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
# Install containerd.
yum install containerd.io-$RUNTIME_VERSION -y
# Configure the containerd client (crictl).
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
# Configure containerd.
mkdir -p /etc/containerd
containerd config default /etc/containerd/config.toml
# Use systemd to manage cgroups.
sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml
# Pull the sandbox image from Alibaba Cloud.
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
# Start containerd.
systemctl enable containerd
systemctl start containerd
# Configure the Kubernetes YUM source.
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
# Configure 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
# The environment variables of the registered cluster. Do not delete the settings.
# Configure node labels, taints, node name, and 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
# The environment variables of the registered cluster. Do not delete the settings.
systemctl enable kubelet
systemctl start kubelet
# Join the cluster.
$KUBEADM_JOIN_CMD
Paso 2: Cargar el script
Cargue el script en un servidor de archivos accesible desde su clúster registrado. Object Storage Service (OSS) es una opción común.
URL de ejemplo:
https://kubelet-****.oss-cn-hangzhou-internal.aliyuncs.com/join-ecs-nodes.sh
Guarde la URL para el siguiente paso.
Paso 3: Registrar la ruta del script
Importante
Complete este paso antes de crear un node pool. Sin una ruta de script registrada, el escalado horizontal no podrá recuperar el script y fallará.
Establezca addNodeScriptPath en el ConfigMap ack-agent-config (namespace kube-system).
kubectl edit cm ack-agent-config -n kube-system
Configure addNodeScriptPath con la URL de su script:
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
Guarde y cierre el archivo. El clúster registrado utiliza este script para inicializar los nodos ECS durante el escalado horizontal.