05 k8s根据不同命名空间指定不同节点
k8s根据不同命名空间指定不同节点¶
背景¶
在测试环境中测试不同项目时需要用到不同的环境, 有时候会需要将某一个命名空间的所有pod 都固定到一个节点或者一部分节点上, 如何处理呢?
在k8s 提供了nodeSelector 可以将pod 调度到对应的节点上, 但是需要手动在每一个服务中都加上nodeSelector. 有没有简单办法呢?
解决思路¶
在k8s 1.22 版本之后都支持 PodNodeSelector, 可以很好的解决这一问题
配置过程如下:
1、 配置kubernetes-apiserver
## 编辑/etc/kubernetes/manifests/kube-apiserver.yaml
$ vim /etc/kubernetes/manifests/kube-apiserver.yaml
## 找到--enable-admission-plugins 参数, 将其修改为 --enable-admission-plugins=NodeRestriction,PodNodeSelector
## 保存退出
2、 对namespace 添加注解scheduler.alpha.kubernetes.io/node-selector: env=test
apiVersion: v1
kind: Namespace
metadata:
name: test
annotations:
scheduler.alpha.kubernetes.io/node-selector: env=test
spec: {}
status: {}
3、 配置完成之后, 在test
命名空间下的所有的pod 都会添加一个nodeSelector: env=test
注意: 这个nodeSelector 不是由deployment 等资源管理的, 而是通过k8s 直接配置的, 因此只会修改pod 的资源
4、在需要此命名空间的节点加上env=test 的标签, 就可以调度上去了
$ kubectl label node test env=test