一个比较完整的deployment的样例
以下是一个较为丰富且包含完整生命周期钩子的Kubernetes Deployment示例。这个示例展示了一个带有初始化容器(initContainers)、生命周期钩子(lifecycle)、就绪探针(readinessProbe)和存活探针(livenessProbe)的Deployment。
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 3
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: high-memory
operator: In
values:
- "true"
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', 'echo "Init Container doing some work" && sleep 60']
containers:
- name: main-container
image: nginx:1.17.1
ports:
- containerPort: 80
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo 'PostStart Hook: Container started'"]
preStop:
exec:
command: ["/bin/sh", "-c", "echo 'PreStop Hook: Container stopping' && sleep 10"]
readinessProbe:
httpGet:
path: /index.html
port: 80
initialDelaySeconds: 15
periodSeconds: 10
livenessProbe:
httpGet:
path: /index.html
port: 80
initialDelaySeconds: 20
periodSeconds: 10
restartPolicy: Always
Kubernetes Deployment 配置的逐行解释:
apiVersion: apps/v1
- apiVersion: 指定了使用的 Kubernetes API 版本,这里是 apps/v1,适用于 Deployment 资源类型。
kind: Deployment
- kind: 定义了资源类型,这里是 Deployment,表示这是一个部署对象。
metadata:
name: example-deployment
- metadata: 提供了关于资源的元数据。
- name: 资源的名称,这里是 example-deployment。
spec:
replicas: 3
- spec: 定义了部署的详细规格。
- replicas: 指定了应该运行的 Pod 副本数量,这里设置为3。
selector:
matchLabels:
app: example
- selector: 定义了如何选择 Pod,用于确定哪些 Pod 属于这个 Deployment。
- matchLabels: 设置了选择标准,这里是选择带有 app: example 标签的 Pod。
template:
metadata:
labels:
app: example
- template: 定义了 Pod 的模板。
- metadata: 模板的元数据。
- labels: 设置了 Pod 的标签,这里为 app: example。
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: high-memory
operator: In
values:
- "true"
- affinity: 定义了 Pod 与节点的亲和性设置。
- nodeAffinity: 设置了节点亲和性规则。
- preferredDuringSchedulingIgnoredDuringExecution: 表明这是一个优先级规则,不是强制性的。
- weight: 为这个规则设置了权重,这里是1。
- preference: 定义了匹配表达式。
- matchExpressions: 设置了节点选择条件。
- key: 节点标签的键,这里是 high-memory。
- operator: 操作符,这里是 In,表示节点标签的值应该在下面的列表中。
- values: 值的列表,这里是 "true"。
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', 'echo "Init Container doing some work" && sleep 60']
- initContainers: 定义了初始化容器。
- name: 初始化容器的名称,这里是 init-myservice。
- image: 容器使用的镜像,这里是 busybox:1.28。
- command: 容器启动时执行的命令。
containers:
- name: main-container
image: nginx:1.17.1
ports:
- containerPort: 80
- containers: 定义了应用容器。
- name: 容器的名称,这里是 main-container。
- image: 容器使用的镜像,这里是 nginx:1.17.1。
- ports: 容器暴露的端口。
- containerPort: 指定容器内部监听的端口号,这里是80。
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo 'PostStart Hook: Container started'"]
preStop:
exec:
command: ["/bin/sh", "-c", "echo 'PreStop Hook: Container stopping' && sleep 10"]
- lifecycle: 定义了容器生命周期的钩子。
- postStart: 容器启动后执行的命令。
- preStop: 容器停止前执行的命令。
readinessProbe:
httpGet:
path: /index.html
port: 80
initialDelay
Seconds: 15
periodSeconds: 10
- readinessProbe: 定义了就绪探针。
- httpGet: 通过HTTP GET请求检查容器是否准备好服务。
- path 和 port: 指定了检查的路径和端口。
- initialDelaySeconds: 容器启动后延迟多久开始探针。
- periodSeconds: 探针的检查频率。
livenessProbe:
httpGet:
path: /index.html
port: 80
initialDelaySeconds: 20
periodSeconds: 10
- livenessProbe: 定义了存活探针。
- 类似于 readinessProbe,用于检查容器是否还在运行。
restartPolicy: Always
- restartPolicy: 定义了 Pod 的重启策略,这里设置为 Always,意味着总是重启失败的容器。
这个配置为 Kubernetes 部署提供了一个详细的设置,包括节点亲和性、初始化容器、容器生命周期钩子以及探针来确保容器的健康和正确启动。