基于Kubernetes的Spring Boot DevOps项目实战
Public | Private | Note | |
---|---|---|---|
1 | / | VS code、skaffold | |
2 | / | Docker | |
3 | / | JIRA | |
4 | / | Confluence | |
5 | / | Terraform、Ansible | Infrastructure as Code |
6 | Azure AKS、Amazon EKS、Google GCP | Kubeadm、Minikube、Kind、Kops、Openshift3.X | kubernetes |
7 | Github | Gitea、Gogs、Gitlab | Git |
8 | Github Actions、 Travis-CI、CircleCI |
Jenkins、Gitlab-CI | Continuous Integration |
9 | / | Maven、Gradle | |
10 | / | Nexus3、JFrog Artifactory | |
11 | Dockerhub | Harbor | Registry |
12 | SonarCloud | SonarQube | |
13 | / | Helm、ArgoCD、FluxCD | GitOps、Continuous Delivery |
14 | / | ArgoRollouts、Spinnaker、Flagger | Progressive Delivery、Continuous Deployment |
15 | / | Selenium | |
16 | / | Jmeter | |
17 | / | Istio | Service Mesh |
18 | / | EFK(Elasticsearch+Fluentd+Kibana) | Logging |
19 | / | Prometheus && Alertmanager | Monitoring && Alerting |
20 | / | Skywalking | APM(Application Performance Management) |
21 | / | Sentry |
(图)
-
提前安装好Jenkins,并且安装好kubernetes Plugin。
-
安装好Kubernets集群,需要创建一个sa(admin-rbac.yaml)
-
在Jenkins里新建Pipeline Job,填写上git地址:springboot-devops-demo,“脚本地址”填写:jenkins/Jenkinsfile,保存执行Job,第一次Pipeline可能会报错,没关系,然后再次执行Job,填写上镜像仓库的相关信息。
-
等待脚本自动运行完成CI部分。脚本会执行如下步骤:
- Kubernetes Plugin 会在kubernetes集群上自动启动一个pod作为jenkins slave,这个pod启动后,会再自动启动多个container进行工作,执行完毕后,这个pod会自动被删除回收。
- 第1个container是maven,根据checkout的git代码,进行maven pacakge。
- 第2个container是docker,根据之前build出来的jar包进行docker build,docker push。
- 第3个container是kubectl,执行kubectl apply -f *.yaml,目前已注释。
- 第4个container是Helm,只执行Helm version,其他已注释。
- 暂时缺少自动化测试步骤。(Jmeter、Selenium)
- 其他container,随意可增加……
-
CD部分有多种选择。
-
直接通过kubectl或者Helm完成CD。(比较简单,不推荐!)
-
通过ArgoCD进行GitOps完成CD。(Spinnaker亦可,FluxCD亦可)
-
灰度发布有多种选择:
a)通过Argo rollouts自动进行Canary、Blue/Green。
b)通过Spinnaker+Promethues进行自动化Canary Analysis。
c)通过Flagger+Nginx ingress/istio+Promethues进行自动化Canary。
-
-
SRE部分。
- Logging,EFK(Elasticsearch+Fluentd+Kibana)
- Monitoring && Alerting,Prometheus && Alertmanager
- APM(Application Performance Management),Skywalking
- Sentry
- 使用Skaffold。
# 安装kubernetes集群(此处省略)
# 安装openjdk-8-jdk环境
$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk -y
$ git clone https://github.com/hbstarjason/springboot-devops-demo && \
cd springboot-devops-demo
$ mvn -B clean package -DskipTests
$ skaffold dev
# 直接能看到运行结果
-
直接使用kubectl。
$ git clone https://github.com/hbstarjason/springboot-devops-demo && \ cd springboot-devops-demo $ kuebctl create ns springboot-devops-demo $ kubectl apply -f springboot-devops-demo.yaml -n springboot-devops-demo
-
使用Helm。
$ git clone https://github.com/hbstarjason/springboot-devops-demo && \ cd springboot-devops-demo $ kubectl create ns springboot-devops-demo $ helm version version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"} $ helm install springboot-devops-demo ./charts/ -f ./charts/values.yaml --namespace springboot-devops-demo
-
一键部署至云端:猛击,访问地址:https://springboot-devops-demo-hbstarjason.cloud.okteto.net/
- 2021-02-28,增加Trivy对镜像进行扫描。
- 2021-02-06,增加HPA部分。
- 2020-12-23,增加多阶段构建。
- 2020-10-01,增加Flux部分。
- 2020-09-25,增加以Sidecar模式进行部署。
- 2020-09-18,增加一键部署至云端(okteto.com),访问地址:https://springboot-devops-demo-hbstarjason.cloud.okteto.net/
- 2020-08-12,增加利用Github Actions自动安装Minikube,并采用Helm部署至Minikube进行验证测试。
- 2020-07-20,完善ReadMe,增加使用Helm在本地环境直接运行。
- 2020-07-15,增加本地开发环境食用方法,采用Skaffold一键部署。
- 2020-07-15,增加使用ArgoCD部分。
- 2020-07-14,完善ReadMe,增加User Guide。
- 2020-07-11,增加利用Github Actions 自动发布到Heroku,访问地址:https://springboot-devops-demo.herokuapp.com/
- 2020-05-08,增加Travis-CI部分,集成SonarCloud。
- Missing……
待定 1
待定 2
待定 3