解析yaml形式创建Kubernetes的Deployment

1 本人基础环境

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 中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值