3、kubeadm安装
1、kubeadm仓库配置
master和node都要配置
1.1、配置yum仓库
1.1.2、配置repo
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
1.1.2、查询kubeadm历史版本
[root@master1 ~]# yum --showduplicates search kubeadm
2、kubeadm安装
master和node都要安装
2.1、安装kubelet kubeadm kubectl【使用1.25.7版本】
yum install kubelet-1.25.7 kubeadm-1.25.7 kubectl-1.25.7 yum install kubelet-1.25.7 kubeadm-1.25.7 kubectl-1.25.7 -y
2.2、安装包的介绍
# 包的介绍
conntrack-tools # 让系统管理员可与连接跟踪系统进行交互
cri-tools # 类似于 docker 的命令行工具
kubernetes-cni # 是容器网络通信的软件
socat # 是kubelet的依赖
nftables # 数据包过滤
2.3、kubeadm命令帮忙查看
[root@master1 ~]# kubeadm --help
3、配置
3.1、kubelet配置 - 配置cgroup
# 获取docker的cgroups
DOCKER_CGROUPS=$(docker info | grep 'Cgroup Driver' | cut -d ' ' -f4)
echo $DOCKER_CGROUPS
配置kubelet的cgroups
对于kubeadm方式安装的k8s来说,他对于容器运行时的配置需求,默认推荐用systemd 驱动程序,而不是cgroupfs 驱动程序,原因是,我们安装好的kubernetes的kubelet是以 systemd 服务的样式来进行管理。
对于 1.22 版的 k8s,它对于底层Docker的cgroup机制默认采用的就是 systemd方式,我们不用在向之前的版本一样,需要通过改造启动配置文件的方式来让kubelet实现我们的需求。
参考资料
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configurecgroup-driver/
3.2、kubelet服务设置开机自启动
systemctl enable kubelet
注意:
此处没有必要启动kubelet,否则,当kubelet启动后,会一直发生重启现象,使用systemctl status kubelet,你会发现重复报错误信息;
10月 21 15:49:31 master systemd[1]: kubelet.service: main process exited, code=exited, stat...
10月 21 15:49:31 master systemd[1]: Unit kubelet.service entered failed state.
10月 21 15:49:31 master systemd[1]: kubelet.service failed.
运行journalctl -xefu kubelet 命令查看systemd日志才发现,真正的错误是:
10月 21 15:51:44 master kubelet[1881]: F1021 15:51:44.620873 1881 server.go:190] failed to load Kubelet config file /var/lib/kubelet/config.yaml,
error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory
这个错误在控制节点运行kubeadm init 生成config.yaml文件后会被自动解决,此处可先忽略。因为在环境初始化完成前,这个错误会不停的出现
3.3、kubeadm信息检查
3.3.1、查看集群初始化时候的默认配置
kubeadm config print init-defaults
注意:
可以重点关注,master和node的注释信息、镜像仓库和子网信息
这条命令可以生成定制的kubeadm.conf认证文件
3.3.2、检查当前版本的kubeadm所依赖的镜像版本
[root@master1 ~]# kubeadm config images list
registry.k8s.io/kube-apiserver:v1.26.2
registry.k8s.io/kube-controller-manager:v1.26.2
registry.k8s.io/kube-scheduler:v1.26.2
registry.k8s.io/kube-proxy:v1.26.2
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.9.3
3.3.4、修改containerd脚本【所有节点】
# 生成容器配置
containerd config default > /etc/containerd/config.toml
[root@master1 ~]# grep sandbox_image /etc/containerd/config.toml
sandbox_image = "registry.k8s.io/pause:3.6"
# 修改仓库地址,这步骤很重要
sed -i "s#registry.k8s.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
[root@master1 ~]# grep sandbox_image /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"
# 重启容器
systemctl restart containerd
3.3.5、预拉取镜像文件
cat > kubeadm_pull_base.sh <<'EOF'
#!/bin/bash
# 从新的地址下载所需镜像
images=$(kubeadm config images list --kubernetes-version=v1.26.2 | awk -F "/" '{print $2}')
for i in ${images}
do
docker pull registry.aliyuncs.com/google_containers/$i
# docker tag registry.aliyuncs.com/google_containers/$i registry.k8s.io/$i
# docker rmi registry.aliyuncs.com/google_containers/$i
done
EOF
sh kubeadm_pull_base.sh