Introducción a los contenedores k8s

1. Introducción a k8s

1. ¿Qué es un contenedor?

Para reducir el desperdicio de recursos de host físico causado por las máquinas virtuales, mejorar la tasa de utilización de los hosts físicos y proporcionar un entorno de ejecución aislado para aplicaciones tan buenas como las máquinas virtuales, la gente llama a esta máquina virtual liviana un contenedor.

2. Herramientas de gestión de contenedores

Se utiliza principalmente para la creación, inicio, apagado, eliminación, etc. de contenedores.
Herramientas de gestión:

  • estibador
  • bolsa
  • LXC, LXD, RKT

3. Herramientas de implementación y orquestación de contenedores

Las herramientas de administración de contenedores pueden completar la administración básica y, para hacer frente a implementaciones de aplicaciones más complejas en las empresas, se requieren herramientas de administración de orquestación de contenedores.
Herramientas de implementación de orquestación:

  • docker tres espadachines (docker machine, docker compose, docker swarm)
  • mesos + marathon
  • Kubernetes
    se utiliza principalmente para administrar aplicaciones en contenedores en múltiples hosts en la plataforma de la nube. El objetivo de k8s es hacer que la implementación de aplicaciones en contenedores sea simple y eficiente, proporcionando un mecanismo para la implementación, planificación, actualización y mantenimiento de aplicaciones.

2. función y arquitectura k8s

1. función k8s

Puede implementar, expandir y reducir automáticamente las aplicaciones.

【1】Embalaje automático

Implementación automática de contenedores de aplicaciones en función de los requisitos de configuración de recursos del entorno operativo de la aplicación en función de los contenedores

【2】Autocuración (capacidad de autocuración)

  • Cuando el contenedor falla, el contenedor se reiniciará
  • Cuando hay un problema con el nodo del nodo implementado, el contenedor se volverá a implementar y reprogramar
  • Cerrar un contenedor cuando falla una verificación de monitoreo
  • No se proporcionarán servicios externos hasta que el contenedor funcione con normalidad

【4】Expansión horizontal

A través de instrucciones simples, interfaz de usuario o uso de recursos basado en CPU, etc., expanda o reduzca la escala de la aplicación como contenedor

[5] Descubrimiento de servicios

Los usuarios pueden realizar el descubrimiento de servicios y el equilibrio de carga en función de las capacidades propias de k8 sin utilizar mecanismos adicionales de descubrimiento de servicios.

【6】Actualización continua

De acuerdo con los cambios de la aplicación, se pueden realizar actualizaciones únicas o por lotes en las aplicaciones que se ejecutan en el contenedor de la aplicación.

[7] Reversión de versión

De acuerdo con la implementación de la aplicación, la aplicación se puede ejecutar en el contenedor de la aplicación y la versión histórica se puede revertir de inmediato.

【8】Gestión de claves y configuración

Las claves y las configuraciones de aplicaciones se pueden implementar y actualizar sin reconstruir la imagen, de forma similar a la implementación en caliente

【9】Orquestación de almacenamiento

  • Implementar automáticamente el montaje y la aplicación del sistema de almacenamiento, especialmente para aplicaciones con estado para lograr la persistencia de datos es muy importante
  • El sistema de almacenamiento puede provenir de directorios locales, redes de almacenamiento (NFS, Gluster, Ceph, Cinder, etc.), servicios de almacenamiento en la nube pública, etc.

2. Compatibilidad con nodos y pods

  • Soporte de número de nodo (nodo): antes 100, ahora 2000
  • Soporte de administración de POd: principios de 1000, ahora 150000

3. Despliegue de clústeres k8s

1. Clasificación de la arquitectura de implementación de aplicaciones

  • Arquitectura de nodo no central: GlusterFS
  • Arquitectura del nodo central: HDFS, K8S

2. Funciones de rol de los nodos de arquitectura de clúster

[1] Tres componentes del nodo maestro

  • El nodo de control k8s programa y administra el clúster y acepta solicitudes de usuarios fuera del clúster para operar el clúster.
  • Composición del nodo maestro (cuatro componentes): plano de control
  1. Servidor API: Comunicación
  2. Kube-Scheduler: Scheduling distribuye pods a nodos (servidores) a través de algoritmos de programación
  3. Almacén de estado del clúster (base de datos ETCD)/almacenamiento distribuido de clave-valor
  4. Servidor Controller Manager: Recursos

[2] Tres componentes del nodo trabajador: plano de usuario

  • Nodos de trabajo de clúster, contenedor de aplicaciones empresariales de usuario en ejecución 1
  • Composición del nodo trabajador (tres componentes)
    1. kubelet: una herramienta de gestión del lado del trabajador, responsable del ciclo de vida de los módulos, el almacenamiento y la gestión de la red
    2. Proxy kube: proxy de red, configuración de la ruta de reenvío, responsable del descubrimiento de servicios (aquí está el descubrimiento de servicios internos y el descubrimiento de servicios externos es el ingreso), equilibrio de carga (carga de 4 capas)
    3. Container Runtime: el software que crea el contenedor

