kubernetes(k8s)集群迁移更新

Kubernetes社区每4个月左右发布一个次要版本,次要版本的支持周期通常为一年。

Kubernetes社区官方推荐使用kubeadm或者手动进行集群的更新。实际生产中,为了保证更大限度的不影响生产环境,手动进行集群更新是更为稳妥的方案。

手动进行集群更新简要来说就是迁移当前的业务及所需插件到新的集群上面。

导出业务资源

如下图所示,业务中的各项k8s资源依赖关系大体如下,因此实际迁移时我们也需要按此以来关系从下往上导入到新的k8s集群中:

导出命令

导出时以命名空间(namespace)为单位,进行导出。假设我们需要导出my-namespace这样一个命名空间。

在旧集群上执行:

bash 复制代码
kubectl get secrets -n my-namespace -o yaml > my-namespace-secrets.yaml;\
kubectl get configmaps -n my-namespace -o yaml > my-namespace-configmaps.yaml;\
kubectl get deployments -n my-namespace -o yaml > my-namespace-deployments.yaml;\
kubectl get services -n my-namespace -o yaml > my-namespace-services.yaml;\
kubectl get ingress -n my-namespace -o yaml > my-namespace-ingress.yaml;\

导入业务资源

新集群准备好之后,在新集群上使用以下命令进行导入:

bash 复制代码
kubectl create -f my-namespace-secrets.yaml;\
kubectl create -f my-namespace-configmaps.yaml;\
kubectl create -f my-namespace-deployments.yaml;\
kubectl create -f my-namespace-services.yaml;\
kubectl create -f my-namespace-ingress.yaml;\

此时主要观察Deployments上的所有业务是否正常拉取镜像,创建pod,pod是否正常执行。

插件导入

通常来说不建议k8s插件使用导出再导入的方式进行迁移,实际生产中也容易遇到各种各样的问题。

更为稳妥的方案是在新集群上安装插件,然后导入相关配置(如果需要,很多时候业务的资源文件中已经绑定了插件的配置,无需再导入。插件安装完成后会自动响应)。

CertManager

以CertManager为例,CertManager的配置通常是在业务的ingress中指示CertManager进行证书签发,因此迁移CertManager只需要在新集群上安装CertManager即可。

在新集群上执行:

bash 复制代码
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml

执行以下命令创建ClusterIssuer:

bash 复制代码
cat <<EOF | kubectl apply -f -
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod-http01
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: <your_email_name@gmail.com>  # 替换为您的邮箱名。
    privateKeySecretRef:
      name: letsencrypt-http01
    solvers:
    - http01: 
        ingress:
          class: nginx
EOF

至此完成CertManager的迁移。

对外切换

完成以上业务和插件的迁移并且业务运行正常,我们就可以进行对外的切换,即将对外的接口由旧集群迁移到新集群上。

若是Ingress绑定负载均衡,将业务域名的DNS解析切换成新负载均衡的IP即可;

若是其他服务器进行反向代理,将反向代理的上游地址切换为新集群的ClusterIP即可。 至此完成Kubernetes的整体迁移。

相关推荐
行百里er2 小时前
Redis 完结篇——Redis 热点问题在 Spring Boot 项目中实战
redis·后端
高频因子挖掘机3 小时前
只取最近 60 个交易日,却每次拉全历史:量化脚本变慢的原因与改法
后端·github·api
孟健4 小时前
从5000亿Token到83%字节匹配:AI逆向工程与重构的工程闭环实践
后端·架构·ai编程
码事漫谈4 小时前
丢得静悄悄,谈一谈 Agent 的记忆是怎么没的
后端
迪飞特科技4 小时前
智慧物业平台实战:Spring Boot 整合小程序实现报修巡检费用全流程
spring boot·后端·小程序
考虑考虑4 小时前
@JsonInclude注解使用
spring boot·后端·spring
IT_陈寒5 小时前
Vite的这个问题坑了我三天,原来如此解决!
前端·人工智能·后端
网易云信5 小时前
大模型能上岗做销售吗?我们让 12 款国产模型交了 420 份作业
前端·后端
CCblandy5 小时前
HTTP 长连接 3 类故障实测:[WinError 10053]、99 个 TIME_WAIT、69 次多余握手,4 种对策怎么选
后端·python·网络协议·http·云原生·性能优化·架构
蜗牛互联网5 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python