Команды жизненного цикла Helm в развертывании

#kubernetes #devops #kubernetes-helm

#kubernetes #devops #kubernetes-helm

Вопрос:

У меня есть развертывание.шаблон yaml.

У меня есть AWS EKS 1.8 и тот же kubectl.

Я использую Helm 3.3.4.

Когда я попытался развернуть тот же шаблон напрямую kubectl apply -f deployment.yaml , все ли хорошо, init контейнеры и основной контейнер в pod работают нормально. Но если я попытался запустить развертывание через Helm, я получил эту ошибку:

Сбой выполнения OCI exec: сбой exec: container_linux.go: 349: запуск процесса контейнера вызвал «process_linux.go: 101: выполнение процесса setns вызвало «статус выхода 1″»: неизвестно»

kubectl describe pods osad-apidoc-6b74c9bcf9-tjnrh

введите описание изображения здесь

Похоже, я что-то пропустил в аннотациях или использую неправильные синтаксисы в описании команды. В этом примере опущены некоторые не важные параметры:

 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
  

Я попытался вызвать простую команду, например:

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

К сожалению, я получил ту же ошибку.

Если я удалю это Lifecycle , все будет нормально работать через Helm. Но мне нужно вызвать эти команды, я не могу пропустить эти шаги. Также я проверил шаблон helm через lint, выглядит хорошо:

введите описание изображения здесь

Исходное развертывание.yaml перед переходом на 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!!!' amp;amp; exit 0;
              else echo 'Failed !!!' amp;amp; 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
  

Комментарии:

1. можете ли вы поделиться своим начальным deployment.yaml (перед переходом на helm)

2. Исходное развертывание. yaml является общим.

3. Привет, ты понял это? Я сталкиваюсь с точно такой же проблемой. Любые указания приветствуются. Спасибо.