TABLE OF CONTENTS
Windows可以使用VMWare搭建linux集群,用于日常学习、工作开发测试。自身电脑配置较好的情况下,可以节省购买云服务器的开销。
系统资源
下面是我根据集群最少节点要求,自身电脑配置来规划的集群信息。
kubernetes集群:最少3台,1 master,2 worker
etcd集群:最少3台,1 master, 2 node
mysql主从同步集群:最少2台,1 master,1 slave
IP | 角色 | 主机名 | 组件 | 配置 |
---|---|---|---|---|
192.168.2.183 | Windows10,个人PC | Tsukasa | VMWare | - |
192.168.2.100 | deploy | tsukasa | ansible, docker, harbor | 4Cx2Gx20G |
192.168.2.100 | kubernetes | k8s-master | kubectl, kubelet, kubeadm, flnanel | 2Cx2Gx20G |
192.168.2.101 | kubernetes | k8s-worker01 | kubectl | 2Cx1Gx20G |
192.168.2.102 | kubernetes | k8s-worker02 | kubectl | 2Cx1Gx20G |
192.168.2.103 | etcd | etcd01 | etcd | 2Cx1Gx20G |
192.168.2.104 | etcd | etcd02 | etcd | 1Cx1Gx10G |
192.168.2.105 | etcd | etcd03(leader) | etcd | 1Cx1Gx10G |
192.168.2.106 | mysql | mysql01 | mysql | 2Cx1Gx15G |
192.168.2.107 | mysql | mysql02 | mysql | 2Cx1Gx15G |
System:Centos 7,64位
User:root/tsukasa
1 | [tsukasa@tsukasa ~]$ cat /proc/version |
创建虚拟主机
网络上创建虚拟主机的教程很多,为了方便,网络设置通过桥接模式上网,下面上面一章节的系统资源创建主机。
k8s-master主机配置示例:
安装过程中,可以在下面图形化界面进行网络配置,也可以参照下一章节进行网络配置。
网络配置
通过桥接模式上网,下面配置在所有节点执行。
1、修改hostname
如果前期设置hostname不符合预期,可以执行下面命令,或者修改/etc/hostname
文件
1 | hostnamectl set-hostname <hostname> |
2、修改虚拟网卡置
(1)执行命令ifconfig
,查看虚拟网卡位ens33
,修改网卡配置命令:vim /etc/sysconfig/network-scripts/ifcfg-ens33
1 | TYPE=Ethernet |
重要参数
- BOOTPROTO:默认是dhcp,动态分配ip地址,这里指定为static,后续ip则不会改变
- NAME, DEVICE: 与
ifconfig
命令中看到的网卡名称保持一致 - ONBOOT:yes表示开机自启
- IPADDR, NETMASK, GATEWAY, DNS1:根据自己的网络配置进行配置即可宿主机器(Windows)查询
ipconfig
,查到网关为192.168.2.1,子网掩码为255.255.255.0,个人PC地址为192.168.2.183。这里我们手动给k8s-master主机分配IP为192.168.2.100,不与当前局域网下其他ip冲突即可。DNS服务器选择阿里云的公共免费DNS -> 223.5.5.5或者223.6.6.6
(2)修改完成后,重启网络服务
1 | systemctl restart network.service |
如果配置成功
- 执行
ping baidu.com
可以正常联网。 - 局域网主机之间可以互相ping通,个人PC可以通过
ping 192.168.2.100
SSH免密登录
按照系统资源创建好所有主机并完成网络配置后,可以配置下deploy跳板机SSH免密登陆集群中的其他机器,方便后续通过ansible进行批量操作。
基本原理
SSH通过RSA非对称密钥算法实现身份验证,客户端A把公钥发给服务端B,服务端用客户端的公钥加密一段随机字符串返回给客户端,客户端用私钥解密再次发给服务端,服务端验证通过,在~/.ssh/authorized_keys
中追加客户端公钥后,后续可以免密登陆。
操作步骤
服务端配置允许公钥授权登陆
所有主机需要修改下面配置,允许公钥授权登陆。
vi /etc/ssh/sshd_config
1 | RSAAuthentication yes |
重启sshd服务
1 | systemctl restart sshd |
客户端生成RSA公私钥对
客户端切换到需要免密登陆的用户,执行下面命令生成RSA公私钥对,系统自动生成~/.ssh目录和公私钥。
1 | # 在deploy主机下执行 |
SSH免密配置
方法一:ssh-copy-id(推荐)
单台服务器配置免密登陆,后续可以通过ssh user@host直接登陆。
1 | ssh-copy-id -i ~/.ssh/id_rsa.pub user@host |
通常linux集群中会根据业务分配一个业务用户,后续跳板机可以通过ssh <ip>
更简洁的方式登陆。我所有主机的业务用户都为tsukasa
因为集群中的机器很多,可以通过循环的方式,批量授权。具体步骤:
确认所有服务器设置好允许通过公钥授权登陆后,登陆到deploy主机,切换到想要免密登陆的用户如tsukasa,执行下列命令完成批量授权。
1 | for xIp in 192.168.2.{100..107}; do ssh-copy-id -i ~/.ssh/id_rsa.pub $xIp; done |
方法二:手动在服务端的authorized_keys文件追加客户端公钥
这种方法需要在每一台服务器上执行,追加完成后,在deploy主机中分别验证:
1 | ssh -v user@host |
MobaXterm或shell客户端分组维护服务器信息
可能遇到的问题
~/.ssh目录和authorized_keys文件的权限问题
Linux出于安全的考虑,~/.ssh目录目录权限和authorized_keys文件权限不能过大,手动创建场景要修改访问权限:
1 | chmod 700 ~/.ssh |
SSH服务端可能配置了不允许root用户登录
修改/etc/ssh/sshd_config
,将PermitRootLogin no
改为PermitRootLogin yes
Linux创建用户设置密码提示:BAD PASSWORD: The password is shorter than 8 characters
linux在系统初始化的时候可以强制创建密码少于8个字符的用户,初始化成功通过命令行终端创建会失败,提示BAD PASSWORD: The password is shorter than 8 characters
1 | groupadd tsukasa |
通常地,在生产环境我们不应该设置过于简单的密码,因为是个人开发环境,没有必要设置那么复杂。此时,可以这样进行密码设置:
1 | echo 密码 |passwd --stdin 用户名 |
ansible工具
为了后续操作在各个服务器主机批量执行,减少重复工作,选择基于SSH协议传输数据的ansible工具。
因为所有操作在跳板机进行,ansible在deploy主机安装即可。
1 | yum -y install https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/ansible-2.9.27-1.el7.ans.noarch.rpm |
设备管理主机列表ansible配置
在/etc/ansible/hosts
文件中配置集群分组信息。
1 | [master] |
禁用主机检查
vi /etc/ansible/ansible.cfg
1 | uncomment this to disable SSH key host checking |
配置时间同步
搭建集群通常要求集群节点必须精确一致,因此所有机器都需要配置时间同步,在deploy主机执行ansible命令
1 | ansible all -m command -a "yum install ntpdate -y" |
附录
声明:本站所有文章均为原创或翻译,遵循署名 - 非商业性使用 - 禁止演绎 4.0 国际许可协议,如需转载请确保您对该协议有足够了解,并附上作者名 (Tsukasa) 及原文地址