对于一项服务,您可以在一个定义nodeSelector
后面进行多个具有不同配置的部署。Service
例如,您可以像这样标记您的节点:
kubectl label nodes node-1 pool=freshhardware
kubectl label nodes node-2 pool=freshhardware
kubectl label nodes node-3 pool=shakyhardware
然后有两个这样的部署:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 4
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
nodeSelector:
pool: freshhardware
...第二个可能看起来相同,只是交换了这些字段:
nodeSelector:
pool: shakyhardware
然后,像这样的服务定义会将两个部署中的所有 pod 都考虑在内:
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
run: my-nginx
缺点当然是您必须一次管理两个部署,但无论如何这都是这个问题的内在因素。