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.
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.
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.
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.
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
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