文章前提:已安装好k8s集群,至少1master1slave

1. 挂载卷安装

1.1 非master节点安装pv

安装nfs

  1. yum -y install nfs-utils rpcbind
  2. mkdir -p /data/k8s
  3. cd /data/k8s
  4. mkdir 0 1 2 3 4 5 6 7 8 9
  5. # 开放访问权限
  6. chmod 755 0 1 2 3 4 5 6 7 8 9
  7. vim /etc/exports
  1. /data/k8s/0 *(rw,sync,no_root_squash)
  2. /data/k8s/1 *(rw,sync,no_root_squash)
  3. /data/k8s/2 *(rw,sync,no_root_squash)
  4. /data/k8s/3 *(rw,sync,no_root_squash)
  5. /data/k8s/4 *(rw,sync,no_root_squash)
  6. /data/k8s/5 *(rw,sync,no_root_squash)
  7. /data/k8s/6 *(rw,sync,no_root_squash)
  8. /data/k8s/7 *(rw,sync,no_root_squash)
  9. /data/k8s/8 *(rw,sync,no_root_squash)
  10. /data/k8s/9 *(rw,sync,no_root_squash)

启动服务

  1. # 启动rpc
  2. systemctl start rpcbind.service
  3. systemctl enable rpcbind
  4. systemctl status rpcbind
  5. # 启动nfs
  6. systemctl start nfs.service
  7. systemctl enable nfs
  8. systemctl status nfs
  9. # 查看具体目录挂载权限:
  10. cat /var/lib/nfs/etab

1.2 master节点安装pv

  1. #启动rpc
  2. systemctl start rpcbind.service
  3. systemctl enable rpcbind.service
  4. #启动nfs
  5. systemctl start nfs.service
  6. systemctl enable nfs.service
  7. # 查看从节点挂载目录
  8. showmount -e w1

2. 安装jenkins

注:这里为了简单,直接采用helm 进行安装,当然chart 由我整合创建的;

2.1 安装helm

helm-v3.9.0-linux-amd64.tar.gz.txt
去除后缀.txt; 解压安装

  1. tar -zxvf helm-v3.9.0-linux-amd64.tar.gz -C /root/
  2. cp linux-amd64/helm /usr/local/bin/

2.2 helm安装jenkins

helm-jenkins-0.3.0.tgz.txt

去除后缀.txt; 安装

  1. # 创建namespace
  2. [root@m ~]# kubectl create namespace ns-jenkins
  3. # 使用helm安装jenkins
  4. [root@m ~]# helm install jenkins helm-jenkins
  5. # 查看jenkins 部署节点
  6. [root@m ~]# kubectl get pod -n ns-jenkins -o wide
  7. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  8. jenkins-bbb6fcdd5-2kkzx 1/1 Running 0 15m 192.168.190.86 w1 <none> <none>

主机上访问jenkins: http://w1:30002

2.3 配置kubernates

image.png

image.png
image.png

image.png

3. 部署spring-boot 项目

3.1 整体流程概览

以下是服务发布的主流程
image.png

3.2 创建jenkins项目

示例项目地址:https://github.com/haopenge/shiqi-deploy

1) 创建工程

image.png

2) 配置git项目

配置git 项目地址
私库的话需要配置秘钥,这个可自行google;
image.png

3) 配置docker仓库登录变量

image.png

4)maven打包配置

image.png

5)发布服务

image.png

源代码如下:

  1. echo "<<====================== 1. 登录docker仓库===================>>"
  2. docker login --username=$ALI_DOCKER_USERNAME --password=$ALI_DOCKER_PASSWORD registry.cn-hangzhou.aliyuncs.com
  3. echo "<<====================== 2. 构建docker镜像 ===================>>"
  4. docker build -t registry.cn-hangzhou.aliyuncs.com/ranmo/shiqi-deploy:${BUILD_NUMBER} -f Dockerfile .
  5. echo "<<======================push docker镜像 ===================>>"
  6. docker push registry.cn-hangzhou.aliyuncs.com/ranmo/shiqi-deploy:${BUILD_NUMBER}
  7. echo "<<====================== 3. 修改helm、k8s.yaml中的镜像版本号 ===================>>"
  8. sed -i "s/build_number/${BUILD_NUMBER}/g" chart/Chart.yaml
  9. sed -i "s/build_number/${BUILD_NUMBER}/g" chart/values.yaml
  10. sed -i "s/build_number/${BUILD_NUMBER}/g" k8s.yaml
  11. echo "<<====================== 4. 发布服务 ===================>>"
  12. kubectl apply -f k8s.yaml

3.3 访问服务

主机上配置hosts: 192.168.78.128 shiqi-deploy.qa.cn
curl : http://shiqi-deploy.qa.cn/eat/apple
返回: I eat 6 apple !!!

4. 可能疑问

为啥不用helm 发布服务?

暂时没有找到helm 安装+升级 功能合并的 命令;如果用的话,需要手动写脚本实现;

项目中的chart是否可用?

可用直接使用,调用helm install 可用正常安装;

maven 如何配置本地仓库,避免重复拉取?

1) 安装 Configuration File 插件
2) 配置全局setting文件
image.png
3) 项目配置 build 项目点高级
image.png

4)配置全局pv
创建maven 仓库挂载卷
kubectl create -f maven-pvc.yaml
maven-pvc.yaml源码如下:

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: maven-pv
  5. spec:
  6. capacity:
  7. storage: 20Gi
  8. accessModes:
  9. - ReadWriteMany
  10. persistentVolumeReclaimPolicy: Delete
  11. nfs:
  12. server: w1
  13. path: /data/k8s/2
  14. ---
  15. kind: PersistentVolumeClaim
  16. apiVersion: v1
  17. metadata:
  18. name: maven-pvc
  19. namespace: ns-jenkins
  20. spec:
  21. accessModes:
  22. - ReadWriteMany
  23. resources:
  24. requests:
  25. storage: 20Gi

参见2.3中的位置配置
image.png

5. 参见

Jenkins集成Kubernetes集群