Setup Kubernetes na AWS usando KOPS - acorreiaveras/kops_steps GitHub Wiki

Requisitos

  • AWS Ubuntu Instance (Habilitar AWS CLI)
  • Domínio Route 53
  • S3 Bucket

Configurações AWS

  • Criar role - Criar um role de comunicação entre a instância EC2 e o bucket S3

Habilitar as seguintes permissões para o IAM

 AmazonEC2FullAccess
 AmazonRoute53FullAccess
 AmazonS3FullAccess
 AmazonVPCFullAccess
 IAMFullAccess

Instalar Kubectl

Instalar na instância Ubuntu

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
sudo mv ./kubectl /usr/local/bin/kubectl 

Instalar KOPS

curl -LO https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64
chmod +x kops-linux-amd64
sudo mv kops-linux-amd64 /usr/local/bin/kops        

Criar um Bucket S3

Onde os arquivos de configuração do cluster serão salvos

aws s3 mb s3://kops.0secops.com 
export KOPS_STATE_STORE=s3://kops.0secops.com 

Configurar Route 53

https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-routing-traffic-for-subdomains.html

Criar um Kubernetes Cluster

Gerar chaves para autenticação ssh-keygen

Definir os parâmetros para criação do cluster

kops create cluster 
--name cluster.kops.0secops.com 
--node-size t2.small 
--master-size t2.medium 
--zones us-west-1c 
--state s3://kops.0secops.com 
--dns-zone kops.0secops.com 
--yes

Para verificar o cluster

kops validate cluster

Obter os nodes criados

kubectl get nodes

Kubernetes UI

Para instalar o dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

Lembrando que, o dashboard apenas é suportado em versões > 1.8

Para atualizar o cluster

kops edit cluster $NAME
# Defina KubernetesVersion com a versão desejada (e.g. v1.3.5)
kops update cluster $NAME --yes
kops rolling-update cluster $NAME --yes

Obter credenciais para acessar o dashboard

kubectl config view

*Usuário padrão: admin

Obter token de acesso ao dashboard

kops get secrets admin --type secret -oplaintext

Deploy container Nginx

kubectl run sample-nginx --image=nginx --replicas=2 --port=80
kubectl get pods
kubectl get deployments

Para criar um load balancer entre os dois containers

kubectl expose deployment sample-nginx --port=80 --type=LoadBalancer
kubectl get services -o wide