作为大数据分布式等方向的小白,最近在学习部署k8s集群,原先按照一些教程上学习了Docker+kubeadm的部署教程,但是Kubeadm更适合自己练手玩,对于大规模的集群还是有点局限性(另外kubeadm虽然没有二进制包那么麻烦,但是还是要自己改很多配置的),所以kubespray也许是更好的选择。
kubespray的缺陷在于:没有可以免费白嫖的视频教程(白嫖党大失败),以及比较依赖科学上网或者代理
最后多方辗转,终于在自己的虚拟机之间实现了kubespray的一键部署,参考文字教程:
Kubernetes03:【Kubernetes集群搭建】kubespary方式
这里本小白总结踩坑血泪,从Vmare安装开始保姆级手把手教程,需要的连接软件等也基本在本篇里一站式解决,欢迎围观补充
前两节是VMare虚拟机和MobaXterm的下载、使用和配置,不需要的可以skip前两段。
实验基础设备:
win11系统
VMare 16 pro Workstation,具体下载官网:VMare 16 Pro Workstation
还不会安装的参考:Windows环境下安装VMware Workstation 16 Pro
*注意:*win10考虑打开“启动Windows功能”中HyperV选项,Win11系统没有这个选项,考虑在VMare安装过程中选择“开启HyperV”选项,当然不打开大概也不会有什么问题。。。
虚拟机内核版本:Centos 7
下载地址:阿里Centos 7_64镜像源
下载“CentOS-7-x86_64-DVD-2009.iso”就可以,这个一般是最通用的,下载时间可能比较长
虚拟机搭建的步骤中基本就是正常操作,但是对CPU数量、内存大小和网关(重点)有一定限制。
具体搭建步骤教学:(注意:未贴图的步骤保持默认选项,直接下一步)
1.选择“自定义”配置;
2.安装系统时选择“稍后安装操作系统”,方便后续调整操作;
3.操作系统选择“Linux”,版本选择“Centos 7 64位”,当然自己用的不是这个内核可以换;
4.虚拟机的命名可以随意,但是考虑到要部署集群,可以起“master/node”这种。另外建议一个集群内的节点电脑不要放到一个文件夹位置中,否则容易引起不能同时运行问题;
5.【重点】处理器的配置要处理器数量(即CPU)>=2个,内核数量>=2,可以就卡在2,2上,避免后续操作出问题;
6.【重点】内存也一定要>=2GB,不能再小了;
7.磁盘容量默认是20GB,可以自己改大点(比如我是50),这一步没啥影响,但是注意要把虚拟磁盘分多个文件(其实也是默认);
8.以上步骤都进行完之后,直接点“完成”;
我们知道,k8s集群是多机操作的,这个操作模式主要有“一主多从”或者“多主多从”两种,如果这一部分基础知识没有的话建议自行补习,这边放一点自己的笔记可以参考一下:k8s一些基础概念
一般k8s集群至少要有一个master节点和一个node节点,这里我选择“一主二从”,即重复上述步骤开3个虚拟机,一个做控制节点两个做工作节点(但是k8spray后面会默认有两个控制节点,不过没关系后面这个不需要手动操作,也不影响后续配置)
但是现在的虚拟机还没有内核,我们要把下载好的内核配置进去:
10.然后我们先产看一下网络适配器情况,要保证是NAT桥接模式;
11.然后点开“CD/CVC(IDE)”,选择“使用ISO映像文件”,把下载好的Centos 7.iso配进去。然后点击“确定”,下一步就可以直接开启虚拟机了;
上述过程完成了虚拟机可以在界面上手动调整的部分,后面我们要开启虚拟机,进行网关设置了,这也是很关键的一步。
另外,关于开多个虚拟机,其实可以用“克隆”的方法,但是克隆出的多台虚拟机后续也是需要手动配置网关文件的,这里先不赘述了,后面等开机时可以简略写写。
PS:如果还有人遇到VMare不能同时启动多个虚拟机的问题,建议尝试“以管理员身份运行VMare”
这一步,我们需要把三台搭好的虚拟机同时开启(节省时间),三台子电脑都要进行网关配置,当然三台子电脑上的步骤是一模一样的,所以只进行一遍讲解
1.首先开启三台虚拟机
2.来到图形化配置界面,语言选择 中文->简体中文->Continue(或者任何你需要的语言)
3.来到多配置选项界面,我们先等所有图标都亮起,如图:
4.首先,选择“软件选择”这一项,里面可以选择一些centos系统的配置软件,如果想有可视化桌面,选择“GNOME桌面”,如果不需要桌面,建议选择“基础设施服务器”;(后面我选择了基础)
5.“安装位置”选项不用改,直接点进去并“完成”;
6.【重点】配置“网络和主机名”,第一步点进去选择“配置”;
在“常规”标签下,选中“可用时自动连接到这个网络”;
在“IPv4”标签下,先把“方法”选中“手动”;
点击下方“Add”手动输入网络配置,这里面的地址有一定限制,我们先观察我们配置中NAT网络的具体地址。
首先我们点击VMare里面“编辑”标签,选中“虚拟网络设置”;
选中VMnet8(这个是我们当时选中的NAT桥接网络),看下方子网IP和子网掩码,例如我的是192.168.232.0和255.255.255.0;
根据子网IP和子网掩码,我们手动添加子电脑的IP和网关配置,规则是:
1.“地址”前三个点的部分要和刚刚查看的子网IP一致,比如都是192.168.232;最后一部分可以自由发挥,100或者120或者200…只要在0~255之间,且保证没有被其他地方使用就可以了
2.“子网掩码”和刚刚查看到的保持一致,比如我是255.255.255.0;
3.“网关”前三位也是和子网IP保持一致,最后一位一般是2,所以我是192.168.232.2;
4.“DNS服务器”,可以配置成223.5.5.5,或者8.8.8.8,都可以,甚至可以配置好几个;
都完成之后点击“保存”,可以看到以太网自动打开,刚刚的配置也有显示;
这里还可以改一下主机名称,改完之后点击“应用”,就不会还叫“localhost”了;
点击“完成”回到主界面;
7.点击右下角开始安装;
8.点击“root配置”,设置一个对于根用户的密码;
9.如果密码太弱,要点两次完成;
10.等待其完成,点重启
![在这里插入图片描述](https://img-blog.csdnimg.cn/e6531d200a0f498eade987fe42c3fb16.png#pic_center
在三台电脑上都进行上述操作,要注意:三台电脑的“IPv4"下的”地址应该是不一样的,比如三个分别是:192.168.232.100/192.168.232.101/192/168.232.102,千万不要一样!!!
但是三台子电脑的子网掩码和网关以及DNS服务器应该保持一致
三台电脑的主机名不要设置成一样的
PS:如果这里没有设置网关,比如一开始用的就是克隆机,可以选择开机之后,进入ens33文件自行修改:
在root下输入:
cd /etc/sysconfig/network-scripts/
ls
看到输出第一个文件是ifcng-ens33,这个就是配置网关的文件
进入:
vim ifcfg-ens33
注意圈出来的几个参数:
BOOTPROTO最好是none,虽然很多教程说static是最好的配置,但是本教程后续主要使用科学上网进行部署,所以none虽然可能不稳定,但是设置成这样最好,如果原来是static或者dchp,会有连不上xshell或者安装时提示“权限不够”的报错,所以请手动改成none;
ONBOOTS一定是yes,不然后面会有子电脑联不通的情况;
IPADDR,GATEWAY,DNS1是之前配置过的,PREFIX是配置完默认的24不用改。如果之前没有配置步骤,这四个参数大概不在这个文件里,可以自己手动敲进去;
不要忘记修改后重启虚拟机
reboot
如果想查看虚拟机有没有连接上网络,可以在登录后输入:
ping 8.8.8.8
现在有“一主二仆”三台子电脑需要我们操作,来回切换比较麻烦,所以要借助同步软件的帮助,比如Xshell和MobaXterm。本篇主要使用MobaXterm。
下载地址(不要钱版):MobaXterm v22.1家庭版
如果想学习完整操作教程,详情参考:MobaXterm详细使用教程
本次部署只需要把三台子电脑连接到Moba上就可以,所以简单介绍一下操作:
1.打开Moba,左上角点击“Session”;
2.点击SSH,在Remote host输入某台子电脑的子网IP,选中Specify username并输入root,点击OK
PS:这里还遇到一个小问题,就是虚拟机和Moba连接不上,我的问题是:
1.Win主机没有下载OpenSSH服务器,具体操作:windows安装OpenSSH
2.VMnet8在自己主机上没有显示,具体操作:主机上没有VMnet8桥接网络解决办法
说实话连不上的原因多种多样,还可能是防火墙没关什么的,上述两个做法行不通可以再查查
都连上以后,MultiExec键可以让三台子电脑同步操作:
同步后展示:
MultiPaste实现一键同步粘贴,想退出同步就Exit multi-execution mode;
如此,我们就可以进入kubespray一键部署kubernetes的操作了
hostname
hostnamectl set-hostname <your_hostname>
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
swapoff -a && free –h
service dnsmasq stop && systemctl disable dnsmas
都关好了一些输出如图所示,防火墙有输出,swap有输出,dnsmasq有输出:
cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
vm.overcommit_memory = 0 #这个参数可以0可以1 但是0的参数下权限较小(也更稳定),可以自己选择
EOF
sysctl -p /etc/sysctl.d/kubernetes.conf
modprobe br_netfilter
然后再生效一下,发现不报错了,这个的原理参考:配置内核参数报sysctl
yum remove -y docker*
rm -f /etc/docker/daemon.json
ssh-keygen
cat /root/.ssh/id_rsa.pub
mkdir -p /root/.ssh
echo "ssh-rsa " >> /root/.ssh/authorized_keys
这里面秘钥只是举个例子,要把自己的复制进去:
echo "<上一步复制的pubkey>" >> /root/.ssh/authorized_keys
此时可以结束同步操作
ssh 192.168.232.101#
中间可能要敲个yes,但是只要不需要输一遍root密码就是胜利
测完了别忘了登出,不然会一直操作的是另外一个节点(血泪教训)
exit
如果不放心可以所有节点之间都试一遍,理论上都是免密登录的
yum install -y epel-release python36 python36-pip git
wget https://github.com/kubernetes-sigs/kubespray/archive/v2.15.0.tar.gz
tar -xvf v2.15.0.tar.gz && cd kubespray-2.15.0
cat requirements.txt
直接安装经常报错或者拉不下来,建议直接先升级pip:
pip3.6 install --upgrade pip
正式安装:
pip3.6 install -r requirements.txt
cp -rpf inventory/sample inventory/mycluster
可以在moba的侧边栏文件夹展示栏看是不是生成了一个sample文件
export USE_REAL_HOSTNAME=true
export CONFIG_FILE=inventory/mycluster/hosts.yaml
declare -a IPS=(192.168.232.100 192.168.232.101 192.168.232.102)#换成自己的三个ip,注意顺序
python3 contrib/inventory_builder/inventory.py ${IPS[@]}
vi inventory/mycluster/hosts.yaml
vi inventory/mycluster/group_vars/all/containerd.yml
vi inventory/mycluster/group_vars/all/all.yml
vi inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
16位可以满足大部分网段需求了,如果不想和我一样,注意200/233这个部分的网段要不一样就好
还有一个需要修改的地方:
这里默认是docker,本篇用的是container,所以修改成containerd,然后保存退出
vi ./inventory/mycluster/group_vars/etcd.yml
vi ./inventory/mycluster/group_vars/k8s-cluster/addons.yml
这里主要把注释掉的dashboard恢复
然后把ingress_nginx_enabled参数从false修改成true
配置完成了,终于开始一键部署,这里给个链接直接下载kubernetes的二进制文件和镜像,会比较节省时间:
kube二进制镜像和文件 提取码:mrj9
根目录是“/”这个目录,如图:
直接拖进来:
完成,三台都要拖
cd /
tar -zxvf kubespray-k8s-releases-v2.15.0.tar.gz
sudo yum -y update
PS:如果网不好,下载中断了或者强制中断了,在重新运行之前,记住删除/run/yum.pid文件,不然再次运行会报错“另一个进程在进行”
同样,在一键部署之前,要先回到Kubespray-2.15.0的目录下:
cd ~
cd kubespray-2.15.0
设置好后,打开科学上网,然后运行一键部署命令,注意,命令只在一台master上进行:
ansible-playbook -i inventory/mycluster/hosts.yaml -b cluster.yml -vvvv
得到上图结果即配置成功
这个过程非常漫长,而且很吃网络稳定性,科学上网/代理稍微不稳就寄了,所以建议在宽带稳定、网络心情好的时候一键部署(手动滑稽
4.5 验证
都完成之后,可以再用命令行验证一下是否配置成功:
crictl ps
只有部署成功了,crictl才不会报错
上述就是保姆级k8spray配置全流程,如果有新的奇奇怪怪的bug欢迎一起交流解决