在 macOS 上使用 Lima 安装和配置 K3s 的全面指南
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 发布页面下载二进制文件进行手动安装。
- 访问 Lima GitHub 发布页面。
- 下载适用于 macOS 的二进制文件。
- 解压下载的文件,并将其移动到
/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 环境变量:
- 在 Lima 虚拟机中,运行以下命令复制
k3s.yaml文件到主机:
limactl shell lima-k3s sudo cat /etc/rancher/k3s/k3s.yaml > $HOME/.kube/k3s.yaml
- 在主机上,设置
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 集群。以下是基本步骤:
- 创建多个 Lima 虚拟机实例,例如
k3s-master和k3s-worker1。 - 在主节点上初始化集群:
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:
- 安装 Docker:
sudo apt-get install docker.io
- 编辑 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