Introdução ao Kubernetes Kops para iniciantes

Publicados: 2021-06-13

Vamos aprender sobre Kops, uma ferramenta de operações do Kubernetes.

O Kubernetes é uma das ferramentas de DevOps mais populares devido ao seu incrível sistema e recursos de orquestração de contêineres. Mas embora o Kubernetes ofereça tantas funcionalidades, configurar um cluster Kubernetes do zero é doloroso. É aqui que Kops entra em cena.

Com Kops, é uma moleza criar um cluster Kubernetes em provedores de nuvem como AWS, Google Cloud, etc. Isso torna a configuração de um cluster Kubernetes sem complicações e, neste artigo, discutirei essa ferramenta incrível.

O que é Kops?

Kops, também conhecido como operações do Kubernetes, é um projeto oficial do Kubernetes de código aberto, que permite criar, manter, atualizar e destruir um cluster Kubernetes de nível de produção altamente disponível. Ele provisiona a infraestrutura de nuvem também dependendo do requisito. Os desenvolvedores do Kops o descrevem como kubectl para clusters Kubernetes.

Kops é usado principalmente na implantação de clusters AWS e GCE Kubernetes. Kops suporta oficialmente apenas AWS, outros provedores de nuvem como DigitalOcean, GCE e OpenStack estão em fase beta.

Se você já trabalhou no kubectl antes, você se sentirá confortável trabalhando no Kops. Kops fornece comandos para criar, obter, atualizar, excluir clusters. Além disso, a Kops sabe como aplicar as alterações nos clusters existentes, pois utiliza a configuração declarativa. Com o Kops, você também pode escalar para cima e para baixo um cluster Kubernetes.

Abaixo estão as características do Kops:

  • Implanta mestres do Kubernetes com alta disponibilidade
  • Atualizações contínuas de cluster são compatíveis
  • Automatiza o provisionamento de clusters AWS e GCE Kubernetes
  • Gerencia complementos de cluster
  • Autocompletar de comando na linha de comando
  • Gera configurações do CloudFormation e Terraform
  • Suporta modelo de sincronização de estado para simulações e idempotência automática
  • Cria grupos de instâncias para oferecer suporte a clusters heterogêneos

Instalando Kops

Abaixo estão os passos simples para instalar o Kops em um ambiente Linux. Estou usando o Ubuntu 20.x.

Primeiro, baixe o Kops do pacote de lançamentos. O comando abaixo baixa o pacote mais recente do Kops.

 geekflare@ip-170-11-26-119:~$ curl -Lo kops 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 Saving to: 'kops-linux-amd64' 100%[=========================================================================================================================================================================>] 81,964,000 8.37MB/s in 7.1s 2021-06-10 16:23:19 (7.84 MB/s) - 'kops-linux-amd64' saved [81964000/81964000]

Você precisa fornecer permissão executável para o arquivo kops que você baixou e movê-lo para o diretório /usr/local/bin/.

 geekflare@ip-170-11-26-119:~$ sudo chmod +x kops-linux-amd64 geekflare@ip-170-11-26-119:~$ sudo mv kops-linux-amd64 /usr/local/bin/kops

A instalação está feita. Agora você pode executar o comando kops para verificar a instalação.

 geekflare@ip-170-11-26-119:~$ kops kops is Kubernetes ops. kops is the easiest way to get a production grade Kubernetes cluster up and running. We like to think of it as kubectl for clusters. kops helps you create, destroy, upgrade and maintain production-grade, highly available, Kubernetes clusters from the command line. AWS (Amazon Web Services) is currently officially supported, with GCE and VMware vSphere in alpha support. Usage: kops [command] Available Commands: completion Output shell completion code for the given shell (bash or zsh). create Create a resource by command line, filename or stdin. delete Delete clusters,instancegroups, or secrets. describe Describe a resource. edit Edit clusters and other resources. export Export configuration. get Get one or many resources. import Import a cluster. replace Replace cluster resources. rolling-update Rolling update a cluster. toolbox Misc infrequently used commands. update Update a cluster. upgrade Upgrade a kubernetes cluster. validate Validate a kops cluster. version Print the kops version information. Flags: --alsologtostderr log to standard error as well as files --config string config file (default is $HOME/.kops.yaml) -h, --help help for kops --log_backtrace_at traceLocation when logging hits line file:N, emit a stack trace (default :0) --log_dir string If non-empty, write log files in this directory --logtostderr log to standard error instead of files (default false) --name string Name of cluster --state string Location of state storage --stderrthreshold severity logs at or above this threshold go to stderr (default 2) -v, --v Level log level for V logs --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging Use "kops [command] --help" for more information about a command.

