ubuntu22.04部署单机k8s
首先确保你的服务器上已经安装好docker(详细操作详情见上篇《在ubuntu22.04下部署docker(包含shell脚本部署)》)
网址在这,没安装docker的盆友可以先看看:https://www.cnblogs.com/OM-dyc/articles/18952762
然后开始部署k8s
1.安装kubelet kubeadm kubectl
sudo apt-get update && sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl #阻止自动更新
2.修改containerd配置,使其从阿里云拉取镜像
先创建containerd目录
mkdir -p /etc/containerd
生成config.toml文件
containerd config default | sudo tee /etc/containerd/config.toml
编辑修改配置
vim /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri"]
..................................
# 搜索sandbox_image,把原来的k8s.gcr.io/pause:3.6改为"registry.aliyuncs.com/google_containers/pause:3.9"
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
..........................
SystemdCgroup = true #搜索SystemdCgroup,把这个false改为true
# 搜索config_path,配置镜像加速地址(这是一个目录下面创建)
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d"
三处修改



3.配置加速
创建镜像加速目录
mkdir /etc/containerd/certs.d/docker.io -pv
cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://docker.io"
[host."https://b9pmyelo.mirror.aliyuncs.com"]
capabilities = ["pull", "resolve"]
EOF
加载containerd的内核模块
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
重启containerd
systemctl restart containerd
systemctl status containerd
4.创建默认的kubeadm-config.yaml文件并修改
sudo kubeadm config print init-defaults > kubeadm-config.yaml
vim kubeadm-config.yaml
四处修改
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.1.73 # 修改成本地内网ip
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
imagePullPolicy: IfNotPresent
name: master # 修改成自定义的名称
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers # 使用阿里源
kind: ClusterConfiguration
kubernetesVersion: 1.22.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.244.0.0/16 # 修改成10.244.0.0/16
scheduler: {}
运行kubeadm-config.yaml配置文件
sudo kubeadm init --config kubeadm-config.yaml --v=5
看到Your Kubernetes control-plane has initialized successfully!说明配置成功

5.此时根据他下面的提示,继续运行他提供的代码
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
配置完之后运行kubectl get node会发现master处于NotReady状态

其实是因为没有进行网络配置(这里我个人在网络上看了大量的博客,但是在calio和flannel的配置上始终失败,具体原因可能是因为无法访问docker.hub,而国内提供的镜像都有残缺,也有可能是我没找到完整的,若各位大佬们有好的配置方法,希望能在评论区交流指点一下)
2025/07/01新增:关于k8s的网络的配置,可以去看我后面更新的另一篇博客,链接在这:https://www.cnblogs.com/OM-dyc/articles/18959567
其中为您提供了一种更佳的网络配置方式
6.手动配置网络
这里我采用了修改文件/etc/cni/net.d/10-flannel.conflist的方式,进行手动配置网络
vim /etc/cni/net.d/10-flannel.conflist
{
"name": "cbr0",
"cniVersion": "0.2.0",
"plugins": [
{
"type": "flannel",
"delegate": {
"hairpinMode": true,
"isDefaultGateway": true
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
}
]
}
systemctl daemon-reload

至此,单机k8s部署完毕,可以去部署你的应用啦!
此文章也是参考了另外两位大佬的博客整理出来的我把他们的文章地址放在这里了:
https://www.cnblogs.com/tjw-bk/p/17566029.html
https://www.cnblogs.com/stonezpl0202/p/15138225.html
bye-bye~
浙公网安备 33010602011771号