K8S系列Deployment 详解

Posted wx61c45e4794bd5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8S系列Deployment 详解相关的知识,希望对你有一定的参考价值。


背景

如果我们直接管理集群中所有的 Pod,应用 A、B、C 的 Pod,其实是散乱地分布在集群中。,现在有以下的问题:

  • 首先,如何保证集群内可用 Pod 的数量?也就是说我们应用 A 四个 Pod 如果出现了一些宿主机故障,或者一些网络问题,如何能保证它可用的数量?
  • 如何为所有 Pod 更新镜像版本?我们是否要某一个 Pod 去重建新版本的 Pod?
  • 然后在更新过程中,如何保证服务的可用性?
  • 以及更新过程中,如果发现了问题,如何快速回滚到上一个版本?

Deployment

Deployment 能帮我们做什么事情呢?

首先,Deployment 定义了一种 Pod 期望数量,比如说应用 A,我们期望 Pod 数量是四个,那么这样的话,controller 就会持续维持 Pod 数量为期望的数量。当我们与 Pod 出现了网络问题或者宿主机问题的话,controller 能帮我们恢复,也就是新扩出来对应的 Pod,来保证可用的 Pod 数量与期望数量一致;

配置 Pod 发布方式,也就是说 controller 会按照用户给定的策略来更新 Pod,而且更新过程中,也可以设定不可用 Pod 数量在多少范围内;

如果更新过程中发生问题的话,即所谓“一键”回滚,也就是说你通过一条命令或者一行修改能够将 Deployment 下面所有 Pod 更新为某一个旧版本 。

语法

# vi nginx.yml 

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels: nginx
spec:
selector:
matchLabels:
app: web_server
replicas: 2
template:
metadata:
labels:
app: web_server
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80

“apiVersion:apps/v1”,也就是说 Deployment 当前所属的组是 apps,版本是 v1。“metadata”是我们看到的 Deployment 元信息,包括 Labels、Selector

Deployment 作为一个 K8s 资源,它有自己的 metadata 元信息,这里我们定义的 Deployment.name 是 nginx.Deployment。Deployment.spec 中首先要有一个核心的字段,即 replicas,这里定义期望的 Pod 数量为2个;selector 其实是 Pod 选择器,那么所有扩容出来的 Pod,它的 Labels 必须匹配 selector 层上的 image.labels,也就是 app.web_server。

如上面的 Pod 模板 template 中所述,这个 template 它其实包含了两部分内容:

  • 一部分是我们期望 Pod 的 metadata,其中包含了 labels,即跟 selector.matchLabels 相匹配的一个 Labels;
  • 第二部分是 template 包含的一个 Pod.spec。这里 Pod.spec 其实是 Deployment 最终创建出来 Pod 的时候,它所用的 Pod.spec,这里定义了一个 container.nginx,它的镜像版本是 nginx:1.7.9。


以上是关于K8S系列Deployment 详解的主要内容,如果未能解决你的问题,请参考以下文章

k8s控制器Deployment使用详解

k8s deployment 添加hosts

K8S系列第十三讲:Ingress详解

K8s Deployment ymal文件详解

K8S yaml文件详解

k8s deployment