首页 > 其他分享 >Kubernetes_Deployment全解析(无状态的Pod)

Kubernetes_Deployment全解析(无状态的Pod)

时间:2022-11-02 08:11:55浏览次数:52  
标签:kubectl Kubernetes get Deployment nginx deployment rollout Pod

前言

一、创建Deployment

1.1 创建Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.0
        ports:
        - containerPort: 80

在这里插入图片描述

在这里插入图片描述

1.2 Deployment yaml文件

在该 yaml 文件中:

创建名为 nginx-deployment(由 .metadata.name 字段标明)的 Deployment。spec 中有三个字段,分别是 replicas 副本数、selector 选择器、template模板,如下:

(1) 该 Deployment 创建三个(由 .spec.replicas 字段标明)Pod 副本。

(2) .spec.selector 字段定义了 Deployment 如何查找要管理的 Pod。在这里,你选择在 Pod 模板中定义的标签(app: nginx)。 不过,更复杂的选择规则是也可能的,只要 Pod 模板本身满足所给规则即可。

(3) template 字段包含以下子字段:
Pod 被使用 .metadata.labels 字段打上 app: nginx 标签。
Pod 模板规约(即 .template.spec 字段)指示 Pod 运行一个 nginx 容器, 该容器运行版本为 1.14.2 的 nginx Docker Hub 镜像。
创建一个容器并使用 .spec.template.spec.containers[0].name 字段将其命名为 nginx。

1.3 查看当前deploy(get命令和rollout命令)

查看当前deploy,包括两条命令,如下:

kubectl get deployments
kubectl rollout status deploy nginx-deployment

运行 kubectl get deployments 检查 Deployment 是否已创建。 如果仍在创建 Deployment,则输出类似于:

[root@w1 deploy]# kubectl get deployments
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           9m45s

在这里插入图片描述

在检查集群中的 Deployment 时,所显示的字段有:

(1) NAME 列出了名字空间中 Deployment 的名称。
(2) READY 显示应用程序的可用的“副本”数。显示的模式是“就绪个数/期望个数”。
(3) UP-TO-DATE 显示为了达到期望状态已经更新的副本数。
(4) AVAILABLE 显示应用可供用户使用的副本数。
(5) AGE 显示应用程序运行的时间。

请注意期望副本数是根据 .spec.replicas 字段设置 3。

在这里插入图片描述

解释一下,这个 rollout 也是查看命令,只是这个 rollout 命令用的比 get 命令少,rollout 的英文就是 展示 的意思
在这里插入图片描述

1.4 查看当前rs(get命令)

kubectl get rs

在这里插入图片描述

ReplicaSet 输出中包含以下字段:

(1) NAME 列出名字空间中 ReplicaSet 的名称;
(2) DESIRED 显示应用的期望副本个数,即在创建 Deployment 时所定义的值。 此为期望状态;
(3) CURRENT 显示当前运行状态中的副本个数;
(4) READY 显示应用中有多少副本可以为用户提供服务;
(5) AGE 显示应用已经运行的时间长度。

注意 ReplicaSet 的名称始终被格式化为[Deployment名称]-[哈希]。 其中的哈希字符串与 ReplicaSet 上的 pod-template-hash 标签一致。

1.5 查看当前pod(get命令)

kubectl get pods --show-labels
kubectl get pods -o wide
kubectl get pods -o wide --show-labels

在这里插入图片描述

二、更新Deployment

当前镜像为 1.16.0 ,更新为 1.16.1 ,有两种方式:

方式1:kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
方式2:kubectl edit deploy xxx 直接修改当前运行的yaml文件

2.1 通过具体的kubectl命令来更新deploy

kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
kubectl get all -o wide 
kubectl describe deploy xxx 

更换镜像之前,如下:
在这里插入图片描述

6c64d87c8c 这个老的replicaset 有三个replica pod

59777878f8 这个新的replicaset 有了一个replica pod
6c64d87c8c 这个老的replicaset 变成二个replica pod

59777878f8 这个新的replicaset 有了二个replica pod
6c64d87c8c 这个老的replicaset 变成一个replica pod

59777878f8 这个新的replicaset 有了三个replica pod
6c64d87c8c 这个老的replicaset 变成零个replica pod

