2.5 Instalación y configuración de kubectl en linux
kubectl es la herramienta de línea de comandos utilizada para interactuar con la API de Kubernetes. Es por tanto la herramienta fundamental que vamos a utilizar durante todo el curso para gestionar nuestros objetos en el clúster recién creado con minikube.
kubectl está escrito en Go y de nuevo su instalación es muy simple, ya que se trata de un binario enlazado estáticamente y sin dependencias. Las instrucciones para su instalación están disponibles en la documentación de k8s. A continuación veremos algunas de las opciones que tenemos para instalarlo.
Opción 1. Instalar binario desde el proyecto
Al igual que hemos hecho con minikube, podemos descargar el binario directamente desde la URL del proyecto e instalarlo en /usr/local/bin
:
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install kubectl /usr/local/bin/kubectl
Este binario obviamente no se actualiza y tendremos que repetir el proceso cuando se actualice.
Opción 2. Instalar desde repositorios no oficiales
El término repositorio no oficial se utiliza para aquellos repositorios que se añaden y que no son los propios de la distribución que estamos utilizando. En este caso, los repositorios no oficiales los proporciona el propio proyecto k8s.
En el caso de las distribuciones Debian y derivadas, el repositorio es https://packages.cloud.google.com/apt/
y en la documentación se detallan los pasos para instalar kubectl
a través de apt.
La ventaja de este método respecto al anterior es que sí se actualizará kubectl
adecuadamente como cualquier otro paquete que tengamos instalado en nuestra distro.
Opción 3. Instalar desde repositorio oficial
En el caso de Debian, se ha añadido soporte para Kubernetes a partir de la versión bullseye
o Debian 11, por lo que si tenemos instalada esa versión, podemos instalar kubectl
directamente con apt:
sudo apt install kubernetes-client
En estos momentos se instala la versión 1.20 de kubectl.
Opción 4. Instalar desde snap
Ubuntu no proporciona de forma directa un paquete con el cliente de k8s, pero sí lo hace a través de snap, por lo que quienes utilicen dicho sistema, lo tienen disponible con un simple:
sudo snap install kubectl --classic
Configuración kubectl
Una vez instalado kubectl
podemos comprobar que está disponible y cuál es su versión, con la instrucción:
kubectl version --short
...
Client Version: v1.26.3
Kustomize Version: v4.5.7
Server Version: v1.26.1
En el caso anterior, estamos utilizando la versión 1.22.2 y nos informa de que no ha podido conectarse al clúster de Kubernetes con la configuración por defecto (localhost:8080
). Es decir, aunque tengamos kubectl y minikube instalados, el primero no está configurado todavía para conectarse al clúster de k8s que ejecuta minikube.
La solución más sencilla es parar minikube y volverlo a arrancar, porque de esta manera minikube configurará automáticamente kubectl
. Si nos fijamos en la salida de minikube anterior, en la que no teníamos instalado kubectl
, aparecía la línea:
💡 kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
Pero si lo volvemos a repetir ahora, esa línea no aparecerá y se configurará kubectl
para poder usar el clúster que proporciona minikube. Lo que va a hacer minikube es configurar el fichero ~/.kube/config
de la siguiente manera:
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/alberto/.minikube/ca.crt
extensions:
- extension:
last-update: Sun, 30 Jan 2022 20:45:08 CET
provider: minikube.sigs.k8s.io
version: v1.24.0
name: cluster_info
server: https://192.168.39.115:8443
name: minikube
contexts:
- context:
cluster: minikube
extensions:
- extension:
last-update: Sun, 30 Jan 2022 20:45:08 CET
provider: minikube.sigs.k8s.io
version: v1.24.0
name: context_info
namespace: default
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /home/alberto/.minikube/profiles/minikube/client.crt
client-key: /home/alberto/.minikube/profiles/minikube/client.key
Donde en cada caso variará la dirección IP del servidor del clúster (en este caso la 192.168.39.221) y la ubicación de los ficheros de los certificados y claves x509 (en este caso en el directorio /home/alberto
).
Una vez configurado correctamente kubectl
, podemos repetir el comando:
kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.3", GitCommit:"816c97ab8cff8a1c72eccca1026f7820e93e0d25", GitTreeState:"clean", BuildDate:"2022-01-25T21:25:17Z", GoVersion:"go1.17.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.3", GitCommit:"c92036820499fedefec0f847e2054d824aea6cd1", GitTreeState:"clean", BuildDate:"2021-10-27T18:35:25Z", GoVersion:"go1.16.9", Compiler:"gc", Platform:"linux/amd64"}
Comprobamos que ya aparece la versión del servidor y por tanto se ha podido conectar con el clúster que gestiona minikube. Además podemos ejecutar nuestro primer comando propiamente de kubectl
:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane,master 21m v1.22.3
Si queremos utilizar el autocompletado, podemos generarlo e incorporarlo a nuestro entorno con:
echo 'source <(kubectl completion bash)' >>~/.bashrc
Y para poder usarlo en esta misma sesión (no será necesario más adelante, ya que el fichero .bashrc se lee cada vez que se inicia una sesión):
source ~/.bashrc