当前位置:   article > 正文

K8S实战-交付dubbo服务到k8s集群(二)交付jenkins到k8s集群

交付dubbo服务到k8s集群

首先下载jenkins镜像并上传到我们自己的私有仓库:7-200

# docker pull jenkins/jenkins:2.190.3
# docker tag 22b8b9a84dbe harbor.od.com/public/jenkins:v2.190.3
# docker push harbor.od.com/public/jenkins:v2.190.3

为了适应我们的环境,我们的jenkins不能直接使用,需要进行配置:

  1. # mkdir -p /data/dockerfile/jenkins/
  2. # cd /data/dockerfile/jenkins
# vi Dockerfile

复制代码

  1. FROM harbor.od.com/public/jenkins:v2.190.3
  2. #定义启动jenkins的用户
  3. USER root
  4. #修改时区 改成东八区
  5. RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
  6. echo 'Asia/Shanghai' >/etc/timezone
  7. #加载用户密钥,dubbo服务拉取代码使用的ssh
  8. ADD id_rsa /root/.ssh/id_rsa
  9. #加载宿主机的docker配置文件,登录远程仓库的认证信息加载到容器里面。
  10. ADD config.json /root/.docker/config.json
  11. #在jenkins容器内安装docker 客户端,jenkins要执行docker build,docker引擎用的是宿主机的docker引擎
  12. ADD get-docker.sh /get-docker.sh
  13. #跳过 ssh时候输入 yes 步骤,并执行安装docker
  14. RUN echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config &&\
  15. /get-docker.sh

复制代码

首先创建密钥:邮箱请根据自己的邮箱自行修改

 # ssh-keygen -t rsa -b 2048 -C "xxx@xx.xxx" -N "" -f /root/.ssh/id_rsa

将私钥加载到jenkins,将公钥配置到git仓库中,否则不能拉取代码:

 

 接下来创建Dockerfile中需要的文件:

# curl -fsSL get.docker.com -o get-docker.sh

添加执行权限:

# chmod u+x get-docker.sh
  1. # cp /root/.ssh/id_rsa ./
  2. # cp /root/.docker/config.json ./

创建运维私有仓库,打开我们的harbor.od.com创建一个infra的私有仓库:

 

 然后build镜像:过程漫长,可以抽根烟,喝杯茶了

# docker build . -t harbor.od.com/infra/jenkins:v2.190.3

build完以后将镜像上传到我们的私有仓库:

# docker push harbor.od.com/infra/jenkins:v2.190.3

为jenkins创建名称空间:

# kubectl create ns infra

 

创建一条secret,用于访问我们的私有仓库infra:

# kubectl create secret docker-registry harbor --docker-server=harbor.od.com --docker-username=admin --docker-password=Harbor12345 -n infra

解释一下上面的命令:创建一条secret,资源类型是docker-registry,名字是 harbor,docker-server=harbor.od.com ,docker-username=admin ,docker-password=Harbor12345 -n 指定私有仓库名称infra

 为了让jenkins中一些需要持久化的数据,能够存储,我们需要使用共享存储,然后进行挂载:这里使用最简单的NFS共享存储,因为k8s默认支持nfs模块

在运维主机和所有的node节点安装:

# yum install nfs-utils -y

使用7-200作为服务端:

# vi /etc/exports
/data/nfs-volume 10.4.7.0/24(rw,no_root_squash)
# mkdir -p mkdir /data/nfs-volume/jenkins_home
  1. # systemctl start nfs
  2. # systemctl enable nfs

准备jenkins资源配置清单:

  1. # cd /data/k8s-yaml/
  2. # mkdir jenkins
  3. # cd jenkins

1、dp.yaml

这里挂载了宿主机的docker.sock,使容器内的docker客户端可以直接与宿主机的docker引擎进行通信

在使用私有仓库的时候,资源清单中,一定要声明:

  1. imagePullSecrets:
  2. - name: harbor
# vi dp.yaml

