как модули управляют IP-адресом?

#kubernetes #k3s

#kubernetes #k3s

Вопрос:

Я хотел бы знать, как именно модули получают IP-адрес и как они распределяют модули между агентом и мастером.

У меня есть 1 главный узел и 2 узла агента. все мои модули работают хорошо, но мне любопытно, как модули получают IP-адрес.

у некоторых модулей есть узлы кластера IP, а у некоторых есть IP-адрес ethernet. Я запускаю Nginx и Metallb для балансировки нагрузки. Отключите Traefik и Klipper.

если мы видим, что у агента-03 запущено 2 IP-адреса

 root:/# kubectl get pods -A -o wide

ingress          nginx-dep-fdcd8sdfs-gj5gff                 1/1     Running   0          46h     10.42.0.80      master          <none>           <none>

ingress          nginx-dep-fdcd8sdfs-dn80n                1/1     Running   0          46h     10.42.0.79      master          <none>           <none>

ingress          nginx-doc-7cc85c5899-sdh55              1/1     Running   0          44h     10.42.0.82      master          <none>           <none>

ingress          nginx-doc-7cc85c5899-gjghs               1/1     Running   0          44h     10.42.0.83      master          <none>           <none>

prometheus       prometheus-node-exporter-6tl8t    1/1     Running   0          47h     192.168.1.3   agent-03    <none>           <none>

ingress          ingress-controller-nginx-ingress-controller-rqs8n            1/1     Running   5          47h     192.168.1.3    agent-03   <none>           <none>

prometheus       prometheus-kube-prometheus-operator-68fbcb6d67-8qsnf       1/1     Running   1          46h     10.42.2.52     agent-03    <none>           <none>

ingress          nginx-doc-7cc85c5899-b77j6                1/1     Running   0          43h     10.42.2.57      agent-03    <none>           <none>

metallb-system   speaker-sk4pz                                 1/1     Running   1          47h     192.168.1.3    agent-03   <none>           <none>

 

в моем модуле показывает, что агент-03 запускает Nginx-doc, используя IP-кластер, в то время как metal использует IP-ethernet, или это зависит от того, какая служба запущена в модулях?

 ingress          nginx-doc-7cc85c5899-b77j6                  1/1     Running   0          43h     10.42.2.57      agent-03    <none>           <none>

metallb-system   speaker-sk4pz                                   1/1     Running   1          47h     192.168.1.3    agent-03   <none>           <none>
 

и я вижу, что у master запущено 2 модуля Nginx-doc, что означает, что при развертывании 3 Nginx-doc один агент не получит ни одного Nginx-doc, потому что он был взят мастером. и он не делится поровну.

Если я пропустил настройку, какую часть мне нужно исправить.

Ответ №1:

На основе вашего внутреннего плагина ваш модуль получит IP-адреса. В основном это будут внутренние IP-адреса.

Существуют разные типы сетевых интерфейсов, мы можем использовать CNI по мере необходимости: https://kubernetes.io/docs/concepts/cluster-administration/networking /

Модуль получает доступ к сервису. Существуют разные типы сервисов. IP-адрес кластера, порт узла, балансировщик нагрузки. https: //kubernetes.io/docs/concepts/services-сеть / сервис/

в моем модуле показывает, что агент-03 запускает Nginx-doc, используя IP-кластер, в то время как metal использует IP-ethernet, или это зависит от того, какая служба запущена в модулях?

Это может быть возможно из-за используемого вами типа сервиса, поскольку IP отличается и использует ethernet.

Если ваш тип службы — LoadBalancer с использованием MetalLB, это означает, что служба предоставляется с использованием IP, а не как внутренний IP, который в основном есть у модулей.

kubectl get svc -n <namespace name> и проверьте

и я вижу, что у master запущено 2 модуля Nginx-doc, что означает, что при развертывании 3 Nginx-doc один агент не получит ни одного Nginx-doc, потому что он был взят мастером. и он не делится поровну.

На это нет гарантии, K8s помещает и назначает модули на основе оценки.

Вы можете прочитать больше о score здесь: https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler /

Если вы хотите исправить свой модуль на определенном узле, предположим, что вы используете графический процессор с узлом, который вы должны запланировать на этом узле для использования GPU в этом случае, который вы можете использовать.

https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/

Ответ №2:

IP-адрес модуля предоставляется драйвером CNI из диапазона, который был указан при создании кластера с использованием --pod-network-cidr , см. Здесь .

Некоторые реализации CNI могут реализовывать дополнительное поведение.

В вашем конкретном случае я считаю, что рассматриваемые модули начинают использоваться hostNetwork: true в их PodSpec, что дает им доступ к хост-сети

Комментарии:

1. Точно, я установил hostNetwork= true, я запускаю вход для доступа к моему домену с именем хоста.