kubernetes安装

发布时间 2023-04-14 10:41:31作者: mashall

初始化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)?(id -g) $HOME/.kube/config
如果是root用户,可选export命令,但是export只在本次session窗口生效,下次重新连接就失效了,所以最好用上面的命令创建文件

9、当只有一个master节点的时候,默认是不允许部署pod到master,解决:
默认存在污点(taint): node-role.kubernetes.io/control-plane:NoSchedule
删除用法最后是key-,减号结尾代表删除key,中间没有空格
删除污点,以下两个命令效果是1:删除所有key,2:删除指定key value
kubectl taint nodes izwz9bibfos69lzwdauk4rz node-role.kubernetes.io/control-plane-
kubectl taint nodes izwz9bibfos69lzwdauk4rz node-role.kubernetes.io/control-plane:NoSchedule-
PreferNoSchedule 代表尽量不要部署,所以也可以再重新打上标签,直接打上去不会修改,会多出来一条新增的记录,所以想到达到修改的效果是先删再加:
kubectl taint nodes izwz9bibfos69lzwdauk4rz node-role.kubernetes.io/control-plane:PreferNoSchedule

10、安装Flannel插件,这个需要下载镜像,不过是在docker.io域名下,国内可以直接下载,kubectl apply -f kube-flannel.yaml后,所有pod都会在running状态

11、写个deployment.yaml就可以部署项目了,比如:
kubectl apply -f deployment-springboot.yaml