怎么做网站做站点,河北加工活外发加工网,哈尔滨网络推广,wordpress文章喜欢运行在Kubernetes上的Jenkins下图来自rancher官方博客#xff0c;在kubernetes环境下#xff0c;jenkins任务被交给各个pod执行#xff0c;这些pod在需要时被创建#xff0c;任务结束后被销毁#xff0c;这样既能合理利用资源#xff0c;又能给每个任务提供一致的干净的初…运行在Kubernetes上的Jenkins下图来自rancher官方博客在kubernetes环境下jenkins任务被交给各个pod执行这些pod在需要时被创建任务结束后被销毁这样既能合理利用资源又能给每个任务提供一致的干净的初始化环境(也可以保留pod如查问题的时候)如何在kubernetes快速部署jenkins通过Helm可以快速且简单的部署多种应用关于helm的安装和使用请参考《部署和体验Helm(2.16.1版本)》环境信息本次实战的环境信息如下kubernetes集群三台CentOS7.7服务器kubernetes版本1.15.3helm版本2.16.1jenkins版本2.190.3准备工作除了提前准备好kubernetes环境还需要做好以下准备工作准备好helm您可以参考《部署和体验Helm(2.16.1版本)》准备好NFS服务这样就算jenkins的pod被销毁重建也不会丢失数据NFS服务的搭建您可以参考《Ubuntu16环境安装和使用NFS》准备完成后可以开始实战了本次实战的namespace本次实战使用名为helm-jenkins的namespace执行以下命令创建kubectl create namespace helm-jenkins创建PV为了后面的jenkins服务顺利启动需要预先部署好pv新建名为pv-helm-jenkins.yaml的文件内容如下其中192.168.133.142是NFS服务器地址/usr/local/work/test/002是分配给本次实战使用的NFS文件夹apiVersion: v1kind: PersistentVolumemetadata: name: helm-jenkins namespace: helm-jenkinsspec: capacity: storage: 10Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle nfs: path: /usr/local/work/test/002 server: 192.168.133.142执行命令kubectl create -f pv-helm-jenkins.yaml创建pv查看pv是否已经就绪[rootnode1 helm-jenkins]# kubectl get pvNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEhelm-jenkins 10Gi RWO Recycle Available 5s 14hhelm安装jenkins确保helm2.16.1版本安装完毕并且可以正常工作[rootnode1 helm-jenkins]# helm versionClient: version.Version{SemVer:v2.16.1, GitCommit:bbdfe5e7803a12bbdf97e94cd847859890cf4050, GitTreeState:clean}Server: version.Version{SemVer:v2.16.1, GitCommit:bbdfe5e7803a12bbdf97e94cd847859890cf4050, GitTreeState:clean}确保以下helm repo准备好(如果没有可以通过helm repo add添加)[rootnode1 helm-jenkins]# helm repo listNAME URL stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts执行以下命令即可创建jenkins的deployment、service等资源helm install --namespace helm-jenkins --name my-jenkins stable/jenkins执行完毕后控制台输出以下内容NOTES:1. Get your admin user password by running: printf $(kubectl get secret --namespace helm-jenkins my-jenkins -o jsonpath{.data.jenkins-admin-password} | base64 --decode);echo2. Get the Jenkins URL to visit by running these commands in the same shell: NOTE: It may take a few minutes for the LoadBalancer IP to be available. You can watch the status of by running kubectl get svc --namespace helm-jenkins -w my-jenkins export SERVICE_IP$(kubectl get svc --namespace helm-jenkins my-jenkins --template {{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}) echo http://$SERVICE_IP:8080/login3. Login with the password from step 1 and the username: admin上述内容的第一条给出重要提示获取admin账号密码的方法执行以下命令即可printf $(kubectl get secret --namespace helm-jenkins my-jenkins -o jsonpath{.data.jenkins-admin-password} | base64 --decode);echo如下图红框所示我这里得到了admin密码为Eq6WxHvJ2V:检查服务发现helm-jenkins这个namespace下有两个服务my-jenkins和my-jenkins-agent前者就是jenkins网站后者用来接收执行任务的jenkins实例的注册[rootnode1 helm-jenkins]# kubectl get svc -n helm-jenkinsNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEmy-jenkins LoadBalancer 10.233.10.35 8080:31763/TCP 31mmy-jenkins-agent ClusterIP 10.233.35.20 50000/TCP 31mmy-jenkins这个服务的类型是LoadBalancer8080端口被映射到宿主机的31763端口因此使用kubernetes集群中一台宿主机的IP再加上31763端口即可通过浏览器访问如下图至此jenkins安装已完成接下来要做必要的设置设置kubernetes插件为了让jenkins在以下模式工作还需要设置kubernetes插件点击下图红框中的Manage Jenkins,进入设置页面由于很多插件版本较旧页面上会有升级提示这里暂时用不到因此直接点击下图红框中的Configure System点击下图红框1中的Test Connection”按钮您会见到红框2中的错误信息产生上述错误的原因是由于jenkins容器没有权限访问kubernetes的api server为了解决此问题要先搞清楚容器的身份我们知道容器在kubernetes环境中都有自己的serviceaccount执行命令kubectl get serviceaccount -n helm-jenkins查看当前namespace下的serviceaccount[rootnode1 helm-jenkins]# kubectl get serviceaccount -n helm-jenkinsNAME SECRETS AGEdefault 1 3h55m可见jenkins容器的serviceaccount是default知道了容器的serviceaccount上述问题就好解决了我们用RBAC将访问api server所需权限绑定给default即可这里为了省事儿就不将权限一一列出了接下来直接给default最高权限(生产环境千万别这么做必须按需分配)新建名为rbac-helm-jenkins-default.yaml的文件内容如下apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: rbac-helm-jenkins-default namespace: helm-jenkinsroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-adminsubjects:- kind: ServiceAccount name: default namespace: helm-jenkins执行命令kubectl create -f rbac-helm-jenkins-default.yaml使得RBAC生效再次回到之前的页面点击Test Connection按钮如下图提示Connection successful:接下来设置Pod模板参数如下图namepsace要设置为helm-jenkins另外要记下来Labels的值my-jenkins-jenkins-slave后面会用到点击底部的Save按钮使设置生效设置完毕接下来创建任务体验一下kubernetes上的jenkins功能体验Freestyle project创建一个Freestyle project如下图如下图红框表单中Label Expression的值是前面记下来的my-jenkins-jenkins-slave本次任务的具体内容很简单执行一段shell输出Hello World!如下图所示点击底部的Save按钮保存点击下图红框中的Build Now即可开始构建如果是第一次执行会触发jenkins任务pod的docker镜像的下载您需要耐心等候一会儿此时去控制台执行命令kubectl get pods -n helm-jenkins查看pod会发现有新的pod出现如下所示这是执行jenkins任务的pod[rootnode1 helm-jenkins]# kubectl get pods -n helm-jenkinsNAME READY STATUS RESTARTS AGEdefault-66vcq 0/1 ContainerCreating 0 1smy-jenkins-74bcdfc566-jbw28 1/1 Running 0 5h5m返回jenkins页面可见任务已经执行完毕再去控制台查看pod发现刚刚创建的pod已经消失了至此kubernetes环境部署和体验jenkins的实战就完成了希望本文带给您一些参考信息。欢迎关注公众号程序员欣宸