Directorio de artículos
- Instalación e implementación de la arquitectura maestra única de k8s
-
- Preparación ambiental
- Declaración Ambiental
- Arquitectura de clúster
- 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.
- 2. Apague el firewall y selinux en todos los nodos.
- 3. Modifique el archivo /etc/hosts y acceda entre sí a través de nombres de host.
- 4. Todos los nodos establecen canales libres de secretos entre sí.
- 5. Desactive la partición de intercambio para mejorar el rendimiento
- Cerrar la partición de intercambio permanentemente
- 6. Modificar los parámetros del kernel de la máquina
- 7. Configure la fuente del repositorio de Alibaba Cloud
- 8. Instale todos los paquetes de dependencia requeridos por el clúster.
- 9. Configure la fuente del repositorio de Alibaba Cloud necesaria para instalar los componentes de k8s
- 10. Configurar la sincronización horaria
- 2. Instale el servicio Docker (opere en los tres hosts k8)
- 3. Instale los paquetes de software necesarios para inicializar k8s (opere en los tres hosts k8s)
- 4. Importe paquetes de imágenes sin conexión para acelerar la extracción de imágenes posteriores
- 5. Kubeadm inicializa el clúster k8s (solo se hace en el maestro)
-
- 1. Genere el archivo kubeadm.yaml
- 2. Modifique la configuración relevante del archivo kubeadm.yaml.
- 3. Inicialice k8s según el archivo kubeadm.yaml
- 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.
- 6. Expansión del clúster k8s: agregue dos nodos de trabajo
- 7. Instale los componentes de red de Kubernetes: Calico (hecho en el maestro)
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
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
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
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
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
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!