Instalación e implementación de clústeres de Kubernetes

1. Preparación del entorno
1. Condiciones previas del entorno de la máquina
La demostración actual prepara 3 entornos de máquina virtual o 3 servidores en la nube de Alibaba
k8s-master01: Esta máquina se utiliza para instalar el entorno operativo de k8s-master
k8s-node01: Esta máquina El entorno utilizado para instalar el nodo k8s node
k8s-node02: esta máquina se utiliza para instalar el entorno del nodo k8s node


Modifique la configuración de la red para asegurarse de que la red de la máquina virtual esté conectada, y la cantidad de núcleos de CPU del
nodo de conexión Xshell debe ser: >= 2 núcleos; de lo contrario, k8s no puede iniciar la
red DNS: es mejor configurarlo en el DNS conectado a la red local, de lo contrario, la red se bloquea y algunas imágenes espejo no se pueden descargar
. Kernel: el kernel de Linux debe tener la versión 4 o superior, por lo que se debe actualizar el kernel de Linux.
La preparación del entorno previo está completa

2. Instalación y configuración del entorno dependiente
Nota: Cada máquina debe instalar este entorno dependiente
1. Establezca el nombre de host para cada máquina

hostnamectl conjunto-nombre de host k8s-master01
hostnamectl conjunto-nombre de host k8s-node01
hostnamectl conjunto-nombre de host k8s-node02

Ver nombre de host

nombre de host

Configurar la relación de asignación de host de IP

vi /etc/hosts
192.168.66.10 k8s-master01
192.168.66.11 k8s-node01
192.168.66.12 k8s-node02

2. La instalación depende del entorno

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat
libseccomp wget vim net-tools git iproute lrzsz bash-completion tree bridge-
utils unzip bind-utils gcc

3. Instale iptables, inicie iptables, configure el inicio automáticamente, borre las reglas de iptables, guarde las reglas actuales en las reglas predeterminadas, cierre el firewall y configure el inicio para deshabilitar el firewall

systemctl detener firewalld && systemctl deshabilitar firewalld

iptables vacias

yum -y install iptables-services && systemctl start iptables && systemctl enable
iptables && iptables -F && service iptables save

4. Cierre selinux,
cierre la partición de intercambio [memoria virtual] y cierre permanentemente la memoria virtual

intercambio -a && sed -i '/ intercambio / s/^(.*)$/#\1/g' /etc/fstab

cerrar selinux

setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=deshabilitado/' /etc/selinux/config

5. Actualice el kernel de Linux a la versión 4.44

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

instalar núcleo

yum --enablerepo=elrepo-kernel install -y kernel-lt

Consulta de núcleos instalados

rpm-qa | núcleo grep

Ver elementos de inicio predeterminados

awk -F' '$1=="menuentry" {imprimir $2}' /etc/grub2.cfg

Encuentre el nombre del nuevo kernel en el comando anterior, ejecute el siguiente comando después del reemplazo, para que el arranque comience desde el nuevo kernel

grub2-set-default 'CentOS Linux (4.4.230-1.el7.elrepo.x86_64) 7 (Núcleo)'

Reinicie la máquina. Nota: después de configurar el kernel, debe reiniciar el servidor para que surta efecto.

reiniciar

Consultar el kernel después de reiniciar

uname -r

6. Ajuste los parámetros del kernel, para k8s

cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
máquina virtual. swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

Copie el archivo del kernel optimizado en la carpeta /etc/sysctl.d/, de modo que se pueda llamar al archivo optimizado al arrancar

cp kubernetes.conf /etc/sysctl.d/kubernetes.conf

Actualizar manualmente para que el archivo optimizado surta efecto inmediatamente

sysctl -p /etc/sysctl.d/kubernetes.conf

La actualización manual anterior tendrá esta excepción, simplemente ignórela, porque un componente no está cargado

sysctl: no se puede stat /proc/sys/net/netfilter/nf_conntrack_max: No existe tal archivo o
directorio

7. Ajuste el área temporal del sistema (omítala si se ha configurado)
y configure la zona horaria del sistema en China/Shanghai

timedatectl set-timezone Asia/Shanghái

Escriba la hora UTC actual en el reloj del hardware

