Neste tópico, mostramos como usar o GKE na AWS com um repositório de imagem de contêiner particular, como o Container Registry (GCR).
Antes de começar
Antes de começar a usar o GKE na AWS, verifique se você executou as seguintes tarefas:
- Conclua os Pré-requisitos.
- Instale um serviço de gerenciamento.
- Crie um cluster de usuário.
- No diretório
anthos-aws
, useanthos-gke
para alternar o contexto para o cluster de usuário.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Substitua CLUSTER_NAME pelo nome do cluster de usuário. - Crie e envie uma imagem do Docker ao Container Registry. Os exemplos neste
tópico usam o contêiner
hello-app
, criado com as etapas de Como implantar um aplicativo em contêiner na documentação do GKE no Google Cloud.
Registros de contêiner particular
Um registro de contêiner armazena e distribui imagens de contêiner. Por padrão, sua instalação do GKE na AWS pode acessar imagens públicas.
Verificar imagens no Container Registry
Para concluir o restante destas etapas, você precisa de uma imagem de contêiner. Veja o nome das suas imagens de contêiner executando as seguintes etapas:
Configure a ferramenta de linha de comando do Docker para autenticação no Container Registry com a Google Cloud CLI:
gcloud auth configure-docker
A Google Cloud CLI registra um auxiliar de credenciais para todos os registros do Docker compatíveis com o Google.
Confirme se o Container Registry inclui uma imagem com
docker images
.docker images
O Docker se conecta ao Container Registry e retorna as imagens disponíveis no repositório do Container Registry. Por exemplo, a resposta abaixo mostra uma imagem de contêiner chamada
hello-app
no repositório project-id.REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/project-id/hello-app v1 732f02cea7cb 12 minutes ago 11.5MB
Se você não tiver uma imagem de contêiner pronta, crie uma seguindo as etapas em Como implantar um aplicativo em contêiner.
Criar uma conta de serviço
Os clusters de usuário são autenticados usando uma conta de serviço do Identity & Access Management (IAM).
Para criar uma nova conta de serviço, execute as seguintes etapas:
Crie uma conta de serviço do IAM com a Google Cloud CLI.
gcloud iam service-accounts create account-name
Substitua account-name pelo nome da nova conta de serviço do Google Cloud.
Conceda à conta de serviço acesso ao Container Registry.
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:account-name@project-id.iam.gserviceaccount.com \ --role roles/storage.objectViewer
Substitua:
- project-id pelo projeto do Google Cloud
- account-name pelo nome da conta de serviço do Google Cloud
Faça o download da chave da conta de serviço.
gcloud iam service-accounts keys create key.json \ --iam-account account-name@project-id.iam.gserviceaccount.com
Substitua:
- project-id pelo projeto do Google Cloud
- account-name pelo nome da conta de serviço do Google Cloud
Agora está tudo pronto para configurar o cluster de usuário para se conectar ao Container Registry.
Definir um Secret do Kubernetes
Para fornecer a chave para autenticação no Container Registry, salve a chave da conta de serviço como um Secret do Kubernetes. Para isso, execute as seguintes etapas:
Use
kubectl
para criar a chave secreta.env HTTPS_PROXY=http://localhost:8118 \ kubectl create secret docker-registry gcr-secret \ --docker-server=gcr.io \ --docker-username=_json_key \ --docker-email=account-name@project-id.iam.gserviceaccount.com \ --docker-password="$(cat key.json)"
Substitua:
- project-id pelo projeto do Google Cloud
- account-name pelo nome da conta de serviço do Google Cloud
Exclua a cópia local da chave da conta de serviço.
rm key.json
Agora você pode referir-se a esse secret nas suas cargas de trabalho.
Criar uma carga de trabalho com uma imagem particular
Para usar uma imagem de um repositório de contêiner particular com uma carga de trabalho, defina o campo spec.imagePullSecrets
como seu nome do secret. Esse campo está em locais diferentes para pods e implantações.
Como criar um pod
Para criar um pod, que pode acessar o registro de contêiner, defina o campo
spec.imagePullSecrets
como o nome do secret.
Crie um pod que especifique
spec.imagePullSecrets
.apiVersion: v1 kind: Pod metadata: name: pod-name spec: containers: - name: container-name image: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: secret-name
Substitua:
- pod-name pelo nome do pod
- container-name pelo nome do contêiner dentro do pod
- project-id pelo projeto do Google Cloud
- secret-name pelo nome do secret do registro
Por exemplo, para extrair a imagem
hello-app
, copie o YAML a seguir em um arquivo chamadohello-pod.yaml
.apiVersion: v1 kind: Pod metadata: name: hello-pod spec: containers: - name: hello-container image: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: gcr-secret
Aplique a configuração ao cluster com
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-pod.yaml
Confirme se o pod está sendo executado com
kubectl get
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pod/hello-pod
A resposta inclui um pod com status
Running
.NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15s
Como criar uma implantação
Para usar um repositório particular em uma implantação, especifique o
imagePullSecret
dentro do modelo.Por exemplo, para criar uma implantação da imagem
hello-app
, crie um arquivo chamadohello-deployment.yaml
com o seguinte conteúdo:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app-deployment spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: "gcr.io/project-id/hello-app:v1" env: - name: "PORT" value: "50001" imagePullSecrets: - name: gcr-secret
Aplique a configuração ao cluster com
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-deployment.yaml
Confirme se a implantação está em execução com
kubectl pods
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
A saída contém três pods
Running
.NAME READY STATUS RESTARTS AGE hello-app-deployment-67d9c6d98c-b69f2 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-d6k5c 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-p2md5 1/1 Running 0 14m