利用virtualBox和vagrant搭建K8S集群简要步骤:
一、Vagrantfile
Vagrant.configure("2") do |config| (1..3).each do |i| config.vm.define "k8s-node#{i}" do |node| # 设置虚拟机的Box node.vm.box = "centos/7" # 设置虚拟机的主机名 node.vm.hostname="k8s-node#{i}" # 设置虚拟机的IP node.vm.network "private_network", ip: "192.168.56.#{99+i}", netmask: "255.255.255.0" # 设置主机与虚拟机的共享目录 # node.vm.synced_folder "~/Documents/vagrant/share", "/home/vagrant/share" # VirtaulBox相关配置 node.vm.provider "virtualbox" do |v| # 设置虚拟机的名称 v.name = "k8s-node#{i}" # 设置虚拟机的内存大小 v.memory = 2048 # 设置虚拟机的CPU个数 v.cpus = 2 end end end end
我电脑就16G的内存,有些勉强,虚拟机内存大小就设置2G好了。
cmd窗口运行:vagrant up
二、开启密码访问
开启密码访问的目的主要就是方便用XShell来直接连接。
PS D:\programtools\k8s> vagrant ssh k8s-node1
[vagrant@k8s-node1 ~]$ su root
Password: vagrant
[root@k8s-node1 vagrant]# vi /etc/ssh/sshd_config
[root@k8s-node1 vagrant]# grep 'PasswordAuth' /etc/ssh/sshd_config
#PasswordAuthentication yes
PasswordAuthentication yes
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication, then enable this but set PasswordAuthentication
[root@k8s-node1 vagrant]#
把这个no 改为 yes
[root@k8s-node1 vagrant]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service
记得重启这个服务。或者重启虚拟机也是一样。
三、设置虚拟机网络
1. 管理 --> 全局设定-->网络
2. 针对每一个node,网络设置选择NAT网络,记得重新生成一个mac地址,否则会缓存使用到之前老的
最终需要的效果,默认网卡的ip不相同。因为都在一个机器上,摒弃原来一个ip端口转发的方式。默认网卡之间的ip都能相互ping通。
四、设置linux环境
关闭防火墙和linux默认安全策略,这样就可以较少我们之后因为安全策略导致的一些麻烦。
[root@k8s-node3 ~]# systemctl stop firewalld
[root@k8s-node3 ~]# systemctl disable firewalld
[root@k8s-node3 ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
[root@k8s-node3 ~]# swapoff -a
[root@k8s-node3 ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# disabled - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of disabled.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
关闭swap(内存交换)
[root@k8s-node3 ~]# swapoff -a
[root@k8s-node3 ~]# setenforce 0 临时
[root@k8s-node3 ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab 永久
[root@k8s-node3 ~]# free -g 验证swap必须是0
total used free shared buff/cache available
Mem: 1 0 1 0 0 1
Swap: 0 0 0
五、添加主机名与ip的对应关系
首先,每一个主机的名字不能是localhost
[root@k8s-node2 ~]# hostname
k8s-node2
如果按上述步骤应该是没问题的,如果有问题,可以尝试修改:
hostnamectl set-hostname <newhostname>
其次,添加主机名与ip的对应关系,ip用的是默认网卡的
vi /etc/hosts
10.0.2.5 k8s-node1
10.0.2.4 k8s-node2
10.0.2.15 k8s-node3
修改每个主机的host的文件,让他们能够互相感知对方, 如果能够在k8s-node1 ping k8s-node3 ping通了,上述配置正确
接下来,将桥接IPV4流量传递到iptables的链:
[root@k8s-node1 ~]# cat > /etc/sysctl.d/k8s.conf << EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
[root@k8s-node1 ~]# sysctl --system
最后备份以下当前环境: