Kubernetes: explicación detallada de Kubernetes; instalación e implementación (1)

1. Kubernetes

La palabra Kubernetes se deriva del griego y significa "timonel" o "piloto".

Kubernetes, también conocido como K8S, donde 8 son los 8 caracteres que representan el medio "ubernete", es un motor de orquestación de contenedores de código abierto de Google en 2014, como el componente más importante de CNCF (Cloud Native Computing Foundation; Cloud Native Computing Foundation) uno

Kubernetes se utiliza para automatizar la implementación, la planificación, la expansión y la gestión de aplicaciones en contenedores. Agrupa los contenedores que componen la aplicación en unidades lógicas para facilitar la gestión y el descubrimiento, y se utiliza para gestionar aplicaciones en contenedores en múltiples hosts en la plataforma de la nube. .

El objetivo de Kubernetes es hacer que la implementación de aplicaciones en contenedores sea simple y eficiente, y muchos detalles no requieren personal de operación y mantenimiento para realizar configuraciones y procesamientos manuales complejos.

Sitio web oficial de KubernetesKubernetes
  

Dirección de GitHub:

GitHub - kubernetes/kubernetes: Programación y gestión de contenedores de nivel de producción

Documentación china de Kubernetes:

¿Qué es Kubernetes? |Kubernetes

Kubernetes se desarrolla utilizando el lenguaje Go (el lenguaje Go es un lenguaje de programación de código abierto lanzado por Google en 2009)

2. Arquitectura de Kubernetes

(1) Maestro

nodo de control de clúster k8s, programa y administra el clúster y acepta solicitudes de usuarios fuera del clúster para operar el clúster

Master Node consta de API Server, Scheduler, ClusterState Store (base de datos ETCD) y Controller MangerServer

1. API de clúster: kube-apiserver

kube-apiserver proporciona el único acceso a las operaciones de recursos y proporciona autenticación, autorización, control de acceso, registro de API y mecanismos de descubrimiento.

Cuando necesita interactuar con un clúster de Kubernetes, pasa por la API. La API de Kubernetes es una interfaz para el plano de control de Kubernetes para manejar solicitudes internas y externas. El servidor API determina si la solicitud es válida y, de ser así, la procesa. Los usuarios acceden a la API a través de llamadas REST, la interfaz de línea de comandos de kubectl u otras herramientas de línea de comandos como kubeadm.

2. Programación de clústeres: kube-scheduler

kube-scheduler es responsable de la programación de recursos y programa los pods en las máquinas correspondientes de acuerdo con las políticas de programación predeterminadas.

El programador tiene en cuenta los requisitos de recursos del pod (como CPU o memoria), así como el estado del clúster. Luego programa los pods en los nodos de cómputo apropiados.

3. Controlador de clúster: kube-controller-manager

kube-controller-manager es responsable de mantener el estado del clúster, como la detección de fallas, la expansión automática, la actualización continua, etc.

El controlador es responsable de ejecutar realmente el clúster, y el administrador del controlador de Kubernetes es la función de múltiples controladores en uno. El controlador se utiliza para consultar al programador y asegurarse de que se esté ejecutando la cantidad correcta de pods. Si una cápsula se cae, otro controlador se da cuenta y responde. Los controladores conectan los servicios a los pods para que las solicitudes vayan al punto final correcto. También hay controladores para crear cuentas y tokens de acceso a la API.

4. Base de datos de almacenamiento de valores clave: etcd

etcd guarda el estado de todo el clúster

Los datos de configuración de la aplicación y la información sobre el estado del clúster se encuentran en etcd (base de datos kv). etcd es un diseño distribuido tolerante a fallas y se considera la última fuente de verdad para el clúster

(2) Nodos

Nodos de trabajo en clúster, ejecutando contenedores de aplicaciones empresariales de usuario

Los nodos de nodos también se denominan nodos de trabajo, incluidos kubelet, kube proxy y Pod (Tiempo de ejecución del contenedor)

1, vaina

Pod es la unidad más pequeña y sencilla del modelo de objetos de Kubernetes

Representa una única instancia de la aplicación. Cada Pod consta de un contenedor (o una serie de contenedores estrechamente acoplados) y varias opciones que controlan cómo se ejecuta el contenedor. Los pods pueden conectarse al almacenamiento persistente para ejecutar aplicaciones con estado

2, motor de tiempo de ejecución del contenedor

El tiempo de ejecución del contenedor es responsable de la gestión de imágenes y la operación real de Pods y contenedores (CRI)

Para ejecutar contenedores, cada nodo tiene un motor de ejecución de contenedores. Como Docker, pero Kubernetes también es compatible con otros contenedores compatibles con Open Container Initiative (OCI), como rkt y CRI-O. Kubernetes es compatible con la mayoría de los demás contenedores que implementan la interfaz CRI

3, kubelet

Kubelet se encarga de mantener el ciclo de vida del contenedor, y también se encarga de la gestión de Volumen (CVI) y red (CNI)

Cada nodo de cálculo contiene un kubelet, una pequeña aplicación que se comunica con el plano de control. Un kublet garantiza que los contenedores se ejecuten dentro de un Pod. Cuando el Plano de Control necesite realizar una operación en el nodo, el kubelet realizará la operación

4, ser un representante

kube-proxy es responsable de proporcionar detección de servicios y balanceo de carga dentro del clúster para Service

Cada nodo de cómputo también contiene kube-proxy, un proxy de red para optimizar los servicios de red de Kubernetes. kube-proxy es responsable de manejar la comunicación de la red dentro o fuera del clúster (dependiendo de la capa de filtrado de paquetes del sistema operativo o reenviando el tráfico por sí mismo)

3. Kubeadm implementa Kubernetes

(1) Cómo construir el entorno de Kubernetes

1, minicubo

Minikube es una herramienta que puede ejecutar Kubernetes localmente Minikube puede ejecutar un clúster de Kubernetes de un solo nodo en computadoras personales (incluidas las PC con Windows, macOS y Linux) para que pueda probar Kubernetes o realizar el trabajo de desarrollo diario.

Hola Minikube | Kubernetes

2 tipo

Una herramienta similar a Kind y minikube que le permite ejecutar Kubernetes en su computadora local.Esta herramienta requiere que Docker esté instalado y configurado.

amable

3, administrador de Kube

Kubeadm es una herramienta de implementación de K8s que proporciona dos comandos de operación, kubeadm init y kubeadm join, para implementar rápidamente un clúster de Kubernetes;

Dirección oficial:

Kubeadm | Kubernetes

Instalación de kubeadm | Kubernetes

Instalar kubeadm | Kubernetes

4. Paquete binario

Descargue el paquete binario de la versión de lanzamiento de Github, implemente e instale manualmente cada componente y forme un clúster de Kubernetes. Los pasos son engorrosos, pero puede tener una comprensión más clara de cada componente.

5. ñam instalación

Instale cada componente de Kubernetes a través de yum para formar un clúster de Kubernetes, pero la versión k8s en la fuente de yum es relativamente antigua, por lo que este método se usa menos.

 6. Herramientas de terceros

Algunos maestros han encapsulado algunas herramientas y usan estas herramientas para instalar el entorno k8s;

 7. Gastar dinero para comprar

Compra directa de plataforma de nube pública k8s como Alibaba Cloud

(2) Kubeadm implementa Kubernetes

kubeadm es una herramienta lanzada por la comunidad oficial para el despliegue rápido de clústeres de kubernetes.Esta herramienta puede completar el despliegue de un clúster de kubernetes con dos instrucciones.

 1. Cree un nodo maestro: kubeadm init

 2. Agregue el nodo Nodo al clúster maestro:  kubeadm join <IP y puerto del nodo maestro>

(3) Requisitos del entorno de implementación de Kubernetes

(1) Una o más máquinas, sistema operativo CentOS 7.x-86_x64

(2) Configuración de hardware: Memoria 2GB o 2G+, CPU 2 núcleos o CPU 2 núcleos+

(3) Cada máquina en el clúster puede comunicarse entre sí

(4) Deshabilitar la partición de intercambio

(5) Cada máquina en el clúster puede acceder a la red externa y necesita extraer la imagen

Si el entorno no cumple con los requisitos, se informará un error de la siguiente manera

  

(4) Preparación del entorno de implementación de Kubernetes

1. Apague el cortafuegos

systemctl stop firewalld
systemctl disable firewalld

2. Cerrar selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久
setenforce 0  #临时

3. Desactive el intercambio (k8s prohíbe la memoria virtual para mejorar el rendimiento)

sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
swapoff -a #临时

4. Agregue hosts al maestro

cat >> /etc/hosts << EOF
192.168.132.129 k8smaster
192.168.132.130 k8snode
EOF

5. Establecer los parámetros del puente

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  #生效

6. Tiempo de sincronización

yum install ntpdate -y    #如果没有ntpdate命令先安装
ntpdate time.windows.com

(5) Pasos específicos de instalación de Kubernetes

1. Instalar ventana acoplable

Instale Docker/kubeadm/kubelet/kubectl en todos los nodos del servidor

El entorno operativo de contenedor predeterminado de Kubernetes es Docker, por lo que primero debe instalar Docker

Podemos instalar la versión especificada de Docker de la siguiente manera 

//更新docker的yum源
yum install wget -y
 
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
 
//安装指定版本的docker:
yum install docker-ce-20.10.0 -y

Para la instalación y desinstalación, consulte la documentación más reciente en el sitio web oficial

Instalar Docker Engine en CentOS | Documentación acoplable

Notas de la versión de Docker

Notas de la versión del motor Docker | Documentación acoplable

Configurar acelerador para acelerar las descargas

/etc/docker/daemon.json  Si este archivo no existe, créelo primero

{
    # 阿里云镜像加速器;可自己注册复制过来
    "registry-mirrors": ["https://registry.docker-cn.com"]
}

  

implementar 

systemctl enable docker.service

 Compilación: kubeadm, kubelet, kubectl

kubelet :

Se ejecuta en todos los nodos del clúster y es responsable de iniciar POD y contenedores

Kubeadm:

Una herramienta para inicializar el clúster.

kubectl:

kubectl es una herramienta de línea de comandos de kubenetes, a través de la cual kubectl puede implementar y administrar aplicaciones, ver varios recursos, crear, eliminar y actualizar componentes

2. Agregue la fuente Alibaba Cloud YUM de k8s

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

3. Instale kubeadm, kubelet y kubectl

La versión de Kubernetes es la siguiente

Versión del parche | Kubernetes

yum install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 -y

Compruebe si está instalado:

yum list installed | grep kubelet

yum list installed | grep kubeadm

yum list installed | grep kubectl

Compruebe la versión instalada:

kubeadm version
kubectl version --client
kubelet --version

Ejecutar después de la instalación

systemctl enable kubelet.service

Reiniciar CentOS: reiniciar 

Comando de reinicio de Linux centos:

1. Reiniciar reinicio normal

2. Apagar -r ahora reiniciar inmediatamente (usado por el usuario raíz)

3. shutdown -r 10 se reinicia automáticamente después de 10 minutos (utilizado por el usuario root)

4. shutdown -r 10:30 reinicio a las 10:30 (usuario root)

4. Implemente el nodo principal de Kubernetes Master 

(2) Ejecutar en la máquina maestra

kubeadm init 
    --apiserver-advertise-address=192.168.133.129 
    --control-plane-endpoint=master
    --image-repository registry.aliyuncs.com/google_containers 
    --kubernetes-version v1.19.4 
    --service-cidr=10.96.0.0/12 
    --pod-network-cidr=10.244.0.0/16

Descripción de parámetros:

        --apiserver-advertise-address Dirección de anuncio de clúster, ID de nodo principal

        --control-plane-endpoint nombre de host del nodo principal

        --image-repository Debido a que no se puede acceder a la dirección de imagen de extracción predeterminada k8s.gcr.io en China, especifique aquí la dirección del repositorio de imágenes de Alibaba Cloud

        --kubernetes-version Versión K8s, consistente con la instalada arriba

        --red virtual interna del clúster service-cidr, entrada de acceso unificado de pod

        --pod-network-cidr Pod network, mantenga lo mismo que el componente de red CNI yaml implementado a continuación

Nota:

La selección de service-cidr no puede superponerse o entrar en conflicto con PodCIDR y la red local. Generalmente, puede elegir un segmento de dirección de red privada que no sea utilizado por la red local y PodCIDR. Por ejemplo, si PODCIDR usa 10.244.0.0/16, entonces el servicio cidr se puede seleccionar 10.96.0.0/12, la red no se superpone ni entra en conflicto 

error de ejecución

Reinicie centos y luego ejecute el comando kubeadm init anterior

Después de probarlo, reiniciar centos seguirá reportando el mismo error y verifique cuidadosamente: "kube-apiserver.yaml, kube-controller-manager.yaml, kube-scheduler.yaml, etcd.yaml" estos archivos yaml ya existen, siempre y cuando Solo reinícialo

kubeadm reset
mv /etc/containerd/config.toml /tmp/
systemctl restart containerd

Luego, vuelva a ingresar el comando kubeadm init anterior, obtendrá el siguiente resultado, pegue el último párrafo
kubeadm join IP:PORT --token XX \
    --discovery-token-ca-cert-hash sha256:XX 

Copia de seguridad (para agregar un nuevo nodo al clúster, el comando ejecutado es el comando kubeadm join generado por kubeadm init al final)

kubeadm join 192.168.133.129:6443 --token vx912w.g8wyei3zo8qem1mq \
    --discovery-token-ca-cert-hash sha256:5c08ca34fed1e3fcef41e581970d3046ac85db10ee4a3875efb0bca5c8f8b104

1 en la figura anterior significa que la inicialización es exitosa

2 indica las operaciones que aún necesita el clúster

3 significa agregar un token de nodo (válido por 24 horas, solo obtenga el token después de que caduque)

readquirir token

kubeadm token create --print-join-command

(2) Ejecutar en la máquina maestra ( configurar variables de entorno )

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

kubectl get nodes

Si encuentra el siguiente error:

sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

Debido a que el archivo /etc/sudoers es de solo lectura, entonces sudo chmod 777 /etc/sudoers, el resultado puede modificar este archivo, pero no se puede usar el sudo de todos los usuarios.

Podemos ingresar el comando para modificar los permisos de sudoers:

chmod 0440 /etc/sudoers 
reboot

Luego ingrese reiniciar para reiniciar

 kubectl obtener nodos

5. Agregue el nodo node al maestro de Kubernetes y ejecútelo en la máquina Node

Para agregar un nuevo nodo al clúster, el comando ejecutado es el último comando de salida kubeadm join de kubeadm init

kubeadm join 192.168.133.129:6443 --token vx912w.g8wyei3zo8qem1mq \
    --discovery-token-ca-cert-hash sha256:5c08ca34fed1e3fcef41e581970d3046ac85db10ee4a3875efb0bca5c8f8b104

 kubectl obtener nodos 

(6) Implementar el complemento de red (máquina de nodo maestro principal en ejecución)

1. Descarga el archivo kube-flannel.yml

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

2. Aplique el archivo kube-flannel.yml para obtener el contenedor de tiempo de ejecución

kubectl apply -f kube-flannel.yml

3. Ver el estado del nodo: kubectl get nodes

No estará listo inmediatamente, el nodo tardará un tiempo en estarlo

Comprobar el estado para el éxito 

kubectl get cs
kubectl cluster-info

Ver el pod del contenedor de tiempo de ejecución (se están ejecutando varios contenedores docker en un pod)

kubectl get pods -n kube-system

¡En este punto, nuestro entorno k8s está configurado correctamente! ! !

4. Kubernetes implementa "aplicaciones en contenedores" ( prueba de clústeres de kubernetes )

Cree un pod en el clúster y verifique que se esté ejecutando normalmente

1. Implementar un Nginx en el clúster de Kubernetes

1. Tire de un espejo nginx en Internet

kubectl create deployment nginx --image=nginx

2. Exponer un puerto 80 al mundo exterior

kubectl expose deployment nginx --port=80 --type=NodePort

3. Verifique el puerto externo

kubectl get pod,svc

4. Dirección de acceso: http://IPNodo:Puerto

 2. Implemente un Tomcat en el clúster de Kubernetes

kubectl create deployment tomcat --image=tomcat

kubectl expose deployment tomcat --port=8080 --type=NodePort

kubectl get pod,svc

Dirección de acceso: http://IPNodo:Puerto

Supongo que te gusta

Origin blog.csdn.net/MinggeQingchun/article/details/126347932
Recomendado
Clasificación