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

本文详细介绍了Kubernetes中Deployment的工作原理及其配置文件的格式,并展示了如何通过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格式,一个文件的开始 
• “#”注释

既然要用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

①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

对上述输出中涉及的数量解释如下。
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

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   <none>           <none>
nginx0819-586b875586-82z49   1/1     Running   0          62s   10.255.30.6    k8s21-worker01   <none>           <none>

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

再次执行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

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

kubectl scale deployment httpd0826 --replicas=5

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

下一篇:5 Service

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值