gpt4 book ai didi

jenkins - 如何使用Jenkins部署到(本地)Kubernetes集群

转载 作者:行者123 更新时间:2023-12-02 11:56:54 31 4
gpt4 key购买 nike

这个问题与my previous questions中的一个问题有些相关,因为它为我要实现的目标提供了更清晰的思路。这个问题与我尝试实现上一个问题中的任务时遇到的一个问题...

我正在尝试从Jenkins容器中测试我的kubectl是否工作。当启动我的Jenkins容器时,我使用以下命令:

docker run \ 
-v /home/student/Desktop/jenkins_home:/var/jenkins_home \
-v $(which kubectl):/usr/local/bin/kubectl \ #bind docker host binary to docker container binary
-v ~/.kube:/home/jenkins/.kube \ #docker host kube config file stored in /.kube directory. Binding this to $HOME/.kube in the docker container
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker -v ~/.kube:/home/root/.kube \
--group-add 998
-p 8080:8080 -p 50000:50000
-d --name jenkins jenkins/jenkins:lts

容器启动,我可以登录/创建作业/运行管道脚本了,没有问题。

我创建了一个管道脚本,只是为了检查是否可以像这样访问集群:
pipeline {
agent any
stages {
stage('Kubernetes test') {
steps {
sh "kubectl cluster-info"
}
}
}
}

运行此作业时,它将失败,并显示以下错误:
+ kubectl cluster-info // this is the step

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
error: the server doesn't have a resource type "services"

谢谢!

最佳答案

我不明白为什么会这样:
-v $(which kubectl):/usr/local/bin/kubectl -v ~/.kube:/home/jenkins/.kube/usr/local/bin/kubectl是kubectl二进制文件,~/.kube:/home/jenkins/.kube应该是kubectl二进制文件查找集群上下文文件的位置,即kubeconfig。首先,您应确保将kubeconfig安装在/home/jenkins/.kube处的容器上,并且kubectl二进制文件可访问该容器。在适当的卷装入之后,您可以通过在jenkins容器中使用docker container exec -it jenkins /bin/bash创建一个 session 进行验证,并使用kubectl get svc进行测试。确保在 session 中使用以下命令设置了KUBECONFIG env var:

export KUBECONFIG=/home/jenkins/.kube/kubeconfig

在运行验证测试之前,
withEnv(["KUBECONFIG=$HOME/.kube/kubeconfig"]) {
// Your stuff here
}

在您的管道代码中。如果它与 session 一起工作,则它也应在管道中工作。

我个人建议为Jenkins创建一个自定义Docker镜像,其中将包含 kubectl二进制文件和其他与Kubernetes集群一起使用所必需的实用程序(例如,基于AWS EKS IAM身份验证的 aws-iam-authenticator)。这将在主机系统二进制文件和Jenkins二进制文件之间创建隔离。

以下是我正在使用的 Dockerfile,其中包含 helmkubectlaws-iam-authenticator
# This Dockerfile contains Helm, Docker client-only, aws-iam-authenticator, kubectl with Jenkins LTS.

FROM jenkins/jenkins:lts
USER root

ENV VERSION v2.9.1
ENV FILENAME helm-${VERSION}-linux-amd64.tar.gz
ENV HELM_URL https://storage.googleapis.com/kubernetes-helm/${FILENAME}
ENV KUBE_LATEST_VERSION="v1.11.0"

# Install the latest Docker CE binaries
RUN apt-get update && \
apt-get -y install apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get -y install docker-ce \
&& curl -o /tmp/$FILENAME ${HELM_URL} \
&& tar -zxvf /tmp/${FILENAME} -C /tmp \
&& mv /tmp/linux-amd64/helm /bin/helm \
&& rm -rf /tmp/linux-amd64/helm \
&& curl -L https://storage.googleapis.com/kubernetes-release/release/${KUBE_LATEST_VERSION}/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl \
&& chmod +x /usr/local/bin/kubectl \
&& curl -L https://amazon-eks.s3-us-west-2.amazonaws.com/1.11.5/2018-12-06/bin/linux/amd64/aws-iam-authenticator -o /usr/local/bin/aws-iam-authenticator \
&& chmod +x /usr/local/bin/aws-iam-authenticator

关于jenkins - 如何使用Jenkins部署到(本地)Kubernetes集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57064783/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com