Verifique a versão do Kops para ter certeza de que o Kops foi instalado corretamente.

 geekflare@ip-170-11-26-119:~$ kops version Version 1.20.1 (git-5a27dad)

Vejamos agora alguns comandos importantes do Kops que são amplamente usados ​​pelos administradores para executar operações do Kubernetes.

Comandos Kops

Abaixo estão os comandos Kops amplamente utilizados que você deve conhecer.

kops criar

O comando kops create é usado para registrar um cluster.

Sintaxe: kops cria cluster <nome do cluster>

Existem muitos outros parâmetros como zona, região, tipo de instância, número de nós, etc., que você pode adicionar além do comando padrão.

atualização de kops

O comando kops update é usado para atualizar o cluster com a especificação de cluster especificada.

Sintaxe: kops update cluster –name <clustername>

Você pode executar este comando no modo de visualização para estar no lado mais seguro e, assim que a saída de visualização corresponder à sua expectativa, você poderá executar o comando com o sinalizador –yes para aplicar as alterações ao cluster.

kops obter

O comando kops get é usado para listar todos os clusters.

Sintaxe: kops obtém clusters

kops deletar

O comando kops delete é usado para excluir um cluster específico do registro e todos os recursos de nuvem atribuídos a esse cluster.

Sintaxe: kops delete cluster –name <clustername>

Assim como a atualização, você pode executar este comando também no modo de visualização.

atualização contínua do kops

O comando kops rolling-update é usado para atualizar um cluster Kubernetes para corresponder às especificações de nuvem e kops.

Sintaxe: kops rolling-update cluster –name <clustername>

Assim como a atualização, você pode executar este comando também no modo de visualização.

kops validar

O comando kops validate valida se o cluster que você criou está ativo ou não. Por exemplo, se os pods e nós estiverem no estado pendente, o comando validate retornará que o cluster ainda não está íntegro.

Sintaxe: kops validar cluster –wait <specified_time>

Este comando aguardará e validará o cluster pelo tempo especificado. Portanto, se você deseja validar o cluster por cinco minutos, execute o comando com 5m conforme o tempo especificado.

Isso foi tudo sobre os fundamentos do Kops, deixe-me mostrar agora como criar um cluster Kubernetes na AWS usando o Kops.

Configurar Kubernetes na AWS usando Kops

Antes de começar com as etapas mencionadas abaixo, estes são alguns pré-requisitos:

  • Ubuntu 20.04
  • AWS CLI
  • Configuração da AWS

Instalando o kubectl

Em primeiro lugar, vou instalar o kubectl.

Kubectl é usado para executar comandos de linha de comando em clusters Kubernetes. Baixe um pacote kubectl.

 geekflare@ip-170-11-26-119:~$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 39.6M 100 39.6M 0 0 6988k 0 0:00:07 0:00:07 --:--:-- 6988k

Você precisa fornecer permissão executável para o arquivo baixado e movê-lo para o diretório /usr/local/bin/.

 geekflare@ip-170-11-26-119:~$ chmod +x ./kubectl geekflare@ip-170-11-26-119:~$ sudo mv ./kubectl /usr/local/bin/kubectl

Criar bucket do S3

