这里我们通过Kind来在本地搭建部署K8s环境,以用于学习、测试
基础环境部署
安装Kind
Kind(Kubernetes In Docker)是一个使用Docker构建、部署Kubernetes集群的工具。支持Linux、macOS以及Windows操作系统。非常适合用来在本地搭建Kubernetes集群的开发、测试环境。前面提到Kind是基于Docker的,故使用Kind还需要安装Docker,这里关于Docker安装不再赘述。这里在Mac环境下,我们直接利用brew工具安装Kind
1 | # 安装 Kind |
安装完毕后,查看Kind版本信息,确认安装成功
1 | # 查看Kind版本信息 |
如下所示,kind安装成功
安装kubectl
kubectl是Kubernetes的命令行工具,可以让我们通过命令访问、操作、管理Kubernetes集群。brew安装方法如下
1 | # 安装 kubectl |
安装完毕后,查看kubectl版本信息,确认安装成功
1 | # 查看kubectl版本信息 |
如下所示,kubectl安装成功
搭建K8s集群
搭建单节点集群
一切准备就绪后,我们就可以通过Kind直接使用命令搭建一个K8s集群。此时其是一个单节点的K8s集群
1 | # 创建一个名为 my-k8s-cluster-1 的K8s集群 |
如下所示,通过Docker也不难看出,K8s集群搭建成功
这里补充说明下,在第一次通过Kind创建集群过程中。如果Docker本地没有node镜像会先需要拉取镜像,进而导致该命令执行阻塞时间较长。故此时我们先中止该命令执行,并通过上图红框确定当前使用node镜像信息为kindest/node:v1.24.0。然后利用docker pull命令先拉取该镜像到本地后,再利用创建Kind创建K8s集群
1 | # 拉取 kindest/node:v1.24.0 的Docker镜像 |
搭建多节点集群
如果期望通过Kind搭建多节点集群,可以通过配置文件实现。下面是创建一个包含2个控制平面节点、3个工作节点的K8s集群的配置文件。同时为了便于通过宿主机访问节点,还可以对部分端口进行映射
1 | # Kind 创建K8s集群 配置文件 |
然后通过—config选项指定配置文件即可,具体创建集群的命令如下所示
1 | # 使用my-k8s-cluster-3.yaml配置文件,创建一个名为 my-k8s-cluster-3 的K8s集群 |
效果如下所示,集群创建成功
上图我们发现工作节点的ROLES列显示为
1 | # 对指定节点添加名为node-role.kubernetes.io/worker的标签信息 |
效果如下所示
Note :这里多节点集群使用了2个控制平面节点,实际测试、开发的集群中最好只使用1个控制平面节点!!否则当Docker重启后,对于存在多个控制平面节点的集群而言,在0.14.0版本的Kind下有极大概率导致集群无法访问、使用,只能通过删除原异常集群、重建集群解决
部署K8s仪表盘Dashboard
Kubernetes还提供了一个基于Web的可视化管理页面——Dashboard。通过下述链接下载部署Dashboard的配置文件,并重命名为dashboard.yaml
1 | # 部署 Dashboard 配置文件 |
然后编写一个名为service-account-secret.yaml的配置文件,用于创建服务账户、绑定角色实现授权。与此同时,由于K8s 1.24版本开始,创建服务账户时,不再自动生成包含Token的Secret对象。故我们也需要在该配置文件一并创建该服务账户的Secret。完整配置文件如下所示
1 | # 在kubernetes-dashboard命名空间下创建名为 admin-user 的服务账户 |
准备好上述两个配置文件后,依次通过kubectl apply命令应用。命令如下所示
1 | # 部署 Dashboard |
执行结果如下所示
我们通过service-account-secret.yaml配置文件,给kubernetes-dashboard命名空间下名为admin-user的服务账户手动创建了一个名为admin-user-secret的Secret。现在我们就可以通过该Secret获取相应的Token了。具体地,可以通过kubectl describe、kubectl get两种方式获取。但需要注意的是,前者显示是Token的原文,而后者则是对Token进行了Base64编码。此处我们需要拿到Token的原文,故推荐前者。无需进行Base64解码
1 | # 该方式下 Token 为原文 |
命令结果如下所示
现在,我们在本地启动K8s Proxy,命令如下所示
1 | # 前台启动K8s代理, 占用终端窗口 |
至此,我们就可利用浏览器打开K8s Dashboard的页面地址了
1 | # K8s Dashboard 页面地址 |
打开后,选择Token认证方式,并填写我们刚刚获得的Token即可登录进入
DashBoard可视化效果如下所示
命令
Kind基本命令
查看集群列表
1 | kind get clusters |
删除指定集群
—name选项用于指定欲删除集群的名称
1 | # 删除名为 my-k8s-cluster-2 的集群 |
删除所有集群
—all用于指示删除所有集群
1 | # 删除所有集群 |
kubectl基本命令
查看当前上下文
kubectl用于操作、管理K8s集群。故当存在多个集群的时候,我们需要确定当前操作的是哪个集群。即所谓的Context上下文。具体地,通过下列命令实现
1 | # 查看 当前上下文信息 |
查看上下文列表
通过下述命令,可以查看全部的上下文列表
1 | # 查看上下文列表、当前上下文信息 |
效果如下所示。其中 CURRENT 列中标记为*星号的行,即为当前上下文。即正在操作的K8s集群;而NAME则表示上下文的名称
切换上下文
如果期望操作其他的集群。则只需将上下文切换到该集群的上下文即可
1 | # 切换当前上下文 |
效果如下所示
重命名上下文名称
同时还可以对上下文的名称进行重命名
1 | # 将指定的上下文 修改为 新名称 |
效果如下所示
命令补全
由于kubectl的命令较长较复杂,故命令补全很有必要。这里以Oh-My-Zsh环境下进行说明,通过安装相应的插件实现命令补全
1. 下载插件
1 | # 进入Oh-My-Zsh的plugins目录 |
2. 使用插件
通过下述命令修改.zshrc文件,然后在plugins配置项中添加kubectl
1 | # 修改.zshrc文件 |
修改后如下所示
最后通过下述命令生效配置即可,此时即可实现kubectl命令补全
1 | source ~/.zshrc |
参考文献
- Kubernetes in Action中文版 Marko Luksa著
- 深入剖析Kubernetes 张磊著