Posted on:
Last modified:
首先来回顾一下 Kubernetes 的一些基本信息:
K8s 中的几乎所有资源都是通过 yaml 文件来配置的。
Deployment 是使用 k8s 部署服务直接操作的概念。其他的概念往往都是通过 deployment 来间接 使用的,因此理解 deployment 至关重要。
一个典型的 deployment 配置文件如下:
# 1. 资源配置文件的元信息,总是 apiVersion, kind, metadata 三项
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
# 2. 资源配置文件的具体规格
spec:
# 3. Deployment 的部署信息
replicas: 2 # 副本数量:2
selector: # 关联到对应 label 的 template
matchLabels:
app: my-nginx
# 4. 创建 Pod 的模板
template:
metadata: # tempalte 的元信息
labels: # tempalte 的标签
app: my-nginx
# 5. 模板的具体规格
spec:
containers: # 这是一个数组,即上面提到的:Pod 中可以有多个 container
- name: my-nginx
image: nginx # container 的镜像
ports: # 对外暴露的端口
- containerPort: 80
resources: # container 的资源限制
requests:
cpu: 300m
memory: 512Mi
我们可以看出 k8s 的配置文件整体上分了两部分,metadata 和 spec。每种资源的配置文件的 metadata 部分基本是一致的,spec 部分是不同的。Deployment 的 spec 分为了两部分,第一部分是部署的相关 信息,第二部分是 Pod 的模板,包含了如何创建 Pod 的具体配置。
Deployment 的配置可以发生改变,如果只是 replica 的数目发生了改变,那么这只是一个简单的 扩容或者缩容操作,k8s 只会简单的打开或者杀死新的 Pod。如果 template 中镜像、命令等参数 发生了改变,那么 K8S 会把这次操作视为升级,也就是开始一个 Roll Out 操作,创建新的 Replica Set。 在这个过程中,如果 deployment 中的 spec 指定了保留历史 revision 的次数大于零,那么原有的 Replica Set 不会被删除,只是会被 Scale 到 0 而已,方便回滚。
© 2016-2022 Yifei Kong. Powered by ynotes
All contents are under the CC-BY-NC-SA license, if not otherwise specified.
Opinions expressed here are solely my own and do not express the views or opinions of my employer.