Introducción a Kubernetes Kops para principiantes
Publicado: 2021-06-13Aprendamos sobre Kops, una herramienta de operaciones de Kubernetes.
Kubernetes es una de las herramientas DevOps más populares debido a su increíble sistema de orquestación de contenedores y características. Pero aunque Kubernetes ofrece tantas funcionalidades, configurar un clúster de Kubernetes desde cero es complicado. Aquí es donde Kops entra en escena.
Con Kops, es muy fácil crear un clúster de Kubernetes en proveedores de la nube como AWS, Google Cloud, etc. Hace que la configuración de un clúster de Kubernetes sea sencilla y en este artículo hablaré sobre esta increíble herramienta.
¿Qué es Kops?
Kops, también conocido como operaciones de Kubernetes, es un proyecto oficial de Kubernetes de código abierto que le permite crear, mantener, actualizar y destruir un clúster de Kubernetes de grado de producción de alta disponibilidad. Aprovisiona la infraestructura de la nube también según los requisitos. Los desarrolladores de Kops lo describen como kubectl para clústeres de Kubernetes.
Kops se usa principalmente para implementar clústeres de AWS y GCE Kubernetes. Kops admite oficialmente solo AWS, otros proveedores de nube como DigitalOcean, GCE y OpenStack se encuentran en la etapa beta.
Si ha trabajado en kubectl antes, se sentirá cómodo trabajando en Kops. Kops proporciona comandos para crear, obtener, actualizar y eliminar clústeres. Además, Kops sabe cómo aplicar cambios en los clústeres existentes, ya que utiliza la configuración declarativa. Con Kops, también puede escalar hacia arriba y hacia abajo un clúster de Kubernetes.
A continuación se muestran las características de Kops:
- Implementa maestros de Kubernetes con alta disponibilidad
- Se admiten actualizaciones continuas de clústeres
- Automatiza el aprovisionamiento de clústeres de AWS y GCE Kubernetes
- Administra complementos de clúster
- Autocompletado de comando en la línea de comando
- Genera configuraciones de CloudFormation y Terraform
- Admite el modelo de sincronización de estado para simulacros e idempotencia automática
- Crea grupos de instancias para admitir clústeres heterogéneos
Instalación de Kops
A continuación se muestran pasos sencillos para instalar Kops en un entorno Linux. Estoy usando Ubuntu 20.x.
Primero, descargue Kops del paquete de versiones. El siguiente comando descarga el último paquete de 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]
Debe otorgar permiso de ejecución al archivo kops que descargó y moverlo al directorio /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
La instalación está lista. Ahora puede ejecutar el comando kops para verificar la instalación.
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 la versión de Kops para asegurarse de que Kops esté instalado correctamente.
geekflare@ip-170-11-26-119:~$ kops version Version 1.20.1 (git-5a27dad)
Veamos ahora algunos comandos importantes de Kops que los administradores utilizan ampliamente para ejecutar operaciones de Kubernetes.
Comandos de Kops
A continuación se encuentran los comandos Kops ampliamente utilizados que debe conocer.
los policías crean
El comando kops create se usa para registrar un clúster.
Sintaxis: kops create cluster <clustername>
Hay muchos otros parámetros como zona, región, tipo de instancia, número de nodos, etc., que puede agregar además del comando predeterminado.
actualización de policías
El comando de actualización kops se usa para actualizar el clúster con la especificación de clúster especificada.
Sintaxis: kops update cluster –name <nombre del clúster>
Puede ejecutar este comando en el modo de vista previa para estar más seguro, y una vez que el resultado de la vista previa coincida con sus expectativas, puede ejecutar el comando con el indicador –yes para aplicar los cambios al clúster.
los policías consiguen
El comando kops get se usa para enumerar todos los clústeres.
Sintaxis: los kops obtienen clústeres
eliminar
El comando kops delete se usa para eliminar un clúster específico del registro y todos los recursos de la nube asignados a ese clúster.
Sintaxis: kops delete cluster –name <nombre del clúster>
Al igual que la actualización, también puede ejecutar este comando en el modo de vista previa.
actualización continua de kops
El comando de actualización gradual de kops se usa para actualizar un clúster de Kubernetes para que coincida con las especificaciones de la nube y kops.
Sintaxis: kops rolling-update cluster –name <clustername>
Al igual que la actualización, también puede ejecutar este comando en el modo de vista previa.
los policías validan
El comando de validación de kops valida si el clúster que creó está activo o no. Por ejemplo, si los pods y los nodos están en estado pendiente, el comando de validación devolverá que el clúster aún no está en buen estado.
Sintaxis: kops validar clúster –esperar <tiempo_especificado>
Este comando esperará y validará el clúster durante el tiempo especificado. Entonces, si desea validar el clúster durante cinco minutos, ejecute el comando con 5 minutos como tiempo especificado.
Eso fue todo sobre los fundamentos de Kops. Permítame ahora mostrarle cómo crear un clúster de Kubernetes en AWS usando Kops.
Configure Kubernetes en AWS con Kops
Antes de comenzar con los pasos que se mencionan a continuación, estos son algunos requisitos previos:
- Ubuntu 20.04
- CLI de AWS
- Configurar AWS
Instalación de kubectl
En primer lugar, instalaré kubectl.
Kubectl se usa para ejecutar comandos de línea de comandos en clústeres de Kubernetes. Descargue un paquete de 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
Debe proporcionar permiso de ejecución al archivo descargado y moverlo al directorio /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
Crear depósito S3
Una vez que haya instalado y configurado AWS CLI en su máquina Linux, podrá ejecutar los comandos aws
. Tengo aws cli instalado en mi sistema Ubuntu, así que permítanme ejecutar un comando simple que enumerará todos los cubos en S3.
geekflare@ip-170-11-26-119:~$ aws s3 ls
Estará vacío porque no tengo ningún cubo s3 a partir de ahora. Permítanme verificar si se está ejecutando alguna instancia ec2.
geekflare@ip-170-11-26-119:~$ aws ec2 describe-instances { "Reservations": [] }
Esto significa que ninguna instancia ec2 se está ejecutando a partir de ahora.
Ahora necesita crear un depósito s3 donde Kops guardará toda la información de estado del clúster. Aquí estoy creando un depósito s3 en la región us-west-2 con el nombre geekkops-bucket-1132. Puede usar LocationConstraint para evitar cualquier error con la región.
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/" }
Si vuelvo a enumerar el depósito de aws s3 bucket
, obtendré el depósito que acabo de crear.
geekflare@ip-170-11-26-119:~$ aws s3 ls 2021-06-10 16:30:13 geekkops-bucket-1132
Ejecute el siguiente comando para habilitar la versión para el depósito s3.
geekflare@ip-170-11-26-119:~$ aws s3api put-bucket-versioning --bucket geekkops-bucket-1132 --versioning-configuration Status=Enabled
Generar clave
Genere la clave ssh para la cual Kops la utilizará para el inicio de sesión del clúster y la generación de contraseñas.
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 variables de entorno
Exponga el nombre del clúster y el depósito s3 como variables de entorno. Esto será aplicable solo para la sesión actual. Estoy usando el sufijo '.k8s.local' porque no estoy usando ningún DNS preconfigurado.

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
Crear el clúster
Utilice el comando kops create para crear el clúster. A continuación se muestran los parámetros que estoy usando para crear un clúster de Kubernetes en AWS usando Kops:
-
--cloud
le dice al proveedor de la nube que estoy usando -
--zones
es la zona donde se implementará la instancia del clúster -
--node-count
es la cantidad de nodos para implementar en el clúster de Kubernetes -
--node-size
y--master-size
son los tipos de instancia ec2, estoy usando las microinstancias -
--name
es el nombre del clúster
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
Ejecute el comando kops get para ver si se creó el clúster.
geekflare@ip-170-11-26-119:~$ kops get cluster NAME CLOUD ZONES geekdemo1.k8s.local aws eu-central-1a
Actualizar el clúster
Para aplicar las especificaciones de clúster especificadas al clúster, ejecute el comando de actualización kops.
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.
Si comprueba inmediatamente si los nodos de Kubernetes se están ejecutando o no, obtendrá un error. Debe ser un poco paciente y esperar unos minutos (5-10) hasta que se cree el clúster.
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 el clúster
Estoy ejecutando el comando de validación durante 5 minutos para verificar si el clúster está activo y en buen estado o no. En la salida de validación, podrá ver los detalles del nodo cuando estén activos.
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
Enumerar los nodos y los pods
Ahora ejecute el siguiente comando para verificar si todos los nodos están listos y en ejecución. Puede ver que tanto el maestro como el nodo están listos.
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
Puede verificar todos los pods que se ejecutan en el clúster de 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
Eliminar el clúster
Al igual que crear un clúster de Kubernetes, eliminar un clúster de Kubernetes con Kops es muy sencillo. Este comando de eliminación de kops eliminará todos los recursos de la nube del clúster y el propio registro del clúster.
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"
Conclusión
Espero que este artículo sobre Kops haya sido útil y que aprendas algo nuevo hoy. Kops es una herramienta fantástica para trabajar con Kubernetes en la nube. Así que adelante, pruebe los pasos mencionados en este artículo y configure su clúster de Kubernetes en AWS usando Kops.