#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, я запускаю вход для доступа к моему домену с именем хоста.