#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. Привет, ты понял это? Я сталкиваюсь с точно такой же проблемой. Любые указания приветствуются. Спасибо.