【云原生】基于Kind的Kubernetes环境部署

安装Kind

Kind(Kubernetes In Docker)是一个使用Docker构建、部署Kubernetes集群的工具。支持Linux、macOS以及Windows操作系统。非常适合用来在本地搭建Kubernetes集群的开发、测试环境。前面提到Kind是基于Docker的,故使用Kind还需要安装Docker,这里关于Docker安装不再赘述。这里在Mac环境下,我们直接利用brew工具安装Kind

bash 复制代码
# 安装 Kind
brew install kind

安装完毕后,查看Kind版本信息,确认安装成功

bash 复制代码
# 查看Kind版本信息
kind version

如下所示,kind安装成功

安装kubectl

kubectl是Kubernetes的命令行工具,可以让我们通过命令访问、操作、管理Kubernetes集群。brew安装方法如下

bash 复制代码
# 安装 kubectl
brew install kubectl

安装完毕后,查看kubectl版本信息,确认安装成功

bash 复制代码
# 查看kubectl版本信息
kubectl version --client

搭建K8s集群

搭建单节点集群

一切准备就绪后,我们就可以通过Kind直接使用命令搭建一个K8s集群。此时其是一个单节点的K8s集群

lua 复制代码
# 创建一个名为 my-k8s-cluster-1 的K8s集群
kind create cluster --name my-k8s-cluster-1

如下所示,通过Docker也不难看出,K8s集群搭建成功

这里补充说明下,在第一次通过Kind创建集群过程中。如果Docker本地没有node镜像会先需要拉取镜像,进而导致该命令执行阻塞时间较长。故此时我们先中止该命令执行,并通过上图红框确定当前使用node镜像信息为kindest/node:v1.24.0。然后利用docker pull命令先拉取该镜像到本地后,再利用创建Kind创建K8s集群

搭建多节点集群

如果期望通过Kind搭建多节点集群,可以通过配置文件实现。下面是创建一个包含2个控制平面节点、3个工作节点的K8s集群的配置文件。同时为了便于通过宿主机访问节点,还可以对部分端口进行映射

yaml 复制代码
# Kind 创建K8s集群 配置文件

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4

# 该集群包含2个控制平面节点、3个工作节点
nodes:
- role: control-plane
  # 设置端口映射, 便于通过宿主机访问节点
  extraPortMappings:
  - containerPort: 80
    hostPort: 8880
    listenAddress: "127.0.0.1"
  - containerPort: 443
    hostPort: 8443
    listenAddress: "127.0.0.1"
- role: control-plane
  # 设置端口映射, 便于通过宿主机访问节点
  extraPortMappings:
  - containerPort: 80
    hostPort: 9980
    listenAddress: "127.0.0.1"
  - containerPort: 443
    hostPort: 9443
    listenAddress: "127.0.0.1"
- role: worker
- role: worker
- role: worker

然后通过--config选项指定配置文件即可,具体创建集群的命令如下所示

perl 复制代码
# 使用my-k8s-cluster-3.yaml配置文件,创建一个名为 my-k8s-cluster-3 的K8s集群
kind create cluster --name my-k8s-cluster-3 --config my-k8s-cluster-3.yaml

效果如下所示,集群创建成功

上图我们发现工作节点的ROLES列显示为,只需给名为 node-role.kubernetes.io/worker 的标签打上相应的标签值即可

ini 复制代码
# 对指定节点添加名为node-role.kubernetes.io/worker的标签信息 
kubectl label node <节点名称> node-role.kubernetes.io/worker=<标签值>

# 对名为my-k8s-cluster-3-worker3的节点添加名为node-role.kubernetes.io/worker、值为worker的标签信息 
kubectl label node my-k8s-cluster-3-worker3 node-role.kubernetes.io/worker=worker

效果如下所示

「Note」 :这里多节点集群使用了2个控制平面节点,实际测试、开发的集群中最好只使用1个控制平面节点!!否则当Docker重启后,对于存在多个控制平面节点的集群而言,在0.14.0版本的Kind下有极大概率导致集群无法访问、使用,只能通过删除原异常集群、重建集群解决

部署K8s仪表盘Dashboard

Kubernetes还提供了一个基于Web的可视化管理页面------Dashboard。通过下述链接下载部署Dashboard的配置文件,并重命名为dashboard.yaml

raw.githubusercontent.com/kubernetes/...

然后编写一个名为service-account-secret.yaml的配置文件,用于创建服务账户、绑定角色实现授权。与此同时,由于K8s 1.24版本开始,创建服务账户时,不再自动生成包含Token的Secret对象。故我们也需要在该配置文件一并创建该服务账户的Secret。完整配置文件如下所示

yaml 复制代码
# 在kubernetes-dashboard命名空间下创建名为 admin-user 的服务账户
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

---

# 将服务账户admin-user绑定到内置的ClusterRole集群角色cluster-admin上, 实现授权
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

---

# 对名为admin-user的服务账户手动创建Secret
apiVersion: v1
kind: Secret
metadata:
  name: admin-user-secret
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/service-account.name: admin-user
type: kubernetes.io/service-account-token

准备好上述两个配置文件后,依次通过kubectl apply命令应用。命令如下所示

bash 复制代码
# 部署 Dashboard
kubectl apply -f dashboard.yaml

# 创建服务账户并授权、创建Secret
kubectl apply -f service-account-secret.yaml

我们通过service-account-secret.yaml配置文件,给kubernetes-dashboard命名空间下名为admin-user的服务账户手动创建了一个名为admin-user-secret的Secret。现在我们就可以通过该Secret获取相应的Token了。具体地,可以通过kubectl describe、kubectl get两种方式获取。但需要注意的是,前者显示是Token的原文,而后者则是对Token进行了Base64编码。此处我们需要拿到**「Token的原文,故推荐前者」**。无需进行Base64解码

现在,我们在本地启动K8s Proxy,命令如下所示

bash 复制代码
# 前台启动K8s代理, 占用终端窗口
kubectl proxy

至此,我们就可利用浏览器打开K8s Dashboard的页面地址了

bash 复制代码
# K8s Dashboard 页面地址
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

打开后,选择Token认证方式,并填写我们刚刚获得的Token即可登录进入

DashBoard可视化效果如下所示

相关推荐
AskHarries14 分钟前
Java字节码增强库ByteBuddy
java·后端
佳佳_28 分钟前
Spring Boot 应用启动时打印配置类信息
spring boot·后端
许野平2 小时前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
齐 飞3 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
LunarCod4 小时前
WorkFlow源码剖析——Communicator之TCPServer(中)
后端·workflow·c/c++·网络框架·源码剖析·高性能高并发
码农派大星。4 小时前
Spring Boot 配置文件
java·spring boot·后端
杜杜的man5 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*5 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
llllinuuu5 小时前
Go语言结构体、方法与接口
开发语言·后端·golang
cookies_s_s5 小时前
Golang--协程和管道
开发语言·后端·golang