devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。
在之前的文章中我们介绍过一些关于Docker环境下部署Jenkins并运行流水线的方式。但是作为容器化的方案毕竟有一定的局限性。需要我们去维护容器的运行停止,如果业务量大的话我们还需要手动的扩缩容。
kubernetes作为容器云平台的事实标准,并且不只是作为流水线运行之后的应用部署环境,也可以考虑all in kubernetes,即所有的流水线相关的组件都跑在kubernetes平台之上。
本文主要介绍如何使用helm的方式在kubernetes平台之上安装jenkins
在安装Jenkins之前想必你已经准备了以下内容:
因为是kubernetes平台,所以我们可以使用自己写资源文件的方式,创建相应的k8s资源。 但是官方已经为我们准备好了helm包用于在kuberentes平台上去安装Jenkins。
helm是kuberents的应用包管理工具。我在之前的文章中讲过helm v3的教程。这里我们使用helm v3版本去进行资源的部署。如果是helm v2版本则需要去安装tiller等组件到kuberentes之上,helm v3已经不依赖于helm tiller操作了。所以只需要下载器helm 的客户端即可使用helm的功能。 详细请看历史文章:
https://blog.csdn.net/weixin_36938307/article/details/105226395
https://blog.csdn.net/weixin_36938307/article/details/105245770
进入正题,我们看一下Jenkins官方的helm chart。
常用的chart我们可以在helm的官方仓库(https://hub.helm.sh/)上去搜索。在主页我们直接搜索“Jenkins”
或者我们去helm的github下面的chart项目(https://github.com/helm/charts),比较稳定的版本都在stable的目录下。我们需要的Jenkins在github上的地址:https://github.com/helm/charts/tree/master/stable/jenkins
以上的页面上都会详细告诉你helm安装Jenkins时可以配置的参数。我们需要根据我们自己的需求去组件自己的配置参数,可以采用编写value.yaml的方式,也可以使用–set进行参数的传递。
如果已经安装好了helm v3,我们将使用helm命令行去安装jenkins。 首先helm v3并没有配置相应的官方chart库(stable),我们需要手动添加官方库
# helm repo add stable https://kubernetes-charts.storage.googleapis.com/
# helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com/
# helm search repo jenkins
NAME CHART VERSION APP VERSION DESCRIPTION
stable/jenkins 1.17.1 lts Open source continuous integration server. It s...
我们可以看到官方的仓库下能够搜到Jenkins的chart, 版本时1.17.1(chart版本,非jenkins版本)。
我们准备好相应的镜像文件,我们需要准备jenkins 和jnlp-slave的镜像文件。
请从dockerhub上选择合适的Jenkins master/slave版本。如果你kubernets只能连接本地的镜像仓库,请将相应的Jenkins镜像存储到你的本地镜像仓库中。
docker pull jenkins/jenkins:latest
docker pull jenkins/jnlp-slave:latest
正式开始安装!
之前我们能从github的chart说明中看到相应的配置说明,这里我们需要根据自己的需求,去配置相应的value,然后编写一个配置的values.yaml文件,在运行helm命令的时候使用。
我根据我的需求编写了一个样例:
$ cat values.yaml
master:
adminUser: "admin"
adminPassword: "admin_passw0rd"
image: "jenkins/jenkins"
tag: "latest"
jenkinsAdminEmail: "[email protected]"
jenkinsUriPrefix: "/jenkins"
installPlugins: []
serviceType: "NodePort"
namespaceOverride: "default"
agent:
image: "jenkins/jnlp-slave"
tag: "latest"
persistence:
storageClass: "nfs-client"
简单说明:
我们指定了相应的镜像地址和标签,同时指定了jenkins初始的用户名和密码。
另外配置中我们没有使用ingress,儿是采用了service nodeport的方式,便于我们测试。如果需要ingress,请参考配置的字段,修改values.yaml文件。
此外installPlugins: []
默认配置是安装相应的kubernets插件,我们可以清空,减少安装时间,之后可以手动安装。
部署:
# helm install jenkins stable/jenkins -f values.yaml
NAME: jenkins
LAST DEPLOYED: Fri Apr 24 15:16:31 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get your 'admin' user password by running:
printf $(kubectl get secret --namespace default jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
2. Get the Jenkins URL to visit by running these commands in the same shell:
export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services jenkins)
export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT/logins
3. Login with the password from step 1 and the username: admin
For more information on running Jenkins on Kubernetes, visit:
https://cloud.google.com/solutions/jenkins-on-container-engine
部署成功后我们查看是否部署成功
# 查看helm release是否成功安装
# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
jenkins default 1 2020-04-24 15:16:31.540977336 +0800 CST deployed jenkins-1.17.1 lts
# 查看pod是否Running
# kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
jenkins-64696b74d6-rbq7b 1/1 Running 0 2m11s
# 查看pod的输出日志,Jenkins已经成功运行了
# kubectl logs jenkins-64696b74d6-rbq7b
...
2020-04-24 07:16:42.111+0000 [id=25] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization
2020-04-24 07:16:42.223+0000 [id=19] INFO hudson.WebAppMain$3#run: Jenkins is fully up and running
# 查看jenkins相关的资源,我们可以看到jenkins的service资源指向nodeport 31482
# kubectl get pods,service,pv,cm -n default | grep jenkins
pod/jenkins-64696b74d6-rbq7b 1/1 Running 0 4m31s
service/jenkins-agent ClusterIP 10.43.172.197 50000/TCP 4m31s
service/jenkins NodePort 10.43.230.151 8080:31482/TCP 4m31s
persistentvolume/pvc-c0bce30c-b7d2-4dcc-8b80-3ba4a8ab45e1 8Gi RWO Retain Released default/jenkins nfs-client 5m49s
configmap/jenkins-tests 1 4m31s
configmap/jenkins 5 4m31s
我们使用http:// N O D E I P : NODE_IP: NODEIP:NODE_PORT/jenkins来访问我们的Jenkins
以上是使用helm的方式在kubernetes平台上安装jenkins的介绍。之后我会介绍如何使用kubernetes插件在kuberents平台之上实现流水线操作。
devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。