如何理解 K8s 动态伸缩与触发上线?

文章介绍了在K8s环境中,如何进行动态伸缩Pod的副本数以及如何触发上线,即改变容器镜像版本。动态伸缩不会改变ReplicaSet,而上线操作会导致滚动更新和新ReplicaSet的创建,确保服务的平滑过渡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

yys

K8s 版本:1.23.6



一般地,如果仅修改 Pod 的副本数(如新增/缩减),这就属于动态伸缩。如果是修改容器镜像的版本,则会触发上线,具体看下面例子。

一、动态伸缩

1、查看当前 Pod 副本(当前为 2)

kubectl get pod

image-20230210162734240

2、扩容 Pod 副本数(扩容为 3)

# 方法1:编辑控制器,修改副本
kubectl edit deployment nginx

# 方法2:修改YAML配置文件
...
spec:
  replicas: 3
  selector:
    matchLabels:
      web: web-server
...

3、apply 应用创建资源

kubectl apply -f nginx.yml

4、再次查看副本数

kubectl get pod

可见,副本数已经调整为 3 了,你会发现,它是在原副本数的基础上新增了一个副本,之前的副本仍保持不变且正常对外提供服务,且 Replicaset 名也没发生变化。

image-20230210163525542

如果要实现缩容,把值调小于当前值即可。

二、触发上线

1、查看当前 Pod 副本(当前为 3)

kubectl get pod

image-20230210163525542

2、修改 Pod 中容器的镜像版本号

# 方法1:编辑控制器,修改副本
kubectl edit deployment nginx

# 方法2:修改YAML配置文件
...
    spec:
      containers:
        - name: nginx
          image: nginx:1.23.3
          ports:
          - containerPort: 80
...

3、apply 应用创建资源

kubectl apply -f nginx.yml

4、查看 Pod 是否正常运行

kubectl get pod

image-20230210165232135

5、验证 Pod 中容器镜像版本号

kubectl describe replicaset nginx-7ccc4bb9dd

image-20230210165053887

你会发现,这三个新的 Pod 实现了一个滚动更新的效果,ReplicaSet 名也发生了变化,也就是说创建了新的 ReplicaSet,新版逐渐替换旧版。如下图所示,创建了一个名为 nginx-7ccc4bb9dd 的 ReplicaSet 资源,并替换了旧的 ReplicaSet。

image-20230210165559485

所以这里 ReplicaSet 的作用就很明显了,前面的章节提到 ReplicaSet 创建于 Deployment,且 ReplicaSet 的名称为 Deploymen名称 + hash字串,这个 Hash 字串保证了不重叠,可见上图两个 ReplicaSet 资源,均来源于同个 Deploymen,但由于 Hash 的作用,在服务版本升级时避免了重叠现象。

小结:

  • 动态伸缩时,ReplicaSet 资源不发生变化,触发上线时,ReplicaSet 发生了变化;

  • 动态伸缩时,扩容则会在原 Pod 副本数的基础上新增 Pod,此时未发生触发上线;

  • 触发上线时,如修改 Pod 容器镜像版本,则所有 Pod 依次实现滚动升级,此时未发生动态伸缩。

### Kubernetes、Docker 和云计算的关系及应用 #### 一、技术基础 Kubernetes 是一种开源的容器编排工具,用于自动化应用程序的部署、扩展和管理。它依赖于容器化技术,而 Docker 是目前最流行的容器运行时之一[^1]。通过 Linux 的命名空间和 cgroups 技术,Docker 实现了进程级别的隔离环境,使得多个独立的应用程序可以在同一台主机上安全运行而不互相干扰[^3]。 云计算则提供了一种按需获取计算资源的方式,通常包括 IaaS (基础设施即服务),PaaS (平台即服务) 和 SaaS (软件即服务) 层次的服务模型。在云环境中,Docker 容器能够快速启动并高效利用底层硬件资源,而 Kubernetes 则负责管理和调度这些容器实例,从而优化整个系统的性能可用性[^2]。 #### 二、具体应用场景 - **微服务架构支持**: 在现代企业级开发中,采用微服务设计模式已经成为主流趋势。借助 Kubernetes 集群的强大功能,开发者可以轻松构建、测试以及发布基于微服务的应用程序,并且确保各个组件之间良好的通信机制。 - **持续交付流水线加速**: 结合 CI/CD 工具链之后,无论是简单的 Web 应用还是复杂的分布式系统都可以实现自动化的版本迭代过程。例如,在每次提交代码变更到 Git 存储库后触发 Jenkins 构建任务,打包成镜像上传至私有仓库,最后由 Helm Chart 文件定义好参数再推送到生产环境下的 K8s 节点集群里执行滚动更新操作完成上线流程. - **弹性伸缩能力增强**: 当业务高峰期到来或者突发流量激增情况发生时, 可以依靠水平 Pod 自动扩缩容规则动态调整工作负载数量; 同样地对于冷门时段也可以减少不必要的消耗节省成本开支. #### 三、集成方式探讨 为了更好地发挥两者的协同效应,可以通过如下几种方法来进行深度融合: - 使用 `kubectl` 或者其他 API 接口直接操控 k8s cluster 上面已经存在的 service account 权限范围内的对象实体比如 deployment/statefulset/job/cronjob 等等. - 将本地开发调试阶段产生的 compose yml 格式的配置文件转换为适合云端使用的 manifest yaml 版本形式以便后续迁移过程中保持一致性体验效果不变的同时还简化维护难度降低错误率提高效率.[^2] ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 ``` 上述 YAML 示例展示了如何创建一个名为 "nginx-deployment" 的 Deployment 对象,该对象会启动三个 Nginx pod 实例监听端口 80。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值