ubuntu22.04安装版本为v1.28.2的k8s 并且使用docker作为cri

前置条件

# 关闭swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 关闭防火墙
sudo ufw disable

# 设置主机名(可选)
sudo hostnamectl set-hostname k8s-master
sudo hostnamectl set-hostname k8s-node1
sudo hostnamectl set-hostname k8s-node2

# 将主机名添加到hosts
cat >> /etc/hosts << EOF
192.168.0.103 k8s-master
192.168.0.104 k8s-node1
192.168.0.105 k8s-node2
EOF


# 加载内核模块
sudo modprobe overlay
sudo modprobe br_netfilter

# 设置内核参数
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
EOF

sudo sysctl --system

安装Docker(使用阿里云镜像)
安装Docker CE,并配置其使用systemd作为cgroup驱动,因为kubelet默认使用systemd

# 使用阿里云镜像安装 Docker
sudo apt-get update
sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

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

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# 配置 Docker
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "registry-mirrors": ["https://your-code.mirror.aliyuncs.com"]
}
EOF

sudo systemctl enable docker
sudo systemctl start docker

配置containerd(Docker使用containerd作为运行时)
Kubernetes通过CRI与容器运行时交互,而Docker本身不支持CRI,所以我们需要安装一个CRI插件。这里我们使用cri-dockerd。

从Kubernetes 1.24开始,移除了对Docker的直接支持,因此我们需要使用cri-dockerd来让Kubernetes通过CRI接口与Docker通信。
安装cri-dockerd

# 下载cri-dockerd
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd_0.3.4.3-0.ubuntu-jammy_amd64.deb

# 安装cri-dockerd
sudo dpkg -i cri-dockerd_0.3.4.3-0.ubuntu-jammy_amd64.deb


# 下载安装包解压并配置service文件
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4.amd64.tgz

tar -xzf cri-dockerd-0.3.4.amd64.tgz
sudo mv cri-dockerd/cri-dockerd /usr/local/bin/
sudo tee /etc/systemd/system/cri-dockerd.service > /dev/null <<EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=docker.service

[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
ExecReload=/bin/kill -s HUP \$MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

# 启动cri-dockerd
sudo systemctl daemon-reload
sudo systemctl enable cri-dockerd
sudo systemctl start cri-dockerd

安装 Kubernetes 组件

# 添加阿里云 Kubernetes 镜像源
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

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

# 安装 kubelet、kubeadm、kubectl
sudo apt-get update
sudo apt-get install -y kubelet=1.28.2-00 kubeadm=1.28.2-00 kubectl=1.28.2-00
sudo apt-mark hold kubelet kubeadm kubectl

master上执行集群初始化

sudo kubeadm init \
  --kubernetes-version=v1.28.2 \
  --cri-socket=unix:///var/run/cri-dockerd.sock \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=192.168.0.103 \
  --image-repository=registry.aliyuncs.com/google_containers
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 设置 KUBECONFIG 环境变量
export KUBECONFIG=$HOME/.kube/config
echo "export KUBECONFIG=$HOME/.kube/config" >> ~/.bashrc
source ~/.bashrc

master安装安装网络插件(使用国内镜像)

# 方法1:使用阿里云镜像下载Flannel
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

# 修改镜像地址为国内镜像
sed -i 's#docker.io/##g' kube-flannel.yml
sed -i 's#flannelcni/flannel#registry.cn-hangzhou.aliyuncs.com/google_containers/flannel#g' kube-flannel.yml

# 应用Flannel网络插件
kubectl apply -f kube-flannel.yml

从节点加入集群

kubeadm join 192.168.0.103:6443 --token iqd54u.rjbdipodz094os5l \
	--discovery-token-ca-cert-hash sha256:3ba2e475863345133f0af2cce2fe0ba3ac4c3a77cc5735ca693d02cafd445015 
	--cri-socket unix:///var/run/cri-dockerd.sock

查看现有的令牌

# 在 Master 节点上执行
kubeadm token list

如果令牌过期

# 在 Master 节点上创建新令牌
kubeadm token create

# 获取 ca-cert-hash
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

# 或者直接生成完整命令
kubeadm token create --print-join-command

最终效果
在这里插入图片描述

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