Кубернетс Хелм под перезагрузкой - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь развернуть Spinnaker в кластере Kubernetes.Чтобы сделать трюк, я использую Halyard, который использует Helm.Пока я пытаюсь запустить свой модуль Helm, у меня выдается следующий вывод:

Cluster "default" set.
Context "default" created.
User "user" set.
Context "default" modified.
Switched to context "default".
Creating /home/spinnaker/.helm 
Creating /home/spinnaker/.helm/repository 
Creating /home/spinnaker/.helm/repository/cache 
Creating /home/spinnaker/.helm/repository/local 
Creating /home/spinnaker/.helm/plugins 
Creating /home/spinnaker/.helm/starters 
Creating /home/spinnaker/.helm/cache/archive 
Creating /home/spinnaker/.helm/repository/repositories.yaml 
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com 
Adding local repo with URL: http://127.0.0.1:8879/charts 
$HELM_HOME has been configured at /home/spinnaker/.helm.
Tiller (the Helm server-side component) has been upgraded to the current version.
Happy Helming!

Все кажется правильным.Но мой модуль вызывает событие CrashLoopBackOff без какой-либо другой ошибки, и мой модуль перезапускается снова без видимой причины.

Файл docker, который я использую для создания образа док-станции helm, выглядит следующим образом:

FROM gcr.io/spinnaker-marketplace/halyard:stable

ARG GCP_SPINNAKER_GCR_KEY

# install helm
WORKDIR /home/spinnaker

# get helm
RUN curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
RUN sed -i 's/\/usr\/local\/bin/\/home\/spinnaker/g' get_helm.sh

# sudo user workaround
RUN sed -i 's/sudo //g' get_helm.sh
RUN chmod u+x get_helm.sh

# add the current folder to the path 
ENV PATH="/home/spinnaker:${PATH}"

# install helm
RUN ./get_helm.sh

# importing the configuration script
ADD shell/halyard-configure.sh .

# auhtorize the spinnaker user to execute the configuration script
USER root
RUN chown -R spinnaker halyard-configure.sh
USER spinnaker

# create the gcp key directory for docker registry
RUN mkdir -p ~/.gcp
RUN echo $GCP_SPINNAKER_GCR_KEY | base64 -d > ~/.gcp/gcr-account.json

ENTRYPOINT [ "./halyard-configure.sh" ] 

CMD "/opt/halyard/bin/halyard"

А вот содержимое сценария оболочки halyard-configure.sh :

#!/usr/bin/env bash
set -e

# configure kubectl
kubectl config set-cluster default --server=https://kubernetes.default --certificate-authority=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
kubectl config set-context default --cluster=default
token=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
kubectl config set-credentials user --token=$token
kubectl config set-context default --user=user
kubectl config use-context default

# configure helm
helm init --service-account tiller --upgrade

1 Ответ

0 голосов
/ 20 декабря 2018

Ваш сценарий точки входа должен заканчиваться волшебной строкой exec "$@".

В общем случае в Docker при запуске контейнера точка входа в контейнер запускается, передавая ей команду в качестве параметров.(Спецификация модуля Kubernetes именует эти части как «команда» и «аргументы».) Как только точка входа завершается, контейнер завершается.Так как ваш скрипт точки входа просто запускает команды kubectl config и helm init, которые все выполняются быстро, контейнер завершается почти сразу;когда это происходит, Kubernetes перезапускает его;и когда он должен перезапустить его более двух или трех раз, он переходит в состояние CrashLoopBackOff.

Обычный способ обойти это - настроить скрипт точки входа для выполнения любых необходимых первоначальных настроекзатем exec команда, которая была передана ему в качестве параметров.Затем команда (в вашем случае /opt/halyard/bin/halyard) оказывается «основным процессом контейнера», имеет магический идентификатор процесса 1 и будет получать сигналы во время завершения контейнера.

Также обратите внимание, что существуетразумно стандартный шаблон для доступа к API Kubernetes из модуля , который включает в себя настройку служебной учетной записи для модуля и использование официального API, или же запуск сторонней машины kubectl proxy.Вы могли бы использовать это вместо шагов ручной настройки, которые у вас есть здесь.(Хотя я никогда не пытался запустить Хелма из капсулы Кубернетеса.)

...