Notas de estudio de k8s (1): implementación de la arquitectura de maestro único de k8s

Directorio de artículos

Instalación e implementación de la arquitectura maestra única de k8s

Preparación ambiental

3 nuevos sistemas centos7.9, CPU de 4 núcleos, memoria 2G y disco 200G

Declaración Ambiental

  • podSubnet (segmento de red pod) 10.244.0.0/16
  • serviceSubnet (segmento de red de servicio): 10.96.0.0/16
  • Segmento de red de máquinas físicas: 192.168.31.0/24

Arquitectura de clúster

Rol del clúster K8S IP nombre de la CPU Instalar componentes
nodo de control 192.168.31.180 k8s-maestro apiserver, administrador de control, programador, etcd, kube-proxy, docker, calico
Nodo de trabajo 192.168.31.181 k8s-nodo-1 kublet, kube-proxy, docker, calico, coredns
Nodo de trabajo 192.168.31.182 k8s-nodo-2 kublet, kube-proxy, docker, calico, coredns

Pasos de instalación

1. Inicialice e instale el entorno experimental del clúster k8s (se deben operar tres k8, por conveniencia, solo registré el funcionamiento de uno)

1. Configure la IP y el nombre del host según la arquitectura del clúster.

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static 
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.31.180
PREFIX=24
GATEWAY=192.168.31.1
DNS1=114.114.114.114
[root@localhost ~]# hostnamectl set-hostname k8s-master
[root@localhost ~]# su
[root@k8s-master ~]#

La configuración de las otras dos máquinas es similar: configure la IP y el nombre de host de acuerdo con la arquitectura del clúster.

2. Apague el firewall y selinux en todos los nodos.

