what's the differences between the different value for tag strategy in k8s yaml file

7/5/2018

i test with two yaml file, that only different in tag strategy

first one:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    test.k8s: test
  name: test
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        test.k8s: test
    spec:
      containers:
      - name: test
        image: alpine3.6
        imagePullPolicy: IfNotPresent
...

the second:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    test.k8s: test
  name: test
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      labels:
        test.k8s: test
    spec:
      containers:
      - name: test
        image: alpine3.6
        imagePullPolicy: IfNotPresent
...

then I update the deployment with kubectl patch and kubectl replace command. it seems only the new pod start time different. and the old pod will be terminated at the end under the two conditions when the new pod start failed with missing image.

does anyone knows about it?

many thanks~

-- ling
kubernetes

1 Answer

7/5/2018

Basically, .spec.strategy tag specifies the way how the cluster engine replaces old Pods with new ones.

In your case, .spec.strategy.type==Recreate tag tells cluster engine to terminate (kill) all existing Pods before new ones are created.

As for the second example, .spec.strategy.type==RollingUpdate tag describes approach to update a service without a temporary outage, as it concerns to update one pod per time to avoid service unavailability.

From your example, there are two parameters which define RollingUpdate strategy:

.spec.strategy.rollingUpdate.maxUnavailable - indicates the maximum number of Pods that can be unavailable during the update process.

.spec.strategy.rollingUpdate.maxSurge - specifies the maximum number of Pods that can be created over the desired number of Pods.

There are several additional parameters which you can consider to use in RollingUpdate, for more information, refer to the Documentation.

By using kubectl replace command you recreate strategy and rebuild object, but not update.

-- mk_sta
Source: StackOverflow