У меня есть контроллер репликации, который создает более одного POD. Внутри каждого POD есть контейнер, в котором запущено приложение.
Теперь внутри контейнера он может вызывать Kubernetes API, как показано ниже.
KUBE_TOKEN=$(</var/run/secrets/kubernetes.io/serviceaccount/token)
curl --silent --insecure --header "Authorization: Bearer $KUBE_TOKEN" \
https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_PORT_443_TCP_PORT/api/v1/namespaces/$POD_NAMESPACE/pods/$POD_NAME
POD_NAME
имя POD; POD_NAMESPACE
это пространство имен POD
Экземпляры приложения в contains составляют кластер. И они выбирают один из экземпляров приложения в качестве главного, остальные - в качестве подчиненных, которые реплицируют данные с главного устройства в реальном времени. Когда главный экземпляр выходит из строя, другой подчиненный экземпляр становится главным.
Когда приложение в контейнере становится ведущим, я хочу, чтобы экземпляр главного приложения вызывал API кубернетов, чтобы весь трафик шел в этот POD / контейнер.
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "my-cluster"
},
"spec": {
"ports": [{
"port": 33379,
"targetPort": 33379
}],
"type" : "None",
"selector": {
"name": "<POD_NAME>"
}
}
}
Я указал POD_NAME
как селектор, но сервис не может найти ни одного POD.
Как я могу настроить службу так, чтобы весь трафик шел на этот POD?
Селектор услуг может выбрать "master"
ярлык, например "role": "master"
- тогда вы можете добавить основную этикетку к любому модулю, выбранному в качестве главного. Ярлыки можно изменить на запущенных модулях с помощью метода PATCH.
Я указал POD_NAME в качестве селектора, но служба не может найти ни одного POD.
В name
label обрабатывается так же, как и любая другая метка в селекторе. Обычной практикой является добавление метки имени к модулю, которая соответствует имени метаданных, а затем использование его в селекторе, но без метки на модуле селектор не найдет его.