campo de entrenamiento k8s

1. Espacio de nombres y ventana acoplable de Linux

1.linux的7大ns--------------ipc,net,pid,mnt.uts.user

 

 ver el ns de linux

lsns

 Ver diferentes tipos de ns

[root@master ~]# lsns -t net
        NS TYPE NPROCS PID USER COMMAND
4026531956 net     116   1 root /usr/lib/systemd/systemd --system --deserialize 26

Ver el pid de un cierto ns e ingresar

ls -la /proc/1/ns

No hay ningún comando en el contenedor, vea el nsenter -t pid en el contenedor a través del host

Paso 1.docker ps|grep nginx

Paso 2 ventana acoplable inspeccionar nombre | grep pid

Paso 3: nsenter -t pid(número pid) -n ip a---------n No lo sueltes, si no lo reconoces, se convertirá en la ip a de tu confidente

nsenter -t 1 -n ip a

 2. El propio Docker utiliza ****cgroupfs**** como controlador de cgroup. Este es un conjunto de sistemas cgroup en la intranet, y el sistema cgroup de kubelet es *****systemd****

 Para proteger, kubelet verificará el controlador cgroup cuando se inicie, generalmente cambiará la ventana acoplable a systemd y luego volverá a cargar

3,, las ventajas de docker y las diferencias con containerd

La innovación de docker radica en el sistema de archivos conjuntos. La mayor ventaja radica en empaquetar la imagen, informar el entorno propio de la imagen y ser portátil ---------------- construcción de contexto

La principal diferencia entre docker y containerd es que docker agrega un shim para conectarse a crid. La razón es que antes, las actualizaciones de docker matarían el proceso, pero cridb no, por lo que ahora docker se conecta a crid a través de shim.

 Imagen de compilación de varias etapas

  

 

4. Superposición de red (agregar una capa de empaquetado --- de uso común --- modo túnel --- agregar una capa -- desempaquetar paquetes) y subyacente (replanificar la red de nodos de pods --- red de máquinas físicas -- - no se usa comúnmente ---)

Cómo conectar pods del mismo nodo 

1. Modo NULL - autoconfiguración - no se usa comúnmente

2. Modo predeterminado--puente y NAT--formas de pod veth--emparejar con el host respectivamente, el puente docker y la red de contenedores

docker run -d --name nginx01 -p 3344:80 nginx

El principio del extremo expuesto de b es la reescritura de la regla de iptable

Verifique las reglas de iptables, si es un protocolo tcp, agregue una regla, el puerto de destino es 3344 hará un DNAT (distribución)

[root@master ~]# iptables-save -t nat |grep 3344
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 3344 -j DNAT --to-destination 172.17.0.2:80

2. estrategia de programación k8s

Estrategia de programación de Borg: peor ajuste (póngalo en el lugar con la mayor cantidad de recursos inactivos, y la tasa de ocupación de recursos de todos los nodos es aproximadamente la misma)

                        Best Fit (coloque lo suficiente para ahorrar recursos y costos, intente llenar los nodos tanto como sea posible y reduzca la fragmentación del clúster)

                        Híbrido (encuentre el óptimo local y colóquelo en lugar de atravesar todos los nodos)

1. Cómo abrir el modo DEBUG en k8s:

 k get ns default -v 9

La esencia de kubectl es la encapsulación de rest api, comando CURL

No vayas al servidor api para obtener cosas, ve al caché para obtener cosas

[root@master module4]# k get ns default -v 9
I1115 18:55:49.139247   12707 loader.go:375] Config loaded from file:  /root/.kube/config
I1115 18:55:49.148958   12707 round_trippers.go:424] curl -k -v -XGET  -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.19.7 (linux/amd64) kubernetes/1dd5338" 'https://172.26.144.84:6443/api/v1/namespaces/default'
cat /root/.kube/config

 En este momento, puede escuchar la actualización de ns a la izquierda y a la derecha.

 Ver el tiempo de ejecución de Crid, el valor predeterminado es docker antes de la versión k8s1.24

[root@master ~]# cat /var/lib/kubelet/config.yaml  |grep runtime
kubeReservedCgroup: /podruntime.slice
runtimeRequestTimeout: 2m0s

  3. Etcd

