По умолчанию ваш кластер Kubernetes не будет планировать поды на ноде управления по соображениям безопасности.
Рекомендуется придерживаться этого, но для тестовых сред вы можете запланировать Pod на узле уровня управления, чтобы максимально использовать ресурсы.
Если вы хотите иметь возможность планировать модули на узле управления Kubernetes, вам нужно удалить taint на мастер нодах.
kubectl taint nodes --all node-role.kubernetes.io/master-
Вывод будет выглядеть примерно так:
node/k8smaster01.computingforgeeks.com untainted
taint "node-role.kubernetes.io/master" not found
taint "node-role.kubernetes.io/master" not found
taint "node-role.kubernetes.io/master" not found
Это приведет к удалению taint node-role.kubernetes.io/master со всех узлов, в которых он есть, включая ноды управления, что означает, что теперь scheduler (планировщик) сможет планировать поды везде.
Тестирование размещение подов на мастер нодах Kubernetes
У меня есть кластер с тремя worker нодами и одной мастер нодой.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8smaster01.itisgood.ru Ready master 12h v1.17.0
k8snode01.itisgood.ru Ready <none> 12h v1.17.0
k8snode02.itisgood.ru Ready <none> 12h v1.17.0
k8snode03.itisgood.ru Ready <none> 9h v1.17.0
Создайте тестовое пространство имен:
kubectl create namespace demo
Создадим развертывание с 5 репликами.
$ vim nginx-deployment.yaml
С таким содержимым:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: demo
labels:
app: nginx
color: green
spec:
replicas: 5
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
color: green
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- name: http
protocol: TCP
containerPort: 80
resources:
limits:
cpu: "200m"
memory: "256Mi"
requests:
cpu: 100m
memory: 128Mi
---
apiVersion: v1
kind: Service
metadata:
annotations:
name: nginx-demo-service
namespace: demo
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: nginx
sessionAffinity: None
type: NodePort
Применим манифест:
$ kubectl apply -f nginx-deployment.yaml
Проверьте, запланированы ли поды на ноде управления:
$ kubectl get pods -n demo -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-675bf5bc87-666jg 1/1 Running 0 17m 192.168.213.131 k8snode01.itisgood.ru
nginx-675bf5bc87-mc6px 1/1 Running 0 17m 192.168.94.13 k8smaster01.itisgood.ru
nginx-675bf5bc87-v5q87 1/1 Running 0 17m 192.168.144.129 k8snode03.itisgood.ru
nginx-675bf5bc87-vctqm 1/1 Running 0 17m 192.168.101.195 k8snode02.itisgood.ru
nginx-675bf5bc87-w5pmh 1/1 Running 0 17m 192.168.213.130 k8snode01.itisgood.ru
Мы видим, что на мастер ноде появился Под.
Давайте заодно проверим и службу:
$ kubectl get svc -n demo
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service NodePort 10.96.184.67 <none> 80:31098/TCP 21m
Поскольку мы используем NodePort, мы должны иметь возможность доступа к службе с любого IP-адреса узла кластера через порт 31098.

Теперь мы можем удалить демонстрационные объекты.
$ kubectl delete -f nginx-deployment.yaml
deployment.apps "nginx" deleted
service "nginx-service" deleted
$ kubectl get pods,svc -n demo
No resources found in demo namespace.
Это все о том, как планировать разверочивание подов на мастер нодах Kubernetes.
Наш раздел о K8s становиться все больше, изучайте и становиться про:
Материалы по Kubernetes