[root@k8s-master ~]# service firewalld stop #临时关闭防火墙
Redirecting to /bin/systemctl stop firewalld.service
[root@k8s-master ~]# systemctl disable firewalld #永久关闭防火墙
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@k8s-master ~]# setenforce 0 #临时关闭selinux
[root@k8s-master ~]# getenforce 
Permissive
[root@k8s-master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  #永久关闭selinux

Función: evitar que se bloquee la comunicación entre los hosts del clúster k8s

Las otras dos máquinas funcionan igual.

3. Modifique el archivo /etc/hosts y acceda entre sí a través de nombres de host.

Todas las operaciones de nodo

[root@k8s-master ~]# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.180 k8s-master
192.168.31.181 k8s-node-1
192.168.31.182 k8s-node-2

4. Todos los nodos establecen canales libres de secretos entre sí.

k8s-maestro

[root@k8s-master ~]# ssh-keygen
[root@k8s-master ~]# ssh-copy-id k8s-node-1
[root@k8s-master ~]# ssh-copy-id k8s-node-2

k8s-nodo-1

[root@k8s-node-1 ~]# ssh-keygen
[root@k8s-node-1 ~]# ssh-copy-id k8s-master
[root@k8s-node-1 ~]# ssh-copy-id k8s-node-2

k8s-nodo-2

[root@k8s-node-2 ~]# ssh-keygen
[root@k8s-node-2 ~]# ssh-copy-id k8s-master
[root@k8s-node-2 ~]# ssh-copy-id k8s-node-1

5. Desactive la partición de intercambio para mejorar el rendimiento

hacer los tres

[root@k8s-master ~]# swapoff -a

Función: use la memoria tanto como sea posible, no use particiones de intercambio de disco y mejore el rendimiento.
Para mejorar el rendimiento cuando se diseñó k8s, el uso de particiones de intercambio no está permitido de forma predeterminada . Cuando se inicializa Kubeadm, detectará si el intercambio está cerrado, si no está cerrado, la inicialización fallará . Si no desea desactivar la partición de intercambio, puede especificar –ignore-preflight-errors=Swap al instalar k8s para resolver el problema.

Cerrar la partición de intercambio permanentemente

[root@k8s-master ~]# vim /etc/fstab

Insertar descripción de la imagen aquí

6. Modificar los parámetros del kernel de la máquina

hacer los tres

[root@k8s-master ~]# modprobe br_netfilter            #可以解决 sysctl -p /etc/sysctl.d/k8s.conf出现报错:
[root@k8s-master ~]# echo "modprobe br_netfilter" >> /etc/profile               #设置开机启动
[root@k8s-master ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> EOF
[root@k8s-master ~]# sysctl -p /etc/sysctl.d/k8s.conf                   #从指定的文件加载系统参数

7. Configure la fuente del repositorio de Alibaba Cloud

[root@k8s-master ~]# yum install -y yum-utils
[root@k8s-master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

La configuración de la fuente de imagen de la ventana acoplable doméstica hará que la extracción de imágenes posteriores sea mucho más rápida.

8. Instale todos los paquetes de dependencia requeridos por el clúster.

[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet ipvsadm

9. Configure la fuente del repositorio de Alibaba Cloud necesaria para instalar los componentes de k8s

[root@k8s-master ~]# vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

10. Configurar la sincronización horaria

Instalar el comando ntpdate

[root@k8s-master ~]# yum install -y ntpdate

Sincronizar la hora de la red

[root@k8s-master ~]# ntpdate cn.pool.ntp.org

Haga de la sincronización horaria una tarea programada

[root@k8s-master ~]# crontab -e

* */1 * * * /usr/sbin/ntpdate   cn.pool.ntp.org

Reinicie el servicio crond

[root@k8s-master ~]# service crond restart

2. Instale el servicio Docker (opere en los tres hosts k8)

1.Instalar Docker-ce

instalar la ventana acoplable

[root@k8s-master ~]# yum install docker-ce-20.10.6 -y

Inicio automático+Inicio automático al arrancar

[root@k8s-master ~]# systemctl start docker && systemctl enable docker.service

2. Configurar el controlador y el acelerador de imágenes de Docker

Agregar acelerador de imagen
[root@k8s-master ~]# vim /etc/docker/daemon.json

{
 "registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

Modifique el controlador del archivo Docker a systemd. El valor predeterminado es cgroupfs. Kubelet usa systemd de forma predeterminada. Los dos deben ser consistentes .

Actualice systemd y reinicie Docker
[root@k8s-master ~]# systemctl daemon-reload  && systemctl restart docker
Verificar el estado de ejecución de la ventana acoplable
[root@k8s-master ~]# systemctl status docker

Insertar descripción de la imagen aquí

3. Instale los paquetes de software necesarios para inicializar k8s (opere en los tres hosts k8s)

1. Instale kubeadm, kubelet, kubectl

[root@k8s-master ~]# yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6

2. Inicie kubelet automáticamente después de iniciar

[root@k8s-master ~]# systemctl enable kubelet
software efecto
Kubeadm kubeadm es una herramienta utilizada para inicializar clústeres k8s
kubelet Instalado en todos los nodos del clúster y utilizado para iniciar Pods
Kubectl A través de kubectl, puede implementar y administrar aplicaciones, ver varios recursos, crear, eliminar y actualizar varios componentes.

4. Importe paquetes de imágenes sin conexión para acelerar la extracción de imágenes posteriores

1. Cargue el paquete de imágenes sin conexión necesario para inicializar el clúster k8s en tres hosts k8s

El paquete de compresión de imágenes se carga en el directorio de inicio del host k8s a través de xftp.

[root@k8s-master ~]# ls
anaconda-ks.cfg  k8simage-1-20-6.tar.gz

scp a otros dos hosts

[root@k8s-master ~]# scp k8simage-1-20-6.tar.gz 192.168.31.181:/root
[root@k8s-master ~]# scp k8simage-1-20-6.tar.gz 192.168.31.182:/root

2.docker cargar imagen de importación

[root@k8s-master ~]# docker load -i k8simage-1-20-6.tar.gz

5. Kubeadm inicializa el clúster k8s (solo se hace en el maestro)

1. Genere el archivo kubeadm.yaml

[root@k8s-master ~]# kubeadm config print init-defaults > kubeadm.yaml

2. Modifique la configuración relevante del archivo kubeadm.yaml.

[root@k8s-master ~]# vim kubeadm.yaml 

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.31.180
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

Insertar descripción de la imagen aquí

Recordatorio especial : –repositorio de imágenes registro.aliyuncs.com/google_containers Para asegurarse de que la imagen extraída no se extraiga de sitios extranjeros, especifique manualmente la dirección del almacén como registro.aliyuncs.com/google_containers. kubeadm extrae imágenes de k8s.gcr.io de forma predeterminada. Hemos importado imágenes sin conexión localmente, por lo que las imágenes locales se utilizarán primero.

mode: ipvs indica que el modo proxy kube-proxy es ipvs. Si no se especifica ipvs, se utilizará iptables de forma predeterminada. Sin embargo, iptables es ineficiente, por lo que se recomienda habilitar ipvs en nuestro entorno de producción.

3. Inicialice k8s según el archivo kubeadm.yaml

[root@k8s-master ~]# kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

Insertar descripción de la imagen aquí

4. Configurar el archivo de configuración de kubectl equivale a autorizar a kubectl para que el comando kubectl pueda usar este certificado para administrar el clúster k8s.

[root@k8s-master ~]#   mkdir -p $HOME/.kube
[root@k8s-master ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]#   sudo chown $(id -u):$(id -g) $HOME/.kube/config

Ver información del nodo

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE    VERSION
k8s-master   NotReady   control-plane,master   177m   v1.20.6

Se descubrió que solo hay un maestro, porque los otros dos nodos aún no se han unido al maestro.

6. Expansión del clúster k8s: agregue dos nodos de trabajo

Verifique el comando para unirse al nodo en el maestro

[root@k8s-master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.31.180:6443 --token bnokqt.324m0mxrhv7z7je3     --discovery-token-ca-cert-hash sha256:7013fd8145494ded4993d3d1d96cde925fe06e14c953841fcdb85fd33a315298

Unirse al nodo nodo1

[root@k8s-node-1 ~]# kubeadm join 192.168.31.180:6443 --token abcdef.0123456789abcdef     --discovery-token-ca-cert-hash sha256:7013fd8145494ded4993d3d1d96cde925fe06e14c953841fcdb85fd33a315298

Unirse al nodo nodo2

[root@k8s-node-2 ~]# kubeadm join 192.168.31.180:6443 --token abcdef.0123456789abcdef     --discovery-token-ca-cert-hash sha256:7013fd8145494ded4993d3d1d96cde925fe06e14c953841fcdb85fd33a315298

Ver información del nodo en el maestro

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE     VERSION
k8s-master   NotReady   control-plane,master   3h4m    v1.20.6
k8s-node-1   NotReady   <none>                 5m4s    v1.20.6
k8s-node-2   NotReady   <none>                 4m55s   v1.20.6

¡Únase con éxito!

Puedes convertir los ROLES de k8s-node-1 y k8s-node-2 en trabajo

[root@k8s-master ~]# kubectl label node k8s-node-1 node-role.kubernetes.io/worker=worke
node/k8s-node-1 labeled
[root@k8s-master ~]# kubectl label node k8s-node-2 node-role.kubernetes.io/worker=worke
node/k8s-node-2 labeled
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE     VERSION
k8s-master   NotReady   control-plane,master   3h10m   v1.20.6
k8s-node-1   NotReady   worker                 10m     v1.20.6
k8s-node-2   NotReady   worker                 10m     v1.20.6

7. Instale los componentes de red de Kubernetes: Calico (hecho en el maestro)

1. Sube el archivo calico.yaml a tu directorio de inicio.

[root@k8s-master ~]# ls
anaconda-ks.cfg  calico.yaml  k8simage-1-20-6.tar.gz  kubeadm.yaml

Archivo 2.yaml para instalar el complemento de red calico

[root@k8s-master ~]# kubectl apply -f  calico.yaml

3. Verifique el estado del nodo

[root@k8s-master ~]# kubectl get node
NAME         STATUS   ROLES                  AGE     VERSION
k8s-master   Ready    control-plane,master   3h16m   v1.20.6
k8s-node-1   Ready    worker                 16m     v1.20.6
k8s-node-2   Ready    worker                 16m     v1.20.6

Insertar descripción de la imagen aquí

Se descubre que el estado ha cambiado al estado listo. ¡Felicitaciones, la arquitectura de un maestro y dos esclavos del k8 se ha construido con éxito!

Supongo que te gusta

Origin blog.csdn.net/qq_57629230/article/details/131314823
Recomendado
Clasificación