2024-12-07 microk8s

在mutipass中启动ubuntu虚拟机

multipass shell microk8s-vm

MicroK8s 是一个由 Canonical(Ubuntu 的开发商)维护的轻量级 Kubernetes 发行版。它旨在为开发者、运维人员和边缘计算场景提供一个快速、简便的 Kubernetes 部署方式,适用于本地开发、测试环境、边缘设备以及生产场景。


MicroK8s 的特点 #

  1. 轻量级
    • 微内核设计,占用资源少,适合运行在笔记本电脑、工作站、树莓派或其他资源受限的设备上。
    • 默认禁用许多附加组件,只有基本的 Kubernetes 核心功能。
  2. 易安装
    • 提供单命令安装,尤其在 Ubuntu 系统上,使用 snap 包管理器即可快速安装。
    • 支持多种操作系统,包括 Linux(Ubuntu、CentOS 等)、Windows 和 macOS(通过虚拟化工具)。
  3. 模块化
    • 提供了多种可选的附加组件(addons),如 dnsingressstoragehelm 等,用户可以根据需要启用或禁用这些组件。
  4. 开箱即用
    • 直接内置了 Kubernetes 集群的核心组件,如 API Server、kubelet 和调度器,用户无需额外配置即可开始使用。
  5. 自动升级
    • 使用 snap 管理,支持自动更新到最新版本。
  6. 跨平台
    • 支持多种硬件架构(如 x86、ARM),适合开发、测试和物联网边缘计算场景。
  7. 兼容性
    • 完全兼容 Kubernetes API,可以运行大多数 Kubernetes 应用程序。
    • 支持与 kubectl、Helm 等工具集成。

MicroK8s 的用途 #

  1. 本地开发与测试
    • 开发人员可以在本地快速启动一个 Kubernetes 集群,用于应用开发、测试和调试。
  2. 学习 Kubernetes
    • 对于新手来说,MicroK8s 是学习 Kubernetes 的理想工具,因为它简单易用且资源需求低。
  3. 边缘计算
    • MicroK8s 轻量级的特性使其适合运行在物联网设备或资源有限的边缘设备上。
  4. CI/CD 测试环境
    • 用于快速创建临时 Kubernetes 环境以运行持续集成或自动化测试。
  5. 单节点或小型生产环境
    • 在资源有限的情况下,可以作为单节点 Kubernetes 集群使用。

MicroK8s 的安装与使用 #

安装 MicroK8s #

  1. 在 Ubuntu 上安装 使用 snap 进行安装:

    sudo snap install microk8s --classic
    

    安装完成后,检查版本:

    microk8s version
    
  2. 在其他 Linux 系统上安装 在支持 snap 的 Linux 系统上,同样可以使用 snap 安装。

  3. 在 macOS 或 Windows 上安装 使用 Multipass 或其他虚拟化工具(如 VirtualBox)运行 MicroK8s。

常用命令 #

  1. 启用或禁用附加组件:

    microk8s enable dns ingress storage helm3
    microk8s disable dns
    
  2. 查看 Kubernetes 资源: 使用内置的 kubectl

    microk8s kubectl get nodes
    microk8s kubectl get pods -A
    
  3. 检查 MicroK8s 的状态:

    microk8s status
    
  4. 重启或停止服务:

    microk8s stop
    microk8s start
    
  5. 配置用户权限(非 root 用户):

    sudo usermod -a -G microk8s $USER
    sudo chown -R $USER ~/.kube
    newgrp microk8s
    

MicroK8s 与其他 Kubernetes 发行版的对比 #

特性MicroK8sMinikubeK3s
轻量化部分轻量化极轻量化
安装方式单命令(snap 包)VirtualBox 或其他虚拟化工具二进制或安装脚本
资源需求较高极低
生产环境支持支持(单节点或小型环境)不推荐支持
附加组件管理支持,模块化组件手动安装部分模块化
云原生兼容性完全兼容完全兼容部分特性简化

总结 #

MicroK8s 是一个轻量级且功能强大的 Kubernetes 发行版,专为开发者、测试环境和边缘计算场景设计。它具有易安装、易管理、资源占用低等优点,同时保留了 Kubernetes 的核心功能,非常适合想快速入门 Kubernetes 或在本地进行开发测试的用户。

如果你需要一个即开即用的 Kubernetes 集群,无论是本地开发还是边缘计算,MicroK8s 都是一个理想的选择。

macOS 上安装 MicroK8s 相较于 Linux 环境略有不同,因为 macOS 本身不支持直接使用 snap 安装。要在 macOS 上安装 MicroK8s,你需要借助 Multipass(一个轻量级虚拟机管理工具)来运行一个虚拟机,从而部署 MicroK8s。

以下是详细的安装步骤:


1. 安装 Multipass #

Multipass 是一个由 Canonical(Ubuntu 的开发公司)开发的工具,能够轻松管理 Ubuntu 虚拟机。在 macOS 上安装 MicroK8s 的步骤首先是通过 Multipass 启动一个虚拟机。

(1)安装 Multipass #

