En este post vamos a preparar la computadora del operador e instalar RKE
Requisitos
- Leer parte 1 y 2
Laboratorio
Prepara la computadora del operador
- Necesitamos preparar la computadora del operador con el binario RKE, podemos descargarlo en la siguiente pagina
2. Una vez que encuentres la version y arquitectura correcta para tu computadora, da click derecho sobre el archivo y selecciona "Copy link location"

3. Abre una terminal en la computadora del operador y usa wget seguido de la liga para descargar el binario
wget https://github.com/rancher/rke/releases/download/v1.2.1/rke_linux-amd64
4. Dale permisos de ejecución
chmod +x rke_linux_amd64
5. Revisa cuales son las carpetas de entorno $PATH, usa el comando echo $PATH
para mostrarlas
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
6. Mueve el binario a una carpeta de entorno PATH y renombra, personalmente prefiero /usr/local/bin/ por que casi siempre esta vacío
sudo mv rke_linux_amd64 /usr/local/bin/rke
7. Revisa la instalación
rke --version
rke version v1.2.1
8. Ahora instalemos kubectl el cli que puede comunicarse al master de Kubernetes, iniciemos instalando las dependencias
sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2 curl
9. Descarga el binario de kubectl con el siguiente comando
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
10. Dale permisos de ejecución
chmod +x kubectl
11. Mueve el binario al la carpeta de entorno $PATH
sudo mv kubectl /usr/local/bin/
12. Revisa la instalación de kubectl
kubectl version --client
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.3", GitCommit:"1e11e4a2108024935ecfcb2912226cedeafd99df", GitTreeState:"clean", BuildDate:"2020-10-14T12:50:19Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"linux/amd64"}
13. Instala Helm, obten el binario de la siguiente liga
14. Ubica la arquitectura correcta de tu cpu y da clic derecho seleccionando "Copy Link Location"

