Configurando seu primeiro cluster em seu Virtual Private Cloud (VPC)
Crie um cluster do IBM Cloud® Kubernetes Service em sua nuvem privada virtual (VPC).
Com os clusters do IBM Cloud Kubernetes Service na VPC, você pode criar seu cluster na próxima geração da plataforma IBM Cloud, em sua Nuvem Privada Virtual. A VPC fornece a segurança de um ambiente de nuvem particular com a escalabilidade dinâmica de uma nuvem pública. A VPC usa a próxima versão de IBM Cloud Kubernetes Service provedores de infraestrutura, com um grupo de funcionalidades da API, da CLI e do console da v2. É possível criar apenas clusters padrão para VPC.
Público
Este tutorial é para administradores que estão criando um cluster no IBM Cloud Kubernetes Service na VPC pela primeira vez.
Objetivos
Nas lições do tutorial, você cria um cluster IBM Cloud Kubernetes Service em um VPC (Virtual Private Cloud). Em seguida, você implementará um app e o exporá publicamente usando um balanceador de carga.
O que você vai conseguir
Neste tutorial, você criará os seguintes recursos. Há etapas opcionais para excluir esses recursos se você não desejar mantê-los após concluir o tutorial.
- Um cluster VPC
- Um app Hello World simples implementado no cluster
- Um balanceador de carga do VPC para expor seu app
Pré-requisitos
Conclua as etapas de pré-requisito a seguir para configurar permissões e o ambiente da linha de comandos.
- Permissões
- Se você for o titular da conta, já possui as permissões necessárias para criar um cluster e pode prosseguir para a próxima etapa. Caso contrário, solicite ao proprietário da conta que configure a chave de API e designe a você as permissões mínimas do usuário no IBM Cloud IAM.
- Ferramentas de Linha de Comandos
- Para acesso rápido aos seus recursos a partir da linha de comando, tente o IBM Cloud Shell. Caso contrário, configure seu ambiente de linha de comandos local concluindo as etapas a seguir.
- Instale a CLI do IBM Cloud (
ibmcloud), o plug-in do Kubernetes Service (ibmcloud ks) e o plug-in do IBM Cloud Container Registry (ibmcloud cr). - Instale as CLIs Red Hat OpenShift (
oc) e o Kubernetes (kubectl). - Para trabalhar com a VPC, instale o plug-in
infrastructure-service. O prefixo para a execução de comandos éibmcloud is.ibmcloud plugin install infrastructure-service - Atualize seu plug-in do Kubernetes Service para a versão mais recente.
ibmcloud plugin update kubernetes-service - Certifique-se de que a versão do
kubectlcorresponda à versão do Kubernetes de seu cluster de VPC. Este tutorial cria um cluster que executa a versão 1.35.
Criar um cluster na VPC
Crie um cluster IBM Cloud Kubernetes Service em seu ambiente do IBM Cloud Virtual Private Cloud (VPC). Para obter mais informações sobre a VPC, consulte Introdução à Nuvem particular virtual.
- Efetue login na conta, grupo de recursos e região do IBM Cloud na qual você deseja criar seu ambiente de VPC. O VPC deve ser configurado na mesma região metropolitana multizona em que você deseja criar seu cluster. Neste tutorial, você cria
uma VPC em
us-south. Para ver outras regiões suportadas, consulte Áreas metropolitanas multizona para clusters VPC. Se você tiver uma identificação federada, inclua a opção “--sso”.ibmcloud login -r us-south [-g <resource_group>] [--sso] - Crie uma VPC para seu cluster. Para obter mais informações, consulte os docs para criar um VPC no console ou na CLI.
- Crie um VPC chamado
myvpce anote o ID mostrado na saída. As VPCs fornecem um ambiente isolado para que suas cargas de trabalho sejam executadas na nuvem pública. É possível usar a mesma VPC para diversos clusters, por exemplo, ao planejar que clusters diferentes hospedem microsserviços que precisam se comunicar entre si. Para separar seus clusters, por exemplo, para departamentos diferentes, é possível criar uma VPC para cada cluster.
ibmcloud is vpc-create myvpc ``` 2. Crie uma sub-rede para seu VPC e anote seu **ID**. Considere as informações a seguir ao criar a sub-rede da VPC: - **Zonas**: deve-se ter uma sub-rede da VPC para cada zona no cluster. As zonas disponíveis dependem da região metropolitana na qual você criou a VPC. Para listar zonas disponíveis na região, execute `ibmcloud is zones`. - **Endereços IP**: as sub-redes de VPC fornecem endereços IP privados para seus serviços de nós do trabalhador e de balanceador de carga em seu cluster, portanto, certifique-se de [criar uma sub-rede com endereços IP suficientes](/docs/containers?topic=containers-vpc-subnets#vpc_basics_subnets), como 256. O número de endereços IP contidos em uma sub-rede de VPC não pode ser alterado posteriormente. - **Gateways públicos**: não é necessário se conectar a um gateway público para concluir este tutorial. Em vez disso, é possível manter os nós do trabalhador isolados do acesso público usando balanceadores de carga da VPC para expor cargas de trabalho com segurança. Será possível conectar um gateway público se os nós do trabalhador precisarem acessar uma URL pública. ```sh {: pre} ibmcloud is subnet-create mysubnet1 VPC_ID --zone us-south-1 --ipv4-address-count 256 ``` - Crie um VPC chamado
- Crie um cluster em seu VPC na mesma zona da sub-rede. Por padrão, seu cluster é criado com um terminal em serviço de nuvem pública e de nuvem privada. É possível usar o terminal em serviço de nuvem pública para acessar o principal do Kubernetes,
por exemplo, para executar comandos
kubectlpor meio de sua máquina local. Seus nós do trabalhador podem se comunicar com o principal no terminal em serviço de nuvem privada. Para obter mais informações sobre as opções de comandos, consulte os docs de referência da CLIcluster create vpc-gen2.ibmcloud ks cluster create vpc-gen2 --name myvpc-cluster --zone us-south-1 --version 1.35 --flavor bx2.2x8 --workers 1 --vpc-id VPC_ID --subnet-id VPC_SUBNET_ID - Verifique o estado de seu cluster. O provisionamento do cluster pode levar alguns minutos para ser concluído.
- Verifique se o Estado do cluster está normal.
ibmcloud ks cluster ls --provider vpc-gen2 ``` 2. Faça download dos arquivos de configuração do Kubernetes. ```sh {: pre} ibmcloud ks cluster config --cluster myvpc-cluster ``` 3. Verifique se os comandos `kubectl` são executados adequadamente com seu cluster verificando a versão do servidor de CLI do Kubernetes. ```sh {: pre} kubectl version --short ``` Saída de exemplo ```sh {: screen} Client Version: 1.35 Server Version: 1.35+IKS ```
Implementar um app disponível privadamente
Crie uma implementação do Kubernetes para implementar uma única instância de app como um pod em seu nó do trabalhador no cluster de VPC.
-
Clone o código-fonte do app Hello World para o diretório inicial do usuário. O repositório contém versões diferentes de um app semelhante em pastas iniciadas com
Lab. Cada versão contém os arquivos a seguir:Dockerfile: as definições de construção para a imagem.app.js: o app Hello World.package.json: metadados sobre o app.
git clone https://github.com/IBM/container-service-getting-started-wt.git -
Acesse o diretório
Lab 1.cd 'container-service-getting-started-wt/Lab 1' -
Use um namespace de registro existente ou crie um, como
vpc-gen2.ibmcloud cr namespace-listibmcloud cr namespace-add vpc-gen2 -
Construa uma imagem do Docker que inclua os arquivos de app do diretório
Lab 1.Use caracteres alfanuméricos minúsculos ou sublinhados (
_) somente no nome da imagem. Não esqueça o ponto (.) no final do comando. O ponto indica ao Docker para verificar dentro do diretório atual para o Dockerfile e construir artefatos para construir a imagem.docker build -t us.icr.io/<namespace>/hello-world:1 .Quando a construção estiver completa, verifique se você vê a mensagem de êxito a seguir:
=> exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:3ca1eb1d0998f738b552d4c435329edf731fe59e427555b78ba2fb54f2017906 0.0s => => naming to <region>.icr.io/<namespace>/hello-world:1 0.0s -
Efetue login no IBM Cloud Container Registry.
ibmcloud cr login -
Envie por push a imagem para o namespace IBM Cloud Container Registry criado. Se for necessário mudar o app no futuro, repita estas etapas para criar outra versão da imagem. Nota: saiba mais sobre proteção de suas informações pessoais quando você trabalhar com imagens de contêiner.
docker push us.icr.io/<namespace>/hello-world:1 -
Crie uma implementação para seu app. As implementações são usadas para gerenciar pods, que incluem instâncias conteinerizadas de um app. O comando a seguir implementa o app em um único pod. Para os propósitos deste tutorial, a implementação é denominada hello-world-deployment, mas é possível fornecer à implementação qualquer nome que você desejar.
kubectl create deployment hello-world-deployment --image=us.icr.io/vpc-gen2/hello-world:1Saída de exemplo
deployment.apps/hello-world-deployment createdSaiba mais sobre como proteger suas informações pessoais quando trabalhar com recursos do Kubernetes.
-
Torne o app acessível expondo a implementação como um serviço NodePort. Como seus nós do trabalhador da VPC estão conectados somente a uma sub-rede privada, o NodePort recebe apenas um endereço IP privado e não é exposto na rede pública. Outros serviços executados na rede privada podem acessar seu app usando o endereço IP privado do serviço NodePort.
kubectl expose deployment/hello-world-deployment --type=NodePort --name=hello-world-service --port=8080 --target-port=8080Saída de exemplo
service/hello-world-service exposedInformações sobre as opções de comando. Parâmetro Descrição exposeExponha um recurso do Kubernetes, como uma implementação, como um serviço do Kubernetes para que os usuários possam acessar o recurso usando o endereço IP do serviço. deployment/*<hello-world-deployment>*O tipo de recurso e o nome do recurso a serem expostos com este serviço. --name=*<hello-world-service>*O nome do serviço. --type=NodePortO tipo de serviço a ser criado. Nesta lição, você cria um serviço NodePort. Na lição a seguir, você cria um serviçoLoadBalancer.--port=*<8080>*A porta na qual o serviço atende o tráfego de rede externa. --target-port=*<8080>*A porta na qual o app atende e para a qual o serviço direciona o tráfego de rede recebido. Nesse exemplo, target-porté o mesmo queport, mas outros apps criados podem usar uma porta diferente. -
Agora que todo o trabalho de implementação foi concluído, é possível testar seu app dentro do cluster. Obtenha os detalhes para formar o endereço IP privado que pode ser usado para acessar seu app.
- Obtenha informações sobre o serviço para ver qual NodePort foi designado. Os NodePorts são designados aleatoriamente quando são gerados com o comando
expose, mas dentro de 30000-32767. Neste exemplo, o NodePort é 30872.
kubectl describe service hello-world-service ``` Saída de exemplo ```sh {: screen} NAME: hello-world-service Namespace: default Labels: run=hello-world-deployment Selector: run=hello-world-deployment Type: NodePort IP: 10.xxx.xx.xxx Port: <unset> 8080/TCP NodePort: <unset> 30872/TCP Endpoints: 172.30.xxx.xxx:8080 Session Affinity: None No events. ``` 2. Liste os pods que executam seu app e anote o nome do pod. ```sh {: pre} kubectl get pods ``` Saída de exemplo ```sh {: screen} NAME READY STATUS RESTARTS AGE hello-world-deployment-d99cddb45-lmj2v 1/1 Running 0 2d ``` 3. Descreva seu pod para descobrir em qual nó do trabalhador o pod está em execução. Na saída de exemplo, o nó do trabalhador no qual o pod é executado é **10.xxx.xx.xxx**. ```sh {: pre} kubectl describe pod hello-world-deployment-d99cddb45-lmj2v ``` Saída de exemplo ```sh {: screen} NAME: hello-world-deployment-d99cddb45-lmj2v Namespace: default Priority: 0 PriorityClassName: <none> Node: 10.xxx.xx.xxx/10.xxx.xx.xxx Start Time: Mon, 22 Apr 20122 12:40:48 -0400 Labels: pod-template-hash=d99cddb45 run=hello-world-deployment Annotations: kubernetes.io/psp=ibm-privileged-psp Status: Running IP: 172.30.xxx.xxx ... ``` - Obtenha informações sobre o serviço para ver qual NodePort foi designado. Os NodePorts são designados aleatoriamente quando são gerados com o comando
-
Efetue login no pod para que seja possível fazer uma solicitação para seu app dentro do cluster.
kubectl exec -it hello-world-deployment-d99cddb45-lmj2v /bin/sh -
Faça uma solicitação para o serviço NodePort usando o endereço IP privado do nó do trabalhador e a porta de nó recuperada anteriormente.
wget -O - 10.xxx.xx.xxx:30872Saída de exemplo
Connecting to 10.xxx.xx.xxx:30872 (10.xxx.xx.xxx:30872) Hello world from hello-world-deployment-d99cddb45-lmj2v! Your app is up and running in a cluster! - 100% |*****************************************************************************************| 88 0:00:00 ETAPara fechar sua sessão de pod, insira
exit.
Configurar um Load Balancer for VPC para expor seu app de publicamente
Configure um balanceador de carga da VPC para expor seu app na rede pública.
Ao criar um serviço LoadBalancer do Kubernetes em seu cluster, um balanceador de carga para VPC é criado automaticamente em seu VPC fora do cluster. O balanceador de carga tem várias zonas e roteia solicitações para o app por meio
dos NodePorts privados abertos automaticamente nos nós do trabalhador. O diagrama a seguir ilustra como um usuário acessa um serviço do app por meio do balanceador de carga, embora seu nó do trabalhador esteja conectado a apenas uma sub-rede
privada.
-
Crie um serviço
LoadBalancerdo Kubernetes em seu cluster para expor publicamente o app hello world.kubectl expose deployment/hello-world-deployment --type=LoadBalancer --name=hw-lb-svc --port=8080 --target-port=8080Saída de exemplo
service "hw-lb-svc" exposedInformações sobre as opções de comando. Parâmetro Descrição exposeExponha um recurso do Kubernetes, como uma implementação, como um serviço do Kubernetes para que os usuários possam acessar o recurso usando o endereço IP do serviço. deployment/*<hello-world-deployment>*O tipo de recurso e o nome do recurso a serem expostos com este serviço. --name=*<hello-world-service>*O nome do serviço. --type=LoadBalancerO tipo do serviço do Kubernetes a ser criado. Nesta lição, você cria um serviço LoadBalancer.--port=*<8080>*A porta na qual o serviço atende o tráfego de rede externa. --target-port=*<8080>*A porta na qual o app atende e para a qual o serviço direciona o tráfego de rede recebido. Nesse exemplo, target-porté o mesmo queport, mas outros apps criados podem usar uma porta diferente. -
Verifique se o serviço
LoadBalancerdo Kubernetes foi criado com êxito em seu cluster. Ao criar o serviçoLoadBalancerdo Kubernetes, um balanceador de carga de VPC é criado automaticamente para você. O balanceador de carga de VPC designa um nome do host ao serviço LoadBalancer do Kubernetes que pode ser visto no campo Ingress do LoadBalancer da saída da CLI. O provisionamento do balanceador de carga da VPC leva alguns minutos para ser concluído em seu VPC. Até que o balanceador de carga VPC esteja pronto, não será possível acessar o serviçoLoadBalancerdo Kubernetes utilizando seu nome de host.kubectl describe service hw-lb-svcSaída da CLI de exemplo
NAME: hw-lb-svc Namespace: default Labels: app=hello-world-deployment Annotations: <none> Selector: app=hello-world-deployment Type: LoadBalancer IP: 172.21.xxx.xxx LoadBalancer Ingress: 1234abcd-us-south.lb.appdomain.cloud Port: <unset> 8080/TCP TargetPort: 8080/TCP NodePort: <unset> 32040/TCP Endpoints: Session Affinity: None External Traffic Policy: Cluster Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 1m service-controller Ensuring load balancer Normal EnsuredLoadBalancer 1m service-controller Ensured load balancer -
Verifique se o balanceador de carga VPC foi criado com êxito na VPC. Na saída, verifique se o balanceador de carga de VPC tem um Status de provisão de
activee um Status de operação deonline.O nome do balanceador de carga VPC é definido no formato
kube-<cluster_ID>-<kubernetes_lb_service_UID>. Para ver seu ID de cluster, executeibmcloud ks cluster get --cluster CLUSTER_NAME. Para ver o UID do serviçoLoadBalancerdo Kubernetes, executekubectl get svc hw-lb-svc -o yamle procure o campo metadata.uid na saída.ibmcloud is load-balancersNa saída da CLI de exemplo a seguir, o balanceador de carga de VPC denominado
kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306é criado para o serviço de KubernetesLoadBalancer:ID Name Family Subnets Is public Provision status Operating status Resource group r006-d044af9b-92bf-4047-8f77-a7b86efcb923 kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306 Application mysubnet-us-south-3 true active online default -
Envie uma solicitação ao seu app enrolando o nome do host e a porta do serviço
LoadBalancerde Kubernetes, que é designado pelo balanceador de carga do VPC que você localizou na etapa 2.curl 1234abcd-us-south.lb.appdomain.cloud:8080Saída de exemplo
Hello world from hello-world-deployment-5fd7787c79-sl9hn! Your app is up and running in a cluster!
O que vem a seguir?
Agora que você tem um cluster de VPC, saiba mais sobre o que pode ser feito.
Precisa de ajuda, tem perguntas ou deseja fornecer feedback sobre clusters VPC? Tente postar no Canal Slack.