Pod在多可用区worker节点上的高可用部署
一、??????需求分析
當前kubernetes集群中的worker節點可以支持添加多可用區中的ECS,這種部署方式的目的是可以讓一個應用的多個pod(至少兩個)能夠分布在不同的可用區,起碼不能分布在同一個可用區,已達到高可用或者同城災備的部署。
二、??????效果圖
三、??????實現原理
為了實現上述的效果,kubernetes提供了pod的親和性和反親和性來保證pod在節點級別,可用區級別的高可用部署;具體的值為topologyKey:failure-domain.beta.kubernetes.io/zone。
四、??????實現步驟
在ACK上創建完集群后,不論從哪個可用區添加節點,都會對該節點打上對應的可用區標簽,比如,一個節點是屬于北京可用區a的,那么在加入到kubernetes集群后,該節點上會有一個這樣的標簽:failure-domain.beta.kubernetes.io/zone: cn-beijing-a。
在有了上述標簽后,對應用進行多可用區部署時,我們就可以使用一下yaml文件來使不同的pod分配到不同的可用區。
? ? ?Yaml文件示例:
apiVersion: apps/v1 kind: Deployment metadata:name: redis-cache spec:selector:matchLabels:app: storereplicas: 3template:metadata:labels:app: storespec:affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- storetopologyKey: "failure-domain.beta.kubernetes.io/zone"containers:- name: redis-serverimage: redis:3.2-alpine上面yaml文件中的podAntiAffinity:部分規定了node的反親和性,并且由于使用了topologyKey: "failure-domain.beta.kubernetes.io/zone",如果failure-domain.beta.kubernetes.io/zone這個key有三種value,比如cn-beijing-a,cn-beijing-b,cn-beijing-c;那么pod會被分配在這三個不同的可用區。并且由于使用了preferredDuringSchedulingIgnoredDuringExecution,所以如果pod個數大于可用區個數的話,pod會盡可能的放在不同的可用區,最后會出現多出來的pod會與原有pod在同一個可用區。
上面的使用方式還有很多種,包括node級別的,詳細請參考:https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
五、??????注意問題(云盤)
由于云盤不能跨可用區掛載,如果有pod使用了存儲卷,該pod需要被調度到與存儲卷相同的可用區的機器上。
其他存儲卷比如NAS,OSS是可以采用上述部署方式的。
?
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的Pod在多可用区worker节点上的高可用部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日站会——你的站会姿势正确吗?
- 下一篇: 一次开发、多端分发,阿里巴巴发布AliO