192 lines
4.0 KiB
Markdown
192 lines
4.0 KiB
Markdown
**亲和力**
|
||
|
||
````
|
||
apiVersion: v1
|
||
kind: Pod
|
||
metadata:
|
||
name: with-node-affinity
|
||
spec:
|
||
affinity:
|
||
nodeAffinity:
|
||
requiredDuringSchedulingIgnoredDuringExecution:
|
||
nodeSelectorTerms:
|
||
- matchExpressions:
|
||
- key: kubernetes.io/e2e-az-name
|
||
operator: In
|
||
values:
|
||
- e2e-az1
|
||
- e2e-az2
|
||
preferredDuringSchedulingIgnoredDuringExecution:
|
||
- weight: 1
|
||
preference:
|
||
matchExpressions:
|
||
- key: another-node-label-key
|
||
operator: In
|
||
values:
|
||
- another-node-label-value
|
||
containers:
|
||
- name: with-node-affinity
|
||
image: nginx
|
||
|
||
````
|
||
|
||
**Pod亲和力**
|
||
|
||
````
|
||
apiVersion: v1
|
||
kind: Pod
|
||
metadata:
|
||
name: with-pod-affinity
|
||
spec:
|
||
affinity:
|
||
podAffinity:
|
||
requiredDuringSchedulingIgnoredDuringExecution:
|
||
- labelSelector:
|
||
matchExpressions:
|
||
- key: security
|
||
operator: In
|
||
values:
|
||
- S1
|
||
topologyKey: failure-domain.beta.kubernetes.io/zone
|
||
podAntiAffinity:
|
||
preferredDuringSchedulingIgnoredDuringExecution:
|
||
- weight: 100
|
||
podAffinityTerm:
|
||
labelSelector:
|
||
matchExpressions:
|
||
- key: security
|
||
operator: In
|
||
values:
|
||
- S2
|
||
topologyKey: failure-domain.beta.kubernetes.io/zone
|
||
containers:
|
||
- name: with-pod-affinity
|
||
image: nginx
|
||
````
|
||
|
||
**示例1:同一个应用部署在不同的宿主机**
|
||
|
||
````
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
labels:
|
||
app: must-be-diff-nodes
|
||
name: must-be-diff-nodes
|
||
namespace: kube-public
|
||
spec:
|
||
replicas: 3
|
||
selector:
|
||
matchLabels:
|
||
app: must-be-diff-nodes
|
||
strategy:
|
||
rollingUpdate:
|
||
maxSurge: 1
|
||
maxUnavailable: 0
|
||
type: RollingUpdate
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: must-be-diff-nodes
|
||
spec:
|
||
affinity:
|
||
podAntiAffinity:
|
||
requiredDuringSchedulingIgnoredDuringExecution:
|
||
- labelSelector:
|
||
matchExpressions:
|
||
- key: app
|
||
operator: In
|
||
values:
|
||
- test-affinity
|
||
topologyKey: kubernetes.io/hostname
|
||
containers:
|
||
- env:
|
||
- name: TZ
|
||
value: Asia/Shanghai
|
||
- name: LANG
|
||
value: C.UTF-8
|
||
image: nginx
|
||
imagePullPolicy: Always
|
||
name: must-be-diff-nodes
|
||
|
||
````
|
||
|
||
**示例2:同一个应用不同副本固定节点**
|
||
|
||
````
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
name: redis-cache
|
||
spec:
|
||
selector:
|
||
matchLabels:
|
||
app: store
|
||
replicas: 3
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: store
|
||
spec:
|
||
nodeSelector:
|
||
app: store
|
||
affinity:
|
||
podAntiAffinity:
|
||
requiredDuringSchedulingIgnoredDuringExecution:
|
||
- labelSelector:
|
||
matchExpressions:
|
||
- key: app
|
||
operator: In
|
||
values:
|
||
- store
|
||
topologyKey: "kubernetes.io/hostname"
|
||
containers:
|
||
- name: redis-server
|
||
image: redis:3.2-alpine
|
||
|
||
````
|
||
|
||
**示例3:应用和缓存尽量部署在同一个域内**
|
||
|
||
````
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
name: web-server
|
||
spec:
|
||
selector:
|
||
matchLabels:
|
||
app: web-store
|
||
replicas: 3
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: web-store
|
||
spec:
|
||
affinity:
|
||
podAntiAffinity:
|
||
requiredDuringSchedulingIgnoredDuringExecution:
|
||
- labelSelector:
|
||
matchExpressions:
|
||
- key: app
|
||
operator: In
|
||
values:
|
||
- web-store
|
||
topologyKey: "kubernetes.io/hostname"
|
||
podAffinity:
|
||
requiredDuringSchedulingIgnoredDuringExecution:
|
||
- labelSelector:
|
||
matchExpressions:
|
||
- key: app
|
||
operator: In
|
||
values:
|
||
- store
|
||
topologyKey: "kubernetes.io/hostname"
|
||
containers:
|
||
- name: web-app
|
||
image: nginx:1.16-alpine
|
||
|
||
|
||
````
|
||
|