• k8s快速入门教程-----4 工作负载控制器之deployment


    上一篇:3 kubernetes架构
    kubernetes通过各种controller来管理pod的生命周期,根据不同的业务场景,开发了deployment、Replicaset(副本控制器)、daemonset、statefulset、job等多种controller, deployment其实也是一种工作负载资源。
    工作负载控制器(Workload Controllers)是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod。
    常用工作负载控制器有:
    • Deployment : 无状态应用部署
    • StatefulSet : 有状态应用部署
    • DaemonSet : 确保所有Node运行同一个Pod
    • Job : 一次性任务
    • Cronjob : 定时任务
    控制器的作用:
    1、管理pod对象
    2、使用标签与pod绑定
    3、控制器实现了Pod的运维,例如滚动更新、伸缩、副本管理、维护Pod状态等。

    4.1 Deployment 配置文件简介

    之前我们是通过命令行创建资源的,K8S更趋向于用yaml文件来创建资源,我们生产环境,大部分操作都是用yaml文件来创建资源的。
    了解YAML语法格式:

    • 缩进表示层级关系 
    • 不支持制表符“tab”缩进,使用空格缩进 
    • 通常开头缩进 2 个空格 
    • 字符后缩进 1 个空格,如冒号、逗号等 
    • “---” 表示YAML格式,一个文件的开始 
    • “#”注释
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    既然要用YAML配置文件部署应用,现在就很有必要了解一下 Deployment 的配置格式了,其他Controller (比如DaemonSet) 非常类似。
    以nginx deployment为例,配置文件如图5-12所示。

    apiVersion: apps/v1   # ①
    kind: Deployment      # ② 
    metadata:       # ③
      name: nginx0801
    spec:       #④
      replicas: 1  #⑤
      selector:
        matchLabels:
          app: nginx0801
      template:    #⑥
        metadata:  #⑦
          labels:
            app: nginx0801
        spec:    #⑧
          containers:
          - image: nginx
            name: nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    ①apiVersion 是当前配置格式的版本。
    ②kind是要创建的资源类型,这里是Deployment。
    ③metadata是该资源的元数据,name是必需的元数据项。
    ④spec部分是该Deployment的规格说明。
    ⑤replicas 指明副本数量,默认为1。
    ⑥template 定义Pod的模板,这是配置文件的重要部分。
    ⑦metadata定义Pod的元数据,至少要定义一个label。label 的key和value可以任
    意指定。
    ⑧spec 描述Pod的规格,此部分定义Pod中每一一个 容器的属性,name 和image是必需的。

    4.2 Deployment典型使用场景

    deployment的典型使用场景有以下几个。

    • 创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建。
    • 检查Deployment的状态来看部署动作是否完成(Pod副本数量是否达到预期的值)。
    • 更新Deployment以创建新的Pod(比如镜像升级)。
    • 如果当前Deployment不稳定,则回滚到一个早先的Deployment版本。
    • 暂停Deployment以便于一次性修改多个PodTemplateSpec的配置项,之后再恢复Deployment,进行新的发布。
    • 扩展Deployment以应对高负载。
    • 查看Deployment的状态,以此作为发布是否成功的指标。
    • 清理不再需要的旧版本ReplicaSets。

    此nginx.yml是一个最简单的Deployment 配置文件,后面我们学习Kubernetes 各项功能时会逐步丰富这个文件。执行kubectl apply -f nginx0801.yml, 如图所示。

    # kubectl get deploy
    NAME        READY   UP-TO-DATE   AVAILABLE   AGE
    nginx0819   10/15   15           10          32m
    
    • 1
    • 2
    • 3

    对上述输出中涉及的数量解释如下。
    READY: 准备就绪的pod数量/Pod副本数量的期望值
    UP-TO-DATE:最新版本的Pod的副本数量,用于指示在滚动升级的过程中,有多少个Pod副本已经成功升级。
    AVAILABLE:当前集群中可用的Pod副本数量,即集群中当前存活的Pod数量。
    AGE: deployment生命时间
    其实,通过kubectl创建Deployment,Deployment创建ReplicaSet, ReplicaSet再创建pod。

    # kubectl get rs
    NAME                   DESIRED   CURRENT   READY   AGE
    nginx0819-586b875586   15        15        10      32m
    
    • 1
    • 2
    • 3

    DESIRED:Pod副本数量的期望值
    CURRENT:当前Replica的值。
    READY: 准备就绪的pod数量。

    4.3 伸缩

    伸缩是指在线增加或减少Pod的副本数。
    Deployment nginx-deployment初始是两个副本,如图所示。

    # kubectl apply -f nginx0819.yaml   
    deployment.apps/nginx0819 created
    # kubectl get pod -o wide
    NAME                         READY   STATUS    RESTARTS   AGE   IP             NODE             NOMINATED NODE   READINESS GATES
    nginx0819-586b875586-77822   1/1     Running   0          62s   10.255.30.43   k8s21-worker01   >           >
    nginx0819-586b875586-82z49   1/1     Running   0          62s   10.255.30.6    k8s21-worker01   >           >
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    k8s21-worker01上跑了两个副本。现在修改nginx.yml文件,将副本改成5个,
    如图所示。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx0819
    spec:
      replicas: 5     #修改副本5
      selector:
        matchLabels:
          app: nginx0819
      template:
        metadata:
          labels:
            app: nginx0819
        spec:
          containers:
          - image: nginx
            name: nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    再次执行kubeclt apply -f nginx0819.yaml

    # kubectl get pod 
    NAME                         READY   STATUS    RESTARTS   AGE
    nginx0819-586b875586-77822   1/1     Running   0          4d21h
    nginx0819-586b875586-82z49   1/1     Running   0          4d21h
    nginx0819-586b875586-8t78j   1/1     Running   0          4d21h
    nginx0819-586b875586-qlxzg   1/1     Running   0          4d21h
    nginx0819-586b875586-tjv9b   1/1     Running   0          4d21h
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    另外,可以通过命令行模式修改副本数:

    kubectl scale deployment httpd0826 --replicas=5
    
    • 1

    replicas为副本数。

    4.4 CKA考题研究

    Task
    将deployment 从loadbalancer 扩展至 5 pods
    解题:

    #以下考试不需要操作
    kubectl create deployment loadbalancer --image=nginx --replicas=1
    #以下考试操作
    kubectl config use-context k8s
    kubectl scale deployment loadbalancer --replicas=5
    
    • 1
    • 2
    • 3
    • 4
    • 5

    下一篇:5 Service

  • 相关阅读:
    外贸案例分享:看销冠给客户打电话!
    3-2主机发现-三层发现
    我的DW个人网站设计——安徽宣城6页HTML+CSS+JavaScript
    【Pytorch】Visualization of Feature Maps(1)
    硬件设计基础----运算放大器
    计组中的各种周期辨析
    754. 到达终点数字 : 逐步剖析如何取得最小步数
    polarssl网址
    黑苹果修改intel hd3000核显显存大小.2022-11-29
    Text2SQL之不装了,我也是RAG
  • 原文地址:https://blog.csdn.net/cloud_engineer/article/details/126547294