你可以通过 Homebrew 安装 Multipass:

brew install --cask multipass

(2)检查安装是否成功 #

安装完成后,可以检查 Multipass 是否安装成功:

multipass version

如果安装成功,你将看到 Multipass 的版本信息。


2. 使用 Multipass 启动 Ubuntu 虚拟机 #

MicroK8s 需要 Ubuntu 系统来运行,因此接下来你需要在 macOS 上通过 Multipass 创建一个 Ubuntu 虚拟机。

(1)启动 Ubuntu 虚拟机 #

执行以下命令启动一个 Ubuntu 虚拟机(例如,启动一个 4GB 内存的 Ubuntu 20.04 虚拟机):

multipass launch --name microk8s-vm --mem 4G --disk 20G 20.04

这将启动一个名为 microk8s-vm 的虚拟机,分配 4GB 内存和 20GB 硬盘。

(2)进入虚拟机 #

进入虚拟机:

multipass shell microk8s-vm

3. 在虚拟机中安装 MicroK8s #

进入 Ubuntu 虚拟机后,你可以按照以下步骤安装 MicroK8s。

(1)安装 MicroK8s #

在虚拟机内,运行以下命令安装 MicroK8s:

sudo snap install microk8s --classic

(2)验证安装 #

安装完成后,检查 MicroK8s 是否正常运行:

microk8s status --wait-ready

这条命令会等待直到 MicroK8s 准备好并且可以正常使用。

ubuntu@microk8s-vm:~$ sudo snap install microk8s --classic
microk8s (1.31/stable) v1.31.3 from Canonical✓ installed
ubuntu@microk8s-vm:~$ microk8s status --wait-ready
Insufficient permissions to access MicroK8s.
You can either try again with sudo or add the user ubuntu to the 'microk8s' group:

    sudo usermod -a -G microk8s ubuntu
    sudo chown -R ubuntu ~/.kube

After this, reload the user groups either via a reboot or by running 'newgrp microk8s'.
ubuntu@microk8s-vm:~$

这个错误信息表示,当前用户 ubuntu 没有足够的权限来访问 MicroK8s。为了修复这个问题,你需要将 ubuntu 用户添加到 microk8s 组,并更改相应的权限。错误信息中已经给出了修复步骤,下面是详细的解释和步骤:

问题的原因 #

MicroK8s 在安装时会创建一个名为 microk8s 的组,只有该组的成员才能访问 MicroK8s 的配置和执行相关命令。默认情况下,普通用户并不在 microk8s 组中,因此无法访问和管理 MicroK8s。

解决方法 #

  1. 将用户添加到 microk8s 你需要将 ubuntu 用户添加到 microk8s 组中。这可以通过以下命令完成:

    sudo usermod -a -G microk8s ubuntu
    
  2. 修改权限 接下来,需要修改 Kubernetes 配置文件的权限,使得 ubuntu 用户可以访问它:

    sudo chown -R ubuntu ~/.kube
    
  3. 重新加载用户组 上述步骤会将用户添加到 microk8s 组,并将 .kube 目录的权限更新。为了让权限生效,重新加载用户组,可以使用以下命令:

    newgrp microk8s
    

    这会立即使 ubuntu 用户的权限更新,而不需要重启计算机。

4. 再次检查 MicroK8s 状态 #

完成上述步骤后,你应该可以再次运行 microk8s status 命令来查看 MicroK8s 的状态:

microk8s status --wait-ready

总结 #

  • 你需要将 ubuntu 用户添加到 microk8s 组中,才能让该用户访问 MicroK8s。
  • 更改 Kubernetes 配置文件的权限,并通过 newgrp 命令重新加载用户组,以确保权限生效。

执行这些步骤后,问题应该得到解决,你可以正常使用 MicroK8s。

错误信息 chown: cannot access '/home/ubuntu/.kube': No such file or directory 表示在 /home/ubuntu/ 目录下找不到 .kube 文件夹。原因可能是当前用户还没有在 ~/.kube 目录下创建 Kubernetes 配置文件。通常,这是因为还没有执行过 kubectl 命令,或者在配置文件复制步骤中没有正确生成该目录。

解决方法 #

1. 确保 .kube 目录存在 #

首先,你需要确保 Kubernetes 配置文件已经生成。执行以下命令生成 Kubernetes 配置文件:

  1. 在 MicroK8s 内获取 kubeconfig 文件

    sudo microk8s kubectl config view --raw > kubeconfig
    
  2. kubeconfig 文件移动到 ~/.kube 目录: 创建 .kube 目录,并将 kubeconfig 文件移动到该目录下:

    mkdir -p ~/.kube
    mv kubeconfig ~/.kube/config
    
  3. 更新目录权限: 现在,你已经成功将 kubeconfig 文件放置在 .kube 目录中,可以重新执行权限修改命令:

    sudo chown -R ubuntu ~/.kube
    

2. 配置 kubectl 使用 MicroK8s 配置 #

如果你已经将配置文件正确放入 ~/.kube/config,可以尝试使用以下命令来测试是否成功配置了 kubectl