etcd es una base de datos kv distribuida basada en el protocolo raft

almacén de valor clave

Descubrimiento y registro de servicios

Mecanismo de supervisión - sistema asíncrono

Comprenda el algoritmo de consenso de raft Raft , después de un período de tiempo sin un líder, se convertirá en candidato, enviará un mensaje, la rebelión es exitosa y seguirá diciendo a otros que soy su líder.

El alumno de nodo recién agregado solo aprende y no vota

etcd es kv, por lo que se pueden indexar Zhiyong y muchas claves

Si etcd y el host se juntan, la eficiencia de lectura será muy alta.Agregue un disco SSD de montaje independiente----deben ser todos SSD, de lo contrario se dividirá

El número de versión modificado de la reversión de etcd se actualizará en su totalidad cada vez que se modifique, y solo pasarán los últimos números de versión

La confirmación de datos de ETcd también es más de la mitad se puede confirmar

 Cuando se realiza una copia de seguridad de ETCD, la instantánea se bloqueará, por lo que es necesario planificar el tiempo de la copia de seguridad de manera razonable, sacar el VAR/LOG, restaurar primero la instantánea y luego cargar y var/registrar datos.

  4. servidor API

api-server es equivalente a api gateway

Con autenticación, autenticación, estrategia de acceso, limitación actual,

Se puede modificar la parte frontal del complemento, pero no la parte posterior.

En general, el webhook se ejecuta en conjunto como el sidecar de apiserver

 

5. Cambiar de docker a crd

101/docker2containerd.md en maestro · cncamp/101 · GitHub

Secuencia de inicio: CSI-->>CRI-->>CNI

Seis, complementos de red

Flannel------- Modo VXLAN, desempaquetado de paquetes, su propia sobrecarga de recursos es de aproximadamente 10% ------ sin ecología

calico ------------ Capa 3 en el mismo segmento de red, protocolo BGP (notificación mutua), sin necesidad de desempaquetar paquetes --------- modo tunl0 de segmento de red entre hosts ( túnel--- IPIP----paquete IP seguido de paquete IP---------vxlan más paquete UDP)

calico-----modo de enrutamiento dinámico

Siete, detalles de cálculo de estado de pod

Ocho, ver las reglas de iptables

Todo el que entra y sale va a KUBE-SERVICES

-d significa destino (dirección de destino)

iptables-save -t nat
[root@master ~]# iptables-save -t nat |grep -i ser
:KUBE-SERVICES - [0:0]
-A PREROUTING -m comment --comment "kubernetes service portals" -j KUBE-SERVICES
-A OUTPUT -m comment --comment "kubernetes service portals" -j KUBE-SERVICES
-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -j MASQUERADE
-A KUBE-SERVICES ! -s 172.20.0.0/16 -m comment --comment "Kubernetes service cluster ip + port for masquerade purpose" -m set --match-set KUBE-CLUSTER-IP dst,dst -j KUBE-MARK-MASQ
-A KUBE-SERVICES -m addrtype --dst-type LOCAL -j KUBE-NODE-PORT
-A KUBE-SERVICES -m set --match-set KUBE-CLUSTER-IP dst,dst -j ACCEPT

La estrategia es pegarle al primero, al segundo si no le pegas y al tercero si no le pegas.

Los clústeres pequeños no son un problema

Si hay demasiadas reglas de enlace de iptables, la eficiencia de reenvío será extremadamente baja. Incluso si se optimiza, la eficiencia del primer paquete también es muy baja.

iptables está completamente actualizado

ipvs hace SNAT en el enrutamiento posterior

Cuando ipvs está habilitado, se activará una tarjeta de red virtual de ipvs0 para evitar que se pierdan paquetes de datos que no sean de la máquina local

 En lugar de enrutamiento previo y posterior, ipvs no tiene un punto de enganche, y el enmascaramiento (enrutamiento posterior) aún depende de iptables, por lo que habrá menos reglas nat en iptables bajo ipvs

ipvsadm -L

Nueve, tubería jks

 

Supongo que te gusta

Origin blog.csdn.net/weixin_42435798/article/details/127864225
Recomendado
Clasificación