Kubernetes Deployment

本文将介绍 Kubernetes 中的 Deployment,即部署。

一、什么是 Deployment?

Pod 是对 “运行” 的描述,它不能满足实际的部署需求,因为部署不止有运行,还包括多实例、高可用、版本更新等复杂操作。

Kubernetes 设计了 Deployment,它是对 “部署” 的描述,它将会监控并管理 Pod,保证始终运行着 “期望数量” 的 Pod。

二、Kubernetes 对 Deployment 的设计

首先,Kubernetes 的设计还是符合 “单一职责” 和 “组合优于继承” 原则的。

具体请看:

Kubernetes Job/CornJob - 二、Kubernetes-对-Job-CornJob-的设计

其次,Deployment 和 Pod 并不是严格绑定的,而是要求 spec.selector.matchLabels 应该与 template.metadata.labels 完全相同,从而通过 selector 间接找到 Pod 对象。这是因为,虽然 Pod 是由 Deployment 创建出来的,但在复杂的运维场景下,这个 Pod 很可能需要被其它资源对象管理,因此 Kubernetes 通过这种方式让 Deployment 和 Pod 不严格绑定,而是呈现一种弱引用的关系。

三、Deployment 的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Kubernetes的KPI版本号
apiVersion: apps/v1
# 资源对象的类型 【Pod、Node、Job、Service等】
kind: Deployment
# 元信息,用于标记资源对象
metadata:
# 名称
name: test-dep
# 说明,描述资源对象的目标状态
spec:
# 实例数量
replicas: 2
# 筛选器
selector:
matchLabels:
app: ngx-dep
# Pod模版,将根据该模版创建Pod
template:
metadata:
labels:
app: ngx-dep

参考

  • Kubernetes
  • Kubernetes 入门实战课
  • 深入剖析 Kubernetes