由于项目部署在内网环境,但有应用A需要访问公网,而只有主机node-01是可以访问公网的,所以我们需要将应用A 的pod分配到node-01上。此时需要用到kubernetes的nodeSelector.
nodeSelector是节点选择约束的最简单的形式,通过给node添加标签的形式,将pod的分配到指定的node上。
1、给节点添加标签
我们通过以下命令给节点添加标签kubectl label nodes <node-name> <label-key>=<label-value>
> kubectl label nodes node-01 pubilc.network=True
node/node-01 labeled
查看标签,会发现多了network=True的值。
> kubectl get no --show-labels
node-01 Ready <none> 37d v1.15.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-01,kubernetes.io/os=linux,pubilc.network=True
2、在pod的配置中添加nodeSelector字段
pods/pay-service.yaml
apiVersion: v1
kind: Pod
metadata:
name: pay-service
labels:
env: dev
spec:
containers:
- name: pay-service
image: pay-service
imagePullPolicy: IfNotPresent
nodeSelector:
pubilc.network: True
这样我们的pod就会自动分配到被添加了标签pubilc.network=True 的node上。
另外kubernetes还提供了Affinity and anti-affinity以及pod间的Affinity and anti-affinity,更灵活的控制pod的分配。
参考:https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector