概述
最近升级GKE和EKS的K8S集群,感觉在K8S托管服务这一块,Google和AWS做的差距也太大了。Google的GKE界面做的很好,基本可以替代dashboard了,然后他的升级做的非常简单,管理员点击几个按钮,然后一切搞定;而AWS的EKS,管理界面及其简单,那个升级按钮只能升级 control plane,剩下的worker node和上面的各种服务组件 管理员都得看着升级匹配表格手动升级,这些活都得手动做,感觉我托管了个寂寞啊~。
下面简单的看看两者的升级过程。
EKS升级
心法总纲在此,里面还有很多细节需要满足
https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html
总的来说,步骤如下,这是之前升级1.19到1.20的过程:
1. 修改tf 升级 control plane
必须按顺序升级。这一步也可以在图形界面点升级实现
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "17.24.0"
cluster_name = local.cluster_name
cluster_version = "1.20"
subnets = data.terraform_remote_state.vpc.outputs.snet_subnet_id
2. 升级 work node
通过asg修改desire 数目,创建新的node,然后在旧的node上面执行cordon和drain,强制迁移pod,然后删除旧的node,修改asg为原先数目
kubectl cordon ip-10-18-4-125.ap-southeast-2.compute.internal
kubectl drain ip-10-18-4-125.ap-southeast-2.compute.internal --ignore-daemonsets --delete-emptydir-data
kubectl delete node ip-10-18-4-125.ap-southeast-2.compute.internal
3. 升级 kube-proxy,coredns和 vpc cni
他们有个依赖关系的版本表,需要比照一下
升级kube-proxy:
kubectl get daemonset kube-proxy --namespace kube-system -o=jsonpath='{$.spec.template.spec.containers[:1].image}'
kubectl set image daemonset.apps/kube-proxy \
-n kube-system \
kube-proxy=602401143452.dkr.ecr.ap-southeast-2.amazonaws.com/eks/kube-proxy:v1.21.2-eksbuild.2
Kubectl get pod -n tube-system
升级core-dns:
kubectl describe pod coredns --namespace kube-system | grep Image |grep eksbuild | cut -d "/" -f 3
kubectl set image --namespace kube-system deployment.apps/coredns \
coredns=602401143452.dkr.ecr.us-east-1.amazonaws.com/eks/coredns:v1.8.0-eksbuild.1
升级cni:
kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2
curl -o aws-k8s-cni.yaml https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.8.0/config/v1.8/aws-k8s-cni.yaml
sed -i -e 's/us-west-2/ap-southeast-2/' aws-k8s-cni.yaml
kubectl apply -f aws-k8s-cni.yaml
GKE 升级
总纲在此
https://cloud.google.com/kubernetes-engine/docs/how-to/upgrading-a-cluster#console
基本上就是鼠标点三次,然后一切搞定
首先升级control panel
升级到1.24的时候会提示runtime从docker变成containerd了
更改也容易
升级完control panel,继续升级worker node
升级成功