前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >容器编排引擎Kubernetes 07——Deployment介绍及使用

容器编排引擎Kubernetes 07——Deployment介绍及使用

原创
作者头像
用户8100582
修改2024-02-02 19:37:25
1780
修改2024-02-02 19:37:25
举报
文章被收录于专栏:微服务化微服务化

系列目录

  1. 容器编排引擎Kubernetes 01——一文带你认识K8S
  2. 容器编排引擎Kubernetes 02——k8s安装配置
  3. 容器编排引擎Kubernetes 03——初始化集群
  4. 容器编排引擎Kubernetes 04——部署Dashboard
  5. 容器编排引擎Kubernetes 05——命名空间和POD
  6. 容器编排引擎Kubernetes 06——kubectl常用命令
  7. 容器编排引擎Kubernetes 07——Deployment介绍及使用
  8. 容器编排引擎Kubernetes 08——Service介绍及使用
  9. 容器编排引擎Kubernetes 09——资源文件的介绍及使用
  10. 容器编排引擎Kubernetes 10——在k8s集群中部署项目

1 什么是 Deployment?

Deployment 是 k8s 中管理发布的控制器,k8s 从v1.2开始就引入了 Deployment 控制器,Deployment 控制器并不直接管理 pod,而是通过管理 ReplicaSet 来间接管理 pod,即:Deployment 管理 ReplicaSet, ReplicaSet 管理 pod。所以 Deployment 比 ReplicaSet 的功能更加强大。

使用 yaml 文件创建 k8s Deployment 资源的流程:

  • 用户通过 kubectl 创建 Deployment;
  • Deployment 创建 RelicaSet;
  • ReplicaSet 创建 pod。

pod对象命名方式为:子对象的名字=父对象名字-随机字符串(包含数字和字母)

Deployment 的主要功能有:

  • 支持 ReplicaSet 的所有功能;
  • 支持发布的停止、继续;
  • 支持版本的滚动更新和版本回退。

Deployment 资源清单文件

代码语言:yaml
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

对yaml文件的说明:

  • 创建名为 nginx-deployment(由.metadata.name字段标明)的 Deployment。该名称将成为后续创建 ReplicaSet 和 Pod 的命名基础;
  • 该 Deployment 创建一个 ReplicaSet,可以创建2个副本(由.spec.replicas指定);
  • .spec.selector字段定义所创建的 ReplicaSet 标签,定义如何查找要管理的 Pod。

可通过 kubectl 命令行方式获取更加详细的 deployment 模板信息,通过以下帮助信息,可以看到yaml文件下对应节点都有哪些可选字段及其使用方法。

代码语言:shell
复制
kubectl explain deploy
kubectl explain deploy.spec
kubectl explain deploy.spec.template.spec

2 创建 Deployment

使用上边的yaml内容,创建一个名为 nginx-deployment.yaml 的文件。

生效配置文件

kubectl apply -f nginx-deployment.yaml

  • 查看创建的 Deployment 及其名称

kubectl get deploy -o wide

  • 查看创建的 ReplicaSet 及其名称

kubectl get rs

  • 查看创建的pod及其名称

kubectl get pods

通过名称,可以看出,pod名称是由 ReplicaSet 名称加上随机字符串拼接而成。

ReplicaSet 名称是由 Deployment 名称加上随机字符串拼接而成。

3 镜像更新

当应用程序部署到k8s集群后,随着版本迭代,比如修改BUG或者功能优化,需要对已经部署的应用进行升级。

3.1 更新策略

在 Deployment 的定义中,可以通过spec.strategy指定Pod更新的策略,目前支持两种策略:

  • Recreate 重建,表示Deployment在更新Pod时,会先杀掉正在运行的Pod,然后创建新的Pod,服务更新期间不可用,目前使用较多;
  • RollingUpdate 滚动更新,默认策略。表示Deployment会以滚动更新的方式来逐个更新Pod,服务更新期间持续可用,如下图所示。
