Introdução ao Kubernetes Kops para iniciantes
Publicados: 2021-06-13Vamos 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/kopsA 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 --:--:-- 6988kVocê 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/kubectlCriar 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 lsEle 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-1132Execute 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=EnabledGerar 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-1132Criar 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:
-
--cloudinforma 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-sizee--master-sizesã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 –adminExecute 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-1aAtualizar 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 hostValidar 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-1aListar 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.1Você 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 10mExcluir 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.
