K8S-部署V1.28-使用kubeadm简易部署一个学习或测试环境
准备工作
虚拟机配置
- 硬件配置:内存2GB或2G+,CPU 2核或CPU 2核+;
- 集群内各个机器之间能相互通信;
- 集群内各个机器可以访问外网,需要拉取镜像 → 能下载镜像就行,或者提前下载好即可。
- 禁止swap分区;
软件环境配置
1、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2、关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久 setenforce 0 #临时
3、关闭swap(k8s禁止虚拟内存以提高性能)
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久 swapoff -a #临时
4、添加hosts
cat >> /etc/hosts << EOF 192.168.172.134 k8smaster #请根据自己的实际地址做修改 192.168.172.135 k8snode #请根据自己的实际地址做修改 EOF #上面是一条将文本输入到/etc/hosts的命令,EOF是本次指定的输入结束标记符号。
5、设置网桥参数
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system #生效
6、时间同步
yum install ntpdate -y ntpdate time.windows.com 若是使用的centos8,那么需要使用chrony yum install -y chrony 修改配置文件添加时钟源 [root@CentOs8-K8S-master 20231226]# sed -n '3P' /etc/chrony.conf server time.windows.com iburst [root@CentOs8-K8S-master 20231226]#
7、安装docker
更新docker的yum源
yum install wget -y wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
安装最新版本的docker:
yum install docker-ce -y
配置加速器加速下载
/etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com","https://gg3gwnry.mirror.aliyuncs.com"] }
然后执行:
systemctl enable docker.service
8、启用容器运行时
#如果安装的是1.24版本以上的K8S,那需要修改容器运行时(CRI)的配置文件,将CRI启用:
containerd config default > /etc/containerd/config.toml #修改配置文件中的sandbox image取值为3.9 [root@CentOs8-K8S-master gyj]# sed -n '61p' /etc/containerd/config.toml sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9" [root@CentOs8-K8S-master gyj]# sudo systemctl restart containerd
参考官方说明:
部署K8s
1、添加k8s的阿里云YUM源
cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
2、安装 kubeadm,kubelet 和 kubectl
yum install kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 -y
#可能提示没有匹配项目,请清空yum缓存:yum clean all
然后执行:
systemctl enable kubelet.service
3、查看有没有安装:
yum list installed | grep kubelet yum list installed | grep kubeadm yum list installed | grep kubectl
查看安装的版本: kubelet --version
Kubelet:运行在cluster所有节点上,负责启动POD和容器;
Kubeadm:用于初始化cluster的一个工具;
Kubectl:kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件;
4、重启虚拟机,包括即将作为master或者node的
5、部署Kubernetes Master主节点
此命令在master机器上执行;
kubeadm init \
--apiserver-advertise-address=192.168.172.134 \ #该地址为master主机地址
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.2 \
--service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 #这个可以保持不变,除非你有特别的需要
说明:
--apiserver-advertise-address:master主机地址,跟其他pod互通的那个;
--image-repository:镜像仓库地址;
--pod-network-cidr:和--service-cidr类似,不能跟主机网络相同或冲突,也不能和--service-cidr一样;
--service-cidr 的选取不能和PodCIDR及本机网络有重叠或者冲突,一般可以选择一个本机网络和PodCIDR都没有用到的私网地址段,比如PODCIDR使用10.244.0.0/16, 那么service cidr可以选择10.96.0.0/12,网络无重叠冲突即可;
5.1、报错:detected that the sandbox image "registry.k8s.io/pause:3.6" of the container runtime is inconsistent with that used by kubeadm. It is recommended that using "registry.aliyuncs.com/google_containers/pause:3.9" as the CRI sandbox image.
解决:软件环境配置的第8条没有做好,请重做。
5.2、报错端口被占用:
使用kubeadmin reset命令重置,然后继续执行初始化即可。
6、为用户赋予权限
#上面的kubeadm init命令输出中说用普通用户来执行以下3条命令的,但是经过测试,任何用户想要执行kubectl命令,都需要执行下面的这三条命令才行。不然会被拒绝
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 nodes
7、node主机加入
接下来把node节点加入Kubernetes master中,在Node机器上执行;
向集群添加新节点,执行的命令就是kubeadm init最后输出的kubeadm join命令:
#根据kubeadm init实际输出结果来执行,以下只是示例 kubeadm join 192.168.172.132:6443 --token wa5bif.zfuvbesevdfvf4of \ --discovery-token-ca-cert-hash sha256:87cf5828d54dd80da13c4b57c57360370ea0267a7cc3991989ca3006cf3e44d8
注意,极为不建议使用虚拟机的复制功能来创建虚拟机,这样可能会因为主机名、UUID等各种重复导致node不能加入master中。
8、部署网络插件
这个可以根据自己的需要选择,各项网络插件的说明参考官方文档:https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/addons/
我选择的是flannel,在master主机上运行命令部署;
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml #若是你自定义了pod-network-cidr,那么需要修改kube-flannel.yml中相应的内容,详情请参考: https://github.com/flannel-io/flannel#deploying-flannel-manually #sed -i 's:10.244.0.0/16:192.168.52.0/24:' ./kube-flannel.yml #【10.244.0.0/16】是默认的pod所在的cidr,由于自定义了pod的cidr,所以这里要修改下
应用kube-flannel.yml文件得到运行时容器,在master机器上执行
kubectl apply -f kube-flannel.yml
然后查看节点状态: kubectl get nodes (在master机器上执行),下图只是示例
说明还没有就绪,需要等一会儿,然后节点就就绪了;
至此我们的k8s环境就搭建好了;