虚拟机K8s集群搭建
参考链接
一、前期准备
1.1 系统环境
VMware 虚拟机环境下
系统:Ubuntu 22.04 LTS
CPU:2核 | 内存:4G | 硬盘:50G
1.2 节点信息
master: 192.168.59.130
node01: 192.168.59.131
node02: 192.168.59.132
确保每个虚拟机唯一节点、网络通畅、开放端口:6443,禁用Swap
1.3 关闭防火墙
根据使用的网络模式选择,此处关闭。
1 | systemctl stop firewalld && systemctl disable firewalld && iptables -F |
1.4 关闭 selinux
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统)关闭是因为可能会导致一些不明的问题。
1 | sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0 |
1.5 关闭Swap
此操作必须执行。
1 | sed -ri 's/.*swap.*/#&/' /etc/fstab |
1.6 修改hosts文件设置主机名
在每个节点上操作,保证每个虚拟机主机名唯一。
1 | vi /etc/hosts |
在对应的节点上设置主机名
1 | master 节点 |
1.7 允许 iptables 检查桥接流量
1 | cat > /etc/sysctl.d/k8s.conf << EOF |
加载ip_vs内核模块
不清楚什么意思
1 | modprobe ip_vs |
设置开机启动
不清楚什么意思
1 | cat > /etc/modules-load.d/ip_vs.conf << EOF |
二、搭建方式
本次使用命令行方式安装,方面理解各个组件的作用。
2.1 图形化操作
直接使用[Kuboard-Spray](GitHub - eip-work/kuboard-spray: 使用图形化的界面离线安装、维护、升级高可用的 K8S 集群)图形化工具进行搭建。
2.2 命令行安装
以下操作每个节点都需要执行
2.2.1 安装Docker
1 | curl -fsSL get.docker.com -o get-docker.sh |
设置Docker 开机启动
1 | sudo systemctl enable docker |
修改Docker的源
1 | sudo vi /etc/docker/daemon.json |
1 | 重新加载systemctl配置 |
2.2.2 配置kubernetes源
1 | apt-get update && apt-get install -y apt-transport-https |
2.2.3 安装kubeadm、kubelet、kubectl
建议安装1.23.6 或以下版本的软件,安装最新版(1.24.+)会有问题,且下面安装kuboard 兼容性未在最新版(1.24.+)验证。
1 | apt-get install -y kubelet=1.23.6-00 kubeadm=1.23.6-00 kubectl=1.23.6-00 |
设置开机启动
1 | systemctl enable kubelet |
以下操作在master节点执行
2.2.4 master 节点初始化
1 | kubeadm init \ |
等待拉取镜像,出现以下字样代表master节点初始化成功。
1 | Your Kubernetes control-plane has initialized successfully! |
记住 kubeadm init
输出的 kubeadm join
命令。 需要使用此命令将子节点加入集群。
2.2.5 配置kubectl
要使用非 root 用户可以运行 kubectl,请运行以下命令
1 | mkdir -p $HOME/.kube |
root
用户,则可以运行:
1 | export KUBECONFIG=/etc/kubernetes/admin.conf |
使用kubectl 查看节点信息
1 | kubectl get nodes |
目前是只能看到master节点,状态是NotReady,下面是子节点加入后的状态,且网络集群网络联通后的状态。
2.2.6 子节点加入集群
使用上面初始化后的提示的指令, 分别在各个子节点上执行指令。
1 | kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash> |
接下来在看看节点状态,下面是子节点加入后的状态,且网络集群网络联通后的状态。
1 | kubectl get nodes |
2.2.7 安装flannel网络插件
下载插件,解决raw.githubusercontent.com无法访问的问题
1 | wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml |
下载到本地后更改第128行,和上文中的pod-network-cidr
一致。
1 | "Network": "10.245.0.0/16" |
运行 yaml文件
1 | kubectl apply -f kube-flannel.yaml |
查看flannel 结果
1 | kubectl -n kube-system get pods -o wide |
再次查看各个node的状态
1 | kubectl get nodes |
至此集群方式的Kubernetes 安装完成。
三、问题
问题一:出现 initial timeout of 40s passed。
在一开始部署的时候安装:kubelet、kubeadm、kubectl,没有指定版本,直接使用的最新版(1.24.+),在往上查了半天,找到一篇博客后(地址忘记了)提示说可能是由于版本的问题,然后在重新安装指定版本的kubelet、kubeadm、kubectl 工具,接下来一路畅通。
重新初始化是需要执行 kubeadm reset
,此命令是还原由 kubeadm init
或 kubeadm join
所做的更改。