Kubeadm instala cluster K8s1.26

Kubeadm instala cluster K8s1.26

introdução básica

O cluster k8s 1.26.4 é instalado na máquina Centos7.9 com base em Kubeadm, o CRI usa containerd, o CNI usa Calico e as regras de roteamento usam ipvs. As etapas específicas serão explicadas em princípio e se concentrarão na consideração de aplicativos de cluster de nível empresarial. Espero que este artigo possa ajudar os leitores a dominar os princípios básicos do Kubeadm instalando k8s.

Introdução ao ambiente

nome da maquina ip versão do sistema kernel do sistema arquitetura da CPU
m1 10.11.81.152 CentOS Linux versão 7.9 5.4.242-1.el7 x86
w1 10.11.81.153 CentOS Linux versão 7.9 5.4.242-1.el7 x86
w2 10.11.81.154 CentOS Linux versão 7.9 5.4.242-1.el7 x86
w3 10.11.81.155 CentOS Linux versão 7.9 5.4.242-1.el7 x86

1. Inicialize o ambiente básico

1.1 Certifique-se de que o ip entre cada máquina pode acessar um ao outro

cat /etc/hosts
10.11.81.152  m1
10.11.81.153  w1
10.11.81.154  w2
10.11.81.155  w3

1.2 Atualize o kernel do sistema de cada máquina . O
kernel do sistema padrão do Centos7.9 é 3.10. O uso do ipvs requer uma versão do kernel superior a 4.1

#安装ELRepo仓库的yum源
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

#更新yum源仓库
yum -y update

#查看可用的系统内核包
yum  --disablerepo="*"  --enablerepo="elrepo-kernel"  list  available
# 长期维护版本为lt,最新主线稳定版为ml

#选择的是长期维护版本kernel-lt,如需更新最新稳定版选择kernel-ml,建议选择长期维护版,目前为5.4版本,内核版本过高也不好
yum  --enablerepo=elrepo-kernel  install  -y  kernel-lt

#查看可用内核版本及启动顺序
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg

0 : CentOS Linux (5.4.108-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.11.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-20210128140208453518997635111697) 7 (Core)

#安装辅助工具
yum install -y grub2-pc

#设置内核默认启动顺序
grub2-set-default 0

#编辑/etc/default/grub文件
vim /etc/default/grub

#设置GRUB_DEFAULT=0  #只需要修改这里即可
sed -i 's/GRUB_DEFAULT=saved/GRUB_DEFAULT=0/g' /etc/default/grub

#生成grub 配置文件
# 运行grub2-mkconfig命令来重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg

#重启系统
reboot
# 或者
shutdown -r now

#重启完成后,查看内核版本是否正确
uname -r

1.3 Cada máquina está configurada para encaminhar IPv4 e permitir que o iptables veja o tráfego em ponte

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# 应用 sysctl 参数而不重新启动
sudo sysctl --system

Após a instalação do cluster, alterne para ipvs

1.4 Defina a sincronização de tempo para cada máquina

yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources

1.5 Cada máquina fecha o firewall.
O ambiente de produção precisa abrir a porta do firewall conforme necessário. Obviamente, haverá uma máquina bastião com balanceamento de carga na frente do cluster K8s no ambiente de produção. Se ela não estiver voltada diretamente para a rede externa, você também pode fechar o firewall da máquina no cluster K8s.

systemctl stop firewalld
systemctl disable firewalld

1.6 Cada máquina fecha a troca, que é principalmente para considerações de desempenho

# 临时关闭
swapoff -a
# 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 可以通过这个命令查看swap是否关闭了
free

Veja que a área Swap é 0
insira a descrição da imagem aqui
1.7 Desabilitar SELinux para cada máquina

# 临时关闭
setenforce 0
# 永久禁用
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

2. Instale o CRI

A partir da versão 1.20 do Kubernetes, o Docker não tem mais suporte oficial como tempo de execução de contêiner padrão. Para saber os motivos do Docker sem suporte, consulte o Anúncio de substituição do Docker do K8s

2.1 Instale o containerd em cada máquina

# 添加docker源
curl -L -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装containerd
yum install -y containerd.io
# 创建默认配置文件
containerd config default > /etc/containerd/config.toml
# 设置aliyun地址,不设置会连接不上, 如果无法下载镜像检查一下配置是否替换 cat /etc/containerd/config.toml |grep sandbox_image
# 将pause:3.6替换为pause:3.9,如果有关版本发生变化需要修改
sed -i "s#registry.k8s.io/pause:3.6#registry.aliyuncs.com/google_containers/pause:3.9#g" /etc/containerd/config.toml
# 设置驱动为systemd,Kubernetes官网推荐设置
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
# 设置dicker地址为aliyun镜像地址
sed -i '/\[plugins\."io\.containerd\.grpc\.v1\.cri"\.registry\.mirrors\]/a\      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]\n        endpoint = ["https://8aj710su.mirror.aliyuncs.com" ,"https://registry-1.docker.io"]' /etc/containerd/config.toml

