Deployment无状态应用编排建议配置项
建议 Deployment 基础模版内置的内容:
-
资源限额(requests 和 limits - 生产环境建议将 pod QoS 设置为 Guaranteed)
-
就绪探针(启动检测:startupProbe(1.16 版本及以上支持),就绪检测、存活检测按需配置)
-
升级策略(默认设置为:rollingUpdate,有唯一性要求的使用 Recreate)
-
镜像拉取策略(默认为:IfNotPresent)
-
业务节点隔离(基于 label 的首选亲和性调度:preferredDuringSchedulingIgnoredDuringExecution)
-
HPA(可基于内存、cpu、自定义指标)
-
定好 DNS 策略(默认为:ClusterFirst),建议提前给集群配置 nodelocaldns,结合 ClusterFirst 的 DNS 解析模式可以有效缩短 DNS 查找的延迟时间,降低 CoreDNS 查询 5 秒超时问题出现的几率;
-
平滑终止(lifecycle.preStop)
-
添加初始容器(init 容器):共享数据卷和网络命名空间的进行一些数据的初始化、放置处于安全考虑不适合和业务容器放在一起的工具和命令(可设置 securityContext.privileged 为 true 执行应用 pod 不具有的超管权限)、进行准入条件判断等
-
使用 tini 启动业务进程
-
设置运行时安全(securityContext),如:非特权模式且 allowPrivilegeEscalation 设置为 false
示例:
HPA、DNSCache、init container、SecurityContext 等配置因环境受限或无此需求暂未添加
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: alan-web
namespace: mars-prod
labels:
app: alan-web
spec:
replicas: 1
strategy:
type: RollingUpdate
selector:
matchLabels:
app: alan-web
template:
metadata:
labels:
app: alan-web
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
imagePullSecrets:
- name: docker-reg-secret
containers:
- name: alan-web
image: registry.cn-hangzhou.aliyuncs.com/xxx/alan-web:dev-xxx
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: config-prod
ports:
- containerPort: 80
protocol: TCP
readinessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 15
periodSeconds: 20
resources:
requests:
cpu: 0.1
memory: 128Mi
limits:
cpu: 0.2
memory: 256Mi
lifecycle:
preStop:
exec:
command: ["/bin/bash", "-c", "sleep 10"]
securityContext:
allowPrivilegeEscalation: false