【3】Complementos

  • ser - dns
  • Controlador de ingreso: proporciona entrada de red externa para servicios (descubrimiento de servicios externos)
    inserte la descripción de la imagen aquí

3. implementación de k8s

Validación de la disponibilidad del clúster

kubbectl get node   # 节点状态
kubbectl  get cs    # 集群状态

Cuatro, comando kubectl del cliente de clúster k8s

# 检查集群是否安装
rpm -qa | grep kubetctl
# 获取kubectl帮助
kubectl --help

Entorno necesario para usar comandos kubectl: archivo de configuración de enlace de clúster

Cinco, método de escritura de archivo de lista de recursos de clúster k8s (yaml)

1. Formato de escritura del archivo YAML

【1】Introducción al archivo YAML

  • YAML sigue siendo un lenguaje de marcado
  • Para enfatizar que este lenguaje se centra en los datos en lugar de centrarse en el lenguaje de marcado
  • YAML es un formato altamente legible para expresar secuencias de datos

[2] Sintaxis básica del archivo YAML

  • usar espacios para la sangría
  • El número de espacios de sangría no es importante, siempre que los elementos del mismo nivel estén alineados a la izquierda
  • La sangría de versión baja no puede usar la tecla TAB, solo se pueden usar espacios
  • Use # para marcar el comentario, desde este carácter hasta el final de la línea, será ignorado por el intérprete

[3] Estructuras de datos compatibles con YAML

  • objeto
  1. colección de pares clave-valor
  2. también conocido como Mapa/Hash/Diccionario
  • formación
  1. un grupo en orden
  2. también conocido como secuencia/lista
  • Escalar
    Un valor único e indivisible: número, bool, nulo, hora y fecha.
    En YMAL, las cadenas no usan comillas. Si hay espacios o caracteres especiales en la cadena, se pueden encerrar entre comillas simples o dobles.

2. Implementar el método de descripción de la lista de recursos a través del archivo YAML

【1】Campos comunes

  • versión: versión, tipo str
  • kind: tipo de recurso, tipo str
  • metadatos: objeto de metadatos/objeto de recursos, objeto
  • metadata.name: nombre del objeto de recurso, str
  • metadata.namespace: espacio de nombres del objeto de recurso, str
  • Especificaciones: Definir objetos de recursos en detalle, descripción de objetos de recursos, objeto

Seis, espacio de nombres de clúster k8s (espacio de nombres)

1. Introducción

  • Espacios de nombres
  • Rol: en el caso de la tenencia múltiple, se realiza el aislamiento de recursos
  • Pertenecen al aislamiento lógico
  • Pertenece a los límites de la gestión
  • No es parte del límite de la red
  • Las cuotas de recursos se pueden hacer para cada espacio de nombres

2. Ver

kubect get namesapce

ilustrar:

  • predeterminado: los pods creados por los usuarios están en este espacio de nombres de forma predeterminada
  • kune-public : Accesible para todos los usuarios. Incluir usuarios no autenticados
  • kube-node-lease: estado de arrendamiento del nodo del clúster de kubernetes
  • kube-system: el clúster de kubernetes está en uso

3. crear

【1】Crear por comando

kubectl create namespace test

输出: 
namespace/test created

[2] Creado a través de la lista de recursos

1.准备资源清单文件
cat 01-create-ns.yam1

apiVersion: V1
kind: Namespace
metadata:
  name;demons1
  
2. 应用资源清单文件
kubectl apply -f 01-create-ns.yam1

3. 验证是否创建成功
kubectl get namespace

4. eliminar

[1] Eliminar directamente a través de kubectl (no recomendado)

kubectl get namespace
kubectl delete namespace test

【2】Utilice el comando kubectl para eliminar el archivo de la lista de recursos de la aplicación (recomendación)

kubectl get namespace
cat 01-create-ns.yam1
kubectl delete -f 01-create-ns.yam1

Siete, pod de concepto de núcleo de clúster k8s

Los contenedores no se pueden administrar directamente en k8s. La unidad de programación más pequeña en un clúster de k8s es pod, por lo que los pods deben usarse para ejecutar contenedores de aplicaciones.

1. Concepto

  • La unidad más pequeña que se puede programar en k8s
  • Un pod es una colección de contenedores.

2. Ver cápsulas

kubectl get pod
kubectl get pods
kubectl get pods --namespace default

3. Crear cápsulas

[1] Escriba un archivo para crear una lista de recursos de pod

4. Acceso al pod (no recomendado)

知道pod的IP地址
curl 172.xx.xx.xx

5. Método de eliminación de pods

[1] Eliminar directamente a través de kubectl (no recomendado)

 kubectl delete pods pod1

【2】Utilice el comando kubectl para eliminar el archivo de la lista de recursos de la aplicación (recomendación)

kubectl delete -f 02-create-pod.yam1

Ocho, controlador de concepto de núcleo de clúster k8s (controlador)

