Ask me anything
Ithy Logo
Sign in to save

在 macOS 上使用 Lima 安装和配置 K3s 的全面指南

Setting up a residential K3s single node cluster with KVM in a Manjaro ...

K3s 是一个由 Rancher 提供的轻量级 Kubernetes 发行版,专为资源有限的环境设计,非常适合在本地开发和测试使用。Lima 是一个用于在 macOS 和 Linux 上运行 Linux 虚拟机的工具,能够为 K3s 提供一个高效的运行环境。本文将详细介绍如何在 macOS 系统上,通过 Lima 安装和配置 K3s 集群,涵盖从基础安装到高级配置的各个步骤。

目录


1. 安装 Lima

1.1 使用 Homebrew 安装 Lima

Homebrew 是 macOS 上最流行的软件包管理工具。通过 Homebrew 安装 Lima 可以确保获得最新的稳定版本。

brew install lima

安装完成后,运行以下命令验证 Lima 是否安装成功:

limactl --version

如果正确安装,你将看到 Lima 的版本信息。

1.2 通过 GitHub 发布页面安装

除了通过 Homebrew 安装,你也可以从 Lima 的 GitHub 发布页面下载二进制文件进行手动安装。

  1. 访问 Lima GitHub 发布页面。
  2. 下载适用于 macOS 的二进制文件。
  3. 解压下载的文件,并将其移动到 /usr/local/bin 或其他在 PATH 中的目录。

完成后,同样通过 limactl --version 验证安装。


2. 配置 Lima 虚拟机

2.1 创建 Lima 配置文件

Lima 使用 YAML 文件来定义虚拟机的配置,包括 CPU、内存、磁盘、网络等资源分配。为 K3s 创建一个专用的配置文件。

创建一个名为 lima-k3s.yaml 的配置文件,内容如下:


arch: "x86_64"
cpus: 4
memory: "8GiB"
disk: "20GiB"
mounts:
  - location: "~/.kube:/root/.kube"
networks:
  - lima:
      bridged:
        interface: "en0" # 或者选择其他你希望桥接的网络接口
  

此配置文件指定了虚拟机的架构、CPU 数量、内存、磁盘大小,以及网络设置。你可以根据需要调整这些参数。

2.2 配置桥接网络

默认情况下,Lima 使用用户模式网络(slirp),这限制了从主机访问虚拟机的网络能力。为了实现桥接网络,需要安装并配置 socket_vmnet。

安装 socket_vmnet:

brew install socket_vmnet

配置桥接网络:


socket_vmnet_path=$(readlink -f $(brew --prefix)/opt/socket_vmnet/bin/socket_vmnet | sed 's_/_\\/_g')
sed -i -re "s/^( socketVMNet:).*/\1 \"$socket_vmnet_path\"/" ${HOME}/.lima/_config/networks.yaml
  

设置 sudoers 文件以允许 Lima 启动 socket_vmnet:

limactl sudoers | sudo tee /etc/sudoers.d/lima

这些步骤确保主机可以访问虚拟机的网络。


3. 安装 K3s

3.1 启动 Lima 虚拟机

使用之前创建的配置文件启动 Lima 虚拟机:

limactl start ./lima-k3s.yaml

验证虚拟机是否正在运行:

limactl list

3.2 登录到 Lima 虚拟机

进入虚拟机的 shell 环境:

limactl shell lima-k3s

在虚拟机中,使用以下命令安装 K3s:

curl -sfL https://get.k3s.io | sh -

安装脚本会自动下载并配置 K3s 作为系统服务运行。

3.3 验证 K3s 安装

安装完成后,通过以下命令检查 K3s 节点状态:

sudo k3s kubectl get nodes

输出应显示节点状态为 Ready:


NAME        STATUS   ROLES                  AGE   VERSION
lima-k3s    Ready    control-plane,master   10m   v1.22.8+k3s1
  

4. 配置网络

4.1 修改 K3s 网络接口设置

确保 K3s 使用桥接网络接口。编辑 K3s 服务配置文件,添加 --flannel-iface 标志:

sudo vim /etc/systemd/system/k3s.service

在 ExecStart 行中添加 --flannel-iface=rd0(假设 rd0 是桥接接口):


[Service]
ExecStart=/usr/local/bin/k3s server --flannel-iface rd0
  

保存文件后,重新加载 systemd 并重启 K3s 服务:

sudo systemctl daemon-reload sudo systemctl restart k3s

4.2 配置 Docker 上下文(可选)

如果需要在主机上使用 Docker 管理 K3s 集群中的容器,可以配置 Docker 上下文:

创建 Docker 上下文:

docker context create lima-k3s --docker "host=unix://$HOME/.lima/lima-k3s/sock/docker.sock"

使用 Docker 上下文:

docker context use lima-k3s

验证 Docker 容器:

docker container ls

这将显示 K3s 集群中的 Docker 容器。


