文章前提:已安装好k8s集群,至少1master1slave
1. 挂载卷安装
1.1 非master节点安装pv
安装nfs
yum -y install nfs-utils rpcbind
mkdir -p /data/k8s
cd /data/k8s
mkdir 0 1 2 3 4 5 6 7 8 9
# 开放访问权限
chmod 755 0 1 2 3 4 5 6 7 8 9
vim /etc/exports
/data/k8s/0 *(rw,sync,no_root_squash)
/data/k8s/1 *(rw,sync,no_root_squash)
/data/k8s/2 *(rw,sync,no_root_squash)
/data/k8s/3 *(rw,sync,no_root_squash)
/data/k8s/4 *(rw,sync,no_root_squash)
/data/k8s/5 *(rw,sync,no_root_squash)
/data/k8s/6 *(rw,sync,no_root_squash)
/data/k8s/7 *(rw,sync,no_root_squash)
/data/k8s/8 *(rw,sync,no_root_squash)
/data/k8s/9 *(rw,sync,no_root_squash)
启动服务
# 启动rpc
systemctl start rpcbind.service
systemctl enable rpcbind
systemctl status rpcbind
# 启动nfs
systemctl start nfs.service
systemctl enable nfs
systemctl status nfs
# 查看具体目录挂载权限:
cat /var/lib/nfs/etab
1.2 master节点安装pv
#启动rpc
systemctl start rpcbind.service
systemctl enable rpcbind.service
#启动nfs
systemctl start nfs.service
systemctl enable nfs.service
# 查看从节点挂载目录
showmount -e w1
2. 安装jenkins
注:这里为了简单,直接采用helm 进行安装,当然chart 由我整合创建的;
2.1 安装helm
📎helm-v3.9.0-linux-amd64.tar.gz.txt
去除后缀.txt; 解压安装
tar -zxvf helm-v3.9.0-linux-amd64.tar.gz -C /root/
cp linux-amd64/helm /usr/local/bin/
2.2 helm安装jenkins
去除后缀.txt; 安装
# 创建namespace
[root@m ~]# kubectl create namespace ns-jenkins
# 使用helm安装jenkins
[root@m ~]# helm install jenkins helm-jenkins
# 查看jenkins 部署节点
[root@m ~]# kubectl get pod -n ns-jenkins -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
jenkins-bbb6fcdd5-2kkzx 1/1 Running 0 15m 192.168.190.86 w1 <none> <none>
主机上访问jenkins: http://w1:30002
2.3 配置kubernates
3. 部署spring-boot 项目
3.1 整体流程概览
以下是服务发布的主流程
3.2 创建jenkins项目
示例项目地址:github.com/haopenge/sh…
1) 创建工程
2) 配置git项目
配置git 项目地址
私库的话需要配置秘钥,这个可自行google;
3) 配置docker仓库登录变量
4)maven打包配置
5)发布服务
源代码如下:
echo "<<====================== 1. 登录docker仓库===================>>"
docker login --username=$ALI_DOCKER_USERNAME --password=$ALI_DOCKER_PASSWORD registry.cn-hangzhou.aliyuncs.com
echo "<<====================== 2. 构建docker镜像 ===================>>"
docker build -t registry.cn-hangzhou.aliyuncs.com/ranmo/shiqi-deploy:${BUILD_NUMBER} -f Dockerfile .
echo "<<======================push docker镜像 ===================>>"
docker push registry.cn-hangzhou.aliyuncs.com/ranmo/shiqi-deploy:${BUILD_NUMBER}
echo "<<====================== 3. 修改helm、k8s.yaml中的镜像版本号 ===================>>"
sed -i "s/build_number/${BUILD_NUMBER}/g" chart/Chart.yaml
sed -i "s/build_number/${BUILD_NUMBER}/g" chart/values.yaml
sed -i "s/build_number/${BUILD_NUMBER}/g" k8s.yaml
echo "<<====================== 4. 发布服务 ===================>>"
kubectl apply -f k8s.yaml
3.3 访问服务
主机上配置hosts: 192.168.78.128 shiqi-deploy.qa.cn
curl : shiqi-deploy.qa.cn/eat/apple
返回: I eat 6 apple !!!
4. 可能疑问
为啥不用helm 发布服务?
暂时没有找到helm 安装+升级 功能合并的 命令;如果用的话,需要手动写脚本实现;
项目中的chart是否可用?
可用直接使用,调用helm install 可用正常安装;
maven 如何配置本地仓库,避免重复拉取?
1) 安装 Configuration File 插件
2) 配置全局setting文件
3) 项目配置 build 项目点高级
4)配置全局pv
创建maven 仓库挂载卷
kubectl create -f maven-pvc.yaml
maven-pvc.yaml源码如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: maven-pv
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Delete
nfs:
server: w1
path: /data/k8s/2
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: maven-pvc
namespace: ns-jenkins
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
参见2.3中的位置配置