Se construyen tres nodos en la máquina virtual local, todos operando en Ubuntu. Principalmente para la conveniencia de la autograbación y uso posterior.
Prueba Pro disponible
Inicialice el entorno de compilación e inicialice el nodo maestro, agregue otros nodos al clúster *****
Configure docker y k8s en el nodo maestro y otros nodos, pero el nodo maestro debe inicializarse y agregue complementos de red.
Al principio, debe desactivar el firewall, desactivar el intercambio, desactivar selinux y otras preparaciones.
1: apague el firewall
sudo ufw deshabilite
2: intercambio cercano
sudo swapoff -a #这个只是暂时关闭,重启后失效
sudo vim /etc/fstab #通过修改配置文件,彻底关闭
# 注释掉swapfile这一行
3: Cerrar selinux
sudo vim /etc/selinux/config #通过修改配置文件
SELINUX=disabled
4: Modifique el nombre del host a un nombre reconocido. Puede configurarlo a través de la línea de comando o usted mismo. Opcional
5: Instale algunas herramientas básicas, como: vim, curl, etc.
sudo apt update && \
sudo apt -y upgrade && \
sudo apt install -y vim \
curl \
apt-transport-https \
ca-certificates \
software-properties-common
6: Cambiar el servicio dns provisional, no configure esto por el momento
$ sudo apt install -y unbound
$ sudo systemctl stop systemd-resolved
$ sudo systemctl disable systemd-resolved
$ sudo rm -rf /etc/resolv.conf
$ sudo vim /etc/NetworkManager/NetworkManager.conf
# 在[main]下面添加
dns=unbound
# 重启生效
$ reboot
7: Configure el reenvío de paquetes para no configurar esto temporalmente
sudo vim /etc/sysctl.conf #修改配置文件,往文件中添加东西
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
Hacer que la configuración sea efectiva, pero no válida después de reiniciar
sudo modprobe br_netfilter
sudo sysctl -p
Establecer para cargar automáticamente br_netfilter en el arranque
sudo vim /etc/init.d/load_br_netfilter.sh
#!/bin/bash
### BEGIN INIT INFO
# Provides: svnd.sh
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the svnd.sh daemon
# Description: starts svnd.sh using start-stop-daemon
### END INIT INFO
sudo modprobe br_netfilter
sudo chmod 775 /etc/init.d/load_br_netfilter.sh
sudo update-rc.d load_br_netfilter.sh defaults 90
Si desea cancelar el arranque, cargue automáticamente el módulo
$ sudo update-rc.d -f load_br_netfilter.sh remove
El primer paso: primero instale docker
1: primero desinstale la versión anterior que pueda existir
sudo apt-get remove docker docker-engine docker-ce docker.io
2: Actualice el índice del paquete apt:
sudo apt-get update
3: Instale los siguientes paquetes para que apt pueda usar el repositorio a través de HTTPS
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
4: Agregue la clave oficial Docker GPG:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
5: Use el siguiente comando para configurar el repositorio estable:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
6: Actualice el índice del paquete apt:
sudo apt-get update
7: Lista de versiones disponibles:
apt-cache madison docker-ce
8: Instalar la versión especificada
sudo apt-get install docker-ce=18.06.3~ce~3-0~ubuntu
9: compruebe si se inicia el estado de la ventana acoplable
systemctl status docker
Si no comenzó, comience
sudo systemctl start docker
Stop docker
sudo systemctl stop docker
Configurar Docker para que se inicie automáticamente
systemctl enable docker.service
10: Verifique que sea normal
sudo docker run hello-world
Paso 2: compila el entorno
1 de k8s : configura el origen
sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF
Actualizar índice
$ sudo apt update
Ver versiones disponibles
apt-cache madison kubeadm
2: Instalar la versión especificada
sudo apt install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
sudo apt-mark hold kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
3: configura el arranque para que se inicie automáticamente
sudo systemctl enable kubelet && sudo systemctl start kubelet
4: Inicializar el nodo maestro
Esto puede ser usado
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.15.0 --pod-network-cidr=10.244.0.0/16
Si no, prueba esto
kubeadm init --kubernetes-version=1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
5: Regenere la información del token, que generalmente se ejecuta cuando necesita caducar después de 12 horas.
kubeadm token create --print-join-command
6: Instale el complemento de red de franela CNI: si no instala el complemento de red, el estado del nodo maestro es NoReady.
Antes de instalar el complemento de red, debe configurarlo, de lo contrario informará: La conexión al servidor localhost: 8080 fue rechazada
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Si no se realiza esta operación, los nodos de obtención de kubectl también informarán un error
Esto puede ser usado
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
Si no puede usarlo, intente esto
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Hasta ahora, el entorno k8s se ha configurado básicamente y el nodo maestro también se ha inicializado. El siguiente paso es dejar que otros nodos se unan al clúster.
Después de reiniciar el nodo, asegúrese de cerrar el intercambio, ejecutar el comando de reinicio y luego ir al clúster de unión.
7: Ejecute el comando de token generado por el nodo maestro en otros nodos.
Cabe señalar aquí: además del nodo maestro necesita instalar docker y kubectl, kubeadm, kubelet. También deben instalarse otros nodos, y deben instalarse de la misma manera.
Por ejemplo: ejecutar esto en otros nodos
kubeadm join 192.168.172.134:6443 --token 1ly6ta.omqv3bkurfomxw0j --discovery-token-ca-cert-hash sha256:d65642726224dfdf52ccd8af1e9fc1ca30ad201e4b03a14ebd327d7f60abf1c8
8: el nodo que se unió al clúster antes, si desea volver a unirse al clúster más adelante, debe ejecutar el
kubeadm reset
comando; de lo contrario, obtendrá un error
Nota: recuerde algunos errores y soluciones comunes. Si informa un error, debe aprender a leer el error informado por la consola. ! ! ! !
1) El estado del nodo recién agregado es NotReady, la solución es:
reiniciar el daemon, docker y kuberlet de cada nodo de nodo
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
Última ejecución
kubeadm reset
Finalmente, ¡únete al clúster
para resolver!
2) k8s elimina un nodo
kubectl delete node nodename
De hecho, este comando es universal y puede eliminar cualquier tipo.
kubectl delete type typename
tipo es el tipo de recurso, que puede ser nodo, pod, rs, rc, implementación, servicio, etc. typename es el nombre de este recurso.
Nota: No importa qué nodo esté en el futuro, siempre que se reinicie, el maestro irá a ver si el estado de docker y kubelet es normal, y ejecutará kubectl get nodos para
mostrar la información del nodo. Otros nodos van a ver si la ventana acoplable es normal. En segundo lugar, si hay un problema, si desea volver a unirse al clúster, primero debe reiniciar: kubeadm reset
En Ubuntu, algunas operaciones comúnmente utilizadas para modificar el archivo de configuración a través del terminal:
1: Use el comando vim para ingresar un archivo de configuración, es decir, insertar. Si desea guardar y salir, esc, luego: wq, guardar y salir.
2: Establecer chino, hora, sin pantalla de bloqueo, todo en la configuración.
Implemente una aplicación simple en el clúster ****** Implementación simple
de nigx
1:creeuna implementación en el nodo maestro
kubectl create deployment nginx --image=nginx
Vista
kubectl get deployments
2: crear un servicio
kubectl create service nodeport nginx --tcp 80:80
Vista
kubectl get svc
3: Ejecute el siguiente comando en el nodo esclavo para verificar si nginx se implementa correctamente.
curl localhost:30601
# El número de puerto aquí depende del número de puerto real después de su implementación
O
curl kube-slave:30601
# aquí kube-slave es el nombre de host del nodo, que es lo que node1, node2 ...
Abra el navegador e ingrese: localhost: número de puerto o nombre de host del nodo: número de puerto para acceder a la página nigx normalmente.