天天看點

k8s之根據tag釋出spring boot項目

#(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檔案

#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)丢棄舊的建構

k8s之根據tag釋出spring boot項目

2)參數化建構過程

k8s之根據tag釋出spring boot項目

3)配置tag

k8s之根據tag釋出spring boot項目

4)配置git倉庫位址

k8s之根據tag釋出spring boot項目

5)配置打包指令

k8s之根據tag釋出spring boot項目

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 .           
k8s之根據tag釋出spring boot項目

注意: 第一次釋出項目, 使用的是sed替換和apply釋出項目; 第一次之後把sed和apply方式修改成set image釋出項目

kubectl set image deployment deployment_name container_name=image:version

k8s之根據tag釋出spring boot項目

#(4)測試

1)修改源代碼如下, 同時送出到git倉庫和打tag

k8s之根據tag釋出spring boot項目
k8s之根據tag釋出spring boot項目
k8s之根據tag釋出spring boot項目

2)開始建構項目

k8s之根據tag釋出spring boot項目

pod容器建立成功

k8s之根據tag釋出spring boot項目

釋出的tag的版本

k8s之根據tag釋出spring boot項目

通路資源, 确實是修改後的資源

k8s之根據tag釋出spring boot項目

3)修改資源進行第二次釋出

k8s之根據tag釋出spring boot項目

上傳到git遠端倉庫

k8s之根據tag釋出spring boot項目

建立tag并上傳到git倉庫

k8s之根據tag釋出spring boot項目

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