网站首页 文章专栏 03deployment.md
03deployment.md
创建于:2021-07-04 07:51:09 更新于:2024-11-21 12:38:31 羽瀚尘 401

最简配置

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,除了它是嵌套的并且不需要apiVersionkind字段。
  • spec.template.metadata.labels 为pod指定label,不要跟其他controller重复了,以方便k8s管理。

restartPolicy

spec.template.spec.restartPolicy 可以设置为 Always , 如果不指定的话这就是默认配置。

Selector

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们就会产生未定义的行为。

strategy

.spec.strategy 指定新的Pod替换旧的Pod的策略, .spec.strategy.type 可以是Recreate或者是 RollingUpdateRollingUpdate是默认值。

  • spec.strategy.type==Recreate时,在创建出新的Pod之前会先杀掉所有已存在的Pod。
  • spec.strategy.type==RollingUpdate时,Deployment使用rolling update 的方式更新Pod 。你可以指定maxUnavailablemaxSurge 来控制 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%。