kubernetes服务的版本回退
下面简单说一下kubernetes的版本回退,因为已经在线上使用挺久的时间了,是利用kubernetes deployment的rollout histrory回退到指定版本,这篇是在jinja和jenkins结合做为kubernetes的服务发布平台基础之上做的回滚,当然可以单独浏览
先给deployment打个样,webservice服务配置如下:
kind: Deployment
apiVersion: apps/v1beta2
metadata:
name: pre-webservice
labels:
k8s-app: pre-webservice
annotations:
kubernetes.io/change-cause: pre-201806291944-216d6afd
spec:
replicas: 1
revisionHistoryLimit: 5
minReadySeconds: 10
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
selector:
matchLabels:
k8s-app: pre-webservice
template:
metadata:
labels:
k8s-app: pre-webservice
spec:
containers:
- name: pre-webservice
image: harbor.bbotte.com/service/webservice:pre-201806291944-216d6afd
imagePullPolicy: IfNotPresent
resources:
limits:
memory: 2048Mi
ports:
- containerPort: 9080
livenessProbe:
tcpSocket:
port: 9080
initialDelaySeconds: 15
periodSeconds: 20
volumeMounts:
- name: pre-webservice-data-storage
mountPath: /opt
imagePullSecrets:
- name: harbor-auth
volumes:
- name: pre-webservice-data-storage
persistentVolumeClaim:
claimName: gfs
---
kind: Service
apiVersion: v1
metadata:
name: pre-webservice-com
labels:
k8s-app: pre-webservice
spec:
selector:
k8s-app: pre-webservice
ports:
- port: 9080
targetPort: 9080
revisionHistoryLimit控制保留几个版本信息。版本回退即把服务回滚回去,镜像的版本号为: gitlab分支-时间戳-git_commit_short
kubernetes.io/change-cause 信息为docker的版本号,以免不知道kubernetes发布的版本和镜像之间的关系,即images 最后面一段,这个是有模板创建的 yaml 配置文件,
部署的命令,需要加 –record=false
kubectl apply -f webservice.yaml --record=false
查看已发布的版本信息:
kubectl rollout history deploy/pre-webservice
deployments "pre-webservice"
REVISION CHANGE-CAUSE
55 pre-201806281524-57a710e1
56 pre-201806281555-403c38aa
57 pre-201806281601-166ffb31
58 pre-201806291944-216d6afd
前面是k8s保留的版本号,后面是docker-image的版本号
回滚到指定版本,因为版本号是以gitlab分支-时间戳-git_commit_short命名,所以可以依据gitlab提交的版本或者时间来回退
kubectl rollout undo daemonset/webservice --to-revision=56
这样就回退到56的版本
2018年07月01日 于 linux工匠 发表