这个问题与my previous questions中的一个问题有些相关,因为它对我要实现的目标给出了更清晰的想法。这个问题与我在尝试完成前一个任务时遇到的问题有关问题...
我正在尝试测试我的kubectl
是否在Jenkins容器中工作。当我启动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"
谢谢!
答案 0 :(得分:2)
我不明白为什么会这样:
-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
二进制文件可以访问。在适当的卷装入之后,您可以通过使用docker container exec -it jenkins /bin/bash
在jenkins容器中创建一个会话来进行验证,并使用kubectl get svc
进行测试。确保您在会话中设置了KUBECONFIG
环境变量,
export KUBECONFIG=/home/jenkins/.kube/kubeconfig
在运行验证测试之前,
withEnv(["KUBECONFIG=$HOME/.kube/kubeconfig"]) {
// Your stuff here
}
在您的管道代码中。如果可以与会话配合使用,那么它也应该可以在管道中使用。
我个人建议为Jenkins创建一个自定义Docker映像,其中包含kubectl
二进制文件和其他与Kubernetes集群一起使用所必需的实用程序(例如,基于AWS EKS IAM身份验证的aws-iam-authenticator
)。这将在主机系统二进制文件和Jenkins二进制文件之间创建隔离。
下面是我正在使用的Dockerfile
,其中包含helm
,kubectl
和aws-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
答案 1 :(得分:0)
Kubernetes fails inside jenkins pipeline 这是我在 Windows 机器上本地安装的 jenkins 的解决方案。