Pods' Scheduled Rollout with CronJob

First let's add role, service account and role binding:

kind: ServiceAccount
apiVersion: v1
metadata:
  name: rest-api-deployment-restart-service
  namespace: rest-api-ns-{{ .Values.environment }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: deployment-restart-role
  namespace: rest-api-ns-{{ .Values.environment }}
rules:
  - apiGroups: ["apps", "extensions"]
    resources: ["deployments"]
    resourceNames: ["rest-api-deploy-{{ .Values.environment }}"]
    verbs: ["get", "patch", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: deployment-restart-role-binding
  namespace: rest-api-ns-{{ .Values.environment }}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: deployment-restart-role
subjects:
  - kind: ServiceAccount
    name: rest-api-deployment-restart-service
    namespace: rest-api-ns-{{ .Values.environment }}

I'm using helm, so I have {{ .Values.environment }} you can change this to any value
in case you do not leverage Helm.

Next, let's define CronJob:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: rest-api-deployment-restart
  namespace: rest-api-ns-{{ .Values.environment }}
spec:
  concurrencyPolicy: Forbid
  schedule: '*/5 * * * *'
  jobTemplate:
    spec:
      backoffLimit: 2
      activeDeadlineSeconds: 600
      template:
        spec:
          serviceAccountName: rest-api-deployment-restart-service
          restartPolicy: Never
          containers:
            - name: kubectl
              image: bitnami/kubectl
              command:
                - 'kubectl'
                - 'rollout'
                - 'restart'
                - 'deployment/rest-api-deploy-{{ .Values.environment }}'

Comments