【k8s 系列】k8s 学习二十五-3,Deployment 升级应用2

简介: 上次我们说到自己手动的做使用 RS 的方式来升级 pod ,感觉还是蛮复杂的,并且容易弄错,实际生产过程中,肯定不会这样来弄,很危险

【k8s 系列】k8s 学习二十五-3,Deployment 升级应用2

上次我们说到自己手动的做使用 RS 的方式来升级 pod ,感觉还是蛮复杂的,并且容易弄错,实际生产过程中,肯定不会这样来弄,很危险

那么今天我们来分享 Deployment 的方式来显示的升级应用吧

Deployment 的方式升级应用

对于之前的操作方式有没有感觉还是比较繁琐的,还需要自己去切换流量,自己去创建新的 RS ,甚至最后还要将旧的 RS 删除掉,甚是麻烦

我们来玩一个更加高阶的资源,也是比较容易的,为了接下来的案例清晰,我们就把上述的 RS 全部删除掉,留下 Service 后续可以使用

Deployment 是使用应用程序声明的方式来升级应用,而不是通过 RS 或者 RC 了

实际上创建一个 Deployment  资源,其实也会创建一个 RS 资源,那么 Deployment   是拿来做啥的呢?我们可以理解为协调资源的

实践 demo

创建一个 deploy ,mydeploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: newkubia
spec:
  replicas: 3
  selector:
    matchLabels:
      app: newkubia
  template:
    metadata:
      name: newkubia
      labels:
        app: newkubia
    spec:
      containers:
      - image: xiaomotong888/newkubia:v1
        name: newkubia
  • 咱们创建一个 deployment
  • 命名为 newkubia
  • 副本数为 3 个
  • 匹配的pod 标签是 newkubia
  • RS 控制的模板是 创建出来的 容器名为 newkubia
  • 标签也是 newkubia

kubectl create -f mydeploy.yaml --record

现在我们通过上述指令来创建一个 Deployment,和其他资源一样,Deployment 我们可以缩写为 deploy

此处的 --record 是什么意思呢?带上这个参数 deploy 会记录我们历史版本

当然,我们也可以使用如下指令来查看 deploy 的状态

kubectl rollout status deploy newkubia

当然对于 kubectl describe  , edit , get 都是适用于 deploy

image.png

我们可以在来看看,是不是创建了一个 RS

image.png

上面的这些 pod 其实也都是这个 RS 来创建出来的我们通过 RS 和 pod 的名字就可以辨别出来

上述例子中:

RS:

newkubia-6597db5b9c

pod:

newkubia-6597db5b9c-*

这个随机字符串,实际上是 Deployment 和 RS 中的 pod 模板放在一起计算出来的哈希值

我们将第一个例子用到的 Service 标签修改为 newkubia,进入 任意一个 pod ,访问一下服务地址,看看效果

image.png

如我们所期望的,也是我们想要的效果

使用 Deployment 的方式升级应用

对于使用 Deployment 升级应用,我们需要知道 Deployment  涉及 2 个升级策略:

  • RollingUpdate

滚动升级,这个策略会渐进式的删除旧的 pod,同时创建新的 pod,整个过程,都保持咱们的服务是可用的,deploy 升级默认是使用这种策略

  • Recreate

会一次性删除掉旧的 pod ,然后创建新的 pod,这种策略和之前我们说到过的方式,效果上咱们的服务会中断一段时间,这个时间具体是多久,就看你的手速了

为了我们在升级 deploy 的时候,能够肉眼看出升级过程,我们将最小的准备时间设置大一点,这样我们可以看得清楚一些,

可以 kubectl edit deploy newkubia在 deploy spec 下面 添加 minReadySeconds: 10 ,保存即可

当然 k8s 还提供另外一个 patch 的方式来简单修改 yaml 中的少许字段:

kubectl patch deploy newkubia -p '{"spec":{"minReadySeconds":10}}'

kubectl set image deploy newkubia newkubia=xiaomotong888/newkubia:vv2

image.png

通过图中的效果,我们确实清晰可以看到 pod 是在滚动升级的,效果是先创建了一个新版本的 pod,运行正常后,会杀掉一个旧的 pod,再创建一个新版本的 pod,最终直到滚动升级 ok

我们还是进入到任意容器内,访问 SVC ,查看效果如何

image.png

可以看到,正常访问到的 SVC ,响应的 v2 版本,再次说明咱们升级是成功的

整个过程中,我们没有手动设置过 Deployment 的升级策略,前面有说到过默认是 RollingUpdate ,我们可以查看一下咱创建的 deploy 的详情

image.png

整个升级过程中,我们就执行了一条 deploy 升级命令,是不是超级简单,不需要自己手动去增删 RS,也不需要去修改 Service 管控的标签, Deployment 一键帮助我们完成,是不是很高效

说一说回滚

咱们不仅只会升级,若升级的程序有啥问题,那么岂不是还需要再次升级一个旧的版本?

如何升级呢?还是和刚才升级的方式一致吗?当然不是

咱们升级那么简单,回滚也是可以那么简单

回滚的话,我们可以直接执行:

kubectl rollout undo deploy newkubia
查看 deploy 执行过程状态
kubectl rollout status deploy newkubia

image.png

回滚成功,我们来检查一下  rs  和 pod ,这里可以注意下 pod 的名字和 RS 的名字的特征

image.png

那么如何指定版本回滚呢?

指定版本回滚也是可以滴,咱们可以通过如下指令查看 deploy 管理升级记录(有升级记录,是因为我们最开始创建 deploy 的时候,指定了 --record


kubectl rollout history deploy newkubia

指定版本回滚


kubectl rollout undo deploy newkubia --to-revision=xx

image.png

指定版本回滚也是回滚成功了,这里我们可以继续和上述方式一样检查 rs 和 pod 的特征,然后再 进入到 pod 中,访问 Service 的地址,看看效果是否是我们期望的

看到这里,会不会有这些疑问呢?

  • 为什么我们升级 v2 版本之后 之前的 RS 还在?
  • 为什么 deploy 会有升级记录?

这里来统一分享一下理解:

deploy 会有升级记录,是因为我们在创建 deploy 的时候,指定了 --record,因此 deploy 在升级版本的时候会记录信息

升级新的版本之后,就的 RS 还在,这个就不难理解了,这个是为了我们回滚或者跳转到指定版本的时候,能够直接使用原有的 RS,底层去修改副本数就可以了

整个过程的管理方式是这样的:

image.png

deploy 管理多个 RS,RS 管理多个 pod

deploy 管理多个版本 RS ,我们可以理解为是这样的

一开始 deploy 管理着 1 个 RS1,RS1 管理着多个 pod:v1

image.png

当我们进行升级 v2 版本的时候,deploy 便会创建 RS2,并且 RS2 管理着 Pod:v2,RS1 仍然继续保留

image.png

当我们进行回滚的时候,也是类似的,但是不会创建新的 RS,会直接使用我们要回滚的版本对应的 RS,例如回滚到 v1 版本

image.png

今天就到这里,学习所得,若有偏差,还请斧正


欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
29天前
|
人工智能 Kubernetes 安全
赋能加速AI应用交付,F5 BIG-IP Next for Kubernetes方案解读
赋能加速AI应用交付,F5 BIG-IP Next for Kubernetes方案解读
62 13
|
29天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
2天前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
15天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
12天前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
59 12
|
17天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
33 2
|
2月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
83 1
|
3月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
3月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。

热门文章

最新文章

下一篇
开通oss服务