1. 引言

尽管Kubernetes的使用持续增长,但仍然存在一个问题,那就是资源限制。完全配置的Kubernetes集群通常需要大量的CPU和内存。这使得组织难以以操作员的方式构建和测试软件。

这就是Microk8s的用武之地。本文将探讨Microk8s如何通过允许我们在小型CPU和内存占用下运行功能齐全的Kubernetes集群,来缓解这些问题。

2. Microk8s是什么

Microk8s是具有较小CPU和内存占用的完全合规的Kubernetes分发版。它从头开始设计,旨在为计算能力和内存有限的设备提供完整的Kubernetes体验。

Microk8s具有以下功能:

  • 大小:其对内存和存储的要求只是许多全尺寸Kubernetes集群要求的一小部分。事实上,它被设计成可以在单个节点/计算机上运行。
  • 简单性:通过安装基本的功能集,Microk8s使集群管理变得简单。我们只需一条命令即可在几分钟内创建一个完全功能的Kubernetes集群。
  • 更新及时:Microk8s从核心Kubernetes项目获取所有修复和更新,每天一次,确保其集群几乎立即拥有最新可用的变化。

由于这些特性,Microk8s在以下多种应用场景中比标准Kubernetes部署更适合

  • 开发工作站:可以自动化新开发工作站的配置,并确保开发人员拥有适当的Kubernetes环境进行测试。
  • CI/CD服务器:自动执行可重复且固定的执行环境的构建。
  • IoT设备:具有远程连接的小型内存设备可以运行自己的Kubernetes集群。

3. 使用Microk8s入门

**Microk8s为每个主要操作系统提供了安装器**:Windows、Linux和macOS。

默认情况下,Microk8s在安装时会禁用大多数功能。因此,我们必须使用microk8s.enable命令启用我们想要的功能。

以下是可能希望启用的一些常见附加功能列表,以获得传统的Kubernetes设置:

  • cert-manager:云原生证书管理
  • dashboard:Kubernetes仪表板
  • dns:CoreDNS服务
  • ingress:用于外部访问服务的入口控制器
  • metallb:负载均衡控制器
  • metrics-server:为API访问服务指标的Kubernetes指标服务器
  • prometheus:Prometheus操作员用于监控和日志记录
  • rbac:基于角色的访问控制用于授权

例如,要启用仪表板和入口附加功能,我们可以运行:

$ microk8s enable dashboard ingress

4. 使用Microk8s

在安装并配置了Microk8s后,让我们更详细地了解如何使用它。

4.1. 检查状态

我们可以通过microk8s.status命令检查Microk8s集群的状态:

$ microk8s status
microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none
addons:
  enabled:
    dashboard            # (core) The Kubernetes dashboard
    dns                  # (core) CoreDNS
    ha-cluster           # (core) Configure high availability on the current node
    helm                 # (core) Helm - the package manager for Kubernetes
    helm3                # (core) Helm 3 - the package manager for Kubernetes
    hostpath-storage     # (core) Storage class; allocates storage from host directory
    ingress              # (core) Ingress controller for external access
    metrics-server       # (core) K8s Metrics Server for API access to service metrics
    observability        # (core) A lightweight observability stack for logs, traces and metrics
    storage              # (core) Alias to hostpath-storage add-on, deprecated

这告诉我们集群是否正在运行以及哪些功能已启用。我们还可以使用传统kubelet命令来检查集群:

$ microk8s kubelet get node
NAME          STATUS   ROLES    AGE     VERSION
microk8s-vm   Ready    <none>   1d13h   v1.26.1

注意,也有可能使用原生kubelet命令。我们只需要生成kubelet的客户端配置即可:

$ microk8s kubectl config view --raw > ${HOME}/.kube/config

最后,我们可以停止和启动Microk8s集群:

$ microk8s stop
Stopped.
$ microk8s start

在笔记本电脑或其他没有专用电源源的设备上运行时,Microk8s团队建议在不需要时关闭集群以节省电力

4.2. 部署应用程序

在集群启动并运行后,我们现在可以使用几种不同的方式部署应用程序。

首先,我们可以使用传统的YAML文件来部署工作负载:

$ microk8s kubelet apply -f /path/to/deployment.yaml

此外,在启用Helm功能之后,我们可以通过Helm图表部署应用程序:

$ microk8s helm install elasticsearch elastic/elasticsearch

4.3. 查看仪表板

假设我们已经启用了dashboard附加功能,可以通过首先启动端口转发来查看它:

$ microk8s kubectl port-forward -n kube-system service/kubernetes-dashboard 10443:443

然后,我们可以通过URL https://localhost:10443 来查看仪表板。登录时,我们需要一个令牌或完整的kubeconfig

# Generate a token
$ microk8s kubectl create token default

# Generate kubeconfig
$ microk8s config

请注意,集群使用自签名证书,这会导致浏览器警告。

4.4. 高可用性

Microk8s声称自己是生产级的,因此当有多台节点可用时,它也支持高可用性。从命令行很容易添加节点:

$ microk8s add-node

这提供了我们需要开始新节点并将其加入集群的所有信息。

从希望加入此集群的节点运行:

$ microk8s join 192.168.64.2:25000/16715886fa58dcf561acbd6df44c614d/14b471cb0bb3

默认情况下,新节点既是工作者也是控制平面,尽管有可能仅添加新节点作为工作者。工作者节点可以调度工作负载,但不提供高可用性。至少需要三个节点才能运行控制平面以实现高可用性

5. 结论

在这篇文章中,我们简要地探讨了Microk8s,这是一个低运维的生产级Kubernetes。Microk8s支持完整的Kubernetes功能,并且通过一系列广泛的附加功能是可扩展的。此外,其小型内存和CPU占用使其成为开发工作站和DevOps流水线等低CPU和内存环境的理想选择。