# 重启服务
systemctl daemon-reload
systemctl enable --now containerd
systemctl restart containerd

# 查看是否安装成功
containerd -version

2.2 Instale a ferramenta crictl em cada máquina

# 安装crictl工具
yum install -y cri-tools
# 生成配置文件
crictl config runtime-endpoint
# 编辑配置文件
cat << EOF | tee /etc/crictl.yaml
runtime-endpoint: "unix:///run/containerd/containerd.sock"
image-endpoint: "unix:///run/containerd/containerd.sock"
timeout: 10
debug: false
pull-image-on-create: false
disable-pull-on-run: false
EOF

# 查看是否安装成功
crictl info
crictl version

3. Instale kubelet kubeadm kubectl

3.1 Instale kubelet kubeadm kubectl em cada máquina

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=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
exclude=kubelet kubeadm kubectl #添加可以确保不发生版本漂移
EOF

# 安装指定版本
sudo yum install -y kubelet-1.26.4 kubeadm-1.26.4 kubectl-1.26.4 --disableexcludes=kubernetes

#启动kubelet
systemctl enable kubelet

A máquina de 3,2 m1 executa a inicialização do cluster

kubeadm init \
  --apiserver-advertise-address=10.11.81.152 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.26.4 \
  --service-cidr=172.16.0.0/16 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all

3.3 Se o kubelet falhar ao iniciar, verifique o arquivo de inicialização

cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
cat /var/lib/kubelet/kubeadm-flags.env

3.4 Comando de redefinição de erro de inicialização

kubeadm reset
rm -fr ~/.kube/  /etc/kubernetes/* var/lib/etcd/*

3.5 Uma saída semelhante indica sucesso

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.11.81.152:6443 --token abcdef.1234567890abcdef \
    --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

3.6 Adicionar 3 nós de trabalho ao cluster

kubeadm join 10.11.81.152:6443 --token abcdef.1234567890abcdef \
    --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

#如果出现如下错误
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
#执行
sysctl -w net.ipv4.ip_forward=1

4. Instale o plug-in de rede Calico

O plug-in CNI mais usado no ambiente corporativo atual é o Calico, que tem a vantagem de boa eficiência de encaminhamento e fácil verificação de erros Instalação de nó
de 4,1 m1 Método de instalação de documento oficial do plug-in Calico

# 创建一个yaml文件存放目录
mkdir /root/cni
cd /root/cni

# 下载operator & custom-resources
wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml

# 修改custom-resources.yaml匹配容器网络 --pod-network-cidr=10.244.0.0/16
vi custom-resources.yaml #cidr: 192.168.0.0/16 -> cidr: 10.244.0.0/16

# 器群启动calico网络
kubectl create -f tigera-operator.yaml
kubectl create -f custom-resources.yaml

4.2 Após o sucesso, conforme mostrado na figura
insira a descrição da imagem aqui

5. mudar ipvs

5.1 Todas as máquinas executam etapas preparatórias

# 所有机器执行,为kube-proxy开启ipvs的前提需要加载以下的内核模块
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
EOF

# 执行加载命令,检查是否完成加载
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

# 所有机器ipset软件包
yum install -y ipset ipvsadm

5.2 m1 modificação do mapa de configuração do kube-proxy

#修改kube-proxy configmap为ipvs模式
kubectl edit configmap kube-proxy -n kube-system

...
    kind: KubeProxyConfiguration
    metricsBindAddress: ""
    mode: "ipvs"  # "" 改成 ipvs
    nodePortAddresses: null
    oomScoreAdj: null
...
 
configmap/kube-proxy edited

# 重启kube-proxy容器
kubectl  delete pods -n kube-system -l k8s-app=kube-proxy

# 成功验证
kubectl -n kube-system logs kube-proxy-qmdhp|grep ipvs

I0415 10:48:49.984477       1 server_others.go:259] Using ipvs Proxier.
 # 在 kube-proxy pod 看到如上信息后说明是启用ipvs的

6. Operações opcionais subsequentes

1. Verifique se o cluster está disponível

# 使用 deployment 控制器部署镜像
kubectl create deployment nginx-demo --image=nginx --replicas=1
deployment.apps/nginx-demo created

# 创建service暴露方式为NodePort
kubectl expose deployment nginx-demo --port=80 --target-port=80 --type=NodePort
service/nginx-demo exposed

# 访问Nginx资源
kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   172.16.0.1      <none>        443/TCP        5h59m
nginx-demo   NodePort    172.16.17.244   <none>        80:30392/TCP   11s

curl http://9.46.255.229:30392
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html {
    
     color-scheme: light dark; }
body {
    
     width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

Abreviação de kubectl de configuração de máquina de 6,2 m1 , muito prática na operação real

cat >> ~/.bashrc << EOF 
alias kg='kubectl get'
alias k='kubectl'
alias kd='kubectl describe pods'
alias ke='kubectl explain'
alias ka='kubectl apply'
EOF

source ~/.bashrc

Acho que você gosta

Origin blog.csdn.net/weixin_46660849/article/details/130580689
Recomendado
Clasificación