复制代码

  1. kind: Deployment
  2. apiVersion: extensions/v1beta1
  3. metadata:
  4. name: jenkins
  5. namespace: infra
  6. labels:
  7. name: jenkins
  8. spec:
  9. replicas: 1
  10. selector:
  11. matchLabels:
  12. name: jenkins
  13. template:
  14. metadata:
  15. labels:
  16. app: jenkins
  17. name: jenkins
  18. spec:
  19. volumes:
  20. - name: data
  21. nfs:
  22. server: hdss7-200
  23. path: /data/nfs-volume/jenkins_home
  24. - name: docker
  25. hostPath:
  26. path: /run/docker.sock
  27. type: ''
  28. containers:
  29. - name: jenkins
  30. image: harbor.od.com/infra/jenkins:v2.190.3
  31. imagePullPolicy: IfNotPresent
  32. ports:
  33. - containerPort: 8080
  34. protocol: TCP
  35. env:
  36. - name: JAVA_OPTS
  37. value: -Xmx512m -Xms512m
  38. volumeMounts:
  39. - name: data
  40. mountPath: /var/jenkins_home
  41. - name: docker
  42. mountPath: /run/docker.sock
  43. imagePullSecrets:
  44. - name: harbor
  45. securityContext:
  46. runAsUser: 0
  47. strategy:
  48. type: RollingUpdate
  49. rollingUpdate:
  50. maxUnavailable: 1
  51. maxSurge: 1
  52. revisionHistoryLimit: 7
  53. progressDeadlineSeconds: 600

复制代码

2、svc.yaml

复制代码

  1. kind: Service
  2. apiVersion: v1
  3. metadata:
  4. name: jenkins
  5. namespace: infra
  6. spec:
  7. ports:
  8. - protocol: TCP
  9. port: 80
  10. targetPort: 8080
  11. selector:
  12. app: jenkins

复制代码

3、ingress.yaml

复制代码

  1. kind: Ingress
  2. apiVersion: extensions/v1beta1
  3. metadata:
  4. name: jenkins
  5. namespace: infra
  6. spec:
  7. rules:
  8. - host: jenkins.od.com
  9. http:
  10. paths:
  11. - path: /
  12. backend:
  13. serviceName: jenkins
  14. servicePort: 80

复制代码

应用资源配置清单:node节点

  1. # kubectl create -f http://k8s-yaml.od.com/jenkins/dp.yaml
  2. # kubectl create -f http://k8s-yaml.od.com/jenkins/svc.yaml
  3. # kubectl create -f http://k8s-yaml.od.com/jenkins/ingress.yaml

查看我们创建的pod:这个启动时间还是挺长的,大概要几分钟时间

# kubectl get pod -n infra

 

 检查jenkins需要持久化的数据是否保存下来了:7-200

 

 已经起来了:

 

 添加解析:7-11

  1. # vi /var/named/od.com.zone
  2. # systemctl restart named

浏览器访问:

http://jenkins.od.com

经过配置我们已经部署好了jenkins:

 

安全配置:

 

 允许跨域:

 安装插件:

替换jenkins更新源

复制代码

  1. ###hdss7-200
  2. # cd /data/nfs-volume/jenkins_home/updates
  3. # sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

复制代码

搜索蓝海插件并安装:blue ocean

验证jenkins容器状态:

1、是否是root用户

# docker ps -a | grep jenkins
# docker exec -it 8ff92f08e3aa /bin/bash
# whoami

2、时区是否是东八区

# date

3、是否使用宿主机docker引擎,在容器内查看宿主机上的docker资源情况

# docker ps 

4、是否能免密访问gitee

# ssh -i /root/.ssh/id_rsa -T git@gitee.com

5、是否能访问harbor私有仓库 :原因是我们挂载了宿主机的docker config.json

 

完成验证以上内容后,证明我们基于本次实验环境的jenkins容器已经安装配置完成了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/169558
推荐阅读
相关标签
  

闽ICP备14008679号