virtual box 部署 k8s 集群

发布时间 2023-07-13 17:41:21作者: 偶尔发呆

1. 安装 virtual box

版本:VirtualBox-6.1.42

2. 创建虚拟机,安装 centos7

新建虚拟机:

 选择网络

 

 安装 centos7 操作系统:

 安装过程中配置网络

 

 centos 安装完成后,需要修改 host-only 的网络参数

cd /etc/sysconfig/network-scripts/
vim ifcfg-enp0s8

文件内容如下:

 1 TYPE=Ethernet
 2 PROXY_METHOD=none
 3 BROWSER_ONLY=no
 4 BOOTPROTO=static
 5 DEFROUTE=yes
 6 IPV4_FAILURE_FATAL=no
 7 IPV6INIT=yes
 8 IPV6_AUTOCONF=yes
 9 IPV6_DEFROUTE=yes
10 IPV6_FAILURE_FATAL=no
11 IPV6_ADDR_GEN_MODE=stable-privacy
12 NAME=enp0s8
13 UUID=6160c659-6e3d-4525-9628-dcb6cb9a946a
14 DEVICE=enp0s8
15 ONBOOT=yes
16 IPV6_PRIVACY=on
17 IPADDR=192.168.56.8
18 NETMASK=255.255.255.0
19 GATEWAY=192.168.56.1
20 ZONE=public

重启过后,在宿主机上可通过 ssh 连接到虚拟机,虚拟机网络全部配置完成。

3. 安装 docker

参考 https://yeasy.gitbook.io/docker_practice/install/centos

4. 安装 k8s

主机名 ip 角色 os版本
k8s-master 192.168.56.7 master CentOS Linux release 7.9.2009 (Core)
k8s-node1 192.168.56.8 worker CentOS Linux release 7.9.2009 (Core)

 

4.1 在2台服务器上配置好域名

 4.2 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

4.3 关闭 SeLinux

setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

4.4 关闭 swap

swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab

4.5 安装 nfs-utils

yum install -y nfs-utils
yum install -y wget

4.6 修改 /etc/sysctl.conf

创建 sys_config.sh 脚本,文件内容如下:

# 如果有配置,则修改
sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g"  /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g"  /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g"  /etc/sysctl.conf
# #
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1"  >> /etc/sysctl.conf
# 执行命令
sysctl -p

执行脚本

chmod a+x sys_config.sh
./sys_config.sh

4.7 配置 k8s yum 源

vim k8s_yum.sh

# k8s_yum.sh 文件内容
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

chmod a+x ./k8s_yum.sh
./k8s_yum.sh

4.8 集群内所有机器上安装 kubelet, kubeadm, kubectl

yum install -y kubelet-1.18.20 kubeadm-1.18.20 kubectl-1.18.20

4.9 修改 docker cgroup driver 为 systemd

sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service

4.10 启动 kubelet

systemctl daemon-reload
systemctl restart docker
systemctl enable kubelet && systemctl start kubelet

4.11 初始化 master

kubeadm init \
--apiserver-advertise-address=192.168.56.7 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.20 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.12 根据提示,将 node 节点加入集群

# 如果忘记 token,在 master 中执行命令可重新获取 kubeadm token create --print-join-command  
kubeadm join 192.168.56.7:6443 --token fhspoz.m0lztzh3tcnoarkc \
  --discovery-token-ca-cert-hash sha256:5ee31f032672162d355219fc3f6923ae87fa27ddb7c831b1766fd6db2dea37b5

4.13 在 master 中安装 flannel

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

需要注意的是:如果集群内节点仍处于 notReady 状态,则检查 flannal 的网卡设置。

 4.14 检查节点状态