Instalación de kubernetes en Linux con Kubeadm

El presente instructivo tiene como finalidad, presentar los pasos básicos de instalación de Kubernetes en distribución GNU/Linux Debian 9.1

Requisitos:

  • Se debe contar con suficiente privilegios para la configuración de aplicativos
  • Se debe virtualbox instalado
  • Se debe contar con (03) maquinas virtuales corriendo en virtualbox instalado

Plataforma:

  • Equipos de arquitectura 64 bits
  • Sistema operativo ‘GNU/Linux’ Debian versión 9.1 (actualmente estable)

Aplicaciones:

  • docker-ce -> 17.06.1-ce
  • kubelet -> v1.7.4
  • kubeadm -> v1.7.4
  • kubectl -> v1.7.4
  • kubernetes-cni -> 0.5.1-00

Para la configuración de la solución se utilizarán tres (03) maquinas virtuales en virtualbox con debian 9.1:

– Un (01) Equipo para instalación y configuración del Master:

  • Hostname: k8s1
  • IP Interna: 192.168.100.52

– Dos (02) equipos para la instalación y configuración de nodos

  • Hostname: k8s2
  • IP Interna: 192.168.100.53
  • Hostname: k8s3
  • IP Interna: 192.168.100.54

Dominio: k8s
Todos los equipos deben tener acceso a la Internet

(1/4). INSTALACION DE APLICATIVOS EN LOS HOST

1. Instalación de aplicaciones básicas para debian

root@k8s1:/# apt-get install aptitude vim openssh-server net-tools apt-transport-https

2. Crear entrada repositorio kubernetes.list

root@k8s1:/# vim /etc/apt/sources.list.d/kubernetes.list

Incluir lo siguiente:

deb http://apt.kubernetes.io/ kubernetes-xenial main

3. Descargar la llave repositorio kubernetes e instalar

root@k8s1:/# apt-key add -curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

4. Crear entrada repositorio docker.list

root@k8s1:/# vim /etc/apt/sources.list.d/docker.list

Incluir lo siguiente:

deb https://download.docker.com/linux/debian stretch stable

5. Descargar la llave repositorio docker e instalar

root@k8s1:/# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

6. Actualizar repositorios

root@k8s1:/# aptitude update
Ign http://deb.debian.org/debian stretch InRelease
Hit http://deb.debian.org/debian stretch Release
Hit https://download.docker.com/linux/debian stretch InRelease
Hit https://packages.cloud.google.com/apt kubernetes-xenial InRelease

7. Instalar los siguientes paquetes en todas las máquinas:

root@k8s1:/# aptitude install docker-ce kubelet kubeadm kubectl kubernetes-cni

En donde:

– Docker: Kubernetes depende de Docker, en éste caso de instaló el Community Edition (docker-ce)
– Kubelet: el componente más básico de Kubernetes. Se ejecuta en todas las máquinas de su clúster y hace cosas como iniciar las cápsulas y los contenedores.
– Kubectl: el comando para controlar el clúster una vez que se está ejecutando. Sólo se utilizará esto en el maestro.
– Kubeadm: el comando para arrancar el clúster.
– kubernetes-cni: Plugins o complemento Container Networking Interface. Conectividad de red de los contenedores

(2/4). INICIAR O ARRANCAR EL MASTER

Nota: Sólo ejecutar en el equipo que sea considerado Master, en éste caso el “k8s1” – 192.168.100.52

1. Ejecutar kubeadm

root@k8s1:/# kubeadm init --pod-network-cidr 192.168.0.0/16 --service-cidr 10.96.0.0/12 --service-dns-domain "k8s" --apiserver-advertise-address 192.168.100.52 --skip-preflight-checks --apiserver-cert-extra-sans=192.168.100.53,192.168.100.54
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.7.4
[init] Using Authorization modes: [Node RBAC]
[preflight] Skipping pre-flight checks
[kubeadm] WARNING: starting in 1.8, tokens expire after 24 hours by default (if you require a non-expiring token use --token-ttl 0)
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [k8s1 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.k8s] and IPs [192.168.100.53 192.168.100.54 10.96.0.1 192.168.100.52]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 353.001221 seconds
[token] Using token: 99db25.10b297b3411f5e10
[apiconfig] Created RBAC rules
[addons] Applied essential addon: kube-proxy
[addons] Applied essential addon: kube-dns

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run (as a regular user):

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join --token 99db25.10b297b3411f5e10 192.168.100.52:6443

En donde:

