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文件

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)丢弃旧的构建
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为滚动发布, 不使用资源配置清单

k8s之根据tag发布spring boot项目

k8s之根据tag发布spring boot项目

k8s之根据tag发布spring boot项目

上一篇:阿里云apt-get安装包时Err:2 http://mirrors.cloud.aliyuncs.com/ubuntu xenial-security/main amd64 git amd64 1:


下一篇:学习kubernetes,从快速搭建k8s集群开始