Este tutorial descreve como carregar uma aplicação de contentor num ambiente isolado do Google Distributed Cloud (GDC) e executar essa aplicação num cluster do Kubernetes partilhado. Uma carga de trabalho em contentor é executada num cluster do Kubernetes partilhado num espaço de nomes do projeto. Os clusters partilhados estão logicamente separados dos projetos e uns dos outros para oferecerem diferentes domínios de falha e garantias de isolamento. No entanto, tem de garantir que o cluster partilhado está associado a um projeto para permitir a gestão de cargas de trabalho em contentor num projeto.
Este fluxo de trabalho destina-se a programadores de aplicações no grupo de operadores de aplicações que são responsáveis pela criação de cargas de trabalho de aplicações para a respetiva organização. Para mais informações, consulte o artigo Públicos para a documentação do GDC isolado.
Um dos maiores obstáculos à implementação de uma app de contentor é obter o binário da app para o seu centro de dados isolado. Trabalhe com a sua equipa de infraestrutura e administradores para transportar a aplicação para a sua estação de trabalho ou implemente este tutorial diretamente no servidor de integração contínua e entrega contínua (CI/CD).
Este tutorial usa uma app de servidor Web de exemplo disponível no Google Cloud Artifact Registry.
Objetivos
- Criar um registo do Harbor gerido.
- Enviar uma imagem de contentor para o registo do Harbor gerido.
- Criar um cluster do Kubernetes partilhado.
- Implementar a app de contentor de exemplo no cluster.
Custos
Uma vez que o GDC foi concebido para ser executado num centro de dados isolado, as informações e os processos de faturação estão confinados apenas à implementação do GDC e não são geridos por outros produtos Google.
Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.
Use o painel de controlo Custo projetado para antecipar os custos futuros de SKUs para as suas faturas.
Para acompanhar o consumo de armazenamento e computação, use os painéis de controlo Utilização da faturação.
Antes de começar
Para concluir as tarefas neste documento, tem de pedir as autorizações necessárias e preparar o seu ambiente.
Pedir funções de IAM
Tem de ter funções específicas para receber as autorizações necessárias para concluir este fluxo de trabalho do tutorial. Tem de pedir funções com âmbito definido para o seu projeto e organização.
Funções da organização
Para criar, eliminar, editar ou ver um cluster do Kubernetes partilhado, peça ao administrador de IAM da organização que lhe conceda a função de Administrador do cluster do utilizador (user-cluster-admin). Esta função não está associada a um espaço de nomes.
Se não tiver as autorizações para criar um cluster partilhado, peça ao administrador da plataforma que crie um para si.
Funções do projeto
Peça ao administrador de IAM do projeto que lhe conceda as seguintes funções no espaço de nomes do projeto com base na tarefa a realizar:
Administrador do espaço de nomes (
namepspace-admin): criar, eliminar, editar e ver recursos do projeto. Esta função é necessária para implementar cargas de trabalho de contentores no seu projeto.Administrador da instância do Harbor (
harbor-instance-admin): criar, eliminar, editar e ver recursos do Harbor, incluindo instâncias do Harbor.Visualizador da instância do Harbor (
harbor-instance-viewer): ver e selecionar uma instância do Harbor.Criador de projetos do Harbor (
harbor-project-creator): criar e ver projetos do Harbor.
Preparar o ambiente
Para concluir este documento, tem de ter os seguintes recursos:
Certifique-se de que tem um projeto para gerir as suas implementações em contentores. Crie um projeto se você não tiver um.
Defina o espaço de nomes do projeto como uma variável de ambiente:
export NAMESPACE=PROJECT_NAMESPACEInicie sessão no servidor da API de gestão zonal e gere o respetivo ficheiro kubeconfig com uma identidade de utilizador. Defina o caminho kubeconfig como uma variável de ambiente:
export MANAGEMENT_API_SERVER=MANAGEMENT_API_SERVER_KUBECONFIG_PATH
Criar um registo do Harbor gerido
O GDC isolado oferece o Harbor como um serviço, que é um serviço totalmente gerido que lhe permite armazenar e gerir imagens de contentores com o Harbor.
Para usar o Harbor como um serviço, primeiro tem de criar uma instância do registo do Harbor e um projeto do Harbor.
Criar uma instância do registo do Harbor
Para criar uma instância do registo de contentores do Harbor, conclua os seguintes passos:
Consola
No menu de navegação, selecione Registo de contentores do Harbor na secção CI/CD.
Selecione a zona na qual quer criar a instância do Harbor. Uma instância do Harbor é um recurso zonal e tem de ser criada manualmente em cada zona para garantir a elevada disponibilidade.
Clique em Criar instância.
Introduza o nome da instância e aceite os Termos de Utilização geridos do Harbor.
Clique em Criar instância.
Confirme que a nova instância do Harbor existe na secção Instância do Harbor.
Clique no link externo Aceder à 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 tarde no tutorial:
export INSTANCE_URL=INSTANCE_URLSubstitua INSTANCE_URL pelo URL da instância do registo do Harbor.
Por exemplo:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
gdcloud
Crie a nova instância do registo de contentores do Harbor:
gdcloud harbor instances create INSTANCE_NAME \ --project=PROJECT \Substitua o seguinte:
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=PROJECTO resultado é semelhante ao seguinte:
# 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 tarde no tutorial:
export INSTANCE_URL=INSTANCE_URLSubstitua INSTANCE_URL pelo URL da instância do registo do Harbor. Certifique-se de que o URL da instância não inclui o prefixo
https://.Por exemplo:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
Criar um projeto do Harbor no registo
Tem de criar um projeto do Harbor na instância do registo do Harbor para gerir as suas imagens de contentores:
Consola
Clique em Criar um projeto do Harbor na página Registo de contentores do Harbor.
Introduza 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 o seguinte:
HARBOR_PROJECT: o nome do projeto do Harbor a criar.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 o Docker
Para usar o Docker no registo do Harbor, conclua os seguintes passos:
Configure o Docker para confiar no Harbor como um serviço. Para mais informações, consulte o artigo Configure o Docker para confiar na AC raiz do Harbor.
Configure a autenticação do Docker no Harbor. Para mais informações, consulte o artigo Configure a autenticação do Docker em instâncias do registo do Harbor.
Criar um segredo de pull de imagens do Kubernetes
Uma vez que está a usar um projeto do Harbor privado, tem de criar um segredo de pull de imagens do Kubernetes.
Adicione uma conta de robot do projeto do Harbor para servir como a sua conta de serviço.
Na consola do Harbor, selecione o projeto do Harbor.
Clique em Contas de robot.
Selecione Nova conta de robot.
Atribua um nome à nova conta de robot e defina quaisquer definições adicionais.
Clique em Adicionar.
O nome e o segredo da conta de robot são apresentados no ecrã de êxito. Mantenha este ecrã aberto para referência no passo seguinte.
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.
Numa nova janela do terminal, inicie sessão no Docker com a conta de robot do projeto do Harbor e o token secreto:
docker login ${INSTANCE_URL}Quando lhe for pedido, insira o nome do projeto do robot no campo Nome de utilizador e o token secreto no campo Palavra-passe que foram fornecidos no passo anterior no ecrã de êxito da consola do Harbor.
Defina um nome arbitrário para o segredo de pull de imagens:
export SECRET=SECRETCrie o segredo necessário para o pull de imagens:
kubectl create secret docker-registry ${SECRET} \ --from-file=.dockerconfigjson=DOCKER_CONFIG \ -n ${NAMESPACE}Substitua
DOCKER_CONFIGpelo caminho para o ficheiro.docker/config.json.Confirme que o segredo existe no espaço de nomes do projeto do GDC:
kubectl get secrets -n ${NAMESPACE}O resultado é semelhante ao seguinte:
NAME TYPE DATA AGE my-secret kubernetes.io/dockerconfigjson 1 23s
Enviar uma imagem de contentor para o registo do Harbor gerido
Para este tutorial, vai transferir e enviar a imagem do servidor Web nginx para o registo do Harbor gerido e usá-la para implementar uma app de servidor Web nginx de exemplo num cluster do Kubernetes partilhado. A app de servidor Web nginx está disponível no repositório público do Docker Hub.
Faça o pull da imagem
nginxdo Docker Hub para a sua estação de trabalho local através de uma rede externa:docker pull nginxEtiquete a imagem local com o nome do repositório:
docker tag nginx ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25Envie a imagem de contentor
nginxpara o registo do Harbor gerido:docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25
Criar um cluster do Kubernetes
Agora que tem a imagem de contentor nginx armazenada no registo do Harbor gerido e pode aceder à mesma, crie um cluster do Kubernetes partilhado para executar o servidor Web nginx.
Consola
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 na qual quer criar o cluster do Kubernetes. Um cluster do Kubernetes é um recurso zonal e tem de ser criado manualmente em cada zona para garantir a elevada disponibilidade.
Clique em Anexar projeto e selecione um projeto para anexar ao cluster. Em seguida, clique em Guardar.
Clique em Criar.
Aguarde pela criação do cluster. Quando o cluster estiver disponível para utilização, o estado
READYé apresentado junto ao nome do cluster.
API
Crie um recurso personalizado
Clustere guarde-o como um ficheiro 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 à sua instância do GDC:
kubectl create -f cluster.yaml --kubeconfig ${MANAGEMENT_API_SERVER}Anexe um projeto ao cluster do Kubernetes através da consola do GDC. Neste momento, não pode anexar um projeto ao cluster através da API.
Para mais informações sobre como criar um cluster do Kubernetes partilhado, consulte o artigo Criar um cluster partilhado. Para mais informações sobre as opções de configuração do cluster disponíveis, consulte o artigo Configurações do cluster do Kubernetes.
Implementar a app de contentor de exemplo
Já tem tudo pronto para implementar a imagem de contentor nginx no cluster do Kubernetes.
O Kubernetes representa as aplicações como recursos Pod, que são unidades escaláveis que contêm um ou mais contentores. O pod é a menor unidade implementável no Kubernetes. Normalmente, implementa pods como um conjunto de réplicas que podem ser dimensionadas e distribuídas em conjunto no cluster. Uma forma de implementar um conjunto de réplicas é através de uma Deployment do Kubernetes.
Nesta secção, vai criar uma Deployment do Kubernetes para executar a app de contentor nginx no cluster. Esta implementação tem réplicas ou pods. Um pod Deployment contém apenas um contentor: a imagem de contentor nginx. Também vai criar um recurso Service que oferece uma forma estável de os clientes enviarem pedidos para os pods da Deployment.
Implemente o servidor Web nginx no cluster do Kubernetes:
Inicie sessão no cluster do Kubernetes e gere o respetivo ficheiro kubeconfig com uma identidade de utilizador. Defina o caminho kubeconfig como uma variável de ambiente:
export KUBECONFIG=CLUSTER_KUBECONFIG_PATHCrie e implemente 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 implementação:
kubectl get pods -l app=nginx -n ${NAMESPACE}O resultado é semelhante ao 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 espaço de nomes:
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
nginxcomcurl:curl http://$IP
Limpar
Para evitar custos na sua conta do GDC pelos recursos usados neste tutorial, tem de eliminar os recursos que criou.
Eliminar a imagem de contentor
Para eliminar a imagem de contentor do seu ambiente isolado do GDC, elimine a instância do Harbor que contém a imagem ou mantenha a instância do Harbor e elimine a imagem de contentor individual.
Para eliminar a imagem de contentor do registo do Harbor gerido, use a consola do GDC:
No menu de navegação, selecione Registo de contentores do Harbor na secção CI/CD.
Clique no link externo Aceder à instância do Harbor.
Elimine a imagem de contentor através da IU do Harbor. Para mais informações, consulte o artigo Eliminar instâncias do registo do Harbor.
Eliminar a app de contentor
Para eliminar os recursos individuais, conclua os seguintes passos:
Elimine o objeto
Serviceda app de contentor:kubectl delete service nginx-service -n ${NAMESPACE}Elimine o objeto
Deploymentda app de contentor:kubectl delete deployment nginx-deployment -n ${NAMESPACE}Se criou um cluster do Kubernetes de teste apenas para este tutorial, elimine-o:
kubectl delete clusters.cluster.gdc.goog/USER_CLUSTER_NAME \ -n platform --kubeconfig ${MANAGEMENT_API_SERVER}Esta ação elimina os recursos que compõem o cluster do Kubernetes, como as instâncias de computação, os discos e os recursos de rede:
O que se segue?
Explore a hierarquia de recursos e os detalhes sobre o isolamento de recursos.
Saiba mais sobre a arquitetura do cluster.
Leia a documentação Contentores do Kubernetes para o GDC para ver informações sobre como gerir contentores implementados nos clusters do Kubernetes.
Saiba como gerir os clusters do Kubernetes depois de as cargas de trabalho de contentores terem sido implementadas.
Explore as práticas recomendadas para configurar as cargas de trabalho de contentores e outros recursos de serviço.