Назад | Перейти на главную страницу

Сервис направляет весь трафик в один из POD, созданный контроллером репликации.

У меня есть контроллер репликации, который создает более одного 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 обрабатывается так же, как и любая другая метка в селекторе. Обычной практикой является добавление метки имени к модулю, которая соответствует имени метаданных, а затем использование его в селекторе, но без метки на модуле селектор не найдет его.