5. 访问和管理 K3s

5.1 配置 KUBECONFIG

为了从主机上使用 kubectl 管理 K3s 集群,需要将虚拟机中的 kubeconfig 文件复制到主机,并设置 KUBECONFIG 环境变量:

  1. 在 Lima 虚拟机中,运行以下命令复制 k3s.yaml 文件到主机:

limactl shell lima-k3s sudo cat /etc/rancher/k3s/k3s.yaml > $HOME/.kube/k3s.yaml

  1. 在主机上,设置 KUBECONFIG 环境变量:

export KUBECONFIG="$HOME/.kube/k3s.yaml"

验证集群状态:

kubectl get nodes

输出应显示集群中的节点:


NAME        STATUS   ROLES                  AGE   VERSION
lima-k3s    Ready    control-plane,master   10m   v1.22.8+k3s1
  

5.2 部署应用程序

现在,你可以像在任何 Kubernetes 集群中一样部署应用程序。例如,部署一个简单的 Nginx 应用:

kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort

获取服务的访问地址:

kubectl get svc nginx

输出应类似于:


NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort   10.43.123.45            80:30001/TCP   10m
  

你可以通过 http://<虚拟机IP>:30001 访问 Nginx 应用程序。


6. 高级配置

6.1 配置 LoadBalancer

默认情况下,K3s 使用 NodePort 类型的服务进行端口转发。如果需要更高级的 LoadBalancer 功能,可以安装 MetalLB:

安装 MetalLB:

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/main/manifests/metallb.yaml

配置 IP 地址池,创建一个名为 metallb-config.yaml 的文件:


apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.2.200-192.168.2.250
  

应用配置:

kubectl apply -f metallb-config.yaml

现在,你可以创建类型为 LoadBalancer 的服务,MetalLB 将为其分配一个外部 IP 地址。

6.2 多节点 K3s 集群

为了实现高可用性,你可以配置一个多节点的 K3s 集群。以下是基本步骤:

  1. 创建多个 Lima 虚拟机实例,例如 k3s-master 和 k3s-worker1。
  2. 在主节点上初始化集群:

curl -sfL https://get.k3s.io | sh -s - server --cluster-init

生成加入令牌:

sudo cat /var/lib/rancher/k3s/server/node-token

在工作节点上,使用令牌加入集群:

curl -sfL https://get.k3s.io | K3S_URL=https://<主节点IP>:6443 K3S_TOKEN=<令牌> sh -

验证节点是否成功加入集群:

kubectl get nodes

输出应显示所有节点的状态:


NAME          STATUS   ROLES                  AGE   VERSION
k3s-master    Ready    control-plane,master   20m   v1.22.8+k3s1
k3s-worker1   Ready                     15m   v1.22.8+k3s1
  

6.3 使用其他容器运行时

K3s 默认使用 containerd 作为容器运行时。如果你需要使用 Docker 或其他容器运行时,可以通过修改 K3s 的配置文件来实现。

例如,使用 Docker:

  1. 安装 Docker:

sudo apt-get install docker.io

  1. 编辑 K3s 服务配置文件,添加容器运行时端点:

[Service] ExecStart=/usr/local/bin/k3s server --docker --flannel-iface rd0

保存并重启 K3s 服务:

sudo systemctl daemon-reload sudo systemctl restart k3s


7. 常见问题

7.1 安装失败

如果 K3s 安装过程中遇到问题,可以查看日志文件以获取详细的错误信息:

sudo journalctl -u k3s -f

常见问题包括网络配置错误、资源不足等。

7.2 节点状态为 NotReady

如果节点状态显示为 NotReady,可能是网络插件未正确配置。检查 Flannel 或 Calico 的 Pod 状态:

kubectl get pods -n kube-system

确保所有网络插件的 Pod 都处于运行状态。

7.3 网络访问问题

确保 Lima 虚拟机的网络配置正确。如果使用桥接模式,请检查主机和虚拟机之间的网络连接是否正常。

可以通过以下命令检查虚拟机的网络接口:

ip addr show

确认虚拟机的 IP 地址在预期的网络范围内,并且主机能够访问该 IP。


8. 参考资源

通过参考以上资源,你可以获得更多关于 Lima 和 K3s 的信息,进一步优化和扩展你的 Kubernetes 集群设置。


通过本文提供的步骤,你可以在 macOS 系统上使用 Lima 成功安装和配置 K3s 集群。这种方法不仅轻量级,而且非常适合在 Apple Silicon(M1/M2)和 Intel 芯片上运行 Kubernetes。无论是开发、测试还是学习,Lima 和 K3s 的结合都能为你提供一个高效、灵活的本地 Kubernetes 环境。


Last updated January 5, 2025

AI-assisted research. Sources, methodology and corrections · Source-checked guides and tools · Explore published answers

Ask Ithy AI