kubectl get nodes

如果配置正确,你应该能够看到集群中的节点信息。

3. 重新加载用户组(如果必要) #

如果你已经将 ubuntu 用户添加到 microk8s 组,但还没有刷新用户组,可以执行以下命令:

newgrp microk8s

总结 #

  • 错误的根本原因是 .kube 目录不存在。你需要确保配置文件 kubeconfig 被正确生成,并放置到 .kube/config 中。
  • 执行 mkdir -p ~/.kube && mv kubeconfig ~/.kube/config 可以确保配置文件正确放置。
  • 修改文件权限时,使用 chown -R ubuntu ~/.kube 来确保当前用户有正确的访问权限。

完成这些步骤后,你应该能够正常访问 Kubernetes 集群并使用 kubectl 命令了。


4. 配置 kubectl 访问 MicroK8s #

为了能够从宿主机(macOS)直接使用 kubectl 来管理 MicroK8s 集群,你需要配置访问权限。

(1)获取 kubectl 配置文件 #

通过 Multipass 虚拟机执行以下命令,获取 Kubernetes 配置文件:

sudo microk8s kubectl config view --raw > kubeconfig

(2)将配置文件复制到宿主机 #

将该配置文件复制到宿主机(macOS)上的合适目录,比如 ~/.kube/config

mkdir -p ~/.kube
cp kubeconfig ~/.kube/config

(3)验证 kubectl 配置 #

验证 kubectl 是否能够连接到 MicroK8s 集群:

kubectl get nodes

你应该会看到 microk8s-vm 作为节点,表示 kubectl 成功连接到 MicroK8s 集群。


5. 启用必要的 MicroK8s 插件 #

MicroK8s 提供了多个附加插件,可以根据需要启用它们。

例如,启用 DNS 和 Ingress:

microk8s enable dns ingress

你可以根据需求启用其他插件,如存储、Metrics Server 等:

microk8s enable storage
microk8s enable dashboard


microk8s disable ingress
microk8s disable storage
microk8s disable dashboard

6. 访问 Kubernetes Dashboard(可选) #

如果启用了 Kubernetes Dashboard 插件,可以通过以下命令获取访问 Dashboard 的 token:

microk8s dashboard-proxy

此命令会显示一个 URL,你可以在浏览器中访问该 URL,以便通过 Web 界面管理集群。


7. 关闭和删除虚拟机 #

如果不再需要 MicroK8s,可以通过以下命令停止虚拟机:

multipass stop microk8s-vm

如果希望删除虚拟机及其所有数据,可以运行:

multipass delete microk8s-vm
multipass purge

总结 #

macOS 上安装 MicroK8s 的关键步骤是使用 Multipass 启动一个 Ubuntu 虚拟机,并在虚拟机内安装和配置 MicroK8s。这样,你就可以在本地开发、测试和学习 Kubernetes 集群,或者部署轻量级的应用程序。如果需要更强大的功能,还可以启用多种插件。

进入虚拟机

multipass shell microk8s-v

如果你想重新启动已停止的 microk8s-vm 实例,你可以使用以下命令:

multipass start microk8s-vm

这将重新启动并使虚拟机恢复运行状态。如果你想查看当前虚拟机的状态,可以使用:

multipass list

这个命令会列出所有虚拟机及其当前状态(如运行中或已停止)。

wget https://github.com/derailed/k9s/releases/download/v0.32.7/k9s_linux_amd64.deb && apt install ./k9s_linux_amd64.deb && rm k9s_linux_amd64.deb

wget https://github.com/derailed/k9s/releases/download/v0.32.7/k9s_linux_amd64.deb

apt install ./k9s_linux_amd64.deb

rm k9s_linux_amd64.deb
Warning  FailedCreatePodSandBox  92s                 kubelet  Failed to create pod sandbox: rpc error: code = DeadlineExceeded desc = failed to g │
│ et sandbox image "registry.k8s.io/pause:3.7": failed to pull image "registry.k8s.io/pause:3.7": failed to pull and unpack image "registry.k8s.io/pa │
│ use:3.7": failed to resolve reference "registry.k8s.io/pause:3.7": failed to do request: Head "https://us-west2-docker.pkg.dev/v2/k8s-artifacts-pro │
│ d/images/pause/manifests/3.7": dial tcp 74.125.199.82:443: i/o timeout                                                                              │
│   Warning  FailedCreatePodSandBox  6s (x7 over 5m15s)  kubelet  Failed to create pod sandbox: rpc error: code = DeadlineExceeded desc = failed to g │
│ et sandbox image "registry.k8s.io/pause:3.7": failed to pull image "registry.k8s.io/pause:3.7": failed to pull and unpack image "registry.k8s.io/pa │
│ use:3.7": failed to resolve reference "registry.k8s.io/pause:3.7": failed to do request: Head "https://us-west2-docker.pkg.dev/v2/k8s-artifacts-pro │
│ d/images/pause/manifests/3.7": dial tcp 172.253.117.82:443: i/o timeout