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和内存环境的理想选择。