Kubernetes 基于Service的蓝绿发布
K8S 蓝绿发布蓝绿发布基本原理基于Service/Selector/Label实现蓝绿发布发布两个版本POD蓝绿切换蓝绿发布基本原理蓝绿发布时一种应用升级发布方式,这种发布方式可以瞬间在老版本与新版本之间切换。可以做到用户体验无中断。为了让K8S中的应用可以支持蓝绿发布,需要在POD yaml文件、nodeport service yaml文件中,添加一个新的label - version。为了
蓝绿发布基本原理
蓝绿发布是一种应用升级发布方式,这种发布方式可以瞬间在老版本与新版本之间切换。可以做到用户体验无中断。
为了让K8S中的应用可以支持蓝绿发布,需要在POD yaml文件、nodeport service yaml文件中,添加一个新的label - version。
为了完成发布,应用升级,需要将NodePort Service中的version值手动修改为新版本。这样就完成了蓝绿切换,流量切换。
后续,如新版本POD发布,应用验证没有问题,可以把老的POD删除掉。
如果新版本有问题,则依然修改NodePort Service中的version值,让流量切回老版本。
基于Service/Selector/Label实现蓝绿发布
本实验我们需要创建3个YAML文件。
- petclinic-pod-v1.0.0.yml
- petclinic-pod-v1.0.1.yml
- petclnic-service.yml
petclinic-pod-v1.0.0.yml文件内容如下:
apiVersion: v1
kind: Pod
metadata:
name: petclinic-v1.0.0
labels:
app: petclinic
version: v1.0.0
spec:
containers:
- name: petclinic
image: spring2go/spring-petclinic:1.0.0.RELEASE
petclinic-pod-v1.0.1.yml文件内容如下:
apiVersion: v1
kind: Pod
metadata:
name: petclinic-v1.0.1
labels:
app: petclinic
version: v1.0.1
spec:
containers:
- name: petclinic
image: spring2go/spring-petclinic:1.0.1.RELEASE
petclnic-service.yml文件内容如下:注意selector下,增加了一个version标签。
apiVersion: v1
kind: Service
metadata:
# Unique key of the Service instance
name: petclinic
spec:
ports:
# Accept traffic sent to port 80
- name: http
port: 8080
targetPort: 8080
nodePort: 31080
selector:
app: petclinic
version: v1.0.0
type: NodePort
发布两个版本POD
#当前目录3个YAML文件
ls
#查看当前K8S中运行的service/pod。
kubectl get all
#把当前目录的所有文件,一次性发布。
kubectl apply -f .
kubectl get all # 查看2个POD,1个Nodeport Service
浏览器校验已发布的应用。http://localhost:31080
#显示POD的标签信息
kubectl get po --show-labels
#显示Service的详情,找到selector指向
kubectl describe svc petclinic
蓝绿切换
更新nodeport service yaml文件。
修改petclnic-service.yml文件内容如下
apiVersion: v1
kind: Service
metadata:
# Unique key of the Service instance
name: petclinic
spec:
ports:
# Accept traffic sent to port 80
- name: http
port: 8080
targetPort: 8080
nodePort: 31080
selector:
app: petclinic
version: v1.0.1
type: NodePort
切换命令,由于POD没变化,所以可以直接发布当前目录所有文件。
kubectl apply -f .
kubectl get all
kubectl describe svc petclinic
浏览器校验已发布的应用。http://localhost:31080
环境清理 用于实验环境清理。
删除所有POD
kubectl delete po --all
删除所有Service, 虽然也会删除掉service/kubernetes,但是它会马上自动启动。
kubectl delete svc --all
更多推荐
所有评论(0)