Introdução
Uma ferramenta que facilita a criação de clusters Kubernetes na AWS é o KOPS. Os passos à seguir mostrarão como instalá-lo e utilizá-lo para montar seu cluster. Como leitura adicional, recomendo o Starting Guide
Pré requisitos
Verifique se você possuí suas credenciais da AWS no seu arquivo .aws/credentials
. Você precisará de permissões em EC2 e Route53.
Crie um domíniou ou subdomínio no Route53 de sua conta AWS. O KOPS não irá funcionar se você não possuir um domínio público gerenciado pelo Route53.
Determine uma faixa de IP para usar em sua nova VPC (ou escolha uma VPC existente). Para clusters temporários ou pessoais, eu costumo usar 10.0.0.0/16.
Instalando KOPS
Para a instalação do KOPS em MAC OS-X, você precisa ter brew instalado antes.
No MAC OS-X faça:
brew install kops
No Linux, baixe o último release do KOPS e faça:
chmod +x kops-linux-amd64 mv kops-linux-amd64 /usr/local/bin/kops
Instale o cliente do Kubernetes
No MAC OS-X faça:
brew install kubernetes-cli
No Linux, faça:
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl chmod +x kubectl mv kubectl /usr/local/bin/kubectl
Construíndo nosso cluster
Para construir nosso cluster, precisamo de algumas variáveis de ambiente:
DOMAIN_NAME aponta para o domínio que criamos no Route53:
export DOMAIN_NAME="k8s.example.com"
AWS_PROFILE aponta para nossas credenciais armazenadas no arquivo aws/credentials
:
export AWS_PROFILE=my_profile
KOPS_STATE_STORE aponta para o local onde armazenaremos o estado do cluster:
export KOPS_STATE_STORE=s3://${AWS_PROFILE}-ops-us-west-1/kops
Escolha uma região da AWS para construir seu cluster. Nos exemplos abaixo eu escolhi us-west-1. Veja quantas AZ a região escolhida possui e defina um CIDR para as subnets que serão criadas em cada uma dessas AZ. Como us-west-1 possuí duas zonas utilizáveis (us-web-1b e us-west-1c), criarei subnets /22 para elas. Precisamos também ter o par de chaves SSH que permitirá acesso aos hosts do cluster armazenados em nossa máquina. Esse par de chaves pode ter sido criado no próprio painel da AWS, caso em que você precisará extrair a chave pública do arquivo .pem baixado, ou pode ter sido criado por você.
Execute o comando abaixo:
kops create cluster --cloud=aws \ --dns-zone=${DOMAIN_NAME} \ --master-size=t2.small \ --master-zones=us-west-1b \ --master-count=1 \ --network-cidr=10.0.0.0/22 \ --node-size=t2.small \ --node-count=2 \ --zones=us-west-1b,us-west-1c \ --name=${DOMAIN_NAME} \ --ssh-public-key=/path/to/key/${AWS_PROFILE}-kube.pub \ --admin-access=38.104.140.6/32,52.8.15.187/32 \ --networking=flannel \ --kubernetes-version=1.5.4 \ --image 595879546273/CoreOS-stable-1235.9.0-hvm
Este comando preparará o entorno da AWS para criar os componentes necessários para o Kubernetes funcionar. Dizemos qual é a Cloud utilizada, qual a zona de DNS, os tamanhos das instâncias (temos que começar com t2.small pois o Kubernetes não instalará numa t2.micro por falta de memória), quantos masters e quantos nodes teremos, quais os CIDR de cada uma das nossas AZ, qual o nome do nosso cluster, qual chave SSH utilizaremos (a chave pública será copiada automaticamente para o arquivo de authorized_keys do usuário core), qual nossa versão do Kubernetes e qual imagem utilizaremos.
Iniciando nosso cluster
Execute o seguinte comando para iniciar nosso cluster:
kops update cluster ${DOMAIN_NAME} --yes
Teremos que aguardar algum tempo até que o cluster esteja totalmente pronto e funcionando. Diversos componentes serão criados na AWS durante esse processo. Teremos ELB, hosts criados no Route53, instâncias no EC2 e muito mais. Enquanto aguardamos, gosto de rodar o comando abaixo para verificar o status:
while ! kops validate cluster ; do sleep 5 ; done
Populando o cluster com serviços standard
Instalamos o dashboard do Kubernetes e ferramentas de monitoração:
kubectl create -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/monitoring-standalone/v1.2.0.yaml kubectl create -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/kubernetes-dashboard/v1.5.0.yaml
Para testarmos o dashboard, podemos rodar:
kubectl proxy
Deixe esse comando rodando e aponte seu browser para http://127.0.0.1:8001/ui. Você estará no dashboard do seu cluster Kubernetes.
Populando o cluster com serviços extras
Usaremos o gerenciador de pacotes para Kubernetes chamado Helm. Para instalá-lo,
No MAC OS-X faça:
brew install kubernetes-helm
No Linux, faça:
wget https://kubernetes-helm.storage.googleapis.com/helm-v2.2.2-linux-amd64.tar.gz tar xvfz helm-v2.2.2-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/bin
Uma vez instalado, prepararemos o cluster para utilizar o Helm:
helm init
Atualize o caching do Helm com as definições mais atuais:
helm repo update
Instalamos um pacote no cluster. Como exemplo, vamos montar um Grafana, ferramenta popular de geração de gráficos, bastante usada em monitorações:
helm install stable/grafana
Siga as instruções geradas pelo comando acima para acessar o seu Grafana novinho em folha. No final, você o acessará pela senha que as instruções deram a você, com usuário admin em http://localhost:443
Para acessarmos o serviço, precisamos perguntar para a API do Kubernetes onde ele está e quais as credenciais de acesso. Utilizaremos também o KOPS para conseguir essas informações:
kops get secrets -oplaintext --type=secret kube
Para acessar o cluster sem ter que colocar no browser o endereço do nosso domínio, podemos usar assim:
No MAC OS-X:
open https://api.${DOMAIN_NAME}/
No Linux:
xdg-open https://api.${DOMAIN_NAME}/
O usuário para acesso ao painel é admin e a senha foi a conseguida no passo de get secrets
.
Destruindo o cluster
Para remover totalmente seu cluster e quaisquer objetos criados para ele na AWS, execute o seguinte comando:
kops delete cluster ${DOMAIN_NAME}