1. Dos formas de implementar k8s
Actualmente, hay dos formas principales de implementar clústeres de Kubernetes en producción:
kubeadm
Kubeadm es una herramienta de implementación de K8s que proporciona kubeadm init y kubeadm join para una implementación rápida de clústeres de Kubernetes.
paquete binario
Descargue el paquete binario de la distribución de github e implemente manualmente cada componente para formar un clúster de Kubernetes.
Este experimento usa kubeadm para crear un clúster.
2. Entorno de implementación
NOMBRE |
IP |
IMAGEN DEL SO |
VERSIÓN |
VERSIÓN DOCKER |
VERSIÓN CALICO |
maestro |
192.168.0.220 |
el7.x86_64 |
v1.23.0 |
23.0.1 |
v3.9.0 |
nodo01 |
192.168.0.6 |
el7.x86_64 |
v1.23.0 |
23.0.1 |
v3.9.0 |
3. Configuración inicial
modificar nombre de host
Modificar el archivo de hosts
desactivar el cortafuegos
cerrar selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
Cierre la partición de intercambio, luego reinicie
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
Sincroniza la hora de cada nodo
#安装ntpdate
yum -y install ntpdate
运行命令:crontab -l
添加:0 */1 * * * ntpdate time1.aliyun.com
Agregar filtrado de puente
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
Cargue el módulo br_netfilter
modprobe br_netfilter
#查看
lsmod | grep br_netfilter
Cargue el archivo de configuración del filtro del puente
sysctl -p /etc/sysctl.d/k8s.conf
abierto ipvs
#安装ipset及ipvsadm
yum -y install ipset ipvsadm
#创建sysconfig/modules文件夹
mkdir -p /etc/sysconfig/modules/
#操作如下命令
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
#授权、运行、检查是否加载
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
4. Implemente el clúster de Kubernetes
Instale Docker, kubeadm, kubelet [todos los nodos]
Instalar ventana acoplable:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docke
Configure el acelerador de descargas espejo:
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl restart docker
docker info #查看docker信息,进行确认
Agregar fuentes de software de Alibaba Cloud:
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
Instale kubeadm, kubelet, kubectl:
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet
Solo configure kubelet para que se inicie (la inicialización posterior del clúster iniciará kubelet)
#查看kubelet状态
systemctl status kubelet
#设置kubelet开机启动
systemctl enable kubelet
Visualiza las imágenes requeridas por el clúster k8s y descárgalas con anticipación
kubeadm config images list
Implementar k8s-master [ejecución maestra]
implementación de kubeadm
kubeadm init \
--apiserver-advertise-address=192.168.0.220 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
Nota: --apiserver-advertise-address Dirección de anuncio de clúster
--image-repository Debido a que no se puede acceder a la dirección de imagen de extracción predeterminada k8s.gcr.io en China, especifique aquí la dirección del repositorio de imágenes de Alibaba Cloud
--kubernetes-version Versión K8s, consistente con la instalada arriba
--red virtual interna del clúster service-cidr, entrada de acceso unificado de pod
--pod-network-cidr Red de pod, consistente con el componente de red CNI yaml implementado a continuación
Copie la salida del comando kubeadm join anterior
kubeadm join 192.168.0.220:6443 --token v4cfxg.nopu749nz57alzwo \
--discovery-token-ca-cert-hash sha256:56ab22922d19aa6e77b7b046fa82ad1b8a3ed90323ab9e5eacae1008b2a9deb4
Copie el archivo de autenticación k8s
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
Ver nodos de trabajo:
kubectl get nodes
Nota: Dado que el complemento de red no se ha implementado, aún no está listo. No está listo, continúe funcionando.
Instale el complemento de red Calico [ejecución maestra]
Descargue el archivo calico.yaml del complemento de red y ejecute:
wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml
vim calico.yaml
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16" #与前面kubeadm init的 --pod-network-cidr指定的一样
- name: IP_AUTODETECTION_METHOD
value: "interface=eth0" #IP 220那个网卡
kubectl apply -f calico.yaml
Nota:
问题:alico/node no está listo: BIRD no está listo: BGP no establecido con 192.168.0.220
La razón es que el nodo maestro tiene más tarjetas de red y Calico elige la tarjeta de red incorrecta.
Modifique calico.yaml y especifique el nombre correcto de la tarjeta de red.
La dirección ifconfig 220 se encuentra en eth0
aumento en env aumento:
– nombre: IP_AUTODETECTION_METHOD
valor: "interfaz=eth0"
kubectl get pods -n kube-system
Después de que Calico Pods se esté ejecutando, los nodos estarán listos
kubectl describe pods calico-node-dghzw -n kube-system
Recuerde: agregue el archivo daemon.json de docker: "exec-opts": ["native.cgroupdriver=systemd"]
Verifique que la instalación del nodo maestro sea normal
#查看每个容器运行状态(仅且显示STATUS:Running 、 READY:1/1 状态,表示集群安装成功)
kubectl get pod -n kube-system
#通过如下命令定位问题(一般情况为镜像拉取失败)
kubectl describe pod 容器名 -n kube-system 或 kubectl logs 容器名 -n kube-system
Configure el nodo de nodo de k8s [operación de nodo de nodo]
Para agregar un nuevo nodo al clúster, ejecute la salida del comando kubeadm join en kubeadm init
kubeadm join 192.168.0.220:6443 --token v4cfxg.nopu749nz57alzwo \
--discovery-token-ca-cert-hash sha256:56ab22922d19aa6e77b7b046fa82ad1b8a3ed90323ab9e5eacae1008b2a9deb4
El token predeterminado es válido durante 24 horas y, cuando caduca, el token ya no está disponible. En este momento, se debe volver a crear el token, que se puede generar directamente con el comando:
crear token kubeadm --print-join-command
5. Panel de implementación
Dashboard es una interfaz de usuario oficial que se puede usar para la gestión básica de los recursos de K8.
Dirección de descarga YAML:
https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
De forma predeterminada, solo se puede acceder al Dashboard dentro del clúster.Modifique el tipo Service to NodePort y expóngalo al exterior:
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30001 --增加
selector:
k8s-app: kubernetes-dashboard
type: NodePort --增加
implementar:
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard
Dirección de acceso: https://NodeIP:30001
Se requiere un token, para el cual se debe crear una cuenta de servicio y vincularla a la función de clúster de administrador de clúster predeterminada:
# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
Use el token de salida para iniciar sesión en Dashboard.
6. Verifique que todo el clúster se haya instalado correctamente [maestro]
#查看集群节点以及节点状态是否就绪,Ready为就绪
kubectl get node
#查看每个容器运行状态(仅且显示STATUS:Running 、 READY:1/1 状态,表示容器正常运行,当所有容器正常运行时节点转为就绪状态)
kubectl get pod -n kube-system -owide
#通过如下命令定位问题(一般情况为镜像拉取失败)
kubectl describe pod 容器名 -n kube-system
或 kubectl logs 容器名 -n kube-system