–pod-network-cidr -> Valor del pools de IP, requerido por el complemento de red de pod para la asignación de rangos de red (CIDRS) a cada nodo. En nuestro caso “Calico” por defecto utiliza 192.168.0.0/16
–service-cidr -> Kubernetes utiliza para asignar direcciones IP a los Pods, por defecto el valor es 10.96.0.0/12
–service-dns-domain -> Se utiliza para cambiar el nombre DNS por defecto (..svc.cluster.local), por “k8s”.
–apiserver-advertise-address -> Esta es la dirección que el servidor API anunciará a los otros miembros del cluster. Es la IP del servidor Master
–skip-preflight-checks -> Pasar por alta las comprobaciones previas para validar el sistema efectuadas por kubeadm
–apiserver-cert-extra-sans -> nombres de host o direcciones IP que se deben agregar a la sección de nombre alternativo de sujeto para el certificado que utilizará el servidor de la API. En el caso de manejar dos interfaces de red, exponer el API a través de un balanceador, ….

Nota: Para cualquier parámetro adicional, consultar el siguiente enlace

2. Configurar entorno usuario

2.1 Crear directorio

root@k8s1:/# mkdir -p $HOME/.kube

2.2 Copiar archivo de configuración

root@k8s1:/# cp -i /etc/kubernetes/admin.conf /root/.kube/config

2.3 Cambiar los permisos

root@k8s1:/# chown $(id -u):$(id -g) /root/.kube/config

EN CASO DE QUERER RESETEAR LA CONFIGURACIÓN, SE DEBE EJECUTAR EL SIGUIENTE COMANDO:

root@k8s1:/home# kubeadm reset
[preflight] Running pre-flight checks
[reset] Stopping the kubelet service
[reset] Unmounting mounted directories in "/var/lib/kubelet"
[reset] Removing kubernetes-managed containers
[reset] No etcd manifest found in "/etc/kubernetes/manifests/etcd.yaml", assuming external etcd.
[reset] Deleting contents of stateful directories: [/var/lib/kubelet /etc/cni/net.d /var/lib/dockershim]
[reset] Deleting contents of config directories: [/etc/kubernetes/manifests /etc/kubernetes/pki]
[reset] Deleting files: [/etc/kubernetes/admin.conf /etc/kubernetes/kubelet.conf /etc/kubernetes/controller-manager.conf /etc/kubernetes/scheduler.conf]

(3/4). INSTALACIÓN DEL POD NETWORK

Nota: Se debe instalar un complemento de red de pod para que los pods puedan comunicarse entre sí, cuando se encuentren en hosts diferentes. Varios proyectos proporcionan redes de pod Kubernetes utilizando CNI (contenedor de red Interface), algunos de los cuales también apoyan la política de red. En éste caso de instalará “Calico”

root@k8s1:/# kubectl apply -f http://docs.projectcalico.org/v2.3/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml

(4/4). UNIR LOS NODOS

NODO #2
Nota: Se debe ejecutar desde el nodo a unir, en nuestro caso k8s2 (192.168.100.53)

root@k8s2:/# kubeadm join --token 99db25.10b297b3411f5e10 192.168.100.52:6443
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[preflight] Running pre-flight checks
[preflight] WARNING: docker version is greater than the most recently validated version. Docker version: 17.06.1-ce. Max validated version: 1.12
[discovery] Trying to connect to API Server "192.168.100.52:6443"
[discovery] Created cluster-info discovery client, requesting info from "https://161.196.181.16:6443"
[discovery] Cluster info signature and contents are valid, will use API Server "https://192.168.100.52:6443"
[discovery] Successfully established connection with API Server "192.168.100.52:6443"
[bootstrap] Detected server version: v1.7.4
[bootstrap] The server supports the Certificates API (certificates.k8s.io/v1beta1)
[csr] Created API client to obtain unique certificate for this node, generating keys and certificate signing request
[csr] Received signed certificate from the API server, generating KubeConfig...
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"

Node join complete:
* Certificate signing request sent to master and response
  received.
* Kubelet informed of new secure connection details.

Run 'kubectl get nodes' on the master to see this machine join.

NODO #3
Nota: Se debe ejecutar desde el nodo a unir, en nuestro caso k8s3 (192.168.100.54)

root@k8s3:/# kubeadm join --token 99db25.10b297b3411f5e10 192.168.100.52:6443

MASTER

Desde el Master, comprobar la unión del nodo

root@k8s1:/# kubectl get nodes
NAME      STATUS    AGE       VERSION
k8s1      Ready     4h        v1.7.4
k8s2      Ready     4h        v1.7.4
k8s3      Ready     2m        v1.7.4

Enlaces:

Installing-Kubernetes-on-Linux-with-kubeadm
kubernetes-installation-kubeadm
kubeadm
create-cluster-kubeadm
#installing-kubeadm-on-your-hosts
configuration – overview
cncf-hosts-container-networking-interface-cni
cluster-administration/network-plugins

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s