网站首页 文章专栏 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%。