15. Descarga el binario con wget copiando después el link
wget https://get.helm.sh/helm-v3.4.0-linux-amd64.tar.gz
16. Descomprime el archivo con tar
tar -zxvf helm-v3.4.0-linux-amd64.tar.gz
17. Mueve el binario a una carpeta de entorno $PATH
sudo mv linux-amd64/helm /usr/local/bin
18. Prueba el binario
helm version
version.BuildInfo{Version:"v3.4.0", GitCommit:"7090a89efc8a18f3d8178bf47d2462450349a004", GitTreeState:"clean", GoVersion:"go1.14.10"}
Instala RKE
19. Tenemos todo listo para instalar el clúster RKE, primero necesitamos crear el archivo de configuración, vamos a llamarlo "cluster.yml", este es un archivo YAML, si quieres saber mas acerca de YAML puedes encontrarlo aquí
nano cluster.yml
20. Agrega la configuracion de nodos
nodes:
- address: 192.168.1.50
# internal_address:
user: ubuntu
role: [controlplane, worker, etcd]
- address: 192.168.1.51
# internal_address:
user: ubuntu
role: [controlplane, worker, etcd]
- address: 192.168.1.52
# internal_address:
user: ubuntu
role: [controlplane, worker, etcd]
En esta área vamos a especificar los nodos, cada guion medio (-) representa un nodo y sus atributos, veamos mas en detalle
Variable | Opción | requerido |
---|---|---|
address | dirección externa para comunicarse con el clúster | sí |
internal_address | dirección interna para comunicación entre nodos | no |
user | usuario que usará los comandos docker | sí |
role | controlplane, worker, etcd | al menos uno |
Si tienes una dirección IP externa y vas a usar mas de un cluster RKE sobre internet, necesitas poner la dirección externa e interna.
En mi caso voy a usar los 3 puestos en los nodos (roles), para el Servidor Rancher, sin embargo es recomendable separar por lo menos los trabajadores (workers) para que la carga de trabajo no interfiera con el cluster, en este caso no habra problema por que dedicaremos el cluster al servidor Rancher
Ahora que sabemos en que se compone la parte de nodos, voy a usar otro tipo de configuraciones, es importante que revises la configuracion ideal para tus requerimientos, el documento de muestra de Rancher RKE viene muy bien explicado, puedes revisarlo aquí y aquí
Copia información de la pagina web a tus requerimientos, mi archivo quedo así
nodes:
- address: 192.168.1.51
# internal_address:
user: ubuntu
role: [controlplane, worker, etcd]
- address: 192.168.1.52
# internal_address:
user: ubuntu
role: [controlplane, worker, etcd]
- address: 192.168.1.53
# internal_address:
user: ubuntu
role: [controlplane, worker, etcd]
# If set to true, RKE will not fail when unsupported Docker version
# are found
ignore_docker_version: false
# Cluster level SSH private key
# Used if no ssh information is set for the node
ssh_key_path: ~/.ssh/rke
# Enable use of SSH agent to use SSH private keys with passphrase
# This requires the environment `SSH_AUTH_SOCK` configured pointing
#to your SSH agent which has the private key added
ssh_agent_auth: false
# Set the name of the Kubernetes cluster
cluster_name: rancher
# Specify network plugin-in (canal, calico, flannel, weave, or none)
# We going to use flannel work with arm64 architecture, change your iface
network:
plugin: flannel
options:
flannel_iface: eth0
flannel_backend_type: vxlan
# Use this network plug-in if you are using amd64 architecture
# network:
# plugin: canal
# options:
# canal_iface: eth1
# canal_flannel_backend_type: vxlan
# Etcd snapshots
services:
etcd:
backup_config:
interval_hours: 12
retention: 6
snapshot: true
creation: 6h
retention: 24h
# Currently only nginx ingress provider is supported.
# To disable ingress controller, set `provider: none`
# `node_selector` controls ingress placement and is optional
ingress:
provider: nginx
options:
use-forwarded-headers: "true"
Algo que necesito puntualizar aquí, es que el plug-in de red (network) por default es canal, yo voy a usar flannel, por que voy a usar arquitectura para arm64, y es recomendado, si tu vas a usar amd64, por favor comenta la parte del plug-in flannel y habilita la parte de canal, puedes leer mas al respecto aquí
21. Vamos a crear el clúster RKE
rke up
22. Al final vas a tener algo como esto
INFO[0304] [addons] CoreDNS deployed successfully
INFO[0304] [dns] DNS provider coredns deployed successfully
INFO[0304] [addons] Setting up Metrics Server
INFO[0304] [addons] Saving ConfigMap for addon rke-metrics-addon to Kubernetes
INFO[0304] [addons] Successfully saved ConfigMap for addon rke-metrics-addon to Kubernetes
INFO[0304] [addons] Executing deploy job rke-metrics-addon
INFO[0319] [addons] Metrics Server deployed successfully
INFO[0319] [ingress] Setting up nginx ingress controller
INFO[0319] [addons] Saving ConfigMap for addon rke-ingress-controller to Kubernetes
INFO[0319] [addons] Successfully saved ConfigMap for addon rke-ingress-controller to Kubernetes
INFO[0319] [addons] Executing deploy job rke-ingress-controller
INFO[0334] [ingress] ingress controller nginx deployed successfully
INFO[0334] [addons] Setting up user addons
INFO[0334] [addons] no user addons defined
INFO[0334] Finished building Kubernetes cluster successfully
23. Cuando termine, van a quedar tres archivos cluster.rkestate, cluster.yml y kube_config_cluster.yml guarda estos archivos en un lugar seguro, estos archivos contienen el estado de tu clúster y los accesos para kubectl.
Rancher recomienda encriptar cluster.rkstate
24. Usa el archivo kube_config_cluster.yml para configurar kubectl, exportando KUBECONFIG
export KUBECONFIG=./kube_config_cluster.yml
25. Prueba la conexión de kubectl con el Master de kubernetes con get nodes
kubectl get nodes
NAME STATUS ROLES AGE VERSION
ubuntu-1 Ready controlplane,etcd,worker 10m v1.19.3
ubuntu-2 Ready controlplane,etcd,worker 10m v1.19.3
ubuntu-3 Ready controlplane,etcd,worker 10m v1.19.3
En el siguiente post vamos a instalar el servidor Rancher sobre el clúster RKE
Limpieza
Para eliminar el clúster solo se necesita usar el comando rke remove
usando los archivos cluster.rkstate y cluster.yml
rke remove
INFO[0000] Running RKE version: v1.2.1
Are you sure you want to remove Kubernetes cluster [y/n]:y
...
INFO[0038] Removing local admin Kubeconfig: ./kube_config_cluster.yml
INFO[0038] Local admin Kubeconfig removed successfully
INFO[0038] Removing state file: ./cluster.rkestate
INFO[0038] State file removed successfully
INFO[0038] Cluster removed successfully