Depois de instalar e configurar a AWS CLI em sua máquina Linux, você poderá executar comandos aws . Eu tenho o aws cli instalado no meu sistema Ubuntu, então deixe-me executar um comando simples que listará todos os buckets no S3.

 geekflare@ip-170-11-26-119:~$ aws s3 ls

Ele estará vazio porque não tenho nenhum bucket s3 no momento. Deixe-me verificar se alguma instância do ec2 está em execução.

 geekflare@ip-170-11-26-119:~$ aws ec2 describe-instances { "Reservations": [] }

Isso significa que nenhuma instância ec2 está em execução no momento.

Agora você precisa criar um bucket s3 onde o Kops salvará todas as informações de estado do cluster. Aqui estou criando um bucket s3 na região us-west-2 com o nome geekkops-bucket-1132. Você pode usar LocationConstraint para evitar qualquer erro com a região.

 geekflare@ip-170-11-26-119:~$ aws s3api create-bucket --bucket geekkops-bucket-1132 --region us-west-2 --create-bucket-configuration LocationConstraint=us-west-2 { "Location": "http://geekkops-bucket-1132.s3.amazonaws.com/" }

Se eu listar o aws s3 bucket novamente, obterei o bucket que acabei de criar.

 geekflare@ip-170-11-26-119:~$ aws s3 ls 2021-06-10 16:30:13 geekkops-bucket-1132

Execute o comando abaixo para habilitar a versão do bucket s3.

 geekflare@ip-170-11-26-119:~$ aws s3api put-bucket-versioning --bucket geekkops-bucket-1132 --versioning-configuration Status=Enabled

Gerar chave

Gere a chave ssh para a qual será usada pelo Kops para login do cluster e geração de senha.

 geekflare@ip-170-11-26-119:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ubuntu/.ssh/id_rsa. Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub. The key fingerprint is: SHA256:fH4JCBXMNRqzk1hmoK+cXmwSFaeBsuGBA5IWMkNuvq0 geekflare@ip-170-11-26-119 The key's randomart image is: +---[RSA 2048]----+ |O=. .++Xoo | |B++ .. @o* . | |.= =. = = | |ooooo | | . . . S o | | o. = o . . | | . .= + . o | | .. + . | | E . | +----[SHA256]-----+

Exportar Variáveis ​​de Ambiente

Exponha o nome do cluster e o bucket s3 como variáveis ​​de ambiente. Isso será aplicável apenas para a sessão atual. Estou usando o sufixo '.k8s.local' porque não estou usando nenhum DNS pré-configurado.

 geekflare@ip-170-11-26-119:~$ export KOPS_CLUSTER_NAME=geekdemo1.k8s.local geekflare@ip-170-11-26-119:~$ export KOPS_STATE_STORE=s3://geekkops-bucket-1132

Criar o cluster

