Amazon EKS - disponível para uso geral

Amazon EKS - disponível para uso geral

Anunciamos o Amazon Elastic Container Service para o Kubernetes e convidamos os clientes a analisar a pré-visualização durante o re:Invent 2017. Hoje, tenho o prazer de informar que o Amazon EKS está disponível em produção. Ele foi certificado em conformidade com Kubnernetes e está pronto para executar as cargas de trabalho existentes do Kubernetes.

Com base nos dados mais recentes da Cloud Native Computing Foundation, sabemos que a AWS é o ambiente líder do Kubernetes, com 57% de todas as empresas que executam o Kubernetes optando por fazê-lo na AWS. Os clientes nos dizem que o Kubernetes é essencial para sua estratégia de TI e já está executando centenas de milhões de contêineres na AWS toda semana. O Amazon EKS simplifica o processo de criação, proteção, operação e manutenção de clusters Kubernetes e traz os benefícios da computação baseada em contêiner para organizações que desejam se concentrar na criação de aplicativos, em vez de configurar um cluster Kubernetes a partir do zero.

certified_kubernetes_color-222x300_1

Por dentro da AWS
Amazon EKS aproveita o fato de estar em execução no AWS Cloud, fazendo grande uso de muitos serviços e recursos da AWS, garantindo que tudo que você já sabe sobre o Kubernetes continue sendo aplicável e útil. Aqui está uma visão geral:

Multi-AZ - O plano de controle do Kubernetes (o servidor de API e o banco de dados do etcd) é executado de maneira altamente disponível em três zonas de disponibilidade da AWS. Os nós principais são monitorados e substituídos se falharem, e também são corrigidos e atualizados automaticamente.

Integração com IAM - O Amazon EKS usa o Heptio Authenticator para autenticação. Você pode usar os papéis do IAM e evitar a dor causada pelo gerenciamento de outro conjunto de credenciais.

Suporte ao balanceador de carga - você pode rotear o tráfego para seus nós de trabalho usando o balanceador de carga de rede da AWS, o balanceador de carga de aplicativo da AWS ou o balanceador de carga elástico original (clássico).

EBS - Kubernetes Persistent Volumes (usado para armazenamento de cluster) são implementados como volumes do Amazon Elastic Block Store (EBS).

Route 53 - O projeto External DNS permite que os serviços nos clusters do Kubernetes sejam acessados através dos registros DNS do Route 53. Isso simplifica a descoberta de serviços e suporta o balanceamento de carga.

Auto Scaling - Seus clusters podem fazer uso do Auto Scaling, aumentando e diminuindo em resposta a alterações na carga.

Interface do Container - O Container Network Interface para Kubernetes usa Elastic Network Interfaces para fornecer endereços IP estáticos para Kubernetes Pods.

Para obter uma visão mais detalhada desses recursos, leia sobre o Amazon Elastic Container Service for Kubernetes.

O Amazon EKS é construído em torno de um modelo de responsabilidade compartilhada; os nós do plano de controle são gerenciados pela AWS e você executa os nós do trabalhador. Isso oferece alta disponibilidade e simplifica o processo de mover as cargas de trabalho existentes para o EKS. Aqui está uma visão geral de alto nível:

eks_3_az_3

Criando um cluster do Amazon EKS

Para criar um cluster, provisiono o plano de controle, provisiono e conecto o cluster de trabalho e inicio meus contêineres. No exemplo abaixo, criarei um novo VPC para meu cluster de trabalho, mas também posso usar um existente, contanto que as sub-redes desejadas sejam marcadas com o nome do meu cluster do Kubernetes.

Seguindo as instruções no Guia de primeiros passos do Amazon EKS, começo criando uma função do IAM. O Kubernetes assume essa função e a usa para criar recursos da AWS, como os Elastic Load Balancers. Uma vez criada, essa função pode ser usada para todos os meus clusters. Eu simplesmente criei um stack do CloudFormation usando o modelo mencionado no Guia de Introdução:

eks_cf_create_service_role_1

Confirmo que a stack criará uma função e clique em Criar para continuar:

eks_cf_will_create_role_1

A função é criada em segundos e o ARN é mostrado na guia Outputs do stack (eu precisarei dela mais tarde):

eks_cf_the_role_arn_1

Em seguida, crio um VPC (Virtual Private Cloud) usando o modelo de amostra do Guia de primeiros passos, com os seguintes parâmetros:

eks_create_vpc_1

O modelo cria uma VPC que possui duas sub-redes, junto com todas as tabelas de rotas, gateways e grupos de segurança necessários:

eks_vpc_parts_1

Como é o caso com o ARN, precisarei do ID do grupo de segurança mais tarde.

Em seguida, eu faço o download do kubectl e o configuro para usar o Heptio Authenticator. O autenticador permite que o kubectl faça uso da autenticação do IAM ao acessar meus clusters do Kubernetes. As instruções para fazer o download e a configuração estão no Guia de primeiros passos e eu as sigo conforme as instruções.

