☸️ Как планировать поды на нодах управления Kubernetes (Master)

by itisgood

По умолчанию ваш кластер 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

You may also like

Leave a Comment