Kubernetes es una herramienta de orquestación de contenedores de grado de producción de código abierto que ayuda a automatizar la implementación, el escalado y la gestión de aplicaciones en contenedores. Google inicialmente diseñó Kubernetes y ahora es mantenido por Cloud Native Computing Foundation.
Puedes llamar a Kubernetes es un administrador de clústeres para Docker , y proporciona casi las mismas funcionalidades que Docker Swarm . Con Kubernetes, puede implementar cualquier cantidad de réplicas de contenedores en un clúster de nodos, y Kubernetes manejará los restos (dónde mostrar los contenedores) por usted.
Podemos ejecutar Kubernetes en una máquina local usando los siguientes métodos,
1. MinKube – Un clúster de Kubernetes de un solo nodo para desarrollo y pruebas.
2. Kubeadm-dind (Kuberadm) – Un clúster de Kubernetes de varios nodos
Puedes leer todos los métodos aquí .
Aquí, implementaremos un clúster de Kubernetes de múltiples nodos usando el kubeadm. En esta configuración de varios nodos, tendremos un nodo maestro y varios nodos trabajadores (subordinados).
Componentes
Nodo maestro
Servidor API de Kube: Es un servidor de API, se ejecuta en el nodo maestro que expone la API de Kubernetes
etcd: Un almacén de claves que almacena datos del clúster de Kubenetes
kube-scheduler: Es un programador que se ejecuta en el nodo principal que supervisa los pods recién creados y ejecuta esos pods en nodos seleccionados dependiendo de la disponibilidad de recursos.
kube-controller-manager: Es un administrador de control que se ejecuta en el administrador que es responsable de monitorear los nodos y mantener la replicación de los pods.
administrador de controladores en la nube: Un administrador de control de la nube que interactúa con los proveedores de la nube subyacentes (por ejemplo, DigitalOcean, Rancher, etc.).
Trabajador Nodos
kubelet: Se ejecuta en todos los nodos trabajadores y maneja tareas como iniciar pods y contenedores.
kube-proxy: Es un proxy de red de Kubernetes que reenvía las solicitudes entrantes de TCP/UDP al contenedor back-end.
Tiempo de ejecución del contenedor: Es un software contenedor (Docker)
Medio ambiente
Debe deshabilitar el intercambio para que Kubernetes funcione correctamenteAquí, estoy usando un entorno mixto para esta demostración. Sin embargo, le solicito que use un sistema operativo similar solo para facilitar la resolución de problemas.
Requisitos
Conviértase en el usuario root.
su -
O
sudo su -
Establecer nombre de host
Establezca un nombre de host único para todos sus nodos. Ejemplo:
hostnamectl set-hostname master.itzgeek.local
Haga una entrada de host o DNS registro para resolver el nombre de host para todos los nodos.
vi /etc/hosts
Entrada:
192.168.1.10 master.itzgeek.local master 192.168.1.20 node1.itzgeek.local node1 192.168.1.30 node2.itzgeek.local node2
Cortafuegos
Configure Firewall para Kubernetes para que funcione correctamente.
En el nodo maestro
FirewallD:
firewall-cmd --permanent --add-port=6443/tcp firewall-cmd --permanent --add-port=2379-2380/tcp firewall-cmd --permanent --add-port=10250/tcp firewall-cmd --permanent --add-port=10251/tcp firewall-cmd --permanent --add-port=10252/tcp firewall-cmd --permanent --add-port=10255/tcp firewall-cmd --reload
UFW:
ufw allow 6443/tcp ufw allow 2379tcp ufw allow 2380/tcp ufw allow 10250/tcp ufw allow 10251/tcp ufw allow 10252/tcp ufw allow 10255/tcp ufw reload
En nodos trabajadores
FirewallD:
firewall-cmd --permanent --add-port=10251/tcp firewall-cmd --permanent --add-port=10255/tcp firewall-cmd --reload
UFW:
ufw allow 10251/tcp ufw allow 10255/tcp ufw reload
SELinux
Considere deshabilitar SELinux en CentOS 7 / RHEL 7 nodos.
setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
Configuración del núcleo
En RHEL 7/CentOS 7 , establezca net.bridge.bridge-nf-call-iptables en 1 en su configuración de sysctl.
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl -p
Instalar Docker
Instale Docker en todos sus nodos (Master y Minions). Se recomienda la versión 18.06 de Docker, pero las versiones 1.11, 1.12, 1.13 y 17.03 también funcionan bien con Kubernetes.
CentOS 7/RHEL 7
### Install Docker from CentOS/RHEL repository ### yum install -y docker systemctl enable docker systemctl start docker OR ### Install Docker CE 18.06 from Docker's CentOS repositories ### # Install Prerequisites yum install -y yum-utils device-mapper-persistent-data lvm2 # Add Docker repository yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # Install Docker yum update yum install -y docker-ce-18.06.1.ce # Create Docker Directory mkdir /etc/docker # Setup Docker Daemon cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF mkdir -p /etc/systemd/system/docker.service.d # Restart Docker Daemon systemctl daemon-reload systemctl restart docker systemctl enable docker
Ubuntu 18.04/Ubuntu 16.04
### Install Docker from Ubuntu's repositories ### apt-get update apt-get install -y docker.io OR ### Install Docker CE 18.06 from Docker's repositories for Ubuntu ### # Install Prerequisites apt-get update apt-get install -y apt-transport-https ca-certificates curl software-properties-common # Download GPG Key curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - # Add Docker's Repository add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" # Install Docker apt-get update apt-get install -y docker-ce=18.06.0~ce~3-0~ubuntu # Setup Daemon cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF mkdir -p /etc/systemd/system/docker.service.d # Restart Docker Daemon systemctl daemon-reload systemctl restart docker
Debian 9
### Install Docker from Debian's repositories ### apt-get update apt-get install -y docker.io OR ### Install Docker CE 18.06 from Docker's repositories for Debian ### # Install Prerequisites apt-get update apt-get install -y apt-transport-https ca-certificates curl software-properties-common # Download GPG Key curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - # Add Docker's Repository add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable" # Install Docker apt-get update apt-get install -y docker-ce=18.06.0~ce~3-0~debian # Setup Daemon cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF mkdir -p /etc/systemd/system/docker.service.d # Restart Docker Daemon systemctl daemon-reload systemctl restart docker
Configurar el repositorio de Kubernetes
Kubernetes Los paquetes no están disponibles en los repositorios del sistema operativo, por lo que debe seguir los pasos a continuación para configurar su repositorio en todos sus nodos.
### CentOS 7 / RHEL 7 ### 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 exclude=kube* EOF ### Ubuntu 18.04 / 16.05 & Debian 9 ### apt-get update apt-get install -y curl apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
Instalar kubeadm, kubelet y kubectl
En todos sus nodos, ejecute los siguientes comandos para instalar los paquetes necesarios.
kubeadm:el comando para crear el clúster.
kubelet:se ejecuta en todas las máquinas de su clúster y hace cosas como iniciar pods y contenedores.
kubectl:la utilidad de línea de comandos para administrar su clúster.
### CentOS 7 / RHEL 7 ### yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes systemctl enable kubelet systemctl start kubelet ### Ubuntu 16.04 / Debian 9 ### apt-get update apt-get install -y kubelet kubeadm kubectl
Inicializar maestro de Kubernetes
En el nodo maestro, ejecute el comando kubeadm init en la terminal para inicializar el clúster.
Según el complemento de red utiliza, es posible que deba configurar el--pod-network-cidr
a un valor específico. Aquí, estoy usando la red Wave pod que no requiere argumentos adicionales. kubeadm init
Salida:
[init] Using Kubernetes version: v1.13.0 [preflight] Running pre-flight checks [WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly [preflight] Pulling images required for setting up a Kubernetes cluster [preflight] This might take a minute or two, depending on the speed of your internet connection [preflight] You can also perform this action in beforehand using 'kubeadm config images pull' [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env" [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [kubelet-start] Activating the kubelet service [certs] Using certificateDir folder "/etc/kubernetes/pki" [certs] Generating "ca" certificate and key [certs] Generating "apiserver-kubelet-client" certificate and key . . . . . . . . . [bootstraptoken] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster [bootstraptoken] creating the "cluster-info" ConfigMap in the "kube-public" namespace [addons] Applied essential addon: CoreDNS [addons] Applied essential addon: kube-proxy Your Kubernetes master has initialized successfully! To start using your cluster, you need to run the following 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: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of machines by running the following on each node as root: kubeadm join 192.168.1.10:6443 --token d1dyaj.31zxywbg93s1ywjy --discovery-token-ca-cert-hash sha256:71a91721595fde66b6382908d801266602a14de8e16bdb7a3cede21509427009
Administrar clúster
Ejecute estos comandos en la terminal para administrar y trabajar en el clúster como un usuario normal.
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Ejecute el comando kubectl get pods –all-namespaces para comprobar el estado del clúster.
kubectl get pods --all-namespaces
Salida:

Puedes ver que coredns pod está en estado pendiente y el estado debería cambiar una vez que instale la red de pod.
Configurar la red de pods
Necesitamos configurar un complemento de red de pod en el clúster para que los pods puedan comunicarse entre sí. Hay varios proyectos que proporcionan redes de pods de Kubernetes a saber, calicó, canal, franela, etc.
Aquí, usaremos la red Wave pod para esta demostración.
export kubever=$(kubectl version | base64 | tr -d '\n') kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"
Salida:
serviceaccount/weave-net created clusterrole.rbac.authorization.k8s.io/weave-net created clusterrolebinding.rbac.authorization.k8s.io/weave-net created role.rbac.authorization.k8s.io/weave-net created rolebinding.rbac.authorization.k8s.io/weave-net created daemonset.extensions/weave-net created
Compruebe el estado del clúster una vez más. El pod de corens ahora debería estar en estado de ejecución.
kubectl get pods --all-namespaces
Salida:

Unir los nodos trabajadores al clúster de Kuberenete
Si recuerda, había un token en la salida del comando kubeadm init para unir nodos. Usa el token y únete a todos tus nodos trabajadores.
kubeadm join 192.168.1.10:6443 --token d1dyaj.31zxywbg93s1ywjy --discovery-token-ca-cert-hash sha256:71a91721595fde66b6382908d801266602a14de8e16bdb7a3cede215094270097
Salida:
[preflight] Running pre-flight checks [discovery] Trying to connect to API Server "192.168.1.10:6443" [discovery] Created cluster-info discovery client, requesting info from "https://192.168.1.10:6443" [discovery] Requesting info from "https://192.168.1.10:6443" again to validate TLS against the pinned public key [discovery] Cluster info signature and contents are valid and TLS certificate validates against pinned roots, will use API Server "192.168.1.10:6443" [discovery] Successfully established connection with API Server "192.168.1.10:6443" [join] Reading configuration from the cluster... [join] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' [kubelet] Downloading configuration for the kubelet from the "kubelet-config-1.13" ConfigMap in the kube-system namespace [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env" [kubelet-start] Activating the kubelet service [tlsbootstrap] Waiting for the kubelet to perform the TLS Bootstrap... [patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "node1.itzgeek.local" as an annotation This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details. Run 'kubectl get nodes' on the master to see this node join the cluster.
El resultado anterior confirma que el nodo se ha agregado correctamente al clúster.
Ahora, verifique el estado de los nodos trabajadores en el nodo maestro usando el siguiente comando.
kubectl get nodes
Salida:

Debería ver que los nodos trabajadores están listos.
En nuestro próximo artículo, implementaremos pods, servicios y controladores de replicación en Kubernetes.
Eso es todo.
Cómo instalar SpamAssassin en Ubuntu/Debian
Cómo instalar PrestaShop en Ubuntu/Debian
Cómo instalar Kubernetes en CentOS 8
Cómo instalar Mongoku en Ubuntu 20.04 / Debian 11
¿Cómo instalar ODBC en Ubuntu 20.04 / Debian 11?
Cómo instalar el clúster de Kubernetes en CentOS 8
Nodo | Nombre de host | Dirección IP | SO | CPU | RAM |
---|---|---|---|---|---|
Nodo maestro | maestro.itzgeek.local | 192.168.1.10 | CentOS 7/RHEL 7 | 2 | 2 GB |
Nodo Minion 1 | nodo1.itzgeek.local | 192.168.1.20 | Ubuntu 18.04/16.04 | 2 | 2GB |
Nodo Minion 2 | nodo2.itzgeek.local | 192.168.1.30 | Debian 9 | 2 | 2 GB |