初始化(所有节点都执行)

更新系统

sudo apt update

禁用交换分区

sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

配置主机名(按节点设置)

sudo hostnamectl set-hostname k8s-master
sudo hostnamectl set-hostname k8s-node01
sudo hostnamectl set-hostname k8s-node02
cat /etc/hostname

添加主机解析

sudo tee -a /etc/hosts << EOF
192.168.50.200 k8s-master
192.168.50.201 k8s-node01
192.168.50.202 k8s-node02
EOF

配置内核参数

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
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
sudo sysctl --system

安装容器运行时(containerd)(所有节点安装)

安装基础工具

sudo apt install -y ca-certificates curl gnupg lsb-release

下载阿里云镜像的 Docker GPG 密钥

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | \
	sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

添加阿里云的 Docker 仓库

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
    https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新并安装 containerd

sudo apt update
# 查看可以安装的版本
sudo apt-cache madison containerd.io
# 安装指定版本
sudo apt install -y containerd.io=1.7.27-1
# 查看安装的版本
dpkg -l | grep containerd
containerd --version

配置 containerd

containerd config default | sudo tee /etc/containerd/config.toml
grep SystemdCgroup /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

锁定版本(防止自动升级)

# 锁定不自动升级
sudo apt-mark hold containerd.io

# 查看锁定状态
sudo apt-mark showhold

# 取消锁定(如果需要升级)
sudo apt-mark unhold containerd.io

安装kubeadm kubelet kubectl

所有节点都需要安装

下载 Kubernetes 密钥(阿里云镜像)

curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | \
    sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-aliyun.gpg

添加仓库

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-aliyun.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | \
    sudo tee /etc/apt/sources.list.d/kubernetes-aliyun.list

执行的命令截图

在这里插入图片描述

sudo apt update
# 查看最新的5个版本
apt-cache madison kubeadm | head -5
apt-cache madison kubelet | head -5
apt-cache madison kubectl | head -5
# kubectl不用在节点安装
sudo apt install -y kubelet=1.28.* kubeadm=1.28.* kubectl=1.28.*
sudo apt-mark hold kubelet kubeadm kubectl
# 查看锁定版本的应用
sudo apt-mark showhold
# 启用 kubelet
sudo systemctl enable --now kubelet

下载镜像(如果有外网忽略此步骤)

查看需要的镜像

 kubeadm config images list --kubernetes-version=v1.28.0

在这里插入图片描述

找个有外网的机器下载镜像

sudo ctr images pull registry.k8s.io/kube-apiserver:v1.28.0
sudo ctr images pull registry.k8s.io/kube-controller-manager:v1.28.0
sudo ctr images pull registry.k8s.io/kube-scheduler:v1.28.0
sudo ctr images pull registry.k8s.io/kube-proxy:v1.28.0
sudo ctr images pull registry.k8s.io/pause:3.9
sudo ctr images pull registry.k8s.io/etcd:3.5.9-0
sudo ctr images pull registry.k8s.io/coredns/coredns:v1.10.1

打包镜像

sudo ctr images export k8s-v1.28.0-images.tar \
  registry.k8s.io/kube-apiserver:v1.28.0 \
  registry.k8s.io/kube-controller-manager:v1.28.0 \
  registry.k8s.io/kube-scheduler:v1.28.0 \
  registry.k8s.io/kube-proxy:v1.28.0 \
  registry.k8s.io/pause:3.9 \
  registry.k8s.io/etcd:3.5.9-0 \
  registry.k8s.io/coredns/coredns:v1.10.1

scp镜像到master机器

scp k8s-v1.28.0-images.tar root@192.168.0.200:/tmp/

在master机器加载镜像 需要加载到 k8s.io 的命名空间

sudo ctr -n k8s.io images import /tmp/k8s-v1.28.0-images.tar
# 查看 k8s.io 命名空间的镜像
ctr -n k8s.io images ls

初始化 Master 节点

sudo kubeadm init \
  --pod-network-cidr=172.16.0.0/16 \
  --kubernetes-version=v1.28.0 --v=5

报错如下图

在这里插入图片描述

journalctl -xeu kubelet|grep failed |grep pause|head

查看报错是去找 registry.k8s.io/pause:3.8 这个镜像

在这里插入图片描述

# 修改为 3.9 版本的镜像  registry.k8s.io/pause:3.9
vim /etc/containerd/config.toml
sudo systemctl restart containerd

清理旧的 kubeadm 配置

kubeadm reset -f

初始化master

sudo kubeadm init \
  --pod-network-cidr=172.16.0.0/16 \
  --kubernetes-version=v1.28.0 --v=5

出现这个就代表 master 已经成功

在这里插入图片描述

执行下面这个 就可以使用 kubectl 命令

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

在这里插入图片描述

node节点加入集群

这个命令是根据自己上面输出的复制出来的

kubeadm join 192.168.0.200:6443 --token x6wu15.i63jhd03nuoyutqs \
        --discovery-token-ca-cert-hash sha256:c825b3f01d0616441f0a98abcf575287756b5e973b88183c9c59a099044ea4c6

如果找不到token 可以用下面命令生成

kubeadm token create --print-join-command

在这里插入图片描述

安装网络插件

查看集群配置的pod网段

cat /etc/kubernetes/manifests/kube-controller-manager.yaml | grep cluster-cidr

在这里插入图片描述

下载网络插件

 wget https://github.com/flannel-io/flannel/releases/download/v0.27.4/kube-flannel.yml

修改为集群初始化的pod网段

sed -i 's#10.244.0.0/16#172.16.0.0/16#g' kube-flannel.yml
kubectl apply -f kube-flannel.yml

在这里插入图片描述
在这里插入图片描述

更多推荐