timedatectl set-local-rtc 0

Reiniciar servicios que dependen de la hora del sistema

systemctl reiniciar rsyslog
systemctl reiniciar crond

8. Apague los servicios innecesarios del sistema

systemctl detener postfijo && systemctl deshabilitar postfijo

9. Configure el método de almacenamiento de registros
y cree un directorio para guardar registros

mkdir /var/log/diario

Crear directorio de almacenamiento de archivos de configuración

mkdir /etc/systemd/journald.conf.d

Crear archivo de configuración

cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Diario]
Storage=persistent
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
SystemMaxUse=10G
SystemMaxFileSize=200M
MaxRetentionSec=2week
ForwardToSyslog= sin
FEO

Reiniciar la configuración de systemd journald

systemctl reiniciar systemd-journald

10. Ajuste el número de archivos abiertos (se puede ignorar, no ejecutar)

echo “* nofile suave 65536” >> /etc/security/limits.conf
echo “* nofile duro 65536” >> /etc/security/limits.conf

11. kube-proxy abre las condiciones previas de ipvs

modprobe br_netfilter
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe – ip_vs
modprobe – ip_vs_rr
modprobe – ip_vs_wrr
modprobe – ip_vs_sh
modprobe – nf_conntrack_ipv4
EOF

Use el comando lsmod para ver si estos archivos se inician

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash
/etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e
nf_conntrack_ipv4

3. implementación de docker
1. dependencias de instalación

yum install -y yum-utils mapeador de dispositivos-datos persistentes lvm2

Agregue la fuente del software yum
(configure un almacén estable y la configuración del almacén se mantendrá en el archivo /etc/yum.repos.d/docker-ce.repo) y elija uno de los dos siguientes

administrador de configuración de yum --add-repo https://download.docker.com/linux/centos/docker-ce.repo


yum- config -manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Actualice los paquetes de Docke relacionados instalados por Yum e instale Docker CE

yum actualizar -y && yum instalar ventana acoplable-ce

Probar si la instalación es exitosa

ventana acoplable -v

Ejemplo de solución de falla de descarga de yum
Si hay un problema de falla de descarga, como el siguiente

Error al descargar paquetes:
3:docker-ce-19.03.12-3.el7.x86_64: [Errno 256] No hay más espejos para probar.
containerd.io-1.2.13-3.2.el7.x86_64: [Errno 256] No más espejos para probar

borrar yum caché

ñam limpiar todo

Ejecute el comando anterior para agregar la fuente del software yum para cambiar la fuente
y verificar si la configuración del almacén se modifica para que surta efecto.

vi /etc/yum.repos.d/docker-ce.repo

Vuelva a ejecutar el siguiente comando de descarga de actualización

yum actualizar -y && yum instalar ventana acoplable-ce

2. Configure el archivo daemon de docker
y cree el directorio /etc/docker

mkdir /etc/docker

Actualice el archivo daemon.json + configure el servicio de duplicación de contenedores en la nube de Alibaba

