使用虚拟机安装部署Kubernetes集群(二)

本小节接上文,这一节我们将开始部署 K8S 集群。

1. 拷贝虚拟机

本次部署的 K8s 集群由 1 个 Master 节点和 3 个 Worker 节点组成。上一节中我们已经在 master-1 节点安装了 Docker 和 K8s 运行环境,另三个节点直接将这个虚拟机拷贝三份即可。

首先我们将 master-1 虚拟机关机。在 Virtualbox 管理控制台主页面,右键 master-1 虚拟机,点击复制...

图片描述

选择专家模式:

图片描述

进入专家模式,先设定新虚拟机名称,这里使用 worker-1 方便区分,副本类型选择 完全复制,MAC地址设定 为所有网卡重新生成MAC地址。然后点击复制,virtualbox 开始复制虚拟机。

图片描述

复制完成后,可以看到控制台中出现了新的虚拟机 worker-1。

图片描述

我们一共需要三个 worker 节点,接下来再重复上面的步骤两次,完成之后我们就拥有了四台虚拟机。

图片描述

2. 配置静态IP和主机名

将所有虚拟机都启动起来,在虚拟机中使用ip a 命令查看各个虚拟机的IP地址,由于默认系统使用的DHCP服务,网卡随机获取了当前网段内空闲的IP,地址我们希望各个节点的IP能固定起来,不要随意变动。

根据当前的网络状态(192.168.1.0/24网段),我们计划节点配置如下:

Tips
不同的网络环境获取的网段、IP 地址也不一致,需要根据自己的实际情况调整,设定变更的IP地址需要确认没有被占用。

虚拟机名称 IP地址 主机名hostname
master-1 192.168.1.200 master1.node
worker-1 192.168.1.201 worker1.node
worker-2 192.168.1.202 worker2.node
worker-3 192.168.1.203 worker3.node

1. 设定 master-1 的主机名

declare -x HOSTNAME="master1.node"
hostname $HOSTNAME
cat << EOF > /etc/hostname
$HOSTNAME
EOF
cat << EOF > /etc/hosts
127.0.0.1 $HOSTNAME
192.168.1.200 master1.node
192.168.1.201 worker1.node
192.168.1.202 worker2.node
192.168.1.203 worker3.node
EOF

2. 设定 master-1 的 IP 地址:

# 默认的网卡名称就是enp0s3
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="enp0s3"
DEVICE="enp0s3"
ONBOOT="yes"
# 指定IP地址、网关和掩码,根据实际情况进行修改
IPADDR=192.168.1.200
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
DNS1=223.6.6.6

保存更改后执行:

# 重载网口配置
nmcli c reload

输入命令hostnameip a 查看master-1的主机名和IP更改。
图片描述

3. 对worker-1、 worker-2、worker-3节点进行上述操作,一定要注意主机名和IP地址变更。

3. 配置Master节点

使用宿主机的命令行工具 ssh 登录到 master-1 节点,先读取我们的 K8s 版本号:

version=`cat .k8s.version`

设定kubeadm配置文件kubeadm.yaml

cat << EOF > kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
controllerManager:
    extraArgs:
        horizontal-pod-autoscaler-use-rest-clients: "true"
        horizontal-pod-autoscaler-sync-period: "10s"
        node-monitor-grace-period: "10s"
apiServer:
    extraArgs:
        runtime-config: "api/all=true"
kubernetesVersion: "v$version"
imageRepository: "registry.aliyuncs.com/google_containers"
EOF

使用此配置文件进行 master 节点安装部署:

kubeadm init --config kubeadm.yaml

等待一段时间,部署完成,它会给我们一段提示

图片描述

master-1上执行:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Tips: 在worker节点上进行如下操作可以将节点添加到K8s集群,但现在还不急,先记下来。

kubeadm join 192.168.1.200:6443 --token 4hmk4a.4h0zrymxjmudhjmq 
    --discovery-token-ca-cert-hash sha256:edf04a8954bb2729d8d603e14e802e72109ae10346503b5b283481ce08b02186

执行kubectl get nodes查看当前节点的状态:

图片描述

发现状态为NotReady,原因是我们尚未配置网络相关的插件,一些跟k8s服务相关容器无法连接到网络。

常用的容器网络接口插件有 Flannel 、Calico、 Weave 等,这里我们选择简单易用的 weave 网络插件

kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version=$version

安装完毕后,查看当前节点状态变为Ready

图片描述

4. 配置 Worker 节点

在三个 Worker 节点上执行之前记录的增加节点指令

Tips: 记得替换成自己操作环境中获取的指令

kubeadm join 192.168.1.200:6443 --token 4hmk4a.4h0zrymxjmudhjmq 
    --discovery-token-ca-cert-hash sha256:edf04a8954bb2729d8d603e14e802e72109ae10346503b5b283481ce08b02186

耐心等待 3-5 分钟,在 master 节点执行kubectl get nodes -o wide查看节点详情,所有节点状态均为Ready

image-20200714010704387

至此,K8s 集群已经初步搭建完成。

5. 小结

我们使用 kubeadm 部署了一个“1 master + 3 worker” Kubernetes 集群,使用 Weave 网络插件,已初步可用。