Kubernetes实战(十)-升级和回滚(Deployment)
发布日期:2025-04-03 11:21:46 浏览次数:8 分类:精选文章

本文共 1231 字,大约阅读时间需要 4 分钟。

Kubernetes 提供了为容器升级和回滚的功能,当集群中的某个服务需要升级时,我们需要停止目前与该服务相关所有的 Pod,然后根据改动后的内容创建新的 Pod。如果集群规模较大,这个工作将变成一个挑战,而且先全部停止然后逐步升级的方式会导致较长时间的服务不可用。Kubernetes 提供了滚动升级功能来解决上述问题,同时如果在升级过程中出现了差错,可以通过回滚功能回滚到之前部署的任意版本。

Deployment 的升级

以 Deployment类资源文件 nginx-deploy.yaml 为例:

apiVersion: apps/v1kind: Deploymentmetadata:  name: nginx-deploy  labels:    k8s-app: nginx-demospec:      selector:        matchLabels:          app: nginx      replicas: 3      template:        metadata:          labels:            app: nginx        spec:          containers:          - name: nginx            image: nginx:1.7.9            ports:            - containerPort: 80

滚动升级是解决大规模集群升级挑战的核心功能之一。传统的方式是直接停止所有相关 Pod,随后重新创建新的 Pod,这会导致服务中断时间过长。在 Kubernetes 中,滚动升级实现了从“全部停机”到“逐步过程”的升级,同时保留了旧版本的 Pod,以便快速应对升级过程中的问题。当新版本部署完成后,旧版本的 Pod 会被自动终止,确保服务连续性。滚动升级的实施过程非常流畅,因此在集群规模较大时依然能够保持服务可用性。

滚动升级的过程主要包括以下几个步骤:

  • 创建新版本的 Deployment:在新的版本下启动一个新的 Deployment 资源,以便镜像拉取和配置验证均可以在不影响现有服务的前提下完成。
  • 预热(摊开):在进行全面升级之前,可以将部分 Pod 进行转换,以减少全局性的服务中断风险。
  • 逐步升级(滚动更新):使用 Kubernetes 的标签机制,对 Pod 进行筛选和逐一替换,实现子集 Pod 的可以完全平滑过渡。
  • 验证(灰度发布):在确保新版本稳定性的前提下,逐步增加 robes down 的比例。
  • 全量升级:当新版本被完全验证稳定后,全量替换旧版本,并重启所有服务。
  • 回滚:如果在上述过程中出现问题,可以选择回滚到最后一个稳定版本,确保集群的完整性。
  • 值得注意的是,滚动升级过程中的每个步骤都必须精准执行,以确保集群的自愈能力。这样可以避免因扩大规模而导致的服务中断。

    上一篇:Kubernetes实战(四)-亲和性调度(NodeAffinity)
    下一篇:Kubernetes实战(十四)-配置管理(ConfigMap)

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年04月20日 16时12分57秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章