Как отобразить порт kubelet на POD

Один из моих узлов kubernetes, я вижу, что мой kubelet прослушивает порт 38641. Как сопоставить этот номер порта с фактическим POD, на который он указывает.

# netstat -alpn |grep 38641
tcp        0      0 127.0.0.1:38641         0.0.0.0:*               LISTEN      9832/kubelet
tcp        0      0 127.0.0.1:45230         127.0.0.1:38641         CLOSE_WAIT  9832/kubelet
tcp        0      0 127.0.0.1:39922         127.0.0.1:38641         CLOSE_WAIT  9832/kubelet
tcp        0      0 127.0.0.1:39238         127.0.0.1:38641         ESTABLISHED 9832/kubelet

не могли бы вы приложить результаты этой команды: sudo netstat -alpn |grep kube-proxy kubectl get svc --all-namespaces -o wide

aurelius 09.10.2018 18:28
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
1
1
148
1

Ответы 1

Я предполагаю, что вы представили службу в кубернетах с использованием типа NodePort, который учитывает высокий номер порта. В этом случае вы можете просто получить список всех служб, работающих в кластере, и затем выполнить поиск нужного порта. т.е.

kubectl get svc --all-namespaces | grep 38641

Когда у вас есть служба, которая предоставляет этот порт, вы можете проверить службу и увидеть, какие поды выбираются службой.

PORT=38641
SERVICE_OUTPUT=$(kubectl get svc --all-namespaces | grep $PORT)
NAMESPACE=$(echo $SERVICE_OUTPUT | awk '{ print $1 }')
SERVICE=$(echo $SERVICE_OUTPUT | awk '{ print $2 }')
kubectl describe -n $NAMESPACE svc $SERVICE

Теперь займемся селектором:

SELECTOR=$(kubectl describe -n $NAMESPACE svc $SERVICE | grep Selector | awk '{ print $2}')

Хорошо, теперь, когда мы знаем, какие модули выбираются, мы можем легко найти эти модули:

kubectl get po --selector $SELECTOR -n $NAMESPACE

Мы можем захватить имена модулей для дальнейшей проверки, например, для определения набора реплик, из которого они взяты:

PODS=$(kubectl get po --selector $SELECTOR -n $NAMESPACE --no-headers=true | awk '{ print $1}')
echo $PODS

Если вам нужно, вы можете отследить происхождение стручка:

POD=full-pod-name
RS=$(kubectl -n $NAMESPACE describe po $POD | grep -hoe ReplicaSet.*); 
echo rs: $RS;

DEPLOYMENT=$(kubectl -n $NAMESPACE describe $RS | grep -hoe Deployment.*); 
echo deployment: $DEPLOYMENT;

Я пробовал, но не видел этот порт в моем списке услуг. поэтому и разместил здесь сообщение.

sfgroups 27.09.2018 04:41

вы использовали --all-namespaces?

yosefrow 27.09.2018 04:53

да, я выполнил эти две команды kg svc --all-namespaces -o yaml |grep 38641 и kg all --all-namespaces -o yaml |grep 38641, не вернув никаких результатов

sfgroups 27.09.2018 16:21

что такое кг? Я не знаком с этой командой. Возможно, попробуйте запустить необработанную команду вместо использования псевдонима или сторонней функции. Также вы должны убедиться, что ваш kubectl настроен для взаимодействия с правильным кластером с помощью команд kubectl cluster-info и kubectl config get-contexts.

yosefrow 30.09.2018 07:13
kg - это псевдоним для kubectl get. Я запускаю команду в правильном кластере.
sfgroups 01.10.2018 15:14

в вашем кластере включен rbac? возможно, у пользователя, который вы используете, нет разрешения на просмотр определенных ресурсов.

yosefrow 02.10.2018 06:37

да, в 1.11 кластер RBAC включен. Я использую учетную запись администратора для запроса кластера.

sfgroups 02.10.2018 15:20

Другие вопросы по теме