代码语言:yaml
复制
spce:
  strategy:
    type: Recreate/RollingUpdate

3.2 更新方式

修改镜像版本,将原来的 nginx-1.14.2 升级为 nginx-1.19.7

3.2.1 命令行方式

直接在 master 节点的命令里,执行如下更新命令

代码语言:shell
复制
kubectl set image <资源类型>/<资源名称> nginx=nginx:1.19.7
kubectl set image deployment/nginx-deployment nginx=nginx:1.19.7

如果不清楚资源名称,可以通过kubectl get deploy查看当前所有的Deployment资源。

3.2.2 修改配置文件

也可以使用 edit 命令,修改 deployment 配置,一旦镜像文件发生了修改,将触发系统完成 Deployment 所有运行 Pod 根据上边配置的策略进行升级。

代码语言:shell
复制
kubectl edit deployment/nginx-deployment

修改配置中和版本有关的信息后,保存。

3.3 查看更新

3.3.1 查看更新过程

在 deployment 更新时,可以通过以下指令,查看整个更新过程。

代码语言:shell
复制
kubectl describe deployments/nginx-deployment

在最下边可以看到,整个创建的过程,新的 ReplicaSet 创建的pod由1个增加到2个,原有的 ReplicaSet 则将所属pod缩容到最后的0个。

3.3.2 查看当前 ReplicaSet

运行 kubectl get rs 以查看 Deployment 通过创建新的 ReplicaSet 并将其扩容到2个副本,并将旧的 ReplicaSet 缩容到了0个副本,从而完成Pod更新操作。

3.3.3 查看当前 POD

通过kubectl get pods查看pod,应仅显示新创建的 pod。

3.3.4 查看服务版本

通过指令,查看pod中image版本,已经更新为指定的版本。

kubectl describe pod nginx-deployment-6f456c7d5f-qrtn2

4 扩缩容

4.1 实现方式

  • 修改配置文件 修改yaml文件中 replicas 字段对应的数值

kubectl edit deployment <deployment名称> -n 命名空间

  • 命令行执行指令 修改 replicas 值,用来控制副本的数量,命令中的资源类型 deployment 也可以简写为 deploy。
代码语言:shell
复制
kubectl scale deployment deploy名称 --replicas=pod数量 -n 命名空间

4.2 扩缩容操作

查看当前pod数量 kubectl get pods,当前有2个deployment创建的pod。

4.2.1 扩容

通过命令行变更pod数量为3个

代码语言:shell
复制
kubectl scale deploy nginx-deployment --replicas=3

查看deployment更新过程,pod增加到了3个。

kubectl describe deployment nginx-deployment

4.2.2 缩容

通过修改配置变更pod数量为2个。

  • 使用以下指令进入到配置页面
代码语言:shell
复制
kubectl edit deploy nginx-deployment
  • 当前 replicas 数量是3,将其修改为2后,使用ia进行编辑模式,修改内容后,再使用:wq保存并退出编辑。

修改自动生效

  • 查看deployment信息

kubectl describe deploy nginx-deployment

要事件末尾,可以看到容量被缩减为2个。

  • 查看pod信息 查看POD信息,当前pod又变为2个。

kubectl get pod

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 系列目录
  • 1 什么是 Deployment?
  • 2 创建 Deployment
  • 3 镜像更新
    • 3.1 更新策略
      • 3.2 更新方式
        • 3.2.1 命令行方式
        • 3.2.2 修改配置文件
      • 3.3 查看更新
        • 3.3.1 查看更新过程
        • 3.3.2 查看当前 ReplicaSet
        • 3.3.3 查看当前 POD
        • 3.3.4 查看服务版本
    • 4 扩缩容
      • 4.1 实现方式
        • 4.2 扩缩容操作
          • 4.2.1 扩容
          • 4.2.2 缩容
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档