K8S本地VirtualBox搭建

目录

VirtualBox 准备虚拟机环境

软件和系统准备

下载CentOS 7.X镜像

centos 7.9

https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Everything-2009.iso

centos 7.6(推荐,可以避免虚拟机配置网络时出现问题)

https://mirrors.aliyun.com/centos-vault/7.6.1810/isos/x86_64/CentOS-7-x86_64-Everything-1810.iso
建议下载7.6版本

下载VirtualBox

VirtualBox 6.1.18

https://download.virtualbox.org/virtualbox/6.1.18/VirtualBox-6.1.18-142142-Win.exe

安装VirtualBox和创建CentOS 7.6虚拟机

ViratualBox安装
1、选好安装地方。
2、下一步就行了。
3、过程中需要安装虚拟网卡,这里需要允许。
VirtualBox创建虚拟机安装CentOS
1、创建的时候名字编上号,后面需要三台虚拟机,不编号后面就不好区分,用以弄混。这里先创建一台,后面用复制来创建其他两台虚拟机。
2、创建虚拟机的时候,给出至少2个G的内存。
3、创建好后启动,选择下载好的镜像。
4、选择镜像后就是一些安装工作。

K8S本地VirtualBox搭建
K8S本地VirtualBox搭建

配置网络

    这里选择NAT 网络和仅主机(Host Only)网络。“NAT 网络”用来访问外网,“仅主机(Host Only)网络”用来虚拟主机之间、虚拟主机和宿主机之间通信。
    NAT网络也可以用“桥接网卡”代替,但是对于多网卡的用户,比如有无线网和有线网的电脑。如果后面切换了上网方式,需要重新配置网络。
    NAT网络用DHCP的方式获取IP,仅主机(Host Only)网络用固定IP的方式以供其他虚拟机和宿主机访问。
    配置“仅主机(Host Only)网络”(如果使用了NAT 网络并且访问外网不通的情况下需要配置“NAT 网络”)
1、启用一个连接方式为“仅主机(Host Only)网络”的网卡,记下网卡MAC地址,在虚拟机设置->网络->网卡n(仅主机(Host Only)网络)
K8S本地VirtualBox搭建
2、第二步,打开虚拟机,输入ip add或者ifconfig,ifconfig可能会没有安装。利用前面两个命令查看虚拟机的IP地址。虚拟机的“仅主机(Host Only)网络”的IP地址段在安装virtual box安装的那个虚拟网卡上看。这一步的意义在于可以先用ssh工具连上虚拟机,这样操作更加方便。“NAT 网络”在Virtual Box的管理->全局设定->网络。
2.1、仅主机(Host Only)网络查看方式
K8S本地VirtualBox搭建
K8S本地VirtualBox搭建
可以看到红圈的192.168.56.1就是虚拟网卡的网关地址,那虚拟机中192.168.56开头的就是host only的网卡的IP地址,我们在宿主机可以用这个地址来连接虚拟机。
2.2、NAT 网络设置和查看方式。
K8S本地VirtualBox搭建

3、利用ssh工具连上虚拟机后,如果ifconfig工具没有装上,先把ifconfig装上。如果没有公网,比如** ping baidu.com **的时候ping不通,这是改虚拟机"NAT 网络"这张网卡的配置在虚拟机中有问题,这里需要在后面的步骤把该网卡也配置上。

sudo yum install net-tools -y

装上过后用ifconfig查看ip地址,网卡的名字,和网卡的mac地址,后期好确认是否修改成功。
4、进入到虚拟机的**/etc/sysconfig/network-scripts**

cd /etc/sysconfig/network-scripts

这里一般会有一个文件名为**ifcfg-**开头的文件(上面两个镜像一般是文件名为ifcfg-enp0s3),可以使用这个文件作为其中一个网卡的配置文件,再创建一个网卡配置文件,一般为ifcfg-enp0s8(ifcfg-必须,后面的名字随意取)。

vim ifcfg-enp0s8

添加配置文件,下面是模板

TYPE=Ethernet
HWADDR=08:00:27:d9:7d:47#改为上面复制的网卡的mac地址,nat网络和host only都需要配置。
BOOTPROTO=static#如果是host only的,这里用static,如果是NAT 网络,可以使用dhcp。static表示固定网络,dhcp为从IP池中获取。
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=enp0s8#这里注意,不同网卡配置名字不一样
UUID=b6dca412-c3cb-426d-b4d2-45c1374efa4c#这里用uuidgen生成
DEVICE=enp0s8#这里注意,不同网卡配置名字不一样
ONBOOT=yes#开机启动,这里注意,初始化进系统的时候,有一个默认的ifcfg-xxx,这里是没有开启的,所以将这里改成yes
NETMASK=255.255.255.0
GATEWAY=192.168.56.1 #网关地址,为上面虚拟网卡中的地址
IPADDR=192.168.56.152#固定的IP地址,由网关和掩码决定,一般用255.255.255.0做掩码,只修改ip地址的最后一位

