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。

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: tomcat-8.5.47
  5. spec:
  6. replicas: 2
  7. selector:
  8. matchLabels:
  9. app: tomcat-cluster
  10. template:
  11. metadata:
  12. labels:
  13. app: tomcat-cluster
  14. spec:
  15. containers:
  16. - name: tomcat-cluster
  17. image: harbor01.io/library/tomcat:8.5.47
  18. imagePullPolicy: IfNotPresent
  19. ports:
  20. - containerPort: 8080 # 容器应用监听的端口号
  21. imagePullSecrets:
  22. - name: harbor-secret

2、创建、拉取私有镜像,并查看 pod 信息。

  1. kubectl apply -f tomcat-deploy.yaml
  2. # 查看pod
  3. [root@k8s-master01 tomcat]# kubectl get pod -o wide
  4. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  5. tomcat-8.5.47-6d749d7d56-h2bds 1/1 Running 0 19s 10.100.85.197 k8s-node01 <none> <none>
  6. tomcat-8.5.47-6d749d7d56-xvpx2 1/1 Running 0 19s 10.100.58.195 k8s-node02 <none> <none>
  7. # 查看pod详情
  8. kubectl describe pod tomcat-8.5.47-6d749d7d56-h2bds

3、对外暴露端口,即编写 service 文件。

  1. # vim tomcat-service.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: tomcat-service
  6. labels:
  7. app: tomcat-service
  8. spec:
  9. type: NodePort
  10. selector:
  11. app: tomcat-cluster
  12. ports:
  13. - port: 8000
  14. targetPort: 8080
  15. nodePort: 32500

4、创建并查看 service。

  1. kubectl apply -f tomcat-service.yaml
  2. # 查看service
  3. [root@k8s-master01 tomcat]# kubectl get svc
  4. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  5. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 42m
  6. tomcat-service NodePort 10.96.121.77 <none> 8000:32500/TCP 86s
  7. # 查看service详情
  8. [root@k8s-master01 tomcat]# kubectl describe service tomcat-service
  9. ...
  10. Endpoints: 10.100.58.195:8080,10.100.85.197:8080
  11. ...

5、测试项目,访问 192.168.58.21:32500,即可看到 nginx 页面。
image.png

2.2 管理SpringBoot项目

前提:harbor 库中已经有 springboot_cicd 镜像。

1、创建 springboot_cicd-deploy.yaml。

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: springboot-cicd-1.0
  5. spec:
  6. replicas: 2
  7. selector:
  8. matchLabels:
  9. app: springboot-cicd-cluster
  10. template:
  11. metadata:
  12. labels:
  13. app: springboot-cicd-cluster
  14. spec:
  15. containers:
  16. - name: springboot-cicd-cluster
  17. image: harbor01.io/test/springboot_cicd:1.0
  18. imagePullPolicy: IfNotPresent
  19. ports:
  20. - containerPort: 8081 # 容器应用监听的端口号
  21. imagePullSecrets:
  22. - name: harbor-secret

2、创建、拉取私有镜像,并查看 pod 信息。

  1. kubectl apply -f springboot_cicd-deploy.yaml
  2. # 查看pod
  3. [root@k8s-master01 tomcat]# kubectl get pod -o wide
  4. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  5. tomcat-8.5.47-6d749d7d56-h2bds 1/1 Running 0 19s 10.100.85.197 k8s-node01 <none> <none>
  6. tomcat-8.5.47-6d749d7d56-xvpx2 1/1 Running 0 19s 10.100.58.195 k8s-node02 <none> <none>
  7. # 查看pod详情
  8. kubectl describe pod tomcat-8.5.47-6d749d7d56-h2bds

3、对外暴露端口,即编写 service 文件。

  1. # vim springboot_cicd-service.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: springboot-cicd-service
  6. labels:
  7. app: springboot-cicd-service
  8. spec:
  9. type: NodePort
  10. selector:
  11. app: springboot-cicd-cluster
  12. ports:
  13. - port: 8081
  14. targetPort: 8081
  15. nodePort: 32501

4、创建并查看 service。

  1. kubectl apply -f springboot_cicd-service.yaml
  2. # 查看service
  3. [root@k8s-master01 springboot_cicd]# kubectl get svc
  4. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  5. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 50m
  6. springboot-cicd-service NodePort 10.96.147.109 <none> 8081:32501/TCP 4s
  7. tomcat-service NodePort 10.96.121.77 <none> 8000:32500/TCP 9m32s
  8. # 查看service详情
  9. [root@k8s-master01 tomcat]# kubectl describe service springboot-cicd-service
  10. ...
  11. Endpoints: 10.100.58.196:8080,10.100.85.198:8080
  12. ...

5、测试项目,访问 192.168.58.21:32500,即可访问到首页。
image.png