繁体   English   中英

Kubernetes Helm Pod无限重启

[英]Kubernetes Helm pod restart infinitly

我正在尝试将Spinnaker部署到Kubernetes集群中。 为此,我使用使用Helm的Halyard。 在尝试运行Helm Pod时,我有以下输出:

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!

一切似乎都是正确的。 但是我的pod引发了一个CrashLoopBackOff事件,没有任何其他错误,并且我的pod没有明显的原因再次重新启动。

我用来构建掌舵docker映像的dockerfile如下:

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 Shell脚本的内容:

#!/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

您的入口点脚本需要以魔术行exec "$@"结尾。

通常,在Docker中,容器启动会启动容器入口点,并将命令作为参数传递给它。 (Kubernetes pod规范将这些部分称为“命令”和“参数”。)入口点完成后,容器退出。 由于您的入口点脚本仅运行kubectl confighelm init命令,这些命令都会迅速完成,因此容器几乎立即退出; 当它这样做时,Kubernetes重新启动它; 并且必须重新启动两次或三遍以上时,它将进入CrashLoopBackOff状态。

解决此问题的通常方法是设置入口点脚本以进行任何必需的首次设置,然后exec作为参数传递给它的命令。 然后,该命令(在您的情况下为/opt/halyard/bin/halyard )最终成为“主容器进程”,并且具有魔术进程ID 1,并且将在容器终止时接收信号。

还请注意,存在一种用于从Pod访问Kubernetes API的合理标准模式,该模式涉及为Pod配置服务帐户并使用官方API,或者启动kubectl proxy 您可能可以使用它来代替此处的手动设置步骤。 (不过,我从未尝试从Kubernetes容器内部启动Helm。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM