Introducción a K8S
En primer lugar, es una nueva solución líder de arquitectura distribuida basada en tecnología de contenedores. Kubernetes (k8s) es el sistema de gestión de clúster de contenedores de código abierto de Google (dentro de Google: Borg). Basado en la tecnología Docker, proporciona una serie de funciones completas como implementación y operación, programación de recursos, descubrimiento de servicios y escalado dinámico para aplicaciones en contenedores, lo que mejora la conveniencia de la administración de clústeres de contenedores a gran escala.
Kubernetes es una plataforma completa de soporte de sistema distribuido con capacidades completas de administración de clúster, mecanismos de acceso y protección de seguridad de múltiples niveles y expansión múltiple, capacidades de soporte de aplicaciones de múltiples inquilinos, mecanismos de descubrimiento y registro de servicios transparentes, y equilibrador de carga inteligente incorporado , Capacidades potentes de detección de fallas y reparación automática, actualización continua de servicios y capacidades de expansión en línea, mecanismo de programación automática de recursos escalable y capacidades de gestión de cuotas de recursos multigranulares. Al mismo tiempo, Kubernetes proporciona herramientas integrales de gestión que cubren todos los aspectos, incluidos el desarrollo, las pruebas de implementación, la supervisión de la operación y el mantenimiento.
En Kubernetes, el Servicio es el núcleo de la arquitectura de clúster distribuido. Un objeto de Servicio tiene las siguientes características clave:
Tener un nombre asignado de forma exclusiva,
tener una IP virtual (IP de clúster, IP de servicio o VIP) y un número de puerto
para integrar una cierta capacidad de servicio remoto
a un conjunto de aplicaciones de contenedor que brindan esta capacidad de servicio
Ventajas de Kubernetes:
Orquestación de contenedores
ligero, de
código abierto,
escalado elástico
, equilibrio de carga
concepto k8s
racimo
Cluster es una colección de recursos informáticos, de almacenamiento y de red, y k8s utiliza estos recursos para ejecutar varias aplicaciones basadas en contenedores.
Maestro
El maestro es el cerebro del clúster y su principal responsabilidad es la programación, que es decidir poner la aplicación para que se ejecute allí. El maestro ejecuta el sistema operativo Linux y puede ser una máquina física o una máquina virtual. Para lograr una alta disponibilidad, puede ejecutar varios maestros.
nodo
La responsabilidad del nodo es ejecutar aplicaciones de contenedor. El nodo es administrado por el maestro, el cual es responsable de monitorear e informar el estado del contenedor, y al mismo tiempo administra el ciclo de vida del contenedor de acuerdo con los requisitos del maestro. Node se ejecuta en el sistema operativo Linux y puede ser una máquina física o una máquina virtual.
bajo
Pod es la unidad de trabajo más pequeña para k8. Cada cápsula contiene uno o más contenedores. Los contenedores en el pod serán programados por el maestro como un todo para ejecutarse en un nodo.
controlador
Los K8 generalmente no crean pods directamente, pero los maneja a través de controladores. El controlador define las características de implementación del pod, por ejemplo, hay varios scripts y qué tipo de nodo se está ejecutando en él. Para cumplir con diferentes escenarios comerciales, k8s ofrece una variedad de controladores, que incluyen implementación, replicación, conjunto de daemon, conjunto de estado, trabajo, etc.
despliegue
Es el controlador más utilizado. La implementación puede administrar múltiples copias del pod y garantizar que el pod funcione en el estado deseado.
conjunto de réplicas
Logre múltiples copias de la gestión de pod. Replicaset se crea automáticamente cuando se usa la implementación, lo que significa que la implementación es para administrar múltiples copias de pods a través de replicaset. Por lo general, no necesitamos usar replicaset directamente.
daemonset
Se utiliza para escenarios en los que a lo sumo se ejecuta una copia de pod por nodo. Como su nombre indica, daemonset generalmente se usa para ejecutar daemon.
conjunto de estados
Puede garantizar que cada copia del pod tenga el mismo nombre durante todo el ciclo de vida, y otros controladores no proporcionan esta función. Cuando un pod falla y necesita eliminarse y reiniciarse, el nombre del pod cambiará y el conjunto de estado garantizará que las copias se inicien, actualicen o eliminen en un orden fijo.
trabajo
Se usa para aplicaciones que se eliminan al final de la ejecución, y los pods en otros controladores generalmente se ejecutan continuamente durante mucho tiempo.
Servicio
La implementación puede implementar múltiples copias, cada pod tiene su propia IP, ¿cómo accede el mundo exterior a estas copias?
La respuesta es que el servicio del servicio
k8s define cómo el mundo exterior accede a un conjunto específico de pods. El servicio tiene su propia IP y puerto, y proporciona un equilibrio de carga para el pod.
El controlador y el servicio ejecutan las dos tareas de ejecutar pod contenedores y acceder a contenedores en k8s respectivamente.
espacio de nombres
Un clúster físico puede dividirse lógicamente en múltiples clústeres virtuales, cada clúster es un espacio de nombres. Los recursos en diferentes espacios de nombres están completamente aislados.
Arquitectura de Kubernetes:
Agrupación de servicios, agrupación pequeña, agrupación de servicios de agrupación múltiple
, agrupación grande, agrupación única
Componentes de Kubernetes:
Componentes de control de Kubernetes Master, gestión de programación de todo el sistema (clúster), incluidos los siguientes componentes:
Servidor API Kubernetes
Como entrada del sistema Kubernetes, encapsula las operaciones de adición, eliminación, modificación e inspección de los objetos principales, y proporciona a los clientes externos y componentes internos una interfaz API RESTful. Los objetos REST mantenidos se conservan en Etcd para su almacenamiento.
Kubernetes Scheduler
Selección de nodos (es decir, asignación de máquinas) para Pods recientemente establecidos, responsables de la programación de recursos del clúster. Los componentes están separados y se pueden reemplazar fácilmente con otros planificadores.
Controlador del gobernador
Responsable de la ejecución de varios controladores, se han proporcionado muchos controladores para garantizar el funcionamiento normal de Kubernetes.
Controlador de replicación
Administre y mantenga el Controlador de replicación, asocie el Controlador de replicación y el Pod, y asegúrese de que la cantidad de copias definidas por el Controlador de replicación sea la misma que la cantidad real de Pods.
Controlador de nodo
Administre y mantenga el nodo, compruebe regularmente el estado del nodo e identifique nodos (fallidos | no fallidos).
Controlador de espacio de nombres
Administre y mantenga el espacio de nombres, y limpie periódicamente el espacio de nombres no válido, incluidos los objetos API en Namesapce, como Pod y Servicio
Controlador de servicio
Gestionar y mantener el Servicio, proporcionar carga y agente de servicio.
Controlador EndPoints
Administre y mantenga los puntos finales, asocie el servicio y el pod, cree los puntos finales como el back-end del servicio y actualice los puntos finales en tiempo real cuando cambie el pod.
Controlador de cuenta de servicio
Administre y mantenga una cuenta de servicio, cree una cuenta de servicio predeterminada para cada espacio de nombres y cree un secreto de cuenta de servicio para la cuenta de servicio al mismo tiempo.
Controlador de volumen persistente
Administre y mantenga Volumen persistente y Reclamo de volumen persistente, asigne Volumen persistente para que se vincule el nuevo Reclamo de volumen persistente y realice la limpieza y recuperación del Volumen persistente lanzado.
Controlador de conjunto de demonios
Administre y mantenga el conjunto de Daemon, responsable de crear Daemon Pods y garantizar el funcionamiento normal de Daemon Pods en el nodo especificado.
Controlador de implementación
Administre y mantenga la implementación, asocie el Controlador de implementación y replicación y asegúrese de que se esté ejecutando un número específico de pods. Cuando se actualiza la implementación, controla la actualización del Controlador de replicación y el Pod.
Controlador de trabajo
Administre y mantenga trabajos, cree pods de tareas únicas para trabajos y asegúrese de completar la cantidad de tareas especificadas por el trabajo
Controlador de autoescalador de pod
Logre el escalado automático de Pod, obtenga regularmente datos de monitoreo, realice una coincidencia de políticas y ejecute la acción de escalado de Pod cuando se cumplan las condiciones.
El nodo en ejecución del nodo K8S, contenedor empresarial de gestión en ejecución, contiene los siguientes componentes:
Es un bebe
Responsable de controlar los contenedores, Kubelet recibirá solicitudes de creación de Pod del Servidor API de Kubernetes, iniciará y detendrá contenedores, supervisará el estado de ejecución de los contenedores e informará al Servidor API de Kubernetes.
Proxy Kubernetes
Responsable de crear un servicio proxy para Pods. Kubernetes Proxy obtendrá toda la información del Servicio del Servidor API de Kubernetes y creará un servicio proxy basado en la información del Servicio para implementar el enrutamiento y reenvío de solicitudes del Servicio a Pods, implementando así una red de reenvío virtual a nivel de Kubernetes.
Estibador
El nodo necesita ejecutar el servicio de contenedor
Configuración del entorno
Nombre de host | Dirección IP | Papel | Configuracion |
---|---|---|---|
Maestro | 192.168.0.110 | Nodo maestro | 2C 2G |
Maestro | 192.168.0.104 | Nodo de trabajo | 2C 2G |
Maestro | 192.168.0.106 | Nodo de trabajo | 2C 2G |
Observaciones: al menos 2 núcleos y 2 g de máquinas virtuales en el entorno experimental
El proceso de despliegue
1. Descarga y carga de paquetes de software
1. Dirección de descarga del disco de red Baidu
Enlace: https://pan.baidu.com/s/1Qzs8tcf4O-8xlTmnl2Qx5g
código de extracción: ah4y
En segundo lugar, la optimización del entorno básico del servidor (la misma operación de las tres unidades)
1. Cerrar la pared protectora, seguridad
sed -i 's / SELINUX = imposición / SELINUX = deshabilitado / g' / etc / selinux / config
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
2. Sincronización de hora del servidor
timedatectl set-timezone Asia / Shanghai
3. Modificar el nombre del host
hostnamectl set-hostname master && bash
hostnamectl set-hostname node01 && bash
hostnamectl set-hostname node02 && bash
4. Agregue el archivo de hosts
vim / etc / hosts # Agregue resolución de nombre de host
al final:
192.168.0.110 maestro
192.168.0.104 nodo1
192.168.0.106 nodo2
Las otras 2 unidades se pueden agregar o copiar archivos:
scp / etc / hosts [email protected]: / etc / hosts
scp / etc / hosts [email protected]: / etc / hosts
5. Cierre el intercambio de memoria de intercambio
swapoff -a # Cerrar temporalmente
sed -i '12s / ^ \ // # \ // g' / etc / fstab #Cerrar permanentemente
6. Configuración del puente
echo -e "net.bridge.bridge-nf-call-ip6tables = 1 \ nnet.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.d/k8s.conf
sysctl --system #make Eficaz
Tercero, desplegar docker (la misma operación de los tres)
1. Descomprima e instale la ventana acoplable
tar -zxvf docker-ce-18.09.tar.gz
cd docker && yum localinstall * .rpm -y #yum dependencias relacionadas con la instalación
2. Inicie la ventana acoplable
systemctl start docker
systemctl enable docker # 开机 启动
versión docker
Acelerador 3.docker
vim /etc/docker/daemon.json #Add
{
"registro-espejos": [" https://fskvstob.mirror.aliyuncs.com/ "]
}systemctl daemon-reload #Reload
Cuarto, despliegue el clúster K8
3 juegos de la misma operación
1. Descomprima e instale k8s
cd ../
tar -zxvf kube114-rpm.tar.gz
cd kube114-rpm && yum localinstall * .rpm -y #yum
2. Importar imagen k8s
cd ../
docker load -i k8s-114-images.tar.gz
docker load -i flannel -dashboard.tar.gz
Nota: Si se produce el siguiente error al importar la imagen:
El motivo del error: se produjo un problema al descargar el paquete de compresión de imágenes
Solución: vuelva a descargar o reemplace la imagen
3. Ver imagen k8s
imágenes del acoplador # 9 imágenes en total
Solo opere en el maestro
4.inicialización maestra
kubeadm init - versión-kubernetes = v1.14.1 - pod-network-cidr = 10.244.0.0 / 16
5. Ver nodo
kubectl get node
kubectl get pod --todos los espacios de nombres
6. Configure la variable KUBECONFIG
echo "exportar KUBECONFIG = / etc / kubernetes / admin.conf" >> / etc / profile
source / etc / profile
echo $ KUBECONFIG # debe devolver /etc/kubernetes/admin.conf
7. Despliegue la red de franela
kubectl create -f kube-flannel.yml
kubectl get node
Operación del servidor en el nodo nodo
8.kubeadm join nodo de nodo de unión
systemctl enable kubelet #Agregar boot k8s
kubeadm join 192.168.0.110:6443 --token 2vjmyw.9p6cbn8m8oqs41ta \
--discovery-token-ca-cert-hash sha256: e4c1d3e9da26e2f488dec621122a30dbf2525c
9. Ver en el maestro
kubectl get node
10. Implemente la interfaz de usuario de k8s (tablero)
kubectl apply -f kubernetes-dashboard.yaml
kubectl apply -f admin-role.yaml
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml
kubectl -n kube-system get svc
11. Verificación de la página web
Materiales de referencia:
1. Artículo de referencia https://www.jianshu.com/p/0e1a3412528e
2. Consulte el video de enseñanza de k8s de Lao Qi
3. Documento chino oficial de k8s de referencia https://kubernetes.io/zh/docs/home/