天天看點

14.企業運維實戰之Jenkins分布式架構利用k8s叢集自動化部署單war包應用實踐

目錄一覽:

0x01 Jenkins之K8s叢集自動化部署單war包應用

  • 前期準備
  • (0) HelloWorld - Tomcat 應用伺服器
  • (1) Nginx - Web伺服器
  • (2) Jenkins Pipeline 腳本
  • (3) Shell 部署腳本
  • (4) 效果預覽

效果說明:

14.企業運維實戰之Jenkins分布式架構利用k8s叢集自動化部署單war包應用實踐

0x01 Jenkins之K8s叢集自動化部署單war包應用

實驗目的

描述: 采用Jenkins從Gitlab中拉取測試項目以及代碼品質檢測,然後進行編譯建構并利用K8s叢集進行WAR包應用部署實踐,最後将生成的制品進行歸檔到Gitlab的Release之中;

動态配置檔案或者腳本:

  • setting.xml (Maven編譯建構配置檔案)
  • HelloWorld.yaml (應用部署資源清單)
  • options.sh (部署腳本)

前期準備

描述: 假定你已經按照我前面幾篇文章中安裝好基礎環境。

(0) HelloWorld - Tomcat 應用伺服器

  • Step 1.基礎鏡像拉取于上傳到私有倉庫中
weiyigeek@weiyigeek-107:~/k8s/sonarqube$ docker tag tomcat:8.5.61-jdk8-corretto harbor.weiyigeek.top/devops/tomcat:8.5.61-jdk8-corretto
weiyigeek@weiyigeek-107:~/k8s/sonarqube$ docker push harbor.weiyigeek.top/devops/tomcat:8.5.61-jdk8-corretto
The push refers to repository [harbor.weiyigeek.top/devops/tomcat]
f13244e4918b: Pushed
536f15f78828: Pushed
1c98b6d16fad: Pushed
fdef502bf282: Pushed
cee8d35c645b: Pushed
8.5.61-jdk8-corretto: digest: sha256:110d7391739e868daf8c1bdd03fcb7ffe9eaf2b134768b9162e2cd47d58f7255 size: 1368      
  • Step 2.資源清單檔案
cat > HelloWorld.yaml <<'END'
apiVersion: v1
kind: Service
metadata:
name: deploy-maven-svc
spec:
type: NodePort         # Service 類型
selector:
app: java-maven       # 【注意】與deployment資源控制器建立的Pod标簽進行綁定;
release: stabel       # Service 服務發現不能缺少Pod标簽,有了Pod标簽才能與之SVC對應
ports:                  # 映射端口
- name: http
port: 8080              # cluster 通路端口
targetPort: 8080        # Pod 容器内的服務端口
nodePort: 30089
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: deploy-java-maven
spec:
serviceName: "deploy-maven-svc"
replicas: 3                # 副本數
selector:                  # 選擇器
matchLabels:
app: java-maven   # 比對的Pod标簽非常重要
release: stabel
template:
metadata:
labels:
app: java-maven      # 模闆标簽
release: stabel
spec:
volumes:                # 關鍵點
- name: webapps         # 卷名稱
hostPath:             # 采用hostPath卷
type: DirectoryOrCreate   # 卷類型DirectoryOrCreate: 如果子節點上沒有該目錄便會進行建立
path: /nfsdisk-31/test/  # 各主機節點上已存在的目錄此處是NFS共享
- name: timezone     # 容器時區設定
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
containers:
- name: java-maven
image: harbor.weiyigeek.top/devops/tomcat:8.5.61-jdk8-corretto  # 拉取的鏡像
imagePullPolicy: IfNotPresent
command: ["bash","-c","cp /tmp/${APPNAME} /usr/local/tomcat/webapps/ROOT.war && catalina.sh run"]
env:
- name: APPNAME
value: HelloWorld-v1.40.war
ports:
- name: http         # 此端口在服務中的名稱
containerPort: 8080  # 容器暴露的端口
volumeMounts:        # 挂載指定卷目錄
- name: webapps      # Tomcat 應用目錄
mountPath: /tmp/
- name: logs         # Tomcat 日志目錄
mountPath: /usr/local/tomcat/logs
- name: timezone     # 鏡像時區設定
mountPath: /usr/share/zoneinfo/Asia/Shanghai
volumeClaimTemplates:      # 卷的體積要求模闆此處采用StorageClass存儲類主要針對于應用日志的存儲;
- metadata:                # 根據模闆自動建立PV與PVC并且進行一一對應綁定;
name: logs
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: managed-nfs-storage # StorageClass存儲類
resources:
requests:
storage: 1Gi
END      

(1) Nginx - Web伺服器

  • Step 1.Nginx 配置檔案
root@468dd7df372e:/# grep -v "#" /etc/nginx/conf.d/default.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  rel.weiyigeek.top;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
}
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
}
}      
  • Step 2.将Jenkins建構的Release進行上傳在Nginx 中進行歸檔是以需要資源清單進行部署;

繼續閱讀