Target
- Compreender o serviço Kubernetes
- Compreender o relacionamento entre Labels e LabelSelector e Service
- No cluster kubernetes, publique aplicativos através do Service
Visão geral do serviço Kubernetes
De fato, o Pod (Container Group) tem seu próprio ciclo de vida . Quando o nó do trabalhador (nó) falha, o Pod (grupo de contêineres) em execução no nó também desaparece. Em seguida, a Implantação pode ajustar dinamicamente o cluster de volta ao seu estado original, criando um novo Pod (grupo de contêineres) para manter o aplicativo em execução.
Por exemplo, suponha que exista um programa de back-end de processamento de imagem com 3 cópias de tempo de execução. Essas 3 cópias são substituíveis (aplicativos sem estado). Mesmo que o Pod (grupo de contêineres) desapareça e seja recriado, ou o número de cópias seja aumentado de 3 para 5, o sistema front-end não precisa prestar atenção às alterações das cópias de back-end. Como cada Pod (grupo de contêineres) no cluster Kubernetes possui um endereço IP exclusivo (mesmo que seja um Pod diferente no mesmo Nó), precisamos de um mecanismo para proteger o Pod (grupo de contêineres) do sistema back-end de Alterações no endereço IP durante o processo de destruição e criação.
O serviço no Kubernetes fornece uma camada de abstração que seleciona Pods (grupos de contêineres) com certas características e define um método de acesso para eles. O serviço desacopla a interdependência entre os Pods (grupos de contêineres) (acessar originalmente outro Pod a partir de um Pod requer conhecer o endereço IP da outra parte) . O Pod (grupo de contêineres) selecionado por um Serviço geralmente é determinado pelo LabelSelector.
Ao criar um serviço, definindo o valor do campo spec.type no arquivo de configuração, o aplicativo pode ser exposto ao exterior de diferentes maneiras:
-
ClusterIP (padrão)
Anuncie serviços em IPs internos no cluster, desta forma, o Serviço só pode ser acessado dentro do cluster
-
NodePort
Use o NAT para anunciar serviços na mesma porta de cada cluster. Dessa maneira, você pode acessar o serviço acessando qualquer nó + número da porta no cluster
<NodeIP>:<NodePort>
. No momento, o método de acesso do ClusterIP ainda está disponível. -
Balanceador de carga
Em um ambiente de nuvem (requer suporte do provedor de nuvem), crie um balanceador de carga fora do cluster e use o endereço IP do balanceador de carga como o endereço de acesso ao serviço. No momento, os métodos de acesso do ClusterIP e do NodePort ainda estão disponíveis.
Resumo:
O serviço é uma camada de abstração, que seleciona um grupo de pods (grupos de contêineres) por meio do LabelSelector, publica as portas designadas desses pods para fora do cluster e oferece suporte ao balanceamento de carga e à descoberta de serviços.
- Anuncie a porta do Pod para torná-lo acessível
- Balanceamento de carga entre vários pods
- Use Label e LabelSelector
Serviços e etiquetas
Na figura abaixo, existem dois serviços, o Serviço A (linha amarela tracejada) e o Serviço B. (linha azul tracejada) O Serviço A encaminha a solicitação ao Pod com um IP 10.10.10.1 e o Serviço B encaminha a solicitação ao IP com 10.10.10.2, 10.10. 10.3, 10.10.10.4 Pod.
O serviço roteia solicitações externas para um conjunto de Pods, que fornece uma camada de abstração que permite ao Kubernetes agendar dinamicamente grupos de contêineres sem afetar o chamador de serviço (recrie o grupo de contêineres após a falha do grupo de contêineres e aumente ou diminua o mesmo Uma implantação corresponde ao número de grupos de contêineres etc.) .
O serviço usa etiquetas, LabelSelector (etiquetas e seletores) para corresponder a um grupo de pods . Os rótulos (rótulos) são pares de chave / valor anexados aos objetos Kubernetes e têm vários usos:
- Atribua objetos Kubernetes (Nó, Implantação, Pod, Serviço, etc.) para ambiente de desenvolvimento, ambiente de teste ou ambiente de produção
- Tags de versão incorporadas, use tags para distinguir diferentes versões de software de aplicativo
- Use tags para classificar objetos Kubernetes
A figura a seguir mostra a associação entre Labels e LabelSelector
- A implantação B contém LabelSelector para app = B. Dessa forma, declare o Pod com o rótulo app = B associado a ele
- O Pod criado pelo Deployment B contém a tag app = B
- O serviço B seleciona os pods que podem ser roteados pelo aplicativo seletor de tags = B
Os rótulos podem ser anexados ao criar objetos Kubernetes ou podem ser anexados após a criação. Você pode modificar os rótulos de um objeto Kubernetes a qualquer momento
Combate real: crie um serviço para implantação do nginx
Os rótulos são definidos na Implantação que criou o nginx, da seguinte maneira:
metadados: #Translated name são metadados, ou seja, alguns atributos e informações básicos de Nome da implantação : nginx-deployment # Etiquetas de nome da implantação : #labels , é possível localizar de forma flexível um ou mais recursos, onde chave e valor podem ser personalizados Vários grupos de aplicativos: nginx # Defina a chave para a implantação no aplicativo e o valor nas tags nginx
Criar arquivo nginx-service.yaml
vi nginx-service.yaml
O conteúdo é o seguinte
apiVersion: v1 tipo: metadados do serviço : nome: nginx-service # nome do serviço rótulos: # serviço próprio rótulo app: nginx # defina a chave do serviço como o aplicativo e o valor como o rótulo nginx spec: #Este é o serviço Definição, descreve como o Serviço seleciona o Pod e como acessar o seletor: #tag selector app: nginx #select Portas de pod com tag app: nginx : -name: nginx-port #port name protocolo: TCP #protocol type TCP / Porta UDP : 80 # Outros grupos de contêineres no cluster podem ser acessados pela porta 80 Service nodePort: 32600 # Acesso pela porta de qualquer nó 32600 Service targetPort: 80 # Encaminhe a solicitação para a porta 80 que corresponda ao tipo de Pod : NodePort #Serive type, ClusterIP / NodePort / LoaderBalancer
Executar comando
[root @ guanbin-k8s-master k8s] # kubectl aplica -f serviço nginx-service.yaml / serviço nginx criado
Verifique o resultado da execução
Você pode visualizar o serviço chamado nginx-service.
[root @ guanbin-k8s-master k8s] # kubectl get service -o wide NOME TIPO CLUSTER-IP PORTAS EXTERNAS DE IP IP SELETOR DE IDADE kubernetes ClusterIP 10.96.0.1 <nenhum> 443 / TCP 2d23h <nenhum> kubernetes-bootcamp NodePort 10.96.52.43 <nenhum> 8080: 31393 / TCP Execução em 2d = serviço de nginx do kubernetes-bootcamp NodePort 10.96.10.148 <nenhum> 80: 32600 / TCP 70s app = nginx
Acesso ao serviço
ondulação <任意节点的 IP>:32600
[root @ guanbin-k8s-master k8s] # curl guanbin-k8s-master: 32600 <! DOCTYPE html> <html> <head> <title> Bem-vindo ao nginx! </title> <style> body { width: 35em; margem: 0 automático; família de fontes: Tahoma, Verdana, Arial, sem serifa; } </style> </head> <body> <h1> Bem-vindo ao nginx! </h1> <p> Se você vir esta página, o servidor web nginx será instalado e funcionando com êxito . É necessária mais configuração. </p> <p> Para obter documentação e suporte on-line, consulte <a href="http://nginx.org/"> nginx.org </a>. <br/> <a href="http://nginx.com/"> nginx.com </a>. </p> <p> <em> Obrigado por usar o nginx. </em> </p> </body> </html>
Ou visite a página