Helm lifecycle commands in deployment

Viewed 394

I have deployment.yaml template.

I have AWS EKS 1.8 and same kubectl.

I'm using Helm 3.3.4.

When I tried to deploy same template directly thru kubectl apply -f deployment.yaml,is everything good, init containers and main container in pod works fine. But if I tried to start deployment thru Helm I got this error:

OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "process_linux.go:101: executing setns process caused \"exit status 1\"": unknown\r\n"

kubectl describe pods osad-apidoc-6b74c9bcf9-tjnrh

enter image description here

Looks like I have missed something in annotations or I'm using wrong syntaxes in command description. Some not important parameters are omitted in this example:

apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: {{ include "apidoc.fullname" . }}
   labels:
     {{- include "apidoc.labels" . | nindent 4 }}
 spec:
   template:
     metadata:  
       containers:
       - name: {{ .Chart.Name }}
         image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
         imagePullPolicy: {{ .Values.image.pullPolicy }}
         ports:
           - name: http
             containerPort: 80
             protocol: TCP
         lifecycle:
           postStart:
             exec:
               command:
                 - /bin/sh
                 - -c
                 - |
                   echo 'ServerName 127.0.0.1' >> /etc/apache2/apache2.conf
                   a2enmod rewrite
                   a2enmod headers
                   a2enmod ssl
                   a2dissite default
                   a2ensite 000-default
                   a2enmod rewrite
                   service apache2 start

I have tried invoke simple command like:

   lifecycle:
     postStart:
       exec:
         command: ['/bin/sh', '-c', 'printenv']
       

Unfortunately I got same error.

If I will delete this Lifecycle everything works fine thru Helm. But I need invoke this commands, I can't omit this steps. Also I checked helm template thru lint, looks good:

enter image description here

Original deployment.yaml before move to Helm:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apidoc
  namespace: apidoc
  labels:
    app: apidoc
    stage: dev
    version: v-1
spec:
  selector:
    matchLabels:
      app: apidoc
      stage: dev
  replicas: 1
  template:
    metadata:
      labels:
        app: apidoc
        stage: dev
        version: v-1
    spec:
      initContainers:
        - name: git-clone
          image: '123123123123.dkr.ecr.us-east-1.amazonaws.com/helper:latest'
          volumeMounts:
            - name: repos
              mountPath: /var/repos
          workingDir: /var/repos
          command:
            - sh
            - '-c'
            - >-
              git clone --single-branch --branch k8s
              git@github.com:examplerepo/apidoc.git -qv
        - name: copy-data
          image: '123123123123.dkr.ecr.us-east-1.amazonaws.com/helper:latest'
          volumeMounts:
            - name: web-data
              mountPath: /var/www/app
            - name: repos
              mountPath: /var/repos
          workingDir: /var/repos
          command:
            - sh
            - '-c'
            - >-
              if cp -r apidoc/* /var/www/app/; then echo 'Success!!!' && exit 0;
              else echo 'Failed !!!' && exit 1;fi;
      containers:
        - name: apache2
          image: '123123123123.dkr.ecr.us-east-1.amazonaws.com/apache2:2.2'
          tty: true
          volumeMounts:
            - name: web-data
              mountPath: /var/www/app
            - name: configfiles
              mountPath: /etc/apache2/sites-available/000-default.conf
              subPath: 000-default.conf
          ports:
            - name: http
              protocol: TCP
              containerPort: 80
          lifecycle:
            postStart:
              exec:
                command:
                  - /bin/sh
                  - '-c'
                  - |
                    echo 'ServerName 127.0.0.1' >> /etc/apache2/apache2.conf
                    a2enmod rewrite
                    a2enmod headers
                    a2enmod ssl
                    a2dissite default
                    a2ensite 000-default
                    a2enmod rewrite
                    service apache2 start
      volumes:
        - name: web-data
          emptyDir: {}
        - name: repos
          emptyDir: {}
        - name: configfiles
          configMap:
            name: apidoc-config
0 Answers
Related