Use o comando kops create para criar o cluster. Abaixo estão os parâmetros que estou usando para criar um cluster Kubernetes na AWS usando Kops:

  • --cloud informa o provedor de nuvem que estou usando
  • --zones é a zona onde a instância de cluster será implantada
  • --node-count é o número de nós a serem implantados no cluster Kubernetes
  • --node-size e --master-size são os tipos de instância ec2, estou usando as micro instâncias
  • --name é o nome do cluster
 geekflare@ip-170-11-26-119:~$ kops create cluster --cloud=aws --zones=eu-central-1a --node-count=1 --node-size=t2.micro --master-size=t2.micro --name=${KOPS_CLUSTER_NAME} I0216 16:35:24.225238 4326 subnets.go:180] Assigned CIDR 172.20.32.0/19 to subnet eu-central-1a I0216 16:35:24.068088 4326 create_cluster.go:717] Using SSH public key: /home/ubuntu/.ssh/id_rsa.pub Previewing changes that will be made: I0216 16:35:24.332590 4326 apply_cluster.go:465] Gossip DNS: skipping DNS validation I0216 16:35:24.392712 4326 executor.go:111] Tasks: 0 done / 83 total; 42 can run W0216 16:35:24.792113 4326 vfs_castore.go:604] CA private key was not found I0216 16:35:24.938057 4326 executor.go:111] Tasks: 42 done / 83 total; 17 can run I0216 16:35:25.436407 4326 executor.go:111] Tasks: 59 done / 83 total; 18 can run I0216 16:35:25.822395 4326 executor.go:111] Tasks: 77 done / 83 total; 2 can run I0216 16:35:25.823088 4326 executor.go:111] Tasks: 79 done / 83 total; 2 can run I0216 16:35:26.406919 4326 executor.go:111] Tasks: 81 done / 83 total; 2 can run I0216 16:35:27.842148 4326 executor.go:111] Tasks: 83 done / 83 total; 0 can run LaunchTemplate/master-eu-central-1a.masters.geekdemo1.k8s.local AssociatePublicIP true HTTPPutResponseHopLimit 1 HTTPTokens optional IAMInstanceProfile name:masters.geekdemo1.k8s.local id:masters.geekdemo1.k8s.local ImageID 099720109477/ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20210119.1 InstanceType t2.micro RootVolumeSize 64 RootVolumeType gp2 RootVolumeEncryption false RootVolumeKmsKey SSHKey name:kubernetes.geekdemo1.k8s.local-3e:19:92:ca:dd:64:d5:cf:ff:ed:3a:92:0f:40:d4:e8 id:kubernetes.geekdemo1.k8s.local-3e:19:92:ca:dd:64:d5:cf:ff:ed:3a:92:0f:40:d4:e8 SecurityGroups [name:masters.geekdemo1.k8s.local] SpotPrice Tags {k8s.io/cluster-autoscaler/node-template/label/kubernetes.io/role: master, k8s.io/cluster-autoscaler/node-template/label/kops.k8s.io/instancegroup: master-eu-central-1a, k8s.io/role/master: 1, kops.k8s.io/instancegroup: master-eu-central-1a, Name: master-eu-central-1a.masters.geekdemo1.k8s.local, KubernetesCluster: geekdemo1.k8s.local, kubernetes.io/cluster/geekdemo1.k8s.local: owned, k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/master: } Subnet/eu-central-1a.geekdemo1.k8s.local ShortName eu-central-1a VPC name:geekdemo1.k8s.local AvailabilityZone eu-central-1a CIDR 172.20.32.0/19 Shared false Tags {KubernetesCluster: geekdemo1.k8s.local, kubernetes.io/cluster/geekdemo1.k8s.local: owned, SubnetType: Public, kubernetes.io/role/elb: 1, Name: eu-central-1a.geekdemo1.k8s.local} VPC/geekdemo1.k8s.local CIDR 172.20.0.0/16 EnableDNSHostnames true EnableDNSSupport true Shared false Tags {kubernetes.io/cluster/geekdemo1.k8s.local: owned, Name: geekdemo1.k8s.local, KubernetesCluster: geekdemo1.k8s.local} VPCDHCPOptionsAssociation/geekdemo1.k8s.local VPC name:geekdemo1.k8s.local DHCPOptions name:geekdemo1.k8s.local Must specify --yes to apply changes Cluster configuration has been created. Suggestions: * list clusters with: kops get cluster * edit this cluster with: kops edit cluster geekdemo1.k8s.local * edit your node instance group: kops edit ig --name=geekdemo1.k8s.local nodes-eu-central-1a * edit your master instance group: kops edit ig --name=geekdemo1.k8s.local master-eu-central-1a Finally configure your cluster with: kops update cluster --name geekdemo1.k8s.local --yes –admin

Execute o comando kops get para ver se o cluster foi criado.

 geekflare@ip-170-11-26-119:~$ kops get cluster NAME CLOUD ZONES geekdemo1.k8s.local aws eu-central-1a

Atualizar o cluster

