说明: 总的目标是在k8s集群部署gitlab、jenkins,并且在本地提交代码到gitlab后jenkin流水线可以自动编译打包成为docker镜像然后部署到k8s中并实现客户端外部域名访问,在文档分为多个部分,其中涉及的技术有docker安装、k8s搭建、部署gitlab、部署jenkins、部署sonarqube、gitlab和jenkin联动、jenkins和sonarqube联动、pipline脚本编写、istio部署、istio服务网关等…

此文档接第九篇:搭建docker私有仓库

这篇文档讲解的是如何在jenkins如何配置k8s的节点, 配置完成后jenkins触发流程后k8s将创建一个容器来构建相应项目


文章目录

  • 1. jenkins安装Kubernetes插件
  • 2. jenkins配置k8s信息
  • 2.1 进入配置页面
  • 2.2 配置Kubernetes Cloud details
  • 2.2.1 Kubernetes 命名空间
  • 2.2.2 测试连接
  • 2.2.3 jenkins 地址和Jenkins 通道
  • 2.3 配置Pod Templates
  • 2.3.1 配置 Pod Templates名称
  • 2.3.2 配置Pod Template details
  • 2.3.2.1 配置命名空间和标签列表
  • 2.3.2.2 配置容器列表
  • 2.3.2.2.1 配置Container Template名称和镜像
  • 2.3.2.2.2 配置Container Template卷
  • 2.3.2.2 配置Service Account


1. jenkins安装Kubernetes插件

#点击“系统管理” -> “插件管理” -> “Available Plugins”
#在搜索框中输入Kubernetes搜索相应插件安装即可 (注意:安装完插件后需要重启jenkins才可生效)

2. jenkins配置k8s信息

2.1 进入配置页面

登录jenkins后点击“系统管理” -> “节点管理” ->“Configure Clouds” 进入配置集群页面 如下图:

k8s jenkins docker的关系 jenkins和k8s_jenkins

2.2 配置Kubernetes Cloud details

2.2.1 Kubernetes 命名空间

配置Kubernetes Cloud details -> Kubernetes 命名空间 如下图:

k8s jenkins docker的关系 jenkins和k8s_docker_02


注意: 这里配置的命名空间是jenkins部署在k8s中所属的命名空间

2.2.2 测试连接

测试连接k8s, 点击“连接测试” 如连接没有问题则如下图:

k8s jenkins docker的关系 jenkins和k8s_kubernetes_03

2.2.3 jenkins 地址和Jenkins 通道

配置Kubernetes Cloud details -> Jenkins 地址和Jenkins 通道 如下图:

k8s jenkins docker的关系 jenkins和k8s_docker_04

2.3 配置Pod Templates

2.3.1 配置 Pod Templates名称

配置Pod Templates -> Pod Templates -> 名称 如下图:

k8s jenkins docker的关系 jenkins和k8s_kubernetes_05


注意: 这里起的名称是“jnlp”

2.3.2 配置Pod Template details

2.3.2.1 配置命名空间和标签列表

配置Pod Templates -> Pod Templates -> Pod Template details -> 命名空间和标签列表 如下图:

k8s jenkins docker的关系 jenkins和k8s_docker_06


注意: 命令空间: 指jenkins启动容器所属的命名空间

标签列表: 指此pod模板的标签, 也就是在pipline中配置的agent

2.3.2.2 配置容器列表
2.3.2.2.1 配置Container Template名称和镜像

配置Pod Templates -> Pod Templates -> Pod Template details -> 容器列表 -> Container Template -> 名称和镜像 如下图:

k8s jenkins docker的关系 jenkins和k8s_ci_07


注意: 这里如果名称使用的不是jnlp,则拉取构建的基础镜像将是默认的,也就是说你下面配置的镜像是不生效的, 如果你想使用自己自定义的镜像, 那么名称必须填写为jnlp

2.3.2.2.2 配置Container Template卷

配置Pod Templates -> Pod Templates -> Pod Template details -> 容器列表 -> Container Template -> 卷 如下图:

k8s jenkins docker的关系 jenkins和k8s_docker_08


k8s jenkins docker的关系 jenkins和k8s_jenkins_09


k8s jenkins docker的关系 jenkins和k8s_devops_10


注意: 这里我们总共挂载了主机的5个卷 起作用如下:

  1. /var/run/docker.sock: 此卷作用是可以在容器内部连接到主机的docker,因为本身容器内是不能安装docker的, 所以如果容器内想打docker镜像,就需要连接到宿主机的docker,而docker.sock是docker的连接窗口
  2. /usr/bin/docker: 此卷作用是可以在容器内部使用docker的可执行文件
  3. /etc/hosts: 这里我们在推送镜像时使用的是域名, 为了解析方便就将域名配置到了hosts文件中, 然后挂载到了容器中使用
  4. /usr/bin/kubectl: 此卷作用是可以在容器内部使用kubectl的可执行文件, 因为我们最后需要部署我们业务容器到k8s, 使用的命令就是kubectl apply -f xx.yaml
  5. /root/.kube/config: 这里的config是连接k8s集群的信息
2.3.2.2 配置Service Account

配置Pod Templates -> Pod Templates -> Pod Template details -> Service Account 如下图:

k8s jenkins docker的关系 jenkins和k8s_kubernetes_11


注意: 这里配置的jenkins-sa是创建在k8s创建jenkin时添加的sa资源, 因为我们jenkins触发流程创建构建容器时是要连接k8s集群的, 所以我们需要添加sa, 而sa的作用就是部署应用连接k8s所需要的认证信息

至此配置完成