一、清单文件
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
version: "1.1.6"
labels:
k8s-app: deployment-nginx
name: deployment-nginx
namespace: test
spec:
minReadySeconds: 30
progressDeadlineSeconds: 600
replicas: 2
revisionHistoryLimit: 5
selector:
matchLabels:
dyapp: nginx
dyitem: zcy-test
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
dyapp: nginx
dyitem: zcy-test
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: dylabel_node_memorysize
operator: Gt
values:
- "8"
weight: 1
containers:
- name: nginx
env:
- name: MY_ENV
value: PRO
image: nginx:1.21.6
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
exec:
command:
- /bin/sh
- -c
- echo 'Container was started'
preStop:
exec:
command:
- /bin/sh
- -c
- sleep 10
livenessProbe:
failureThreshold: 3
httpGet:
path: /index.html
port: 80
scheme: HTTP
initialDelaySeconds: 60
periodSeconds: 3
successThreshold: 1
timeoutSeconds: 2
ports:
- containerPort: 80
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /index.html
port: 80
scheme: HTTP
initialDelaySeconds: 5
periodSeconds: 3
successThreshold: 3
timeoutSeconds: 2
resources:
limits:
cpu: 500m
ephemeral-storage: 2000Mi
memory: 512Mi
requests:
cpu: 200m
ephemeral-storage: 1000Mi
memory: 512Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /tmp
name: ephemeral
dnsConfig:
searches:
- zcy.svc.cluster.local
- test.svc.cluster.local
- svc.cluster.local
- cluster.local
dnsPolicy: ClusterFirst
hostAliases:
- hostnames:
- gray.mylocal.cn
ip: 192.168.6.16
hostNetwork: false
imagePullSecrets:
- name: tcr-dyzcy-test-pull
initContainers:
- name: setsysctl
command:
- sh
- -c
- |
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w fs.file-max=1048576
image: busybox
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
# nodeName: 192.168.3.12
# nodeSelector:
# dyarea: wan
# dyenv: prod
priority: 100
preemptionPolicy: IfRequired
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: sa-imzcy
serviceAccountName: sa-imzcy
shareProcessNamespace: false
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoSchedule
key: dynoderole
operator: Equal
value: gateway
volumes:
- name: ephemeral
emptyDir: {}
二、详解
(1)deployment:
在此级别下,包含如下字段:
apiVersion:指定使用的 Kubernetes API 的版本。
kind:指定该资源的类型。
metadata:指定该资源的元数据,例如 name、namespace 等。
spec:指定该资源的具体配置信息。
(2)deployment.metadata
在此级别下,包含如下字段:
annotations:指定 Deployment 的注释信息。这些注释信息可以提供一些额外的描述、标记或关联其他资源等。它们对于扩展 Kubernetes 功能、监控和自动化过程非常有用。
labels:指定 Deployment 拥有的标签。后续可以根据标签查找匹配的 deployment 资源。
name:指定 Deployment 的名称。
namespace:指定 Deployment 所属的命名空间。
(3)deployment.spec
在此级别下,包含如下字段:
minReadySeconds:新创建的pod在没有任何容器异常的情况下准备就绪的最小秒数,以便被视为可用。默认值为0,即 pod 只要 ready 后马上被视为 available 。pod available 后才会开始终止老 pod 然后创建下一个新的pod。
paused:指示控制器是否暂停对该 Deployment 的操作。默认值为 false ,当设置为 true 时,Deployment 的更新将会暂停,不会进行新的 Replication Controller 的创建或删除。
progressDeadlineSeconds:指定 Deployment 控制器等待控制器进度的时间。如果超过这个时间,deployment 控制器将认为升级已经失败,并暂停升级。
replicas:指定要创建的 Pod 副本数量。
revisionHistoryLimit:指定保留的旧 ReplicaSets 历史记录的数量。旧的 ReplicaSet 将保留以便支持回滚操作。
selector:用来选择属于 Deployment 的 Pods 的标签选择器。只有具有匹配标签的 Pod 才会被该 Deployment 控制器管理。
strategy:指定用新 Pod 替换旧 Pod 时的策略,默认值为 RollingUpdate(滚动更新),当设置为 Recreate 时将先停掉所有老的 pod 再创建新 pod 。
template:定义 Pod 模板。它和 Pod 的语法规则完全相同。只是这里它是嵌套的,因此不需要指定 apiVersion 或 kind。
(4)deployment.spec.template
在此级别下,包含如下字段:
metadata:指定 pod 的元数据信息。由于这里是作为模板定义受控制器管理的pod,所以无需设置 name 和 namespace,只需要设置 annotations 和 lables 即可。
spec:指定该资源的具体配置信息。
(5)deployment.spec.template.spec
在此级别下,包含如下字段:
activeDeadlineSeconds:设置 Pod 的活动截止时间。它指定了一个整数值(以秒为单位),表示自Pod启动之时起,Pod可以持续运行的最长时间。一旦超过这个时间,Kubernetes将尝试终止该 Pod。默认值为0,表示不限制运行时间。
affinity:亲和性字段用于定义 Pod 与其他 Pod 或节点之间的关系和偏好。它可以帮助将相关的 Pod 放置在一起或将 Pod 分散到不同的节点上,以满足特定的调度需求和策略。
containers:定义 Pod 中包含的一个或多个容器。每个容器都有自己的镜像、环境变量、命令、参数和其他配置。
dnsConfig:用于定义 Pod 的 DNS 配置。
dnsPolicy:用于指定 Pod 的 DNS 策略。Default:表示使用默认的 DNS 策略。Pod 将使用集群中的 DNS 配置,通常是由 kubelet 进程维护的 DNS 服务器。ClusterFirst:表示优先使用集群内部的 DNS 解析。Pod 首先会使用集群中的 DNS 服务器来解析域名。如果无法解析,则会尝试使用外部的 DNS 服务器来解析。ClusterFirstWithHostNet:与 ClusterFirst 类似,但对于使用 HostNetwork 的 Pod,会直接使用主机网络的 DNS 配置而非集群内部的 DNS 配置。
hostAliases:用于在 Pod 中设置主机别名(相当于直接修改 hosts 文件)。
hostNetwork:指定 Pod 是否应该使用主机网络。默认情况下,每个 Pod 都会拥有自己的网络命名空间,Pod 内的容器只能通过 Pod 网络访问其他容器和外部服务。但是,当 hostNetwork 被设置为 true 时,Pod 将使用主机网络,即容器将直接绑定到主机上的网络接口。
imagePullSecrets:指定 Pod 中需要拉取私有容器镜像时所需的凭据。
initContainers:用于定义需要在主容器启动之前执行的初始化容器。定义多个初始化容器时将在主容器启动之前按顺序依次执行,每个初始化容器都必须成功完成才能继续主容器的启动过程。
nodeName:用于指定 Pod 运行的节点(node)。当你需要将特定的 Pod 调度到集群中的某个特定节点上时,可以使用 nodeName 字段来指定该节点的名称。
nodeSelector:用于通过标签选择器(label selector)来指定 Pod 所需的节点(node)。使用 nodeSelector 字段可以将特定的 Pod 调度到具有特定标签的节点上。
priority:优先级值。调度器(scheduler)使用优先级来确定哪些 Pod 优先被调度。具有更高优先级的 Pod 在资源紧张或节点资源不足时,将更有可能被调度到可用的节点上,以确保其优先运行。各种系统组件使用此字段查找 Pod 的优先级。启用 Priority Admission Controller 后,禁止用户设置此字段。准入控制器从 PriorityClassName 中填充此字段。数值越高,优先级越高。
preemptionPolicy:用于指定 Pod 的抢占策略。抢占是指在资源不足时,调度器可以暂停(预先抢占)低优先级的 Pod,以便为具有更高优先级的 Pod 留出足够的资源。preemptionPolicy 字段有两个可能的取值:PreemptLowerPriority:表示当资源不足时,具有较低优先级的 Pod 可以被抢占,以便为具有更高优先级的 Pod 分配资源。Never:表示 Pod 不会被抢占,即使资源不足。
restartPolicy:用于指定 Pod 中容器的重启策略。在 Kubernetes 中,一个 Pod 可能包含多个容器,restartPolicy 指定了当其中一个容器意外终止时,该容器应如何被重启。Always:表示当容器终止时,无论是由于错误、失败还是其他原因,Kubernetes 都会自动重启该容器。OnFailure:表示当容器以非零状态(即失败状态)终止时,Kubernetes 会自动重启该容器。如果容器正常退出(状态码为0),则不会触发重启。Never:表示当容器终止时,Kubernetes 不会自动重启该容器。
schedulerName:用于指定 Kubernetes 中用于调度 Pod 的调度器的名称。通过设置这个字段,你可以将特定的 Pod 分配给自定义的调度器,而不是集群默认的调度器。
securityContext:用于设置容器的安全上下文,以控制容器的安全属性和行为。通过 securityContext 字段,你可以指定容器运行时的一些安全配置,如用户 ID、访问权限等。
serviceAccount:用于为 Pod 指定所使用的 Service Account。Service Account 是 Kubernetes 中的一种身份验证方式,它用于授予 Pod 访问 Kubernetes API 和其他资源的权限。
serviceAccountName:用于为 Pod 指定所使用的 Service Account。
shareProcessNamespace:指定是否与其他容器共享进程命名空间。当将 shareProcessNamespace 设置为 true 时,Pod 中的所有容器将共享相同的进程命名空间,这意味着它们可以看到彼此的进程并进行相互通信。
terminationGracePeriodSeconds:指定在终止容器之前等待的时间(以秒为单位)。它定义了容器在接收到终止信号后的优雅终止期限。
tolerations:定义哪些污点可以被容忍。Pod 只有在它的 tolerations 包含了在节点上设置的污点后,才能在该节点上调度和运行。
volumes:定义为容器提供存储卷的配置。
(6)deployment.spec.template.spec.containers
在此级别下,包含如下字段:
args:指定容器的命令行参数。容器启动时会执行指定的命令,并将 args 中的参数传递给该命令。
command:指定容器的入口点命令。将覆盖镜像中定义的默认命令,从而指定容器启动时要执行的特定命令。
env:指定容器的环境变量。
image:指定使用的镜像及版本。
imagePullPolicy:指定 Kubernetes 在创建或更新 Pod 时如何拉取镜像。Always:始终拉取最新版本的镜像。IfNotPresent:仅在本地不存在该镜像时才拉取。Never:仅使用本地已存在的镜像,不会尝试从远程仓库中拉取。
lifecycle:指定容器的生命周期钩子。postStart:在容器创建后立即执行的操作。preStop:在容器终止之前执行的操作,例如在容器终止前执行一些清理工作。
livenessProbe:指定容器的存活健康检查机制。
name:指定容器的名称。
ports:定义 Pod 中容器的端口映射的字段。
readinessProbe:指定容器的就绪健康检查机制。
resources:定义 Pod 或容器的资源需求和限制的字段。通过 resources 字段,我们可以指定 Pod 或容器在集群中运行时需要的计算资源,如 CPU 和内存,并可以对其进行限制,以确保资源的合理分配和管理。
startupProbe:用于检测容器启动过程中是否成功。它与 livenessProbe 和 readinessProbe 类似,但是它的目的是在容器启动期间进行健康检查,而不是在容器运行时。
terminationMessagePath:指定容器终止时终止消息的存储路径。当容器终止时,Kubernetes 将会将终止消息写入到指定路径的文件中。默认情况下,终止消息会被写入到容器的 /dev/termination-log 文件中。
terminationMessagePolicy:指定容器终止消息的策略。File:表示终止消息将被写入到文件中,并由 terminationMessagePath 字段指定的路径。FallbackToLogsOnError:表示终止消息将被写入到容器的日志中。如果写入终止消息到文件失败,Kubernetes 将会回退到将终止消息写入到日志中。
volumeMounts:用于将存储卷(Volumes)与容器内的特定路径进行挂载。它定义了容器中的路径和存储卷之间的映射关系。