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