使用虚拟机安装部署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
输入命令hostname
和ip 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
。
至此,K8s 集群已经初步搭建完成。
5. 小结
我们使用 kubeadm 部署了一个“1 master + 3 worker” Kubernetes 集群,使用 Weave 网络插件,已初步可用。