Para finalizar o processo de configuração, asseguro-me de que estou executando a versão mais recente da interface de linha de comando (CLI) da AWS (se eu estivesse executando uma versão mais antiga, o comando eks não estaria disponível):

eks_cli_help_verify_2

Com minha função IAM, meu VPC e minhas ferramentas em funcionamento, estou pronto para criar meu primeiro cluster do Amazon EKS!

Efetuo login no console do EKS usando um usuário do IAM que tenha privilégios administrativos (as credenciais ROOT não podem ser usadas devido à maneira como o Heptio Authenticator funciona) e clique em Criar cluster:

eks_con_start_1

Eu insiro um nome para o meu cluster (que deve corresponder ao que eu inseri quando criei o VPC, porque o Kubernetes depende da marcação de sub-redes), juntamente com os IDs de sub-rede e o ID do grupo de segurança, ambos para o VPC e clique em Criar :

eks_create_master_cluster_2

Meu cluster começa no status CREATING e transita para ACTIVE em 10 minutos ou menos:

eks_clusters_2

Agora preciso configurar kubectl para que ele possa acessar meu cluster. Antes de poder fazer isso, preciso usar a CLI para recuperar os dados da autoridade de certificação:

$ aws eks describe-cluster --region us-west-2 --cluster-name jeff1 --query cluster.certificateAuthority.data

Este comando retorna uma longa seqüência de dados que eu preciso em um minuto.

Eu também recupero o terminal do cluster do console:

eks_cluster_settings_1

Tendo certeza de que estou no meu diretório pessoal, crie um subdiretório .kube e crie um arquivo config-jeff1 nele. Em seguida, abro config-jeff1 no meu editor, copio o arquivo de configuração do modelo do Guia de Introdução e finalizo o endpoint, o certificado e o nome do cluster. Meu arquivo é assim:

apiVersion: v1
clusters:
- cluster:
    server: https://FDA1964D96C9EEF2B76684C103F31C67.sk1.us-west-2.eks.amazonaws.com
    certificate-authority-data: "...."
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: heptio-authenticator-aws
      args:
        - "token"
        - "-i"

Antes de testar kubectl, preciso garantir que minha CLI esteja configurada para usar o mesmo usuário do IAM que usei quando fiz o login no console para criar o cluster:

eks_verify_cli_1

E agora posso executar um teste rápido para verificar se tudo está funcionando como esperado:

eks_verify_kubectl_1

Neste ponto, configurei meu VPC master e meu plano de controle do Kubernetes. Estou pronto para criar alguns nós de trabalho (instâncias do EC2). Mais uma vez, isso é feito usando um modelo do CloudFormation:

eks_create_workers_1

O stack é criado em poucos minutos e configura funções do IAM, grupos de segurança e dimensionamento automático:

eks_worker_parts_1

Agora preciso configurar um mapa de configuradores para que os nós do worker saibam como ingressar no cluster. Eu faço o download do mapa, adiciono o ARN do NodeInstanceRole da pilha e aplico a configuração:

eks_setup_auth_2

Então eu verifico e vejo que meus nós estão prontos:

eks_watch_1

Executando o exemplo do livro de convidados
Meu cluster do Kubnernetes está pronto e posso usar o aplicativo Guest Book para testá-lo. Eu crio os controladores e serviços de replicação do Kubernetes:

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/redis-master-controller.json
replicationcontroller "redis-master" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/redis-master-service.json
service "redis-master" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/redis-slave-controller.json
replicationcontroller "redis-slave" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/redis-slave-service.json
service "redis-slave" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/guestbook-controller.json
replicationcontroller "guestbook" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/guestbook-service.json
service "guestbook" created

Eu listo os serviços em execução e capturei o endereço IP externo e a porta:

eks_services_running_1

e visito o endereço no meu navegador:

eks_tada_1

Coisas que você deve saber
Fazemos contribuições para o repositório do Kubernetes e para projetos como o CNI Plugin, o Heptio AWS Authenticator e o Virtual Kubelet. Atualmente, estamos procurando Engenheiros de Desenvolvimento de Sistemas, Engenheiros de DevOps, Gerentes de Produto e Arquitetos de Soluções com experiência na Kubernetes; confira a lista completa de posições abertas para saber mais.

O Amazon EKS está disponível hoje nas Regiões US East (N. Virginia) e US West (Oregon) e será expandido para outros em breve. Temos um roteiro detalhado e planejamos produzir muitos recursos adicionais este ano.

Você paga US$ 0,20 por hora pelo Plano de Controle EKS e os preços usuais de EC2, EBS e Balanceamento de Carga para recursos executados em sua conta. Veja a página EKS Pricing para mais informações.

Fonte: Blog AWS
Autor: Jeff Bar