Ubuntu部署单机基于containerd的k8s
- 环境准备
更新系统
sudo apt update
sudo apt upgrade -y
关闭交换空间
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2.安装必要的依赖包
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
换源
sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
3.安装容器运行时(Containerd)
使用阿里云的 Docker 镜像源。
添加阿里云的 GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
添加阿里云的 APT 源
echo "deb [arch=$(dpkg --print-architecture) 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
更新 APT 缓存
sudo apt update
安装 Containerd
sudo apt install -y containerd.io
生成默认配置文件
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
启用Cgroup用于限制进程的资源使用量,如CPU、内存资源
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#' /etc/containerd/config.toml
替换文件中pause镜像的下载地址为阿里云仓库
sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"#' /etc/containerd/config.toml
为Containerd配置镜像加速器,在文件中找到[plugins."io.containerd.grpc.v1.cri".registry.mirrors],在下方添加镜像加速器
...
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://abde64ba3c6d4242b9d12854789018c6.mirror.swr.myhuaweicloud.com"]
sudo sed -i 's|registry.k8s.io|registry.aliyuncs.com/google_containers|g' /etc/containerd/config.toml
重启 Containerd 服务
sudo systemctl restart containerd
4.配置内核参数
sudo modprobe br_netfilter
echo '1' | sudo tee /proc/sys/net/bridge/bridge-nf-call-iptables
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
- 安装 Kubernetes 组件
使用阿里云的 Kubernetes 镜像源。
添加阿里云的 Kubernetes APT 源
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新 APT 缓存
sudo apt update
安装 Kubernetes 组件
sudo apt install -y kubelet kubeadm kubectl
锁定版本,防止自动更新
sudo apt-mark hold kubelet kubeadm kubectl
集群初始化
在master01节点查看集群所需镜像文件
kubeadm config images list
...以下是集群初始化所需的集群组件镜像
v1.27.1; falling back to: stable-1.23
k8s.gcr.io/kube-apiserver:v1.23.17
k8s.gcr.io/kube-controller-manager:v1.23.17
k8s.gcr.io/kube-scheduler:v1.23.17
k8s.gcr.io/kube-proxy:v1.23.17
k8s.gcr.io/pause:3.6
k8s.gcr.io/etcd:3.5.1-0
k8s.gcr.io/coredns/coredns:v1.8.6
在master01节点生成初始化集群的配置文件
kubeadm config print init-defaults > kubeadm-config.yaml
配置文件需要修改如下内容
管理节点的IP地址
advertiseAddress: 192.168.0.50
本机注册到集群后的节点名称
name: master01
集群镜像下载地址,修改为阿里云
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
通过配置文件初始化集群
kubeadm init --config kubeadm-config.yaml
根据集群初始化后的提示,执行如下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
根据提示将node节点加入集群,加入成功后在master节点验证
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 NotReady control-plane,master 3m31s v1.23.0
node01 NotReady
node02 NotReady
部署集群网络Calico
master01节点下载Calico文件
·```
wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml
创建calico网络
kubectl apply -f calico.yaml
查看Calico Pod状态是否为Running
kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-66966888c4-whdkj 1/1 Running 0 101s
calico-node-f4ghp 1/1 Running 0 101s
calico-node-sj88q 1/1 Running 0 101s
calico-node-vnj7f 1/1 Running 0 101s
calico-node-vwnw4 1/1 Running 0 101s
验证集群节点状态
在master01节点查看集群信息
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane,master 25m v1.23.0
node01 Ready <none> 25m v1.23.0
node02 Ready <none> 24m v1.23.0

你的控制平面节点(master01)有一个NoSchedule污点,这会阻止普通 Pod 调度到该节点。要允许 Pod 在单节点环境中调度到控制平面节点,可以执行以下命令移除该污点:
kubectl taint nodes master01 node-role.kubernetes.io/control-plane:NoSchedule-
Kubectl命令补全
echo "source <(kubectl completion bash)" >> ~/.bashrc source ~/.bashrc