Um cluster compartilhado no Google Distributed Cloud (GDC) com isolamento físico permite executar aplicativos conteinerizados em domínios de falha isolados na sua organização. Depois de anexar um a um projeto, é possível gerenciar essas cargas de trabalho em um namespace dedicado. Neste tutorial, você vai configurar um registro gerenciado do Harbor, enviar uma imagem de amostra do NGINX do Docker Hub e implantar o servidor da Web.
Esse fluxo de trabalho é para desenvolvedores no grupo de operadores de aplicativos que criam cargas de trabalho para a organização. Para mais informações, consulte Públicos-alvo da documentação do GDC com isolamento físico.
Objetivos
- Criar um registro gerenciado do Harbor.
- Envie uma imagem de contêiner para o registro gerenciado do Harbor.
- Criar um cluster compartilhado do Kubernetes.
- Implante o app de contêiner de amostra no cluster.
Custos
Como o GDC foi projetado para ser executado em um data center com isolamento físico, os processos e as informações de faturamento são limitados apenas à implantação do GDC e não são gerenciados por outros produtos do Google.
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Use o painel de custo projetado para prever os custos futuros de SKU das suas faturas.
Para acompanhar o consumo de armazenamento e computação, use os painéis de uso do faturamento.
Antes de começar
Para concluir as tarefas neste documento, solicite as permissões necessárias e prepare seu ambiente.
Trabalhe com sua equipe de infraestrutura e administradores para transportar o binário do aplicativo para sua estação de trabalho com isolamento físico ou execute este tutorial diretamente no servidor de integração e entrega contínua (CI/CD).
Solicitar papéis do IAM
Você precisa ter papéis específicos para receber as permissões necessárias para concluir este fluxo de trabalho do tutorial. É preciso solicitar papéis com escopo para seu projeto e organização.
papéis na organização
Para criar, excluir, editar ou visualizar um cluster compartilhado do Kubernetes, peça ao
administrador do IAM da organização para conceder a você o papel de Administrador de cluster de usuário
(user-cluster-admin). Esse papel não está vinculado a um namespace.
Se você não tiver as permissões para criar um cluster compartilhado, peça ao administrador da plataforma para criar um para você.
Papéis do projeto
Peça ao administrador do projeto do IAM para conceder a você os seguintes papéis no namespace do projeto com base na tarefa a ser executada:
Administrador de namespace (
namepspace-admin): criar, excluir, editar e visualizar recursos do projeto. Esse papel é necessário para implantar cargas de trabalho de contêiner no projeto.Administrador de instâncias do Harbor (
harbor-instance-admin): criar, excluir, editar e visualizar recursos do Harbor, incluindo instâncias do Harbor.Leitor de instâncias do Harbor (
harbor-instance-viewer): visualizar e selecionar uma instância do Harbor.Criador de projetos do Harbor (
harbor-project-creator): criar e visualizar projetos do Harbor.
Preparar o ambiente
Para concluir este documento, você precisa dos seguintes recursos:
Verifique se você tem um projeto para gerenciar as implantações em contêineres. Crie um projeto se você não tiver um.
Defina o namespace do projeto como uma variável de ambiente:
export NAMESPACE=PROJECT_NAMESPACEFaça login no servidor de API de gerenciamento zonal e gere o arquivo kubeconfig com uma identidade de usuário. Defina o caminho do kubeconfig como uma variável de ambiente:
export MANAGEMENT_API_SERVER=MANAGEMENT_API_SERVER_KUBECONFIG_PATH
Criar um registro gerenciado do Harbor
O GDC com isolamento físico oferece o Harbor como serviço, que é um serviço totalmente gerenciado que permite armazenar e gerenciar imagens de contêiner usando o Harbor.
Para usar o Harbor como serviço, primeiro é preciso criar uma instância de registro do Harbor e um projeto do Harbor.
Criar instância de registro do Harbor
Para criar uma instância do Container Registry do Harbor, siga estas etapas:
Console
No menu de navegação, selecione Harbor Container Registry na seção CI/CD.
Selecione a zona em que a instância do Harbor será criada. Uma instância do Harbor é um recurso zonal e precisa ser criada manualmente em cada zona para garantir alta disponibilidade.
Clique em Criar instância.
Insira o nome da instância e aceite os Termos de Serviço gerenciados do Harbor.
Clique em Criar instância.
Confirme se a nova instância do Harbor existe na seção Instância do Harbor.
Clique no link externo Acessar instância do Harbor e anote o URL da instância. Por exemplo, o formato do URL da instância é semelhante a
harbor-1.org-1.zone1.google.gdc.test. O URL da instância não pode incluir o prefixohttps://.Defina o URL da instância como uma variável para usar mais adiante no tutorial:
export INSTANCE_URL=INSTANCE_URLSubstitua INSTANCE_URL pelo URL da instância do registro do Harbor.
Exemplo:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
gdcloud
Crie a nova instância do Container Registry do Harbor:
gdcloud harbor instances create INSTANCE_NAME \ --project=PROJECT \Substitua:
INSTANCE_NAME: o nome da instância do Harbor.PROJECT: o nome do projeto do GDC.
Liste o URL da instância:
gdcloud harbor instances describe INSTANCE_NAME \ --project=PROJECTA saída será assim:
# Several lines of code are omitted here. status: url: https://harbor-1.org-1.zone1.google.gdc.testDefina o URL da instância como uma variável para usar mais adiante no tutorial:
export INSTANCE_URL=INSTANCE_URLSubstitua INSTANCE_URL pelo URL da instância do registro do Harbor. Verifique se o URL da instância não inclui o prefixo
https://.Exemplo:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
Criar um projeto do Harbor no registro
Crie um projeto do Harbor na instância do registro do Harbor para gerenciar as imagens de contêiner:
Console
Clique em Criar um projeto do Harbor na página Container Registry do Harbor.
Insira o nome do projeto.
Clique em Criar.
Defina o nome do projeto do Harbor como uma variável para usar mais tarde no tutorial:
export HARBOR_PROJECT=HARBOR_PROJECT
gdcloud
Crie o novo projeto do Harbor:
gdcloud harbor harbor-projects create HARBOR_PROJECT \ --project=PROJECT \ --instance=INSTANCE_NAMESubstitua:
HARBOR_PROJECT: o nome do projeto do Harbor a ser criado.PROJECT: o nome do projeto do GDC.INSTANCE_NAME: o nome da instância do Harbor.
Defina o nome do projeto do Harbor como uma variável para usar mais tarde no tutorial:
export HARBOR_PROJECT=HARBOR_PROJECT
Configurar Docker
Para usar o Docker no registro do Harbor, siga estas etapas:
Configure o Docker para confiar no Harbor como serviço. Para mais informações, consulte Configurar o Docker para confiar na CA raiz do Harbor.
Configure a autenticação do Docker no Harbor. Para mais informações, consulte Configurar a autenticação do Docker para instâncias de registro do Harbor.
Criar secret de extração de imagem do Kubernetes
Como você está usando um projeto particular do Harbor, é necessário criar um secret de extração de imagem do Kubernetes.
Adicione uma conta de robô do projeto do Harbor para servir como sua conta de serviço.
No console do Harbor, selecione seu projeto do Harbor.
Clique em Contas de robô.
Selecione Nova conta de robô.
Dê um nome à nova conta de robô e defina as configurações adicionais.
Clique em Adicionar.
O nome e o secret da conta do robô são exibidos na tela de sucesso. Mantenha essa tela aberta para consulta na próxima etapa.
Para mais informações, consulte a documentação do Harbor: https://goharbor.io/docs/2.8.0/working-with-projects/project-configuration/create-robot-accounts/#add-a-robot-account.
Em uma nova janela do terminal, faça login no Docker com sua conta de robô do projeto do Harbor e o token secreto:
docker login ${INSTANCE_URL}Quando solicitado, insira o nome do projeto do robô para o Nome de usuário e o token secreto para a Senha que foram fornecidos na etapa anterior na tela de sucesso do console do Harbor.
Defina um nome arbitrário para o secret de extração de imagem:
export SECRET=SECRETCrie o secret necessário para a extração de imagens:
kubectl create secret docker-registry ${SECRET} \ --from-file=.dockerconfigjson=DOCKER_CONFIG \ -n ${NAMESPACE}Substitua
DOCKER_CONFIGpelo caminho para o arquivo.docker/config.json.Confirme se o secret existe no namespace do projeto do GDC:
kubectl get secrets -n ${NAMESPACE}O resultado será o seguinte:
NAME TYPE DATA AGE my-secret kubernetes.io/dockerconfigjson 1 23s
Enviar imagem de contêiner para o registro gerenciado do Harbor
Neste tutorial, você vai fazer o download e enviar a imagem do servidor da Web nginx para
o registro gerenciado do Harbor e usá-la para implantar um app de servidor da Web nginx de amostra
em um cluster compartilhado do Kubernetes. O app de servidor da Web nginx está disponível no
repositório público do Docker Hub.
Extraia a imagem
nginxdo Docker Hub para sua estação de trabalho local usando uma rede externa:docker pull nginxMarque a imagem local com o nome do repositório:
docker tag nginx ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25Envie a imagem do contêiner
nginxpara o registro gerenciado do Harbor:docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25
Criar um cluster do Kubernetes
Agora que você tem a imagem de contêiner nginx armazenada no registro gerenciado do Harbor
e pode acessá-la, crie um cluster compartilhado do Kubernetes para executar o servidor da Web nginx.
Console
No menu de navegação, selecione Kubernetes Engine > Clusters.
Clique em Criar cluster.
No campo Nome, especifique um nome para o cluster.
Selecione a zona em que o cluster do Kubernetes será criado. Um cluster do Kubernetes é um recurso zonal e precisa ser criado manualmente em cada zona para garantir alta disponibilidade.
Clique em Anexar projeto e selecione um projeto para anexar ao cluster. Clique em Salvar.
Clique em Criar.
Aguarde a criação do cluster. Quando o cluster estiver disponível para uso, o status
READYvai aparecer ao lado do nome dele.
API
Crie um recurso personalizado
Clustere salve-o como um arquivo YAML, comocluster.yaml:apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: platformSubstitua o valor
CLUSTER_NAMEpelo nome do cluster.Aplique o recurso personalizado à instância do GDC:
kubectl create -f cluster.yaml --kubeconfig ${MANAGEMENT_API_SERVER}Anexe um projeto ao cluster do Kubernetes usando o console do GDC. No momento, não é possível anexar um projeto ao cluster usando a API.
Para mais informações sobre como criar um cluster compartilhado do Kubernetes, consulte Criar um cluster compartilhado. Para mais informações sobre as opções de configuração de cluster disponíveis, consulte Configurações de cluster do Kubernetes.
Implantar o app de contêiner de amostra
Agora você já pode implantar a imagem do contêiner nginx no cluster do Kubernetes.
O Kubernetes representa aplicativos como recursos Pod, que são unidades escalonáveis
com um ou mais contêineres. O pod é a menor unidade implantável no
Kubernetes. Normalmente, os pods são implantados como um conjunto de réplicas que podem ser escalonadas e
distribuídas juntas no cluster. Uma maneira de implantar um conjunto de réplicas é
por meio de uma Deployment do Kubernetes.
Nesta seção, você vai criar um Deployment do Kubernetes para executar o app de contêiner nginx no cluster. Essa implantação tem réplicas ou pods. Um pod Deployment contém apenas um contêiner: a imagem do contêiner nginx. Você
também cria um recurso Service que oferece uma forma estável para os clientes enviarem
solicitações aos pods do Deployment.
Implante o servidor da Web nginx no cluster do Kubernetes:
Faça login no cluster do Kubernetes e gere o arquivo kubeconfig com uma identidade de usuário. Defina o caminho do kubeconfig como uma variável de ambiente:
export KUBECONFIG=CLUSTER_KUBECONFIG_PATHCrie e implante os recursos personalizados
DeploymenteServicedo Kubernetes:kubectl --kubeconfig ${KUBECONFIG} -n ${NAMESPACE} \ create -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25 ports: - containerPort: 80 imagePullSecrets: - name: ${SECRET} --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - port: 80 protocol: TCP type: LoadBalancer EOFVerifique se os pods foram criados pela implantação:
kubectl get pods -l app=nginx -n ${NAMESPACE}O resultado será o seguinte:
NAME READY STATUS RESTARTS AGE nginx-deployment-1882529037-6p4mt 1/1 Running 0 1h nginx-deployment-1882529037-p29za 1/1 Running 0 1h nginx-deployment-1882529037-s0cmt 1/1 Running 0 1hCrie uma política de rede para permitir todo o tráfego de rede para o namespace:
kubectl --kubeconfig ${KUBECONFIG} -n ${NAMESPACE} \ create -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: annotations: name: allow-all spec: ingress: - from: - ipBlock: cidr: 0.0.0.0/0 podSelector: {} policyTypes: - Ingress EOFExporte o endereço IP do serviço
nginx:export IP=`kubectl --kubeconfig=${KUBECONFIG} get service nginx-service \ -n ${NAMESPACE} -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`Teste o endereço IP do servidor
nginxusandocurl:curl http://$IP
Limpar
Para evitar cobranças na sua conta do GDC pelos recursos usados neste tutorial, exclua os recursos criados.
Exclua a imagem do contêiner
Para excluir a imagem do contêiner do ambiente do GDC com isolamento físico, exclua a instância do Harbor que contém a imagem ou mantenha a instância do Harbor e exclua a imagem do contêiner individual.
Para excluir a imagem de contêiner do registro gerenciado do Harbor, use o console do GDC:
No menu de navegação, selecione Harbor Container Registry na seção CI/CD.
Clique no link externo Acessar a instância do Harbor.
Exclua a imagem do contêiner usando a interface do Harbor. Para mais informações, consulte Excluir instâncias de registro do Harbor.
Excluir o app de contêiner
Para excluir o app de contêiner implantado, exclua o projeto do GDC que contém os recursos ou mantenha o projeto do GDC e exclua os recursos individuais.
Para excluir os recursos individuais, siga estas etapas:
Exclua o objeto
Servicedo app de contêiner:kubectl delete service nginx-service -n ${NAMESPACE}Exclua o objeto
Deploymentdo app de contêiner:kubectl delete deployment nginx-deployment -n ${NAMESPACE}Se você criou um cluster de teste do Kubernetes apenas para este tutorial, exclua-o:
kubectl delete clusters.cluster.gdc.goog/USER_CLUSTER_NAME \ -n platform --kubeconfig ${MANAGEMENT_API_SERVER}Isso exclui os recursos que compõem o cluster do Kubernetes, como as instâncias de computação, os discos e os recursos de rede:
A seguir
Conheça a hierarquia de recursos e os detalhes sobre o isolamento de recursos.
Saiba mais sobre a arquitetura de cluster.
Leia a documentação sobre contêineres do Kubernetes para o GDC para saber como gerenciar contêineres implantados nos clusters do Kubernetes.
Saiba como gerenciar seus clusters do Kubernetes depois que as cargas de trabalho do contêiner forem implantadas.
Conheça as práticas recomendadas para configurar as cargas de trabalho de contêiner e outros recursos de serviço.