Ao atualizar um cluster, o sistema verifica automaticamente a compatibilidade entre a versão da plataforma ECI e o Kubernetes. Se a versão da plataforma ECI de pods baseados em ECI for incompatível com a versão de destino do Kubernetes, exclua e recrie esses pods manualmente antes de atualizar a versão do Kubernetes no cluster. Antes de iniciar a atualização, verifique se a versão da plataforma ECI é compatível com a versão do Kubernetes.
Visão geral da versão da plataforma ECI
A versão da plataforma ECI corresponde ao número de versão de um ambiente de execução específico da infraestrutura do Elastic Container Instance (ECI). Cada versão identifica um ambiente de execução distinto do ECI. Novas revisões são lançadas conforme o ambiente evolui, por exemplo, quando recursos são adicionados, bugs corrigidos ou patches aplicados.
Por padrão, todo pod baseado em ECI criado em seu cluster ACK possui uma anotação com a chave k8s.aliyun.com/eci-platform-version. O valor dessa anotação indica o número da versão da plataforma ECI. O exemplo a seguir mostra essa anotação:
apiVersion: v1
kind: Pod
metadata:
annotations:
k8s.aliyun.com/eci-platform-version: 1.0.0
name: demo-76d8d9f9d8-l7pwm
namespace: default
...
Versões do Kubernetes compatíveis com a versão da plataforma ECI
A tabela a seguir mostra as versões do Kubernetes compatíveis com cada versão da plataforma ECI.
Pods baseados em ECI recém-criados recebem a versão da plataforma ECI 1.1.0. Pods existentes podem apresentar a versão 1.0.0 ou nenhum valor definido.
|
Versão da plataforma ECI |
Versões compatíveis do Kubernetes |
|
1.1.0 |
1.12 e posteriores |
|
1.0.0 |
1.12, 1.14, 1.16, 1.18, 1.20, 1.22 e 1.24 |
|
Vazio (a anotação |
1.12, 1.14, 1.16, 1.18, 1.20, 1.22 e 1.24 |
Atualizar a versão da plataforma ECI
Conecte-se ao cluster. Para obter instruções, consulte Obtain the KubeConfig of a cluster and connect to the cluster by using kubectl.
-
Obtenha as informações dos pods baseados em ECI cuja versão da plataforma ECI esteja vazia ou seja 1.0.0.
Essas informações incluem namespace, nome, versão da plataforma ECI e ID da instância ECI de cada pod. Os campos são separados por vírgulas (,).
kubectl get pods -A -o json | jq -r '.items[] | select(.metadata.annotations["k8s.aliyun.com/eci-platform-version"] == "1.0.0" or .metadata.annotations["k8s.aliyun.com/eci-platform-version"] == null or .metadata.annotations["k8s.aliyun.com/eci-platform-version"] == "") | select(.spec.nodeName | startswith("virtual-kubelet")) | "\(.metadata.namespace),\(.metadata.name),\(.metadata.annotations["k8s.aliyun.com/eci-platform-version"] // ""),\(.metadata.annotations["k8s.aliyun.com/eci-instance-id"])"'O exemplo a seguir mostra a saída:
default,portal-server-57dfc4fdc8-2gl64,,eci-2zecdr8z5jy****** -
Exclua e recrie o pod baseado em ECI de destino.
Execute o comando conforme o exemplo a seguir:
kubectl delete pod portal-server-57dfc4fdc8-2gl64 -n defaultA saída será semelhante a esta:
pod "portal-server-57dfc4fdc8-2gl64" deletedApós excluir e recriar o pod baseado em ECI, a versão da plataforma ECI do novo pod é atualizada automaticamente para a versão mais recente. Execute o comando a seguir para visualizar a versão da plataforma ECI.
kubectl get pods -A -o json | jq -r '.items[] | select(.spec.nodeName | startswith("virtual-kubelet")) | "\(.metadata.namespace),\(.metadata.name),\(.metadata.annotations["k8s.aliyun.com/eci-platform-version"] // ""),\(.metadata.annotations["k8s.aliyun.com/eci-instance-id"] // "")"'