在这里插入图片描述
在这里插入图片描述

2.2 通过修改当前运行的yaml文件来更新deploy

需求:nignx 从 1.16.2 变成 1.17

方式:kubectl edit deploy xxx 直接修改当前运行的yaml文件

kubectl get deploy nginx-deployment -o yaml
kubectl edit deploy nginx-deployment
kubectl get deploy nginx-deployment -o yaml

在这里插入图片描述
在这里插入图片描述

三、回滚Deployment

3.1 查看版本历史信息

如果说更新deployment是正向变动,那么回滚Deployment就是反向变动。

回滚/反向变动都有一个版本的概念,查看版本的命令如下:

# 查看版本历史
kubectl rollout history deployment/nginx-deployment
# 查看具体版本详细信息
kubectl rollout history deployment/nginx-deployment --revision=2

在这里插入图片描述

3.2 回滚到指定版本

回滚/反向变动的命令包括回滚到上一版本和回滚到指定版本,如下:

kubectl rollout undo deployment/nginx-deployment
kubectl rollout undo deployment/nginx-deployment --to-revision=1

# 回滚到上一版本
kubectl rollout undo deployment/nginx-deployment

在这里插入图片描述

# 回滚到指定版本
kubectl rollout undo deployment/nginx-deployment --to-revision=1

在这里插入图片描述
在这里插入图片描述

四、缩放Deployment

缩放包括手动缩放和自动缩放两种方式,命令如下:

手动缩放:kubectl scale deployment/nginx-deployment --replicas=10
自动缩放:kubectl autoscale deployment/nginx-deployment --min=10 --max=15 --cpu-percent=80

4.1 手动缩放

# 手动缩放
kubectl scale deployment/nginx-deployment --replicas=10
kubectl get all -o wide

在这里插入图片描述

4.2 自动缩放

# 自动缩放
kubectl autoscale deployment/nginx-deployment --min=10 --max=15 --cpu-percent=80
kubectl get all -o wide

在这里插入图片描述

五、暂停、恢复 Deployment 的上线过程

暂停:kubectl rollout pause deployment/nginx-deployment
恢复:kubectl rollout resume deployment/nginx-deployment

5.1 暂停deploy

在这里插入图片描述
处于暂停状态无法更新,如下:

在这里插入图片描述

kubectl set image deployment/nginx-deployment nginx=nginx:1.17
kubectl rollout history deployment/nginx-deployment
kubectl get rs

暂停 Deployment 上线之前的初始状态将继续发挥作用,但新的更新在 Deployment 上线被暂停期间不会产生任何效果。

5.2 恢复deploy

kubectl rollout resume deployment/nginx-deployment
kubectl get rs

在这里插入图片描述

六、Deployment 状态

6.1 进行中的Deployment

执行下面的任务期间,Kubernetes 标记 Deployment 为进行中(Progressing)_:

(1) Deployment 创建新的 ReplicaSet
(2) Deployment 正在为其最新的 ReplicaSet 扩容
(3) Deployment 正在为其旧有的 ReplicaSet(s) 缩容
(4) 新的 Pod 已经就绪或者可用(就绪至少持续了 MinReadySeconds 秒)。

当上线过程进入“Progressing”状态时,Deployment 控制器会向 Deployment 的 .status.conditions 中添加包含下面属性的状况条目:

type: Progressing
status: "True"
reason: NewReplicaSetCreated | reason: FoundNewReplicaSet | reason: ReplicaSetUpdated

你可以使用 kubectl rollout status 监视 Deployment 的进度。

6.2 成功的Deployment

当 Deployment 具有以下特征时,Kubernetes 将其标记为完成(Complete);

(1) 与 Deployment 关联的所有副本都已更新到指定的最新版本,这意味着之前请求的所有更新都已完成。
(2) 与 Deployment 关联的所有副本都可用。
(3) 未运行 Deployment 的旧副本。

当上线过程进入“Complete”状态时,Deployment 控制器会向 Deployment 的 .status.conditions 中添加包含下面属性的状况条目:

type: Progressing
status: "True"
reason: NewReplicaSetAvailable

