搭建 k8s 集群

0x00: 目标

基于Ubuntu 20.04系统使用kubeadm搭建一个双节点的k8s集群, 集群版本为v1.20.4, 并安装下列组件:

0x01: 节点定义

在实验中会有以下节点定义:

  • 宿主机指的是运行multipass的机器

  • 虚拟机指的是multipass内运行的GuestOS

  • 主节点指的是运行集群控制面板的节点, 也是引导集群的节点

  • Worker节点指的是加入到主节点的k8s节点

0x02: 创建虚拟机

由于MacOS和Windows都不是原生支持Docker的系统, 所以本实验统一使用multipass虚拟机进行, 按照官网的指引将multipass安装到宿主机上, 然后在宿主机上执行下列命令初始化主节点虚拟机

$ multipass launch -c 2 -m 2G -d 50G --name=k8s-master

使用下列命令初始化Worker节点虚拟机

-c参数指定虚拟机允许使用的CPU核心数, -m参数指定虚拟机允许使用的运行内存, -d参数指定虚拟机允许使用的磁盘空间

虚拟机运行起来后并不会马上占用指定的资源, 这里的参数只是用作限制虚拟机使用资源的最高水位

等待虚拟机创建完毕后验证虚拟机状态

0x03: 初始化虚拟机

本步骤需要在主节点和Worker节点上都走一遍

使用multipass shell $NAME命令打开主节点的终端($NAME替换成主节点虚拟机名称和Worker节点虚拟机名称), 为了方便后续的实验, 为虚拟机设置一个root密码

修改完root密码后使用su切换到root身份

接下来运行初始化节点脚本, 这个步骤主要是安装Docker和k8s的组件, 以及进行一些必要的系统参数调整

脚本运行完毕后虚拟机会自动重启, 等待一会使用multipass ls命令确认虚拟机状态

0x04: 预拉取镜像

本步骤在主节点上进行, 如果想要加快Worker节点初始化过程也可以在Worker节点上运行, 拉取镜像会占用大量带宽, 不要在公司上班时间拉取

拉取的镜像包含:

  • k8s组件镜像

  • etcd镜像

  • flannel

  • traefik

  • kubernetes-dashboard

0x05: 初始化集群

本步骤在主节点上进行

上述命令使用kubeadm init命令初始化一个集群, 此命令的可用参数列表可以参考官方文档, 下面解释一下用到的几个参数

  • --image-repository指定初始化过程使用的镜像仓库, 由于众所周知的原因

  • --node-name指定节点的名称, 默认是取hostname, 这里使用节点的IP作为节点名称

  • --pod-network-cidr指定Pod的CIDR范围, CIDR与CNI强关联

初始化完毕后会输出以下内容

按照上面的标注执行三条命令将kubeconfig移动到kubectl的默认路径, 然后将加入节点的命令妥善保存下面步骤需要用到

此时可以运行kubectl判断集群状态

注意, kubeadm默认会给主节点打上一个NoSchedule的污点, 这会导致业务的Pod无法调度到主节点, 如需去掉这个污点自行参考官方文档

0x06: 初始化Worker节点

本步骤在Worker节点上进行

注意, 需要执行的命令是上一步骤保存的命令, 另外需要额外加上--node-name参数

预期输出内容如下

如需要添加多个节点, 重复上面步骤即可

回到主节点查看Worker节点的状态

0x07: 安装flannel

本步骤在主节点上进行

由于集群缺少CNI组件, 所有节点都处于NotReady状态, 这里选用flannel作为集群CNI组件

稍等片刻使用下面命令判断flannel部署状态

等到两个flannel的Pod都已经Running状态, 再次查看节点状态

此时节点已经Ready!

0x08: 部署kubernetes-dashboard

本步骤在主节点上进行

kubernetes-dashboard是通用k8s集群控制面板, 方便以可视化方式操作集群和获取集群状态

稍等片刻使用下面命令判断kubernetes-dashboard部署状态

0x09: 访问kubernetes-dashboard

本步骤在主节点上进行

上面的03-kubernetes-dashboard.yaml配置文件使用的是ClusterIP类型的Service, 如需访问这个Service需要使用port-forward命令做端口转发, 然后就可以使用宿主机访问主节点虚拟机的IP访问

kubectl port-forward运行过程中不能关闭shell窗口

切换到宿主机获取主节点的IP地址

打开宿主机的浏览器, 访问http://192.168.64.30:9090即可访问kubernetes-dashboard

最后更新于

这有帮助吗?