Jenkins实现一键操作。使发布应用效率提高。KubeSphere这类的工具也是集成了Jenkins的,之所以直接使用Jenkins,是因为那种大而全的工具必然会损耗资源,而我又用不上那么多的功能。ConfigMap的配置和command,代码如下。apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-boot-kubernetes-deployment
spec:
replicas: 2
strategy:
rollingUpdate:
maxSurge: 1 # 最大峰值用来指定可以创建的超出期望 Pod 个数的 Pod 数量。此值可以是绝对数(例如,5)或所需 Pods 的百分比(例如,10%)
maxUnavailable: 0 #最大不可用 是一个可选字段,用来指定 更新过程中不可用的 Pod 的个数上限。该值可以是绝对数字(例如,5)也可以是所需 Pods 的百分比(例如,10%)
selector:
matchLabels:
app: spring-boot-kubernetes-deployment
template:
metadata:
labels:
app: spring-boot-kubernetes-deployment
spec:
terminationGracePeriodSeconds: 300 #如果需要的优雅终止时间比较长 (preStop + 业务进程停止可能超过 30s),可根据实际情况自定义 terminationGracePeriodSeconds,避免过早的被 SIGKILL杀死,与下面preStop有关联,300属于总时间
containers:
- name: spring-boot-kubernetes
image: spring-boot-kubernetes:1.0.0
imagePullPolicy: Never # 只使用本地镜像,防止ErrImagePull异常
ports:
- containerPort: 8080
readinessProbe: #就绪探针
httpGet:
path: /
port: 8080
initialDelaySeconds: 50 #容器启动后要等待多少秒后才启动存活和就绪探测器, 默认是 0 秒,最小值是 0
periodSeconds: 5 # 指定了 kubelet 应该每 5 秒执行一次存活探测。
successThreshold: 1 #探测器在失败后,被视为成功的最小连续成功数。默认值是 1。 存活和启动探测的这个值必须是 1。最小值是 1。
failureThreshold: 2 #当探测失败时,Kubernetes 的重试次数。 对存活探测而言,放弃就意味着重新启动容器。 对就绪探测而言,放弃意味着 Pod 会被打上未就绪的标签。默认值是 3。最小值是 1
env: # 解决Java程序时区问题
- name: TZ
value: Asia/Shanghai
lifecycle:
preStop:
exec:
command: ["/bin/sh","-c","echo this pod is stopping. > /stop.log && sleep 90s"]
spring-boot-kubernetes:1.0.0这个镜像,我手动创建一下。Dockerfile文件和jar同一级目录

docker build -t spring-boot-kubernetes:1.0.0 .

kubectl apply -f deployment.yaml

Jenkins配置maven、jdk、git等等同样可以参考拙作gitlab+jenkins自动发布到Tomcat。


maven打包这里不需要加mvn
#!/bin/bash
sh rolling_update.sh
rolling_update.sh脚本内容。 #!/bin/bash
ls
cp src/main/resources/Dockerfile target
ls target
cd target
date=`date "+%Y%m%d%H%M%S"`
# 构建镜像
docker build -t spring-boot-kubernetes:$date .
# 滚动更新
kubectl set image deployment/spring-boot-kubernetes-deployment spring-boot-kubernetes=spring-boot-kubernetes:$date --record
# 查看Pod情况
kubectl get pod -o wide
# 查看滚动更新状态
kubectl rollout status deployment/spring-boot-kubernetes-deployment
# 查看Pod情况
kubectl get pod -o wide
Dockerfile文件内容。FROM openjdk:8
ADD spring-boot-kubernetes-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT [ "java", "-jar", "/app.jar"]
Build Now一键发布最新的应用。


Build Now,也可以使用Webhook,可以参考拙作gitlab+jenkins自动发布到Tomcat。Jenkins就做滚动发布的事情,分成这2个步骤。