乐趣区

关于云计算:Helm部署和体验jenkins

如何疾速且简略的部署

通过 helm 能够疾速且简略的部署多种利用,对于 helm 的装置和应用请参考

环境信息

本次实战的环境信息如下:

  1. kubernetes 集群:三台 CentOS7.7 服务器
  2. kubernetes 版本:1.15.3
  3. helm 版本:2.16.1
  4. jenkins 版本:

筹备工作

除了提前准备好 kubernetes 环境,还须要做好以下筹备工作:

  • 筹备好 helm,您能够参考《》
  • 筹备好 NFS 服务,这样就算 jenkins 的 pod 被销毁重建,也不会失落数据,NFS 服务的搭建,您能够参考《》

筹备实现后能够开始实战了

本次实战的 namespace

本次实战应用名为 helm-jenkins 的 namespace,执行以下命令创立:

kubectl create namespace helm-jenkins

创立 PV

为了前面的 jenkins 服务顺利启动,须要事后部署好 pv:

  • 新建名为 pv-helm-jenkins.yaml 的文件,内容如下:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: helm-jenkins
  namespace: helm-jenkins
spec:
  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 是否曾经就绪:
[root@node1 helm-jenkins]# kubectl get pv
NAME           CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM        STORAGECLASS   REASON   AGE
helm-jenkins   10Gi       RWO            Recycle          Available                                        5s
                         14h

helm 装置 jenkins

  • 确保 helm2.16.1 版本装置结束,并且能够失常工作:
[root@node1 helm-jenkins]# helm version
Client: &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 增加):
[root@node1 helm-jenkins]# helm repo list
NAME       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);echo
2. 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/login

3. 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 实例的注册:
[root@node1 helm-jenkins]# kubectl get svc -n helm-jenkins
NAME               TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
my-jenkins         LoadBalancer   10.233.10.35   <pending>     8080:31763/TCP   31m
my-jenkins-agent   ClusterIP      10.233.35.20   <none>        50000/TCP        31m
  • my-jenkins 这个服务的类型是 LoadBalancer,8080 端口被映射到宿主机的 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:
[root@node1 helm-jenkins]# kubectl get serviceaccount -n helm-jenkins
NAME      SECRETS   AGE
default   1         3h55m

可见 jenkins 容器的 serviceaccount 是 default

  • 晓得了容器的 serviceaccount,上述问题就好解决了,咱们用 RBAC 将拜访 api server 所需权限绑定给 default 即可,这里为了省事儿就不将权限一一列出了,接下来间接给 default 最高权限 (生产环境千万别这么做,必须按需分配);
  • 新建名为 rbac-helm-jenkins-default.yaml 的文件,内容如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: rbac-helm-jenkins-default
  namespace: helm-jenkins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- 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”,即可开始构建
  • 此时去控制台执行命令 kubectl get pods -n helm-jenkins 查看 pod,会发现有新的 pod 呈现,如下所示,这是执行 jenkins 工作的 pod:
[root@node1 helm-jenkins]# kubectl get pods -n helm-jenkins
NAME                          READY   STATUS              RESTARTS   AGE
default-66vcq                 0/1     ContainerCreating   0          1s
my-jenkins-74bcdfc566-jbw28   1/1     Running             0          5h5m
  • 返回 jenkins 页面,可见工作曾经执行结束:

https://github.com/zq2599/blog_demos

退出移动版