网站首页 文章专栏 03deployment.md
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
spec.replicas
设置deployment有多少个pod副本, 可选spec.template
是 pod template. 它跟 Pod有一模一样的schema,除了它是嵌套的并且不需要apiVersion
和 kind
字段。spec.template.metadata.labels
为pod指定label,不要跟其他controller重复了,以方便k8s管理。spec.template.spec.restartPolicy
可以设置为 Always , 如果不指定的话这就是默认配置。
spec.selector
是可选字段,用来指定 label selector ,圈定Deployment管理的pod范围。
如果被指定, spec.selector
必须匹配 spec.template.metadata.labels
,否则它将被API拒绝。如果 spec.selector
没有被指定, spec.selector.matchLabels
默认是spec.template.metadata.labels
。
在Pod的template跟spec.template
不同或者数量超过了spec.replicas
规定的数量的情况下,Deployment会杀掉label跟selector不同的Pod。
注意: 你不应该再创建其他label跟这个selector匹配的pod,或者通过其他Deployment,或者通过其他Controller,例如ReplicaSet和ReplicationController。否则该Deployment会被把它们当成都是自己创建的。Kubernetes不会阻止你这么做。
如果你有多个controller使用了重复的selector,controller们就会产生未定义的行为。
.spec.strategy
指定新的Pod替换旧的Pod的策略, .spec.strategy.type
可以是Recreate
或者是 RollingUpdate
。RollingUpdate
是默认值。
spec.strategy.type==Recreate
时,在创建出新的Pod之前会先杀掉所有已存在的Pod。spec.strategy.type==RollingUpdate
时,Deployment使用rolling update 的方式更新Pod 。你可以指定maxUnavailable
和maxSurge
来控制 rolling update
进程。spec.strategy.rollingUpdate.maxUnavailable
是可选配置项,用来指定在升级过程中不可用Pod的最大数量。该值可以是一个绝对值(例如5),也可以是期望Pod数量的百分比(例如10%)。通过计算百分比的绝对值向下取整。如果spec.strategy.rollingUpdate.maxSurge
为0时,这个值不可以为0。默认值是1。
例如,该值设置成30%,启动rolling update后旧的ReplicatSet将会立即缩容到期望的Pod数量的70%。新的Pod ready后,随着新的ReplicaSet的扩容,旧的ReplicaSet会进一步缩容,确保在升级的所有时刻可以用的Pod数量至少是期望Pod数量的70%。