目录
1 本人基础环境
- 操作系统:CentOSStream9 CPU - 2核 内存 - 4GB 硬盘 - 60G
- 安装了docker及k8s(CentOS9安装docker及k8s)
2 目的
创建 Deployment 以将 ReplicaSet 上线。ReplicaSet 在后台创建 Pod。 检查 ReplicaSet 的上线状态,查看其是否成功。
3 解析yaml
下面是一个 Deployment 示例。其中创建了一个 ReplicaSet,负责启动三个 nginx Pod:
# controllers/nginx-deployment.yaml
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.14.2
ports:
- containerPort: 80
在该例中:
- 创建名为 nginx-deployment(由 .metadata.name 字段标明)的 Deployment。 该名称将成为后续创建 ReplicaSet 和 Pod 的命名基础。
deployment名称可能会作为dns子域名,需要遵循:
- 最多 63 个字符
- 只能包含小写字母、数字,以及 ‘-’
- 必须以字母数字开头
- 必须以字母数字结尾
- 该 Deployment 创建一个 ReplicaSet,它创建三个(由 .spec.replicas 字段标明)Pod 副本。
- .spec.selector 字段定义所创建的 ReplicaSet 如何查找要管理的 Pod。 在这里,你选择在 Pod 模板中定义的标签(app: nginx)。 不过,更复杂的选择规则是也可能的,只要 Pod 模板本身满足所给规则即可。
可参考标签和选择器的定义
------------------------------------
- template 字段包含以下子字段:
Pod 被使用 .metadata.labels 字段打上 app: nginx 标签。
Pod 模板规约(即 .template.spec 字段)指示 Pod 运行一个 nginx 容器, 该容器运行版本为 1.14.2 的 nginx Docker Hub 镜像。
创建一个容器并使用 .spec.template.spec.containers[0].name 字段将其命名为 nginx
.spec.template.spec.containers下可以定义多容器,这里只定义了一个nginx
4 执行yaml文件
4.1 运行yaml创建 Deployment
# 这里采用的是远端的nginx-deployment.yaml,也可改成本地的文件
kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml
4.2 查看Deployment
kubectl get deployments
如果 READY 这一列展示的不是 3/3 稍等一会重新执行该命令
在检查集群中的 Deployment 时,所显示的字段有:
- NAME 列出了名字空间中 Deployment 的名称
- READY 显示应用程序的可用的“副本”数。显示的模式是“就绪个数/期望个数”
- UP-TO-DATE 显示为了达到期望状态已经更新的副本数
- AVAILABLE 显示应用可供用户使用的副本数
- AGE 显示应用程序运行的时间
请注意期望副本数是根据 .spec.replicas 字段设置 3。
4.3 查看 Deployment 上线状态
kubectl rollout status deployment/nginx-deployment
如果这里还没上线完可能会展示:
Waiting for rollout to finish: 2 out of 3 new replicas have been updated…
4.4 查看Deployment 创建的 ReplicaSet(rs)
kubectl get rs
ReplicaSet 输出中包含以下字段:
- NAME 列出名字空间中 ReplicaSet 的名称
- DESIRED 显示应用的期望副本个数,即在创建 Deployment 时所定义的值。 此为期望状态
- CURRENT 显示当前运行状态中的副本个数
- READY 显示应用中有多少副本可以为用户提供服务
- AGE 显示应用已经运行的时间长度
注意 ReplicaSet 的名称格式始终为 [Deployment 名称]-[哈希]。 该名称将成为所创建的 Pod 的命名基础。 其中的哈希字符串与 ReplicaSet 上的 pod-template-hash 标签一致。
4.5 查看ReplicaSet的标签
kubectl describe replicaset nginx-deployment-d556bf558
4.6 查看每个 Pod 自动生成的标签
kubectl get pods --show-labels
所创建的 ReplicaSet 确保总是存在三个 nginx Pod。
说明:
你必须在 Deployment 中指定适当的选择算符和 Pod 模板标签(在本例中为 app: nginx)。 标签或者选择算符不要与其他控制器(包括其他 Deployment 和 StatefulSet)重叠。 Kubernetes 不会阻止你这样做,但是如果多个控制器具有重叠的选择算符, 它们可能会发生冲突执行难以预料的操作。
4.7 Pod-template-hash 标签
注意:
不要更改此标签。
Deployment 控制器将 pod-template-hash 标签添加到 Deployment 所创建或收留的每个 ReplicaSet 。
此标签可确保 Deployment 的子 ReplicaSet 不重叠。 标签是通过对 ReplicaSet 的 PodTemplate 进行哈希处理。 所生成的哈希值被添加到 ReplicaSet 选择算符、Pod 模板标签,并存在于在 ReplicaSet 可能拥有的任何现有 Pod 中。