cat > /etc/docker/daemon.json <<EOF
{ “exec-opts”: [“native.cgroupdriver=systemd”], “registry-mirrors”: [“https://tda5gnvq.mirror.aliyuncs.com” ], "controlador de registro": "archivo json", "opciones de registro": {"tamaño máximo": "100 m"} } EOF





Nota: asegúrese de prestar atención al problema de codificación, si hay un error: verifique el comando: journalctl -amu docker para encontrar el error
Cree y almacene el archivo de configuración de docker

mkdir -p /etc/systemd/system/docker.service.d

3. Reinicie el servicio Docker y configure Docker para que se inicie automáticamente al arrancar

systemctl daemon-reload && systemctl reiniciar docker && systemctl habilitar docker

Pruébelo con imágenes acoplables, Nota: si no se inicia, hay un problema con el archivo de configuración

4. kubeadm [instalación de una tecla k8s]
Al instalar kubernetes, debe instalar kubelet, kubeadm y otros paquetes, pero la fuente de yum proporcionada por el sitio web oficial de k8s es
packages.cloud.google.com, a la que no se puede acceder a nivel nacional. En este momento, podemos usar el espejo del almacén yum de Alibaba Cloud

1. Configure la imagen del almacén yum de Alibaba Cloud

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

2. Instale kubeadm, kubelet, kubectl

yum install -y kubeadm-1.15.1 kubelet-1.15.1 kubectl-1.15.1

Configure kubelet para que se inicie automáticamente al arrancar e inicie kubelet

systemctl habilitar kubelet && systemctl iniciar kubelet

2. Instalación del clúster
1. Instalar la imagen básica en cada nodo
Mostrar qué imágenes básicas se requieren para instalar k8s

lista de imágenes de configuración de kubeadm

Cuando kubeadm inicialice el clúster k8s, descargará (extraerá) la imagen correspondiente de la nube gce de Google.
Por supuesto, puede elegir ejecutar docker pull. De acuerdo con la imagen que muestra el comando anterior, la imagen se extrae una por una ,
pero la imagen es relativamente grande y la descarga puede fallar. Por lo tanto, importe el paquete de imágenes descargado al almacén de imágenes de la ventana
acoplable
local inserte la descripción de la imagen aquí
. la imagen

tar -zxvf kubeadm-basic.images.tar.gz

Después de la descompresión, como se muestra en la figura, por supuesto, también puede usar docker load -i xxx.tar para importar las imágenes de los paquetes tar al almacén local uno por uno. 2. Escriba el archivo de script, importe el paquete de inserte la descripción de la imagen aquí
imágenes en el almacén espejo de la ventana acoplable local y
cree un archivo de script sh en cualquier directorio

toque image-load.sh

vi image-load.sh importa el siguiente código de secuencia de comandos
Tenga en cuenta que /root/kubeadm-basic.images es la ubicación del directorio donde se descomprime su imagen local

#!/bin/bash
ls /root/kubeadm-basic.images > /tmp/images-list.txt
cd /root/kubeadm-basic.images
for i in $(cat /tmp/images-list.txt)
do
   docker load -i $i
done
rm -rf /tmp/images-list.txt

Modificar permisos, permisos ejecutables

chmod 755 carga-imagen.sh

Ejecute el archivo de script para iniciar la importación de imágenes

./image-load.sh

Ver la imagen del almacén local

Imágenes de docker

3. Transfiera archivos e imágenes espejo a otros nodos
Nota: Otras máquinas también necesitan instalar el entorno K8S, así que transfiera paquetes tar espejo y archivos de secuencias de comandos a otros nodos
Nota: Ejecute en el host maestro actual y
transfiera al nodo node01

scp -r image-load.sh kubeadm-basic.images root@k8s-node01:/root/

Pasar al nodo node02

scp -r image-load.sh kubeadm-basic.images root@k8s-node02:/root/

Otros nodos ejecutan el script sh a su vez para importar la imagen

./image-load.sh

2. Implemente Kubernetes
Implementación con un solo clic mediante la implementación de archivos yaml
Nota: Los siguientes pasos se pueden ejecutar en el host principal

1. Extraiga el archivo de configuración de recursos yaml

kubeadm config print init-defaults > kubeadm-config.yaml

2. Modifique el archivo de recursos yaml.
Nota: la parte que debe modificarse se muestra en la siguiente figura.

localAPIEndpoint:
		advertiseAddress: 192.168.52.105 # 注意:修改配置文件的IP地址
	kubernetesVersion: v1.15.1 #注意:修改版本号,必须和kubectl版本保持一致
	networking:
	 # 指定flannel模型通信 pod网段地址,此网段和flannel网段一致,不用变
	podSubnet: "10.244.0.0/16"
	serviceSubnet: "10.96.0.0/12"
	#添加如下内容指定使用ipvs网络进行通信,注意缩进
	---
	apiVersion: kubeproxy.config.k8s.io/v1alpha1
	kind: kubeProxyConfiguration
	featureGates:
	SupportIPVSProxyMode: true
	mode: ipvs

3. Inicialice el nodo principal y comience la implementación

kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee
kubeadm-init.log

Nota: Para ejecutar este comando, la cantidad de núcleos de CPU debe ser superior a 1 núcleo, de lo contrario, no se puede ejecutar con éxito.
Después de que el nodo maestro de Kubernetes se haya inicializado con éxito, es el siguiente:
inserte la descripción de la imagen aquí

4. Ejecute los siguientes comandos de acuerdo con el mensaje de K8S
para crear un directorio, guardar el caché de configuración de conexión y autenticar el archivo

mkdir -p $INICIO/.kube

Copie el archivo de configuración de administración del clúster

cp -i /etc/kubernetes/admin.conf $INICIO/.kube/config

Autorizar al perfil

chown ( id − u ) : (id -u):( yo _tu ): (id -g) $INICIO/.kube/config

nodo de nodo de consulta

nodo de obtención de kubectl

Se encuentra que la información del nodo se puede consultar con éxito, pero el estado del nodo es No listo, no en ejecución. El motivo es que usamos ipvs+frannel para la comunicación de red en este momento, pero el complemento de red de franela no se ha implementado, por lo que el estado del nodo es NotReady en este momento.

3. Implemente el complemento de red de franela
De manera similar, extraer espejos externos es lento y propenso a fallar, así que use el espejo de franela descargado localmente y cargue el paquete flannel.tar Nota: tanto los
nodos maestro como los esclavos deben cargar y realizar una importación posterior y etiquetado operan
inserte la descripción de la imagen aquí

Importe el paquete tar del espejo al repositorio espejo local

docker load -i flannel.tar

Etiquete la imagen y genere una nueva imagen de versión v1 en el almacén local

etiqueta acoplable quay-mirror.qiniu.com/coreos/flannel:v0.12.0-amd64 franela:v1

Nota: las imágenes de la ventana acoplable ven máquinas maestras y esclavas
V

Nota: Los siguientes pasos se pueden ejecutar en el host maestro para
pasar el archivo yml local (modificado a la versión flannel:v1)
inserte la descripción de la imagen aquí

franela de despliegue yml

kubectl create -f kube-flannel.yml

Después de que la ejecución sea exitosa, verifique con kubectl get node, es posible que aún esté en el estado NotReady, y llevará algún tiempo verificar si la franela en el pod del sistema que se ha estado ejecutando en kubectl-system se está ejecutando a través de kubectl get pod -n
sistema kube-inserte la descripción de la imagen aquí

Si está en el estado Listo cuando se ve, significa que los componentes de la red se implementaron correctamente.inserte la descripción de la imagen aquí

Apéndice: kubectl get pod -n kube-system explica que
todos los recursos de k8s se implementan a través de la duplicación y el modo de ejecución se refleja a través de los pods. Estos pods son recursos del sistema k8s. Pod -n significa espacio de nombres significa kube- La información del pod debajo del sistema
se puede agregar el espacio de nombres -o wide para ver los detalles del pod

cubectl get pod -n sistema-cubo -o ancho

Apéndice: se encuentra que los pods implementados a través de la franela tienen problemas similares de pendiente e ImagePullBackOff.Consulte
la información de registro detallada de un pod para encontrar la causa del error (generalmente la falla al extraer la imagen)

kubectl describe pod kube-flannel-ds-amd64-jd67h -n kube-system

Si se modificó el archivo kube-flannel.yml, use el siguiente comando para actualizar e implementar

kubectl apply -f kube-flannel.yml

4. Otros nodos se unen
Después de construir el nodo maestro de kubernetes con éxito, se generará un archivo de registro kubeadm-init.log, cuyo contenido se muestra en la siguiente figura: (El
archivo de salida de registro "tee kubeadm-init.log" se especifica en el comando)
únase al nodo maestro y Para otros nodos de trabajo, ejecute el comando en el registro de instalación para
ver el archivo de registro

gato kubeadm-init.log

El comando dado en la parte roja de la figura a continuación es el comando para agregar otros nodosinserte la descripción de la imagen aquí

Simplemente copie el comando a varios otros nodos de nodo para su ejecución (tenga en cuenta que se ejecuta en otros servidores esclavos).
Después de la ejecución, puede verificar kubectl get node en el host maestro
y encontrar que todavía hay nodos en el estado NotReady, porque el Los contenedores de pod de estos nodos todavía están en el estado de inicialización lleva tiempo.Cuando
otros nodos se unen y están en el estado Listo, el clúster K8S se construye correctamente.inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_58360406/article/details/129602443
Recomendado
Clasificación