一份k8s的Deployment配置文件详解
一、概述
本文提供一份 K8s Deployment 配置文件示例,并对关键配置项进行详细说明,方便在实际项目部署时参考和使用。
二、配置示例
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations: {}
labels:
app: msmp-mt-server
k8s.kuboard.cn/name: msmp-mt-server-deployment
name: msmp-mt-server-deployment
namespace: hw-msmp
resourceVersion: '10843811'
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: msmp-mt-server
env: dev
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
annotations:
kubectl.kubernetes.io/restartedAt: '2023-11-03T17:39:17+08:00'
creationTimestamp: null
labels:
app: msmp-mt-server
env: dev
spec:
containers:
- env:
- name: TZ
value: Asia/Shanghai
image: 'harbor.mos.com/hw/mt-server:v4.0.7'
imagePullPolicy: Always
name: msmp-mt-server
ports:
- containerPort: 8080
name: http
protocol: TCP
resources:
limits:
cpu: '16'
memory: 32Gi
requests:
cpu: '2'
memory: 4Gi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /root/mt-server/cache
name: cache
subPath: cache
- mountPath: /root/mt-server/logs
name: cache
subPath: logs
dnsPolicy: ClusterFirst
nodeName: host-172.16.1.113
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: hw2-msmp-config
name: config-volume
- hostPath:
path: /home/msmp/
type: ''
name: cache
三、配置项详解
3.1 元数据 (metadata)
| 配置项 | 说明 |
|---|---|
name |
Deployment 的名称,在命名空间中必须唯一 |
namespace |
所属的命名空间 |
labels |
标签,用于资源的组织和选择 |
annotations |
注解,存储非识别信息,如重启时间等 |
3.2 规格配置 (spec)
3.2.1 基本配置
| 配置项 | 说明 |
|---|---|
replicas |
Pod 副本数量,此处为 1 |
revisionHistoryLimit |
保留的历史版本数,用于回滚 |
progressDeadlineSeconds |
Deployment 进展超时时间(600秒) |
3.2.2 选择器 (selector)
selector:
matchLabels:
app: msmp-mt-server
env: dev
用于选择 Deployment 管理的 Pod,必须与 Pod 模板中的 labels 匹配。
3.2.3 更新策略 (strategy)
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
| 配置项 | 说明 |
|---|---|
type |
更新类型,RollingUpdate(滚动更新)或 Recreate(重建) |
maxSurge |
更新时最多可以超出期望 Pod 数的比例/数量 |
maxUnavailable |
更新时最多不可用 Pod 数的比例/数量 |
3.3 Pod 模板 (template)
3.3.1 容器配置 (containers)
镜像配置:
| 配置项 | 说明 |
|---|---|
image |
容器镜像地址和版本 |
imagePullPolicy |
镜像拉取策略:Always(总是拉取)、IfNotPresent、Never |
环境变量:
env:
- name: TZ
value: Asia/Shanghai
设置容器的时区为东八区,避免时间问题。
资源配置:
resources:
requests:
cpu: "2"
memory: 4Gi
limits:
cpu: "16"
memory: 32Gi
| 配置项 | 说明 |
|---|---|
requests |
容器请求的最小资源,用于调度 |
limits |
容器可使用的最大资源,超出会被限制或杀死 |
端口配置:
ports:
- containerPort: 8080
name: http
protocol: TCP
声明容器暴露的端口,主要用于文档说明和 Service 关联。
3.3.2 卷配置 (volumes)
挂载卷:
volumeMounts:
- mountPath: /root/mt-server/cache
name: cache
subPath: cache
- mountPath: /root/mt-server/logs
name: cache
subPath: logs
定义卷:
volumes:
- configMap:
defaultMode: 420
name: hw2-msmp-config
name: config-volume
- hostPath:
path: /home/msmp/
type: ''
name: cache
| 卷类型 | 说明 |
|---|---|
configMap |
从 ConfigMap 挂载配置文件 |
hostPath |
挂载宿主机路径,用于持久化存储 |
emptyDir |
临时目录,Pod 删除时数据也会删除 |
3.3.3 其他配置
| 配置项 | 说明 |
|---|---|
restartPolicy |
重启策略:Always(总是重启)、OnFailure、Never |
dnsPolicy |
DNS 策略,ClusterFirst 使用集群 DNS |
nodeName |
指定调度到的节点名称(不建议手动指定) |
terminationGracePeriodSeconds |
Pod 终止宽限期(30秒) |
四、使用示例
# 创建 Deployment
kubectl apply -f deployment.yaml
# 查看 Deployment 状态
kubectl get deployment msmp-mt-server-deployment -n hw-msmp
# 查看 Pod 状态
kubectl get pods -n hw-msmp -l app=msmp-mt-server
# 查看 Deployment 详情
kubectl describe deployment msmp-mt-server-deployment -n hw-msmp
# 扩容/缩容
kubectl scale deployment msmp-mt-server-deployment --replicas=3 -n hw-msmp
# 更新镜像
kubectl set image deployment/msmp-mt-server-deployment msmp-mt-server=harbor.mos.com/hw/mt-server:v4.0.8 -n hw-msmp
# 查看滚动更新状态
kubectl rollout status deployment/msmp-mt-server-deployment -n hw-msmp
# 回滚到上一个版本
kubectl rollout undo deployment/msmp-mt-server-deployment -n hw-msmp
五、注意事项
- 资源配置:合理设置 requests 和 limits,避免资源浪费或 OOM
- 时区配置:必须配置
TZ环境变量,确保应用时间正确 - 持久化存储:hostPath 会将 Pod 绑定到特定节点,生产环境建议使用 PV/PVC
- 更新策略:根据业务特点调整 maxSurge 和 maxUnavailable,平衡更新速度和服务可用性
- 标签匹配:selector 必须与 Pod template 中的 labels 完全匹配
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 逐光の博客!
评论