Kubernetes es un grupo y orquestación motor para contenedores docker. En otras palabras, Kubernetes es una herramienta o software de código abierto que se utiliza para orquestar y administrar contenedores Docker en un entorno de clúster. Kubernetes también se conoce como k8s y fue desarrollado por Google y donado a la “Fundación Cloud Native Computing”
En la configuración de Kubernetes, tenemos un nodo maestro y varios nodos. Los nodos de clúster se conocen como nodos trabajadores o Minion. Desde el nodo maestro gestionamos el clúster y sus nodos usando ‘kubeadm‘ y ‘kubectlcomando.
Kubernetes se puede instalar e implementar utilizando los siguientes métodos:
- Minikube (es un clúster de kubernetes de un solo nodo)
- Kops (configuración de kubernetes de múltiples nodos en AWS)
- Kubeadm (Clúster multinodo en nuestras propias instalaciones)
En este artículo instalaremos la última versión de Kubernetes 1.7 en CentOS 7/RHEL 7 con la utilidad kubeadm. En mi configuración, tomo tres servidores CentOS 7 con una instalación mínima. Un servidor actuará como nodo maestro y el resto de dos servidores serán nodos auxiliares o trabajadores.
En el Master Node se instalarán los siguientes componentes
- Servidor API – Proporciona la API de kubernetes usando Jason / Yaml sobre http, los estados de los objetos de la API se almacenan en etcd
- programador – Es un programa en el nodo maestro que realiza las tareas de programación, como el lanzamiento de contenedores en los nodos trabajadores según la disponibilidad de recursos.
- Administrador del controlador – El trabajo principal del administrador del controlador es monitorear los controladores de replicación y crear módulos para mantener el estado deseado.
- etc. – Es una base de datos de pares clave-valor. Almacena datos de configuración del clúster y el estado del clúster.
- Utilidad Kubectl – Es una utilidad de línea de comandos que se conecta al servidor API en el puerto 6443. Los administradores la utilizan para crear pods, servicios, etc.
En los nodos trabajadores, se instalarán los siguientes componentes
- Kubelet – Es un agente que se ejecuta en cada nodo trabajador, se conecta a Docker y se encarga de crear, iniciar y eliminar contenedores.
- Kube-Proxy – Enruta el tráfico a los contenedores apropiados según la dirección IP y el número de puerto de la solicitud entrante. En otras palabras, podemos decir que se utiliza para la traducción de puertos.
- Vaina – El pod se puede definir como un grupo o varios niveles de contenedores que se implementan en un solo nodo trabajador o en un host acoplable.
Pasos de instalación de Kubernetes 1.7 en CentOS 7 / RHEL 7
Realice los siguientes pasos en el nodo maestro
Paso 1: deshabilite SELinux y configure las reglas del firewall
Inicie sesión en su nodo maestro de Kubernetes y configure el nombre de host y deshabilite selinux usando los siguientes comandos
~]# hostnamectl set-hostname 'k8s-master' ~]# exec bash ~]# setenforce 0 ~]# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
Establezca las siguientes reglas de firewall.
[[email protected] ~]# firewall-cmd --permanent --add-port=6443/tcp [[email protected] ~]# firewall-cmd --permanent --add-port=2379-2380/tcp [[email protected] ~]# firewall-cmd --permanent --add-port=10250/tcp [[email protected] ~]# firewall-cmd --permanent --add-port=10251/tcp [[email protected] ~]# firewall-cmd --permanent --add-port=10252/tcp [[email protected] ~]# firewall-cmd --permanent --add-port=10255/tcp [[email protected] ~]# firewall-cmd --reload [[email protected] ~]# modprobe br_netfilter [[email protected] ~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
Nota: En caso de que no tenga su propio servidor dns, actualice el archivo /etc/hosts en los nodos maestro y trabajador
192.168.1.30 k8s-master 192.168.1.40 worker-node1 192.168.1.50 worker-node2
Deshabilite el intercambio en todos los nodos usando «intercambio -aComando y elimine o comente las particiones de intercambio o el archivo de intercambio del archivo fstab
Paso 2: configurar el repositorio de Kubernetes
Los paquetes de Kubernetes no están disponibles en los repositorios predeterminados de CentOS 7 y RHEL 7. Use el siguiente comando para configurar sus repositorios de paquetes.
[[email protected] ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo > [kubernetes] > name=Kubernetes > baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 > enabled=1 > gpgcheck=1 > repo_gpgcheck=1 > gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg > https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg > EOF [[email protected] ~]#
Paso 3: Instale Kubeadm y Docker
Una vez que los repositorios de paquetes estén configurados, ejecute el siguiente comando para instalar los paquetes kubeadm y docker.
[[email protected] ~]# yum install kubeadm docker -y
Inicie y habilite el servicio kubectl y docker
[[email protected] ~]# systemctl restart docker && systemctl enable docker [[email protected] ~]# systemctl restart kubelet && systemctl enable kubelet
Paso 4: inicialice Kubernetes Master con ‘kubeadm init’
Ejecute el siguiente comando para inicializar y configurar kubernetes master.
[[email protected] ~]# kubeadm init
La salida del comando anterior sería algo como a continuación
Como podemos ver en el resultado, kubernetes master se ha inicializado correctamente. Ejecute los siguientes comandos para usar el clúster como usuario raíz.
[[email protected] ~]# mkdir -p $HOME/.kube [[email protected] ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [[email protected] ~]# chown $(id -u):$(id -g) $HOME/.kube/config
Paso 5: implementar la red de pods en el clúster
Intente ejecutar los siguientes comandos para obtener el estado del clúster y los pods.
Para que el estado del clúster esté listo y el estado de kube-dns se esté ejecutando, implemente la red de módulos para que los contenedores de diferentes hosts se comuniquen entre sí. La red POD es la red superpuesta entre los nodos trabajadores.
Ejecute el siguiente comando para implementar la red.
[[email protected] ~]# export kubever=$(kubectl version | base64 | tr -d 'n') [[email protected] ~]# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever" serviceaccount "weave-net" created clusterrole "weave-net" created clusterrolebinding "weave-net" created daemonset "weave-net" created [[email protected] ~]#
Ahora ejecute los siguientes comandos para verificar el estado
[[email protected] ~]# kubectl get nodes NAME STATUS AGE VERSION k8s-master Ready 1h v1.7.5 [[email protected] ~]# kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system etcd-k8s-master 1/1 Running 0 57m kube-system kube-apiserver-k8s-master 1/1 Running 0 57m kube-system kube-controller-manager-k8s-master 1/1 Running 0 57m kube-system kube-dns-2425271678-044ww 3/3 Running 0 1h kube-system kube-proxy-9h259 1/1 Running 0 1h kube-system kube-scheduler-k8s-master 1/1 Running 0 57m kube-system weave-net-hdjzd 2/2 Running 0 7m [[email protected] ~]#
Ahora agreguemos nodos trabajadores a los nodos maestros de Kubernetes.
Realice los siguientes pasos en cada nodo trabajador
Paso 1: deshabilite SELinux y configure las reglas del firewall en ambos nodos
Antes de deshabilitar SELinux, configure el nombre de host en ambos nodos como ‘worker-node1’ y ‘worker-node2’ respectivamente
~]# setenforce 0 ~]# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux ~]# firewall-cmd --permanent --add-port=10250/tcp ~]# firewall-cmd --permanent --add-port=10255/tcp ~]# firewall-cmd --permanent --add-port=30000-32767/tcp ~]# firewall-cmd --permanent --add-port=6783/tcp ~]# firewall-cmd --reload ~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
Paso 2: Configure los repositorios de Kubernetes en ambos nodos trabajadores
~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo > [kubernetes] > name=Kubernetes > baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 > enabled=1 > gpgcheck=1 > repo_gpgcheck=1 > gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg > https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg > EOF
Paso 3: instale kubeadm y el paquete docker en ambos nodos
[[email protected] ~]# yum install kubeadm docker -y [[email protected] ~]# yum install kubeadm docker -y
Iniciar y habilitar el servicio docker
[[email protected] ~]# systemctl restart docker && systemctl enable docker [[email protected] ~]# systemctl restart docker && systemctl enable docker
Paso 4: ahora une los nodos trabajadores al nodo maestro
Para unir los nodos trabajadores al nodo maestro, se requiere un token. Siempre que kubernetes master se inicializa, en la salida obtenemos el comando y el token. Copie ese comando y ejecútelo en ambos nodos.
[[email protected] ~]# kubeadm join --token a3bd48.1bc42347c3b35851 192.168.1.30:6443
La salida del comando anterior sería algo como a continuación
[[email protected] ~]# kubeadm join --token a3bd48.1bc42347c3b35851 192.168.1.30:6443
La salida sería algo como a continuación
Ahora verifique el estado de los nodos desde el nodo maestro usando el comando kubectl
[[email protected] ~]# kubectl get nodes NAME STATUS AGE VERSION k8s-master Ready 2h v1.7.5 worker-node1 Ready 20m v1.7.5 worker-node2 Ready 18m v1.7.5 [[email protected] ~]#
Como podemos ver, los nodos maestros y trabajadores están listos. Esto concluye que kubernetes 1.7 se instaló con éxito y también se unieron con éxito dos nodos de trabajo. Ahora podemos crear pods y servicios.
Comparta sus opiniones y comentarios en caso de que este artículo lo ayude a instalar la última versión de kubernetes 1.7