Para aplicar as especificações de cluster especificadas ao cluster, execute o comando kops update.

 geekflare@ip-170-11-26-119:~$ kops update cluster --name geekdemo1.k8s.local --yes --admin I0216 16:38:16.800767 4344 apply_cluster.go:465] Gossip DNS: skipping DNS validation I0216 16:38:16.919282 4344 executor.go:111] Tasks: 0 done / 83 total; 42 can run W0216 16:38:17.343336 4344 vfs_castore.go:604] CA private key was not found I0216 16:38:18.421652 4344 keypair.go:195] Issuing new certificate: "etcd-clients-ca" I0216 16:38:18.450699 4344 keypair.go:195] Issuing new certificate: "etcd-peers-ca-main" I0216 16:38:19.470785 4344 keypair.go:195] Issuing new certificate: "etcd-manager-ca-main" I0216 16:38:19.531852 4344 keypair.go:195] Issuing new certificate: "etcd-peers-ca-events" I0216 16:38:19.551601 4344 keypair.go:195] Issuing new certificate: "apiserver-aggregator-ca" I0216 16:38:19.571834 4344 keypair.go:195] Issuing new certificate: "etcd-manager-ca-events" I0216 16:38:19.592090 4344 keypair.go:195] Issuing new certificate: "master" W0216 16:38:19.652894 4344 vfs_castore.go:604] CA private key was not found I0216 16:38:19.653013 4344 keypair.go:195] Issuing new certificate: "ca" I0216 16:38:24.344075 4344 executor.go:111] Tasks: 42 done / 83 total; 17 can run I0216 16:38:24.306125 4344 executor.go:111] Tasks: 59 done / 83 total; 18 can run I0216 16:38:26.189798 4344 executor.go:111] Tasks: 77 done / 83 total; 2 can run I0216 16:38:26.190464 4344 executor.go:111] Tasks: 79 done / 83 total; 2 can run I0216 16:38:26.738600 4344 executor.go:111] Tasks: 81 done / 83 total; 2 can run I0216 16:38:28.810100 4344 executor.go:111] Tasks: 83 done / 83 total; 0 can run I0216 16:38:29.904257 4344 update_cluster.go:313] Exporting kubecfg for cluster kops has set your kubectl context to geekdemo1.k8s.local Cluster is starting. It should be ready in a few minutes. Suggestions: * validate cluster: kops validate cluster --wait 10m * list nodes: kubectl get nodes --show-labels * ssh to the master: ssh -i ~/.ssh/id_rsa [email protected] * the ubuntu user is specific to Ubuntu. If not using Ubuntu please use the appropriate user based on your OS. * read about installing addons at: https://kops.sigs.k8s.io/operations/addons.

Se você verificar imediatamente se os nós do Kubernetes estão em execução ou não, receberá um erro. Você precisa ser um pouco paciente e esperar alguns minutos (5-10) até que o cluster seja criado.

 geekflare@ip-170-11-26-119:~$ kubectl get nodes Unable to connect to the server: dial tcp: lookup api-geekdemo1-k8s-local-dason2-1001342368.eu-central-1.elb.amazonaws.com on 127.0.0.53:53: no such host

Validar o cluster

Estou executando o comando validate por 5 minutos para verificar se o cluster está ativo e íntegro ou não. Na saída de validação, você poderá ver os detalhes do nó quando estiverem ativos.

 geekflare@ip-170-11-26-119:~$ kops validate cluster --wait 5m Validating cluster geekdemo1.k8s.local INSTANCE GROUPS NAME ROLE MACHINETYPE MIN MAX SUBNETS master-eu-central-1a Master t2.micro 1 1 eu-central-1a nodes-eu-central-1a Node t2.micro 1 1 eu-central-1a

Listar os nós e pods

