Eksctl: una herramienta CLI para crear clústeres de Kubernetes en Amazon EKS
En esta publicación de blog, veremos cómo usar eksctl para crear clústeres de Kubernetes en EKS. eksctl es una herramienta de línea de comandos escrita en Go by tejidos y basado en las plantillas oficiales de CloudFormation de Amazon.
Para los nuevos en EKS, es un servicio administrado por AWS que facilita la implementación, escala y administración de aplicaciones en contenedores que se ejecutan en Kubernetes. Todos los clústeres se implementan en EC2.
Cómo instalar eksctl en Linux
Dado que eksctl está escrito en Go, se distribuye como un paquete binario sin dependencia. Puede descargar manualmente el paquete desde la página Versiones o extraer la última versión con wget
o curl
mando.
En nuestro ejemplo, usaremos wget, así que asegúrese de que esté instalado antes de continuar.
curl --silent --location "https://github.com/weaveworks/eksctl/releases/download/latest_release/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
Esto descargará eksctl
tar y extraerlo a / tmp directorio.
Antes de poder usar el binario, debe mover el archivo a un directorio en su $PATH
Variable ambiental.
$ sudo mv /tmp/eksctl /usr/local/bin
Para los usuarios de macOS, también puede instalar la herramienta eksctl desde Homebrew:
$ brew install weaveworks/tap/eksctl
Verifique la versión usando:
$ eksctl version 2018-07-25T11:52:18+03:00 [ℹ] versionInfo = map[string]string{"builtAt":"2018-07-23T07:21:37Z", "gitCommit":"c332060348833792c9a69f1ef71d1c8d76c3ffd7", "gitTag":"0.1.0-beta.3"}
Configurar las credenciales de la API de AWS
Una vez que haya instalado eksctl, necesitará las credenciales de la API de AWS para conectarse al servicio EKS. La forma más sencilla de configurar estas credenciales es mediante.awscli
que se instala usando pip.
Instalar pip:
$ sudo apt-get install python-pip # For Ubuntu/Debian $ sudo yum install python-pip # For CentOS $ sudo pacman -S python-pip # For Arch Linux / Manjaro
Ahora puede instalar un awscli
paquete usando pip:
$ sudo pip install awscli
Una vez instalado, inicie la configuración ejecutando:
$ aws configure AWS Access Key ID [****************JO6B]: AWS Secret Access Key [****************78cd]: Default region name [us-west-2]: Default output format [json]:
Debes proveer AWS Access Key ID
y AWS Secret Access Key
para que la cuenta de usuario de AWS IAM se utilice al implementar el clúster de Kubernetes en EKS. Las credenciales estarán ubicadas en ~/.aws/credentials
expediente.
Cree un clúster en Amazon EKS con eksctl
Cuando se hayan guardado todas las configuraciones, ahora puede crear un nuevo clúster en EKS:
$ eksctl create cluster
Las opciones que se pueden utilizar incluyen:
-n, --name string : To specify EKS cluster name
-N, --nodes int: Total number of nodes, default is 2
-r, --region string: AWS region (default "us-west-2")
-M, --nodes-max int: Maximum nodes in ASG
-t, --node-type string: node instance type (default "m5.large")
-m, --nodes-min int: Minimum nodes in ASG
--kubeconfig: String path to write kubeconfig. Default is ~.kube/config
--ssh-public-key string: SSH public key to use for nodes: (default "~/.ssh/id_rsa.pub")
Para obtener una lista de más opciones, ejecute:
$ eksctl --help
Para poner esto en perspectiva, usemos algunas de las opciones para crear nuestro clúster:
$ eksctl create cluster -n test-cluster -N 2 2018-07-25T17:16:36+03:00 [ℹ] setting availability zones to [us-west-2b us-west-2a us-west-2c] 2018-07-25T17:16:36+03:00 [ℹ] importing SSH public key "/home/jmutai/.ssh/id_rsa.pub" as "eksctl-test-cluster-9d:54:75:7b:4e:e0:d0:b5:76:f2:77:69:f8:aa:0c:c6" 2018-07-25T17:16:38+03:00 [ℹ] creating EKS cluster "test-cluster" in "us-west-2" region 2018-07-25T17:16:38+03:00 [ℹ] creating VPC stack "EKS-test-cluster-VPC" 2018-07-25T17:16:38+03:00 [ℹ] creating ServiceRole stack "EKS-test-cluster-ServiceRole" 2018-07-25T17:17:06+03:00 [✔] created ServiceRole stack "EKS-test-cluster-ServiceRole" 2018-07-25T17:18:13+03:00 [✔] created VPC stack "EKS-test-cluster-VPC" 2018-07-25T17:18:13+03:00 [ℹ] creating control plane "test-cluster" 2018-07-25T17:28:48+03:00 [✔] created control plane "test-cluster" 2018-07-25T17:28:48+03:00 [ℹ] creating DefaultNodeGroup stack "EKS-test-cluster-DefaultNodeGroup" 2018-07-25T17:49:26+03:00 [✔] created DefaultNodeGroup stack "EKS-test-cluster-DefaultNodeGroup" 2018-07-25T17:49:26+03:00 [✔] all EKS cluster "test-cluster" resources has been created 2018-07-25T17:49:26+03:00 [✔] saved kubeconfig as "/home/jmutai/.kube/config" 2018-07-25T17:49:35+03:00 [ℹ] the cluster has 1 nodes 2018-07-25T17:49:35+03:00 [ℹ] node "ip-192-168-113-37.us-west-2.compute.internal" is not ready 2018-07-25T17:49:35+03:00 [ℹ] waiting for at least 2 nodes to become ready 2018-07-25T17:49:58+03:00 [ℹ] the cluster has 2 nodes 2018-07-25T17:49:58+03:00 [ℹ] node "ip-192-168-113-37.us-west-2.compute.internal" is ready 2018-07-25T17:49:58+03:00 [ℹ] node "ip-192-168-145-33.us-west-2.compute.internal" is ready 2018-07-25T17:49:58+03:00 [✖] heptio-authenticator-aws not installed 2018-07-25T17:49:58+03:00 [ℹ] cluster should be functional despite missing (or misconfigured) client binaries 2018-07-25T17:49:58+03:00 [✔] EKS cluster "test-cluster" in "us-west-2" region is ready
Una vez que haya creado un clúster, las credenciales del clúster se agregarán en ~/.kube/config
Para usar un xy nodo Auto Scaling Group, use las opciones:
--nodes-min=x --nodes-max=y e.g --nodes-min=2 --nodes-max=5 # Autoscaling btw 2-5
Para obtener detalles sobre el clúster implementado, use:
$ eksctl get cluster -n test-cluster 2018-07-25T22:16:02+03:00 [ℹ] cluster = { Arn: "arn:aws:eks:us-west-2:721943413499:cluster/test-cluster", CertificateAuthority: { ... }, CreatedAt: 2018-07-25 14:18:15 +0000 UTC, Endpoint: "https://ID.yl4.us-west-2.eks.amazonaws.com", Name: "test-cluster", ResourcesVpcConfig: { SecurityGroupIds: ["sg-48287686"], SubnetIds: ["subnet-4077678b","subnet-55eda03a","subnet-38704e6d"], VpcId: "vpc-0e6a8c66" }, RoleArn: "arn:aws:iam::721945983479:role/EKS-test-cluster-ServiceR-AWSServiceRoleForAmazonE-10L09YV7UZQN9", Status: "ACTIVE", Version: "1.10" } To delete a cluster, run:
$ eksctl delete cluster --name=<name> [--region=<region>]
Ejemplo:
$ eksctl delete cluster -n test-cluster 2018-07-25T22:44:59+03:00 [ℹ] deleting EKS cluster "test-cluster" 2018-07-25T22:45:06+03:00 [!] as you are not using the auto-generated kubeconfig file you will need to remove the details of cluster test-cluster manually 2018-07-25T22:45:06+03:00 [✔] all EKS cluster "test-cluster" resource will be deleted (if in doubt, check CloudFormation console)
Lea también:
La implementación de Kubernetes en el servicio AWS EKS con eksctl es un proceso fácil de seguir que no necesita que tenga problemas con una interfaz de usuario y es fácil de rehacer. Todas las configuraciones del clúster se guardan en la máquina de implementación, puede realizar cambios rápidamente y actualizar su clúster.