10分钟极速指南:在Mac上用Multipass轻松搭建高性能K3s集群

1,958 阅读4分钟

安装 multipass

brew install multipass

部署K3s集群

1: 检查multipass是否成功安装

  • 命令: multipass version

  • 说明: 这一步检查系统中是否已经安装了multipass工具。

    url.png

2: 创建并启动主节点虚拟机

  • 命令: multipass launch --name master --cpus 1 --memory 1G --disk 5G
  • 说明: 使用multipass创建并启动名为master的虚拟机,配置为1个CPU核心、1GB内存和5GB磁盘空间。

3: 创建并启动第一个工作节点虚拟机

  • 命令: multipass launch --name worker-node-1 --cpus 1 --memory 1G --disk 5G
  • 说明: 创建并启动名为worker-node-1的工作节点虚拟机,配置与主节点相同。

4: 创建并启动第二个工作节点虚拟机

  • 命令: multipass launch --name worker-node-2 --cpus 1 --memory 1G --disk 5G
  • 说明: 创建并启动名为worker-node-2的工作节点虚拟机,配置与前两个节点相同。 url.1.png

5: 获取主节点的IPv4地址

  • 命令: MASTER_IP=$(multipass info master | grep IPv4 | awk '{print $2}')
  • 说明: 从multipass info master命令的输出中提取主节点的IPv4地址,并将其存储在MASTER_IP变量中。

6: 在 master 节点上安装并启动K3s服务

  • 命令: multipass exec master -- /bin/bash -c "curl -sfL https://get.k3s.io | sh - && sudo systemctl enable k3s && sudo systemctl start k3s"
  • 说明: 通过multipass exec在主节点上执行命令,下载并安装K3s服务,并设置服务开机自启后启动。

7: 获取 K3s 服务的 token

  • 命令: TOKEN=$(multipass exec master -- sudo cat /var/lib/rancher/k3s/server/node-token)
  • 说明: 从主节点获取 K3s 服务的 token,以便后续在第一个工作节点上使用。

8: 在第一个工作节点上安装K3s服务

  • 命令: multipass exec worker-node-1 -- /bin/bash -c "curl -sfL https://get.k3s.io | K3S_URL=https://${MASTER_IP}:6443 K3S_TOKEN=$TOKEN sh -"
  • 说明: 在worker-node-1上执行命令,使用主节点的IP地址和获取到的token安装K3s服务。

9: 在第二个工作节点上安装K3s服务

  • 命令: multipass exec worker-node-2 -- /bin/bash -c "curl -sfL https://get.k3s.io | K3S_URL=https://${MASTER_IP}:6443 K3S_TOKEN=$TOKEN sh -"
  • 说明: 在worker-node-2上执行与第一个工作节点相同的命令,完成K3s服务的安装。

通过以上步骤,可以部署一个简单的K3s集群。

验证K3s集群是否成功搭建:

使用kubectl命令

在主节点上,运行 kubectl get node

url.2.png

测试k3s 集群

1.首先我们在master节点 创建一个 nginxdemo.yaml 文件

文件内容

# 指定API版本,这里是apps/v1,表示我们正在使用Apps API的v1版本
apiVersion: apps/v1

# 指定Kubernetes对象的类型,这里是Deployment,表示我们要创建一个部署
kind: Deployment

# 定义元数据,包括部署的名称
metadata:
  name: nginxdemo

# 定义部署的规格
spec:
  # 设置副本数量,这里设置为1,表示创建一个Nginx实例
  replicas: 1
  
  # 定义选择器,用于匹配模板中的标签,这里是匹配名称为nginxdemo的对象
  selector:
    matchLabels:
      name: nginxdemo
      
  # 定义Pod模板的元数据和规格
  template:
    metadata:
      # 为Pod添加标签,这里是名称为nginxdemo
      labels:
        name: nginxdemo
        
    spec:
      # 定义容器规格
      containers:
      - name: nginxdemo
        # 使用Nginx镜像
        image: nginx
        # 暴露容器的80端口
        ports:
        - containerPort: 80

然后再执行

 kubectl apply -y nginxdemo.yaml

url.3.png url.4.png

文件内容

# 指定API版本,这里是v1,表示我们正在使用Core API的v1版本
apiVersion: v1

# 指定Kubernetes对象的类型,这里是Service,表示我们要创建一个服务
kind: Service

# 定义元数据,包括服务的名称
metadata:
  name: nginxsvc

# 定义服务的规格
spec:
  # 设置服务类型为NodePort,表示服务将在集群的每个节点上公开端口,并通过NodePort映射到目标端口
  type: NodePort

  # 定义端口映射
  ports:
  - port: 82          # 服务端口,用于接收外部请求
    protocol: TCP     # 协议类型,这里是TCP
    targetPort: 80    # 目标端口,这里是Nginx容器的80端口
    name: http        # 端口名称,方便管理和引用
    nodePort: 30055   # NodePort,用于在集群的每个节点上公开服务

  # 定义选择器,用于匹配Pod模板中的标签,这里是匹配名称为nginxdemo的对象
  selector:
    name: nginxdemo

继续执行

 kubectl apply -t nginxsrv.yaml

url.5.png

url.6.png

可以看到,svc已经部署成功,并给出了CLUSTER-IP,10.43.0.1,我们可以用两种方式访问nginxdemo

  1. 在集群内用http://10.43.161.28:82/ url.7.png
  2. 在集群外用http://192.168.64.9:30055/、http://192.168.64.10:30055/、http://192.168.64.11:30055/
  3. 我们分别来访问一下 url.8.png

url.9.png

url.10.png

安装 kuboard

Kuboard 是一个用于 Kubernetes 集群的管理和监控工具

在本地执行

sudo docker run -d \  # 以守护进程模式运行 Docker 容器
  --name=kuboard \  # 为容器指定名称为 kuboard
  -p 80:80/tcp \  # 将容器的 80 端口映射到宿主机的 80 端口,用于 HTTP 访问
  -p 10081:10081/tcp \  # 将容器的 10081 端口映射到宿主机的 10081 端口,用于Kuboard Agent通信
  -e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \  # 设置环境变量,指定 Kuboard Agent 服务器的 TCP 端口为 10081
  -v /root/kuboard-data:/data \  # 将宿主机上的 /root/kuboard-data 目录挂载到容器的 /data 目录,用于持久化数据
  swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3  # 指定要拉取的镜像及其版本

然后浏览器访问 http://localhost/kuboard/cluster 按照提示添加 Kubernetes Cluster List url.11.png

url.12.png

大功告成