Introducción a Kubernetes Kops para principiantes

Aprendamos 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 comandos en la línea de comandos Genera configuraciones de CloudFormation y Terraform Admite el modelo de sincronización de estado para ensayos 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.

[email protected]:~$ 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/.

[email protected]:~$ sudo chmod +x kops-linux-amd64
[email protected]:~$ 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.

[email protected]:~$ 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.

[email protected]:~$ 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 crear clúster

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 actualiza el clúster –name

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 policías obtienen grupos

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 eliminar clúster –name

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: clúster de actualización continua de kops –name

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

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:

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.

[email protected]:~$  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/.

[email protected]:~$ chmod +x ./kubectl
[email protected]:~$ 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.

[email protected]:~$ 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.

[email protected]:~$ 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.

[email protected]:~$ 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, obtendré el depósito que acabo de crear.

[email protected]:~$ 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.

[email protected]:~$ 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.

[email protected]:~$ 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 [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|O=. .++Xoo |
|B++ .. @o* . |
|.= =. = = |
|o o o o o |
| . . . 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.

[email protected]:~$ export KOPS_CLUSTER_NAME=geekdemo1.k8s.local
[email protected]:~$ 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 que se implementarán en el clúster de Kubernetes –node-size y –master-size son los tipos de instancia ec2, estoy usando las instancias micro –name es el nombre del clúster

[email protected]:~$ 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.

[email protected]:~$ 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.

[email protected]:~$ 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.

[email protected]:~$ 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.

[email protected]:~$ 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.

[email protected]:~$ 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.

[email protected]:~$ 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.

[email protected]:~$ 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.

Publicaciones relacionadas

Botón volver arriba