6、重启network,systemctl restart network。如果启动失败,journalctl -xe查看错误原因,如果错误原因是UUID不符合规范,用uuidgen生成新的UUID。

uuidgen enp0s8 #这里的enp0s8为上面网卡配置文件的DEVICE的值

生成后重新放到配置文中,重复第6步。

注意:这里必须把网络配置通过,能访问公网和宿主机与虚拟机间能连通,特别是宿主机和虚拟机,虚拟机和虚拟机之间
7、如果上面的配置生效,这里可能ssh工具会和虚拟机之间断开,这是因为新配置的host only的配置已经生效,切换ip为配置的静态ip地址即可。这里开始复制创建好的这个虚拟机,复制2个出来,复制好后在另外的两个虚拟主机重复第5和第6步。
这里可能出现复制后的主机在经过第5和第6步后,配置不生效,网络依然不通的问题,这个时候删除掉这个虚拟机,重新复制一遍(最笨的办法)。
确认是否上述问题的办法

nmcli connection show

查看网卡配置文件中的device的值是否和UUID的值对的上。如果对不上,并且在下面会多没有连接的connection。而这个没连接connection的UUID才是你网卡配置文件中的UUID。这个时候就可以按照上面的办法尝试了。

安装k8s(Kubeadm)

CentOS的系统初始化

初始化环境

1、关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

2、关闭 selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时

3、关闭 swap

swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

4、设置主机名,方便查看。

hostnamectl set-hostname <hostname>

5、添加master和node节点添加hosts

cat >> /etc/hosts << EOF
192.168.56.100 master_100
192.168.56.101 node_101
192.168.56.101 node_102
EOF

6、将桥接的 IPv4 流量传递到 iptables 的链

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system #生效

7、时间同步,这里注意,本地安装虚拟机的,建议每次打开虚拟机都执行一次同步时间的命令。因为本地休眠或者关机后,时间就不会更新了。

yum install ntpdate -y
ntpdate time.windows.com #每次打开虚拟机都执行一次这个
安装Docker/kubeadm/kubelet(master节点和node节点都要执行)

1、安装Docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version

2、设置docker镜像地址,registry-mirrors后面的为阿里云的docker镜像地址,建议自己申请一个

cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://hrblko1e.mirror.aliyuncs.com"]
}
EOF

3、添加阿里云 kubernetes的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

4、安装 kubeadm, kubelet 和 kubectl

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
systemctl enable kubelet
部署master节点(只在master执行)

1、初始化k8s master,去除下面的\,并且将命令放在一行。apiserver-advertise-address为master的ip地址,service-cidr和pod-network-cidr为虚拟的docker内网,需要和虚拟机实际内网地址网段不同

kubeadm init \
  --apiserver-advertise-address=192.168.56.100 \ 
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.18.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16

master节点init后后出现一个node用来join到master的命令,里面包含了token等信息,但是这个有效期只有24小时,需要重新获取重新输入以下命令

kubeadm token create --print-join-command

2、指定阿里云镜像仓库地址,下面的命令是将配置文件放到k8s的默认配置文件地址,k8s会在这个文件夹内查找配置文件

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
部署node节点(只在node节点执行)

1、将node节点join到master节点,复制上面master在init时打印出来的join命令

kubeadm join 192.168.56.100:6443 --token esce21.q6hetwm8si29qxwn \
    --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

上面的token只有24小时的有效时间,如果后面节点超过了token有效期想要加入master,需要重新获取token。
2、查看node节点有无加入到master节点,下面命令在master机器执行

kubectl get nodes

这个命令会看到node节点已加入到master节点,但是他的状态时NotReady,下面会安装网络插件。

安装网络插件(master节点执行)

1、安装网络插件,下面的文件可能无法在国内下载

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

可以使用其他方法下载下来,然后使用

kubectl apply -f 本地文件地址

2、查看是否成功

kubectl get pods -n kube-system

可以看到name为kube-flannel-ds开头的,status为running的,即为成功。如果有不是running,可能node节点正在下载。
3、查看node节点状态,如果为ready,即node节点的网络插件也下载完成,如果状态不是ready,稍等一下,下载比较慢。

kubectl get nodes
测试整个集群

1、master节点执行安装nginx

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

在最后一个命令会出现node节点的nginx的状态,访问node节点的ip加端口就可以访问到nginx

上一篇:virtualbox虚拟机Centos如何和主机共享目录


下一篇:一网打尽,一文讲通虚拟机VirtualBox及Linux使用