Implementar clúster K8s

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

Supongo que te gusta

Origin blog.csdn.net/victory0508/article/details/129027047
Recomendado
Clasificación