示例1:同一个应用部署在不同的宿主机
在使用Kubernetes时,一般都会有很多节点运行容器,此时可以使用Pod反亲和力将同一个应用部署到不同的节点上,达到更高的可用性,以免同一个应用部署到相同的宿主机带来的风险。
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: must-be-diff-nodes
spec:
replicas: 3
selector:
matchLabels:
app: must-be-diff-nodes
template:
metadata:
labels:
app: must-be-diff-nodes
spec:
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- must-be-diff-nodes
topologyKey: kubernetes.io/hostname
containers:
- name: must-be-diff-nodes
image: nginx:1.14.2
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
env:
- name: TZ
value: Asia/Shanghai
- name: LANG
value: C.UTF-8
集群安装时会以主机名添加一个Label:kubernetes.io/hostname=HOSTNAME,所以每台主机相当于一个不同的域,这样的话就保证了相同业务应用不会被部署在同一台主机。
$ kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready control-plane 3d3h v1.27.6 ...,kubernetes.io/hostname=master,...
node01 Ready <none> 3d3h v1.27.6 ...,kubernetes.io/hostname=node01,...
node02 Ready <none> 3d3h v1.27.6 ...,kubernetes.io/hostname=node02,...
最后更新于
这有帮助吗?