O serviço despacha todo o tráfego para um dos PODs criados pelo controlador de replicação

1

Eu tenho um controlador de replicação que cria mais de um PODs. Dentro de cada POD, há um contêiner executando um aplicativo.

Agora, dentro do contêiner, ele pode chamar a API do kubernetes como abaixo.

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 é o nome do POD; POD_NAMESPACE é o namespace do POD

As instâncias do aplicativo em contém um cluster. E eles elegem uma das instâncias do aplicativo como mestre, os outros são escravos que replicam os dados do mestre em tempo real. Quando a instância do mestre falhar, outra instância do escravo será promovida para o mestre.

Quando o aplicativo no container é promovido para master, quero que a instância do aplicativo mestre chame a API do kubernetes para que todo o tráfego vá para esse POD / container.

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "my-cluster"
  },
  "spec": {
    "ports": [{
      "port": 33379,
      "targetPort": 33379
    }],
    "type" : "None",
    "selector": {
      "name": "<POD_NAME>"
    }
  }
}

Eu especifiquei o POD_NAME como o seletor, mas o serviço não pode encontrar nenhum do POD.

Como posso configurar o serviço para que todo o tráfego seja direcionado a esse POD?

    
por Mr.Wang from Next Door 15.03.2016 / 04:17

1 resposta

0

Você pode fazer com que o seletor de serviços selecione um marcador "master" , por exemplo, "role": "master" - então você pode adicionar o rótulo mestre a qualquer pod escolhido como mestre. Os rótulos podem ser alterados em pods em execução usando o método PATCH.

I specified the POD_NAME as the selector, but the service can not find any of the POD.

O rótulo name é tratado da mesma forma que qualquer outro rótulo em um seletor. Há uma prática comum de adicionar um rótulo de nome a um pod que corresponda ao nome de metadados e usá-lo em um seletor, mas sem o rótulo no pod, o seletor não o encontrará.

    
por 15.03.2016 / 18:51

Tags