这一 Progressing 状况的状态值会持续为 “True”,直至新的上线动作被触发。 即使副本的可用状态发生变化(进而影响 Available 状况),Progressing 状况的值也不会变化。

你可以使用 kubectl rollout status 检查 Deployment 是否已完成。 如果上线成功完成,kubectl rollout status 返回退出代码 0。

6.3 失败的Deployment

你的 Deployment 可能会在尝试部署其最新的 ReplicaSet 受挫,一直处于未完成状态。 造成此情况一些可能因素如下:

(1) 配额(Quota)不足
(2) 就绪探测(Readiness Probe)失败
(3) 镜像拉取错误
(4) 权限不足
(5) 限制范围(Limit Ranges)问题
(6) 应用程序运行时的配置错误

检测此状况的一种方法是在 Deployment 规约中指定截止时间参数: (.spec.progressDeadlineSeconds)。 .spec.progressDeadlineSeconds 给出的是一个秒数值,Deployment 控制器在(通过 Deployment 状态) 标示 Deployment 进展停滞之前,需要等待所给的时长。

在这里插入图片描述

在这里插入图片描述


总结

创建deployment并查看deploy、查看rs、查看pod
更新deployment:要么通过kubectl命令、要么通过edit deploy xxx来更新
回滚deployment:学会查看版本历史信息的两条命令,学会回滚到指定版本
缩放deployment:手动缩放+自动缩放
暂停deployment+恢复deployment
deployment的状态

天天打码,天天进步!!

标签:kubectl,Kubernetes,get,Deployment,nginx,deployment,rollout,Pod
From: https://www.cnblogs.com/maoqizhi/p/16849785.html

相关文章

  • 深入剖析 Kubernetes-4 容器持久化存储
    1PV&PVC&StorageClass1.1概念PV描述的是持久化存储数据卷。PVC描述的是Pod所希望使用的持久化存储的属性。StorageClass其实就是创建PV的模板。用户创建的P......
  • Kubernetes Deployment 实操整理
    Deployment用于部署无状态的服务。一般不直接管理Pod或者ReplicaSet。创建DeploymentDeployment文件apiVersion:apps/v1kind:Deploymentmetadata:name:nginx......
  • 系统架构与设计(5)- Kubernetes(K8s)
    Kubernetes,也被称为K8s或Kube,是谷歌推出的业界最受欢迎的容器管理/运维工具(容器编排器)。它是一套自动化容器管理/运维的开源平台,包括部署、调度和节点集群的扩展等。使......
  • Docker如何与外界互通(chrono《kubernetes入门实战课》笔记整理)
    Docker与外界互通的三种方式1、拷贝文件dockercp命令,可以直接在主机和容器之间互相拷贝(容器间不可以),格式和cp是一样的,就是注意要标明容器ID,例如:docker cp a.txt 062:......
  • Docker Hub(chrono《kubernetes入门实战课》笔记整理)
    dockerpull的时候,如果没有明确指定镜像仓库,就会使用默认的“DockerHub”(https://hub.docker.com/),是docker公司官方搭建的服务。【如何在DockerHub上挑选镜像】docker......
  • Dockerfile(chrono《kubernetes入门实战课》笔记整理)
    【容器分层】每个镜像都是基于一些已有的系统,资源等组合起来的,假设N个镜像都是基于centos7.0系统,如果是直接打包做镜像,就会需要打包N份centos7系统,这对磁盘存储和网络传输......
  • kubernetes的pod
    kubernetes的podPod是kubernetes集群能够调度的最小单元。Pod是容器的封装。在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的......
  • kubernetes的namespace
    kubernetes的namespace概念中文名称:命名空间。你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼......
  • k8s.HPA.使用自定义指标Pod扩容
    k8s.HPA.使用自定义指标Pod扩容环境env:kubernetesv1.22metrics-server0.6.1prometheusv2.36.1prometheus-adapter.v0.10.0概述弹性伸缩1、资源层弹性,如......
  • Installing helm on Kubernetes-1.25.2
    一、InstallinghelmonKubernetes-1.25.2地址https://helm.shhttps://github.com/helm/helm1 wget下载cd/opt/softwarewgethttps://get.helm.sh/helm-v3.10......