1. 安装k8s工具

    官方安装地址

  2. 设置自动完成

     kubeadm completion bash > /etc/bash_completion.d/kubeadm
     kubectl completion bash > /etc/bash_completion.d/kubectl
    
  3. 镜像服务器设置

    /etc/docker/daemon.json

     {
         "registry-mirrors": [
             "https://hub.geekery.cn/",
             "https://ghcr.geekery.cn"
         ]
     }
    
  4. 修改 containerd 默认设置

    containerd config default > /etc/containerd/config.toml

    修改 SystemdCgroup = true

    修改 sandbox_image = "registry.k8s.io/pause:3.10"

    版本根据 kubeadm config images list 的值而定

    设置完成后重启 systemctl restart containerd

  5. 执行k8s初始化, IP根据下一步中的配置文件(kube-flannel.yml)中的net-conf.json.NetWork而定 IP说明

    可选步骤, 提前拉取k8s用的镜像

     #!/bin/bash
    
     REPO=registry.cn-hangzhou.aliyuncs.com/google_containers
     REPO_LEN=${#REPO}
     K8SREPO=registry.k8s.io
    
     kubeadm config images pull --image-repository "${REPO}"
    
     for full_name in $(kubeadm config images list --image-repository "${REPO}") ; do
         name=${full_name:${REPO_LEN}}
         if [ "${name#/coredns}" != "${name}" ]; then
             name="/coredns$name"
         fi
         ctr -n k8s.io image tag "${full_name}" "${K8SREPO}$name"
     done
    

    初始化集群 kubeadm init --pod-network-cidr 10.244.0.0/16

  6. 下载网络插件镜像 flannel仓库

    下面命令使用的镜像, 可以自己下载, 版本根据 kube-flannel.yml 而定

     for x in docker.io/flannel/flannel:v0.26.1 docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel2; do
         echo $x
         docker pull $x
         docker save $x | ctr --namespace k8s.io images import -
     done
    
  7. 安装网络插件

    开启内核模块 modprobe br_netfilter

    持久开启 echo br_netfilter > /etc/modules-load.d/k8s.conf

    kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

    如果多节点集群网络不通, 修改网络插件配置文件如下: 增加参数 --iface=enp0s8

     containers:
     - args:
     - --ip-masq
     - --kube-subnet-mgr
     - --iface=enp0s8
     command:
     - /opt/bin/flanneld
    
  8. 根据上一步命令的结果, 设置配置文件

     mkdir -p $HOME/.kube
     sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
     sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  9. 查看结果 kubectl get nodes

    视情况移除主机的污点 kc taint node --all node-role.kubernetes.io/control-plane-

  10. 防火墙和端口 文档

    要么直接关闭, 要么把上述端口加到防火墙. 要不然 coredns pod启动不了.

  11. 注意关闭交换分区

    swapoff --all

  12. 安装网络插件calico

  13. 给k8s拉取镜像

    #!/bin/bash
    IMG_NAME=$1
    docker pull $IMG_NAME
    docker save $IMG_NAME | ctr --namespace k8s.io images import -