1. 程式人生 > >k8s之根據tag發布spring boot項目

k8s之根據tag發布spring boot項目

實驗 tps label src zone apps seconds image update

#(1)根據dockerfile構建基礎鏡像
1)dockerfile

#mkdir /temp/basic
#cd /temp/basic 
#cat dockerfile 
FROM java:8
MAINTAINER wangfang
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime         && echo ‘Asia/Shanghai‘ >/etc/timezone

2)構建

docker build registry.cn-hangzhou.aliyuncs.com/wangfang-k8s/java:v1 . 
docker push registry.cn-hangzhou.aliyuncs.com/wangfang-k8s/java:v1

#(2)根據打包生成的jar包生成新的dockerfile文件

1)dockerfile

#mkdir /temp/release; cd /temp/release
#cat dockerfile 
FROM registry.cn-hangzhou.aliyuncs.com/wangfang-k8s/java:v1
ADD demo-0.0.1-SNAPSHOT.jar /
WORKDIR /
EXPOSE 8080
ENTRYPOINT ["java","-jar","demo-0.0.1-SNAPSHOT.jar"]

#(3)準備項目的資源配置清單

1)deployment對象資源配置清單文件

#cd /temp/release 
# cat springboot-test.yaml 
apiVersion: apps/v1beta2
kind: Deployment
metadata:
    name: springboot-test-deployment
spec:
    strategy:
        rollingUpdate:
            maxSurge: 25%
            maxUnavailable: 25%
        type: RollingUpdate
    replicas: 2
    selector:
        matchLabels:
            app: springboot-test
    template:
        metadata:
            labels:
                app: springboot-test
        spec:
            containers:
            - name: springboot-test
                image: registry.cn-hangzhou.aliyuncs.com/wangfang-k8s/springboot-test:tag
                ports:
                - containerPort: 8080
                resources:
                    requests:
                        memory: "256Mi"
                        cpu: "256m"
                    limits:
                        memory: "512Mi"
                        cpu: "512m"
                livenessProbe:
                    httpGet:
                        path: /
                        port: 8080
                    initialDelaySeconds: 20
                    periodSeconds: 3
                    successThreshold: 1
                    failureThreshold: 3
                readinessProbe:
                    httpGet:
                        path: /
                        port: 8080
                    initialDelaySeconds: 20
                    periodSeconds: 3
                    successThreshold: 1
                    failureThreshold: 3

2)service對象資源配置清單文件

# cat springboot-test-service.yaml 
apiVersion: v1 
kind: Service 
metadata: 
    name: springboot-test-service
spec: 
    selector:      
        app: springboot-test
    type: NodePort
    ports: 
    - name: http 
        protocol: TCP
        port: 8080
        targetPort: 8080
        nodePort: 33333
    type: NodePort

#(3)配置jenkins
1)丟棄舊的構建
技術分享圖片

2)參數化構建過程
技術分享圖片

3)配置tag
技術分享圖片

4)配置git倉庫地址

技術分享圖片

5)配置打包命令
技術分享圖片

6)ssh到jenkins服務器, 這臺機器我配置的也是kubectl客戶端;
命令說明:
把打包生成的jar包拷貝到工作目錄, 根據tag構建新的鏡像,
實驗演示我是推送到阿裏雲的容器鏡像倉庫, 生產環境建議部署habor開源鏡像倉庫, 速度更快
然後根據tag把資源配置的tag裏面替換成真實的tag;
最後根據資源配置清單文件發布項目

cd /temp/release
\cp /var/lib/jenkins/workspace/test/target/demo-0.0.1-SNAPSHOT.jar .
docker build -t registry.cn-hangzhou.aliyuncs.com/wangfang-k8s/springboot-test:${tag} .
docker login --username=your_name registry.cn-hangzhou.aliyuncs.com --password=your_password
docker push registry.cn-hangzhou.aliyuncs.com/wangfang-k8s/springboot-test:${tag} 
sed -ri "s/tag/${tag}/g" springboot-test.yaml
kubectl apply -f .

技術分享圖片

註意: 第一次發布項目, 使用的是sed替換和apply發布項目; 第一次之後把sed和apply方式修改成set image發布項目
kubectl set image deployment deployment_name container_name=image:version
技術分享圖片

#(4)測試
1)修改源代碼如下, 同時提交到git倉庫和打tag
技術分享圖片

技術分享圖片

技術分享圖片

2)開始構建項目
技術分享圖片

pod容器創建成功
技術分享圖片

發布的tag的版本
技術分享圖片

訪問資源, 確實是修改後的資源
技術分享圖片

3)修改資源進行第二次發布

技術分享圖片

上傳到git遠程倉庫
技術分享圖片

創建tag並上傳到git倉庫
技術分享圖片

4)修改jenkins為滾動發布, 不使用資源配置清單

技術分享圖片

技術分享圖片

技術分享圖片

k8s之根據tag發布spring boot項目