- Descripción general
El viejo dicho es bueno: estudia mucho, mejora, déjate saber más que los demás y comprende más a los demás.
Más cerca de casa, hablamos de Docker antes. A medida que el negocio continúa expandiéndose, los contenedores de Docker continúan aumentando y las máquinas físicas continúan aumentando. En este momento, encontraremos que iniciar sesión en cada máquina para operar Docker manualmente es una tarea muy problemática. cosa.
En este momento, necesitamos una herramienta útil para administrar Docker, que nos ayude a crear, ejecutar, ajustar y destruir estos contenedores, que nos ayude a monitorear qué contenedor está inactivo y luego reiniciarlo, etc.
Kubernetes (k8s) es una buena opción. Hoy hablaremos sobre cómo se construye Kubernetes (k8s).
- Descripción del escenario
IP del servidor A: 192.168.1.12
IP del servidor B: 192.168.1.11
IP del servidor C: 192.168.1.15
Nombre de host del servidor A: zhuifengren2
Nombre de host del servidor B: zhuifengren3
Nombre de host del servidor C: zhuifengren4
Preparar tres servidores con sistema operativo CentOS7.
Docker se ha instalado en los tres servidores. Para obtener información sobre la instalación de Docker, consulte mi otro artículo "Comenzando con Docker" (Comenzando con el blog-CSDN de Docker_Wind Chaser).
El servidor A actúa como nodo maestro y el servidor B y el servidor C actúan como nodos de datos.
- Instalación de Kubernetes (k8s) (CentOS7)
3.1 dirección del sitio web oficial
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
3.2 Requisitos de configuración del servidor
Memoria al menos 2G
CPU al menos 2 núcleos
Disco duro de al menos 20G
3.3 Apagar SELinux
método uno:
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permisivo/' /etc/selinux/config
Método 2:
vim/etc/sysconfig/selinux
SELINUX=aplicar cambió a SELINUX=deshabilitado
Reiniciar el servidor
3.4 Establecer enrutamiento
gato <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
gato <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --sistema
3.5 Cerrar el sistema Swap
intercambio -a
nosotros /etc/fstab
Comentar el montaje automático de SWAP.
vi /etc/sysctl.d/k8s.conf
Agregue la siguiente línea:
vm.swappiness=0
sysctl -p /etc/sysctl.d/k8s.conf
3.6 Instalar e iniciar Kubernetes (K8)
gato < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
nombre=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enable=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com /kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
excluir=kube*
EOF
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl habilitar kubelet
systemctl reiniciar kubelet
Los pasos 3.3 a 3.6 se ejecutan en los tres servidores.
- Creación de clústeres de Kubernetes (k8s) (CentOS7)
4.1 Modificar la configuración de Docker
gato > /etc/docker/daemon.json <<EOF
{ “exec-opts”: [“native.cgroupdriver=systemd”], “log-driver”: “json-file”, “log-opts”: { “max-size”: “100 m” }, “almacenamiento- driver”: “overlay2”, “storage-opts”: [ “overlay2.override_kernel_check=true” ], “data-root”: “/data/docker” } EOF
recarga-demonio systemctl
systemctl reiniciar la ventana acoplable
4.2 Ver la imagen requerida
Lista de imágenes de configuración de kubeadmk8s.gcr.io/kube-apiserver:v1.22.3
k8s.gcr.io/kube-controller-manager:v1.22.3
k8s.gcr.io/kube-scheduler:v1.22.3
k8s.gcr.io/kube-proxy:v1.22.3
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4
4.3 Extraer imágenes de fuentes nacionales
Dado que no se puede acceder a k8s.cgr.io, primero debemos usar la fuente espejo nacional para bajarlo y luego cambiar la etiqueta.
Ejecute el siguiente script:
#/bin/bash
docker pull registro.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.22.3
docker pull registro.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager : v1.22.3
registro de extracción de Docker.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.22.3 registro de
extracción de Docker.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.22.3
registro de extracción de Docker. cn -hangzhou.aliyuncs.com/google_containers/pause:3.5
registro de extracción de docker.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.0-0
registro de extracción de docker.cn-hangzhou.aliyuncs.com/google_containers/coredns: v1 .8.4
docker pull quay.io/coreos/flannel:v0.15.1-amd64
registro de etiquetas acoplables.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.22.3 k8s.gcr.io/kube-apiserver:v1.22.3
registro de etiquetas acoplables.cn-hangzhou.aliyuncs.com/google_containers/kube- manager-manager:v1.22.3 k8s.gcr.io/kube-controller-manager:v1.22.3
registro de etiquetas acoplables.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.22.3 k8s.gcr.io/kube -scheduler:v1.22.3
registro de etiquetas acoplables.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.22.3 k8s.gcr.io/kube-proxy:v1.22.3
registro de etiquetas acoplables.cn-hangzhou.aliyuncs. com/google_containers/pause:3.5 k8s.gcr.io/pause:3.5
registro de etiquetas acoplables.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.0-0 k8s.gcr.io/etcd:3.5.0-0
registro de etiquetas acoplables.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4 k8s.gcr.io/coredns/coredns:v1.8.4
docker rmi registro.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.22.3
docker rmi registro.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.22.3
docker rmi registro.cn- hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.22.3
docker rmi registrate.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.22.3
docker rmi regist.cn-hangzhou.aliyuncs.com/google_containers/ pausa: 3.5
registro rmi de docker.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.0-0
registro rmi de docker.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4
Los pasos de 4.1 4.2 4.3 deben ejecutarse en los tres servidores.
4.4 Inicializar el clúster
Ejecutado en el nodo maestro.
kubeadm init --apiserver-advertise-address=192.168.1.12 --pod-network-cidr=10.244.0.0/16
Entre ellos, 192.168.1.12 es la dirección IP del nodo maestro, que puede modificarse según la situación real.
4.5 Obtenga “http://localhost:10248/healthz”: marque tcp [::1]:10248: conectar: conexión rechazada
Al inicializar el clúster, si se informa el error anterior, siga los pasos a continuación en el nodo maestro:
vi /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
Ejemplo:
Environment=“KUBELET_SYSTEM_PODS_ARGS=–pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --fail-swap-on=false”
cat > /var/lib/kubelet/config.yaml <<EOF
apiVersion: kubelet.config.k8s.io/v1beta1
tipo: KubeletConfiguration
cgroupDriver: systemd
EOF
recarga-demonio systemctl
systemctl reiniciar kubelet
reinicio de kubeadm -f
4.6 Ejecutar el comando de inicialización del clúster nuevamente
Ejecutado en el nodo maestro.
kubeadm init --apiserver-advertise-address=192.168.1.12 --pod-network-cidr=10.244.0.0/16
Aparece el siguiente mensaje, que indica que la inicialización se realizó correctamente: ¡
Su plano de control de Kubernetes se ha inicializado correctamente!
Para comenzar a usar su clúster, debe ejecutar lo siguiente como usuario normal:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown ( id − u ) : (id -u):( yo _−tú ): (id -g) $HOME/.kube/config
Alternativamente, si es usuario root, puede ejecutar:
exportar KUBECONFIG=/etc/kubernetes/admin.conf
Ahora deberías implementar una red de pods en el clúster.
Ejecute "kubectl apply -f [podnetwork].yaml" con una de las opciones enumeradas en:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Luego puede unirse a cualquier número de nodos trabajadores ejecutando lo siguiente en cada uno como raíz:
kubeadm Únete 192.168.1.12:6443--token x0u0ou.q6271pyjm7cv5hxl
-discovery-token-co-cert-hash un
4.7 Según la información del paso anterior, exporte el archivo de configuración y configure la red
exportar KUBECONFIG=/etc/kubernetes/admin.conf
Aquí usamos la red de franela.
kubectl aplicar -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
En este punto, el nodo maestro está completo.
4.8 Según la información del paso 4.6, agregue dos nodos de datos al clúster
En el servidor B y el servidor C, ejecute los siguientes comandos (de la información del paso 4.6):
kubeadm unirse 192.168.1.12:6443 --token x0u0ou.q6271pyjm7cv5hxl \
–discovery-token-ca-cert-hash sha256:907ffb03d73f7668b96024c328880f95f4249e98da1be44d1caeb01dd62173da
Si la ejecución no tiene éxito o el nodo de datos siempre está en el estado NotReady, consulte el paso 4.5 para modificar la configuración.
4.9 En el nodo maestro, ver información del clúster
kubectl obtener nodo
Si el estado es Listo, el clúster de Kubernetes (K8s) se creó correctamente.
- Resumen
Hoy hablé sobre cómo usar fuentes de imágenes domésticas para construir un clúster de Kubernetes (k8s), espero que pueda ser útil para el trabajo de todos.
v1.21.0
#/bin/bash
registro de extracción de docker.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.0
registro de extracción de docker.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1 .21.0
registro de extracción de Docker.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.0
registro de extracción de Docker.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.0 registro de extracción de
Docker.cn- hangzhou.aliyuncs.com/google_containers/pause:3.4.1
registro de extracción de docker.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
registro de extracción de docker.cn-hangzhou.aliyuncs.com/google_containers/coredns: v1.8.0
docker pull quay.io/coreos/flannel:v0.15.1-amd64
registro de etiquetas acoplables.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.0 k8s.gcr.io/kube-apiserver:v1.21.0
registro de etiquetas acoplables.cn-hangzhou.aliyuncs.com/google_containers/kube- manager-manager:v1.21.0 k8s.gcr.io/kube-controller-manager:v1.21.0
registro de etiquetas acoplables.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.0 k8s.gcr.io/kube -scheduler:v1.21.0
registro de etiquetas acoplables.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.0 k8s.gcr.io/kube-proxy:v1.21.0 registro
de etiquetas acoplables.cn-hangzhou.aliyuncs. com/google_containers/pause:3.4.1 k8s.gcr.io/pause:3.4.1
registro de etiquetas acoplables.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4 .13-0
registro de etiquetas acoplables.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0
docker rmi registro.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.0
docker rmi registro.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.0
docker rmi registro.cn- hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.0
docker rmi registro.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.0
docker rmi regist.cn-hangzhou.aliyuncs.com/google_containers/ pausa: 3.4.1
registro de docker rmi.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
registro de docker rmi.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0