初始化kubeadm init的时候要指定cidr,安装CNI网络插件Flannel的时候也要设置对应的CIDR
配置文件工作目录
/etc/kubernetes
总体过程
kubectl官方命令使用帮助:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
helm官方命令使用帮助:https://helm.sh/docs/helm/helm_list/
1、先安装docker最新版,因为docker包含了containerd,所以不用再另外安装containerd,用docker是为了方便从docker hub拉取镜像
kubelet使用containerd的配置文件不存在,手动添加vim /etc/crictl.yaml,内容:
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 2
debug: true
pull-image-on-create: false
(建议只安装containerd,因为containerd也是直接从docker.io也就是docker hub拉取镜像,亲自实验结果)
2、安装kubeadm kubectl kubelet
3、列出所需镜像 kubeadm config images list
4、通过阿里云的google_containers拉取对应的镜像,coredns可能拉取失败,那就去docker hub查找,全部拉取下来之后重新打标签符合k8s的镜像名称,使用ctr打标签,因为docker打的标签crictl看不到,crictl是k8s用的
本次通过docker 打好标签,导出后,再使用ctr导入containerd,使用ctr时要注意导入到指定命名空间 -n k8s.io,因为不指定的话导入命名空间为default,而k8s默认使用命名空间k8s.io
5、修改docker的cgroup=systemd,kubelet(默认cgroupfs,v22开始默认systemd)的cgroup也要一样,containerd也要一样,不过containerd只要在配置文件/etc/containerd/config.toml中设置SystemdCgroup为true就好
docker info |grep cgroup 命令查看
6、修改containerd的/etc/containerd/config.toml中的SystemdCgroup=true,还有配置文件中的pause镜像版本改为第3步列出来的版本,因为其他版本可能没有拉下来
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
然后重启 systemctl restart containerd
7、kubeadm config print init-defaults > /etc/kubernetes/init-default.yaml初始化配置到本地,然后修改本机节点的IP和name
注意添加属性podSubnet,这个要和Flannel的Network配置一致
init-default.yaml的配置:
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16
Flanel的配置:
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
8、初始化k8s集群,kubeadm init --config /etc/kubernetes/init-default.yaml
初始化完成的时候,会提示
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u)