1. 流程分析
1、准备一个 SpringBoot 项目,可以打包、也可以运行,有几个简单的页面。
2、将这个 SpringBoot 项目上传到 gitlab-ce,执行 ci pipline,实现编译、代码质量扫描、发送邮件、打包、构建镜像、发布到 harbor 测试库等功能。
3、将 harbor 测试库中的镜像同步到 k8s 中的 harbor 准生产库。(没做,手动复制)
4、k8s 拉取管理镜像。
2. 管理镜像
2.1 管理tomcat镜像
这里默认镜像文件已经保存到 harbor 库里,我们只需要通过配置文件创建 pod 和 service 就可以管理运行镜像了。
1、创建 tomcat-deploy.yaml。
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-8.5.47
spec:
replicas: 2
selector:
matchLabels:
app: tomcat-cluster
template:
metadata:
labels:
app: tomcat-cluster
spec:
containers:
- name: tomcat-cluster
image: harbor01.io/library/tomcat:8.5.47
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080 # 容器应用监听的端口号
imagePullSecrets:
- name: harbor-secret
2、创建、拉取私有镜像,并查看 pod 信息。
kubectl apply -f tomcat-deploy.yaml
# 查看pod
[root@k8s-master01 tomcat]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tomcat-8.5.47-6d749d7d56-h2bds 1/1 Running 0 19s 10.100.85.197 k8s-node01 <none> <none>
tomcat-8.5.47-6d749d7d56-xvpx2 1/1 Running 0 19s 10.100.58.195 k8s-node02 <none> <none>
# 查看pod详情
kubectl describe pod tomcat-8.5.47-6d749d7d56-h2bds
3、对外暴露端口,即编写 service 文件。
# vim tomcat-service.yaml
apiVersion: v1
kind: Service
metadata:
name: tomcat-service
labels:
app: tomcat-service
spec:
type: NodePort
selector:
app: tomcat-cluster
ports:
- port: 8000
targetPort: 8080
nodePort: 32500
4、创建并查看 service。
kubectl apply -f tomcat-service.yaml
# 查看service
[root@k8s-master01 tomcat]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 42m
tomcat-service NodePort 10.96.121.77 <none> 8000:32500/TCP 86s
# 查看service详情
[root@k8s-master01 tomcat]# kubectl describe service tomcat-service
...
Endpoints: 10.100.58.195:8080,10.100.85.197:8080
...
5、测试项目,访问 192.168.58.21:32500,即可看到 nginx 页面。
2.2 管理SpringBoot项目
前提:harbor 库中已经有 springboot_cicd 镜像。
1、创建 springboot_cicd-deploy.yaml。
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot-cicd-1.0
spec:
replicas: 2
selector:
matchLabels:
app: springboot-cicd-cluster
template:
metadata:
labels:
app: springboot-cicd-cluster
spec:
containers:
- name: springboot-cicd-cluster
image: harbor01.io/test/springboot_cicd:1.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8081 # 容器应用监听的端口号
imagePullSecrets:
- name: harbor-secret
2、创建、拉取私有镜像,并查看 pod 信息。
kubectl apply -f springboot_cicd-deploy.yaml
# 查看pod
[root@k8s-master01 tomcat]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tomcat-8.5.47-6d749d7d56-h2bds 1/1 Running 0 19s 10.100.85.197 k8s-node01 <none> <none>
tomcat-8.5.47-6d749d7d56-xvpx2 1/1 Running 0 19s 10.100.58.195 k8s-node02 <none> <none>
# 查看pod详情
kubectl describe pod tomcat-8.5.47-6d749d7d56-h2bds
3、对外暴露端口,即编写 service 文件。
# vim springboot_cicd-service.yaml
apiVersion: v1
kind: Service
metadata:
name: springboot-cicd-service
labels:
app: springboot-cicd-service
spec:
type: NodePort
selector:
app: springboot-cicd-cluster
ports:
- port: 8081
targetPort: 8081
nodePort: 32501
4、创建并查看 service。
kubectl apply -f springboot_cicd-service.yaml
# 查看service
[root@k8s-master01 springboot_cicd]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 50m
springboot-cicd-service NodePort 10.96.147.109 <none> 8081:32501/TCP 4s
tomcat-service NodePort 10.96.121.77 <none> 8000:32500/TCP 9m32s
# 查看service详情
[root@k8s-master01 tomcat]# kubectl describe service springboot-cicd-service
...
Endpoints: 10.100.58.196:8080,10.100.85.198:8080
...
5、测试项目,访问 192.168.58.21:32500,即可访问到首页。