使用helm在kubernetes环境中安装Jenkins

devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。
在这里插入图片描述

0. 前言

在之前的文章中我们介绍过一些关于Docker环境下部署Jenkins并运行流水线的方式。但是作为容器化的方案毕竟有一定的局限性。需要我们去维护容器的运行停止,如果业务量大的话我们还需要手动的扩缩容。

kubernetes作为容器云平台的事实标准,并且不只是作为流水线运行之后的应用部署环境,也可以考虑all in kubernetes,即所有的流水线相关的组件都跑在kubernetes平台之上。

本文主要介绍如何使用helm的方式在kubernetes平台之上安装jenkins

1. 准备

在安装Jenkins之前想必你已经准备了以下内容:

  • 一个kubernetes的运行环境
  • Jenkins的官方Docker镜像
  • Jenkins的官方helm chart
  • 一个配置好的kubectl,helm的环境,可以访问到运行的k8s

2. 安装

因为是kubernetes平台,所以我们可以使用自己写资源文件的方式,创建相应的k8s资源。 但是官方已经为我们准备好了helm包用于在kuberentes平台上去安装Jenkins。

helm是kuberents的应用包管理工具。我在之前的文章中讲过helm v3的教程。这里我们使用helm v3版本去进行资源的部署。如果是helm v2版本则需要去安装tiller等组件到kuberentes之上,helm v3已经不依赖于helm tiller操作了。所以只需要下载器helm 的客户端即可使用helm的功能。 详细请看历史文章:

  • kubernetes包管理工具 - Helm 3入门到实战(一)

https://blog.csdn.net/weixin_36938307/article/details/105226395

  • kubernetes包管理工具 - Helm 3入门到实战(二)

https://blog.csdn.net/weixin_36938307/article/details/105245770

进入正题,我们看一下Jenkins官方的helm chart。

常用的chart我们可以在helm的官方仓库(https://hub.helm.sh/)上去搜索。在主页我们直接搜索“Jenkins”

使用helm在kubernetes环境中安装Jenkins_第1张图片

或者我们去helm的github下面的chart项目(https://github.com/helm/charts),比较稳定的版本都在stable的目录下。我们需要的Jenkins在github上的地址:https://github.com/helm/charts/tree/master/stable/jenkins

使用helm在kubernetes环境中安装Jenkins_第2张图片

以上的页面上都会详细告诉你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命令的时候使用。

使用helm在kubernetes环境中安装Jenkins_第3张图片

我根据我的需求编写了一个样例:

$ 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_第4张图片

3. 总结

以上是使用helm的方式在kubernetes平台上安装jenkins的介绍。之后我会介绍如何使用kubernetes插件在kuberents平台之上实现流水线操作。

devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。
在这里插入图片描述

你可能感兴趣的:(Devops,kubernetes)