GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo instalar Kubernetes en CentOS 7, Ubuntu 18.04/16.04 y Debian 9

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 correctamente

Aquí, 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:71a91721595fde66b6382908d801266602a14de8e16bdb7a3cede21509427009
7

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.


Cent OS
  1. Cómo instalar Kubernetes en Ubuntu 18.04

  2. Cómo instalar Spotify en Ubuntu y Debian

  3. Cómo instalar Apache Hadoop en CentOS 7, Ubuntu 18.04 y Debian 9

  4. Cómo instalar Ansible en CentOS 7/RHEL 7/Ubuntu 18.04/16.04 y Debian 9

  5. Cómo instalar Python pip en CentOS/Debian/Ubuntu

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