Comprenda el método de eliminación de pods y descubra que la eliminación de pods es muy simple y fácil de usar incorrectamente. Por lo tanto, se introduce otro concepto de controlador (controlador) para monitorear el estado del pod en un bucle en el clúster k8s. Si se encuentra que el pod se eliminó , se reiniciará Tire hacia arriba de un pod y lo mantendrá en el estado que espera el usuario.

1. Función del controlador

  • controlador
  • Se utiliza para monitorear los recursos que se ejecutan en la aplicación.
  • Cuando hay un problema con el pod, el pod se volverá a levantar para lograr el estado esperado por el usuario

2. Clasificación del controlador

Controladores de cápsulas comunes: monos de tipo, llamados controladores RC

  • Implementación: controlador de actualización declarativo para implementar aplicaciones sin estado . Un paquete de nivel superior para RS. , proporcionando funciones más ricas relacionadas con la implementación.
    Ventajas: el backend se puede expandir infinitamente
  • ReplicaSet (RS): el controlador del conjunto de réplicas se usa para expandir o reducir el tamaño de la réplica del pod y se usa para publicar aplicaciones sin estado . Actualice dinámicamente la cantidad de copias de POD y seleccione qué pods se aplicarán a través del selector.
  • StatefulSet: un conjunto de réplicas con estado, que se utiliza para publicar aplicaciones con estado Ventajas: estabilidad continua, la IP
    se puede mantener sin cambios Características principales: almacenamiento persistente estable, logotipo de red estable, implementación ordenada y expansión ordenada, contracción ordenada y eliminación ordenada Composición: Servicio sin cabeza (gestión de DNS para servicios con estado), volumeClaimTemplate (plantilla para crear volúmenes persistentes)

  • DaemonSet: ejecute una copia en cada nodo del clúster k8s para publicar aplicaciones como monitoreo o recopilación de registros e instálelo
    en cada nodo
  • Trabajo: ejecutar una tarea de trabajo de una sola vez
  • CronJob: ejecutar tareas de trabajo periódicas

3. El papel del controlador de implementación

  • Tiene las funciones de implementación en línea, actualización continua, creación de una copia, reversión a una versión anterior (correcta/estable), etc.

4. Cree un método de aplicación de tipo controlador de implementación

[1] Creado a través de la línea de comandos de kubectl (no recomendado)

[2] Cree un archivo de lista de recursos a través del comando kubectl (recomendado)

5. Elimine el método de aplicación del tipo de controlador de implementación

No se recomienda eliminar el POD con el tipo de controlador directamente. Si debe eliminarse, elimine el nombre de la aplicación del controlador. (Después de eliminar el pod directamente, el POD se volverá a abrir)

[1] Creado a través de la línea de comandos de kubectl

# 查看应用:
kubectl get depliyment.apps
# 删除应用;
kubectl delete depliyment.apps nginx-app

【2】Crear archivo de lista de recursos de la aplicación a través del comando kubectl

Nueve, servicio de concepto de núcleo de clúster k8s

1. concepto de servicio

  • no es un servicio de entidad
  • Es una regla de reenvío de iptables o ipva

2. Rol de servicio

  • Proporcione al cliente del pod acceso al método POD a través del servicio, es decir, el cliente accede a la entrada del pod
  • El servicio está asociado con el pod a través de la etiqueta del pod.

3. tipo de servicio

  • ClusterIP: Por defecto se asigna una IP virtual a la que se puede acceder dentro del clúster, a la que solo se puede acceder internamente
  • NodePort: asigne un puerto en cada Nodo como una entrada de acceso externo
  • LoadBalancer: trabaje en un proveedor de nube específico (p. ej., Google Cloud, AWS, Openstack)
  • ExternalName: indica que los servicios fuera del clúster se introducen en el clúster, es decir, los pods dentro del clúster se comunican con los servicios fuera del clúster

4. parámetros de servicio

  • puerto: el puerto utilizado para acceder al servicio
  • targetPort: puerto contenedor en Pod
  • NodePort: a través de Node, los usuarios de la red externa pueden acceder a los servicios en el clúster k8s

5. Método de creación del servicio

[1] Creado a través de la línea de comandos de kubectl (no recomendado)

El servicio creado por defecto es de tipo ClusterIP

# 1.创建Deploment类型应用
# 2.验证应用创建情况
get
# 3.创建service
kubectl expose deployment.apps nginx.app1 --typr=ClusterIP --tarrget-poet=80 --port=80
# 4. 查看service
kubectl get service

[2] Cree un archivo de lista de recursos a través del comando kubectl (recomendado)

6. Método de eliminación de servicios

[1] Creado a través de la línea de comandos de kubectl (no recomendado)

kubectl delete service nginx-app1

【2】Utilice el comando kubectl para crear un archivo de lista de recursos (recomendado)

Supongo que te gusta

Origin blog.csdn.net/weixin_46268244/article/details/131840382
Recomendado
Clasificación