Agora execute o comando abaixo para verificar se todos os nós estão prontos e em execução. Você pode ver o status do mestre e do nó como pronto.

 geekflare@ip-170-11-26-119:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION ip-173-19-35-156.eu-central-1.compute.internal Ready master 10m v1.20.1 ip-172-36-23-149.eu-central-1.compute.internal Ready node 5m38s v1.20.1

Você pode verificar todos os pods em execução no cluster Kubernetes.

 geekflare@ip-170-11-26-119:~$ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system dns-controller-8d8889c4b-xp9dl 1/1 Running 0 8m26s kube-system etcd-manager-events-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 0 10m kube-system etcd-manager-main-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 0 10m kube-system kops-controller-9skdk 1/1 Running 3 6m51s kube-system kube-apiserver-ip-173-19-35-156.eu-central-1.compute.internal 2/2 Running 0 10m kube-system kube-controller-manager-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 6 10m kube-system kube-dns-696cb84c7-g8nhb 3/3 Running 0 4m27s kube-system kube-dns-autoscaler-55f8f75459-zlxbr 1/1 Running 0 7m18s kube-system kube-proxy-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 0 10m kube-system kube-proxy-ip-172-36-23-149.eu-central-1.compute.internal 1/1 Running 0 7m2s kube-system kube-scheduler-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 5 10m

Excluir o cluster

Assim como criar um cluster Kubernetes, excluir um cluster Kubernetes usando Kops é muito simples. Este comando kops delete removerá todos os recursos de nuvem do cluster e o próprio registro do cluster.

 geekflare@ip-170-11-26-119:~$ kops delete cluster --name geekdemo1.k8s.local --yes TYPE NAME ID autoscaling-config master-eu-central-1a.masters.geekdemo1.k8s.local lt-0cc11aec1943204e4 autoscaling-config nodes-eu-central-1a.geekdemo1.k8s.local lt-0da65d2eaf6de9f5c autoscaling-group master-eu-central-1a.masters.geekdemo1.k8s.local master-eu-central-1a.masters.geekdemo1.k8s.local autoscaling-group nodes-eu-central-1a.geekdemo1.k8s.local nodes-eu-central-1a.geekdemo1.k8s.local dhcp-options geekdemo1.k8s.local dopt-0403a0cbbfbc0c72b iam-instance-profile masters.geekdemo1.k8s.local masters.geekdemo1.k8s.local iam-instance-profile nodes.geekdemo1.k8s.local nodes.geekdemo1.k8s.local iam-role masters.geekdemo1.k8s.local masters.geekdemo1.k8s.local iam-role nodes.geekdemo1.k8s.local nodes.geekdemo1.k8s.local instance master-eu-central-1a.masters.geekdemo1.k8s.local i-069c73f2c23eb502a instance nodes-eu-central-1a.geekdemo1.k8s.local i-0401d6b0d4fc11e77 iam-instance-profile:nodes.geekdemo1.k8s.local ok load-balancer:api-geekdemo1-k8s-local-dason2 ok iam-instance-profile:masters.geekdemo1.k8s.local ok iam-role:masters.geekdemo1.k8s.local ok instance:i-069c73f2c23eb502a ok autoscaling-group:nodes-eu-central-1a.geekdemo1.k8s.local ok iam-role:nodes.geekdemo1.k8s.local ok instance:i-0401d6b0d4fc11e77 ok autoscaling-config:lt-0cc11aec1943204e4 ok autoscaling-config:lt-0da65d2eaf6de9f5c ok autoscaling-group:master-eu-central-1a.masters.geekdemo1.k8s.local ok keypair:key-0d82g920j421b89dn ok Deleted kubectl config for geekdemo1.k8s.local Deleted cluster: "geekdemo1.k8s.local"

Conclusão

Espero que este artigo sobre Kops tenha sido útil e que você aprenda algo novo hoje. Kops é uma ferramenta fantástica para trabalhar com Kubernetes na nuvem. Então vá em frente e experimente as etapas mencionadas neste artigo e configure seu cluster Kubernetes na AWS usando Kops.