将MicroK8s在AWS Lightsail上的安装失败

This article’s content.

为了学习Kubernetes(K8s),我尝试在AWS Lightsail(1GB内存)上安装了「MicroK8s」。

MicroK8s-面向开发人员、边缘和物联网的零运维Kubernetes。

总的来说,1GB的实例对于MicroK8s来说性能不足。
首先,最新版本的v1.20安装失败。启动需要很长时间,似乎一直超时。
其次,v1.19可以安装成功,但等待K8s启动的microk8s status –wait-ready命令持续等待了40分钟也没有完成。
在此期间,CPU使用率超过90%,持续消耗着爆发容量。

由于 v1.18 版本的 microk8s status –wait-ready 命令大约在6分钟内完成,并且 CPU 使用率也适中,因此看起来还是可以使用的。

只是,既然要学习,我想要使用最新版本,所以我决定在旧的笔记本电脑(Core 2 Duo,4GB内存)上安装Ubuntu来学习。
这台电脑在运行Windows 10时有点吃力,所以我决定用Ubuntu + MicroK8s来学习,它的配置对学习来说足够了。

如果严肃学习的话,我觉得最理想的是准备3台树莓派4(内存4GB或8GB),并组建成一个集群。

我这次的经历与失败有些相似,但希望对大家有所借鉴,所以决定发布。

前提

    Lightsailインスタンス(Linux)を作成済み。

本文是在Lightsail的5美元计划(内存1GB),使用CentOS 7.9.2009版本创建的。
搭建步骤已在下面的文章中总结。
※在下面的文章中,虽然提到的是3.5美元计划(内存512MB),但如果想要尝试本文的内容,请至少选择5美元计划(内存1GB)。

AWS Lightsail 入门课程包括以下几个步骤:
1. 创建实例
2. 通过SSH连接实例(使用RLogin)
3. 在管理界面进行基本设置
4. 在CentOS 7上进行基本设置

安装步骤

1. 安装 snapd

添加 EPEL 软件仓库

$ sudo yum install -y epel-release

安装snapd。

$ sudo yum install -y snapd

启用snapd系统

$ sudo systemctl enable --now snapd.socket

创建符号链接

$ sudo ln -s /var/lib/snapd/snap /snap

一旦退出登录,然后重新登录。

2. 安装 MicroK8s

使用1.18版本进行安装。

$ sudo snap install microk8s --classic --channel=1.18/stable

MicroK8s的配置

权限设置

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

登出一次后,再次登录。

等待 Kubernetes 启动

请输入下列命令并等待Kubernetes启动。
※在1GB主机上需要大约6分钟。

$ microk8s status --wait-ready
microk8s is running
addons:
cilium: disabled
dashboard: disabled
dns: disabled
fluentd: disabled
gpu: disabled
helm: disabled
helm3: disabled
ingress: disabled
istio: disabled
jaeger: disabled
knative: disabled
kubeflow: disabled
linkerd: disabled
metallb: disabled
metrics-server: disabled
prometheus: disabled
rbac: disabled
registry: disabled
storage: disabled

安装后资源验证

在Lightsail管理界面中确认,CPU使用率约为6.7%,稳定在可持续区域内。但是,由于所有扩展功能都被禁用,其他应用程序也未启动,所以实际使用可能有一些困难。

microk8s-lightsail-01-001.png

以下是v1.18版本的内存使用量。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           989M        448M         72M        6.7M        468M        392M
Swap:          2.0G        186M        1.8G

以下是在我的笔记本电脑(Ubuntu,内存4GB)上启动v1.20时的内存使用量,供参考。
仅使用MicroK8s启动时,内存使用量为1.2GB,这让我明白为什么它无法在Lightsail的1GB上运行。
请注意,扩展功能”ha-cluster”在默认情况下是启用的。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          3.8Gi       1.2Gi       395Mi        96Mi       2.1Gi       2.3Gi
Swap:         2.0Gi          0B       2.0Gi
$ microk8s status --wait-ready
microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none
addons:
  enabled:
    ha-cluster           # Configure high availability on the current node
  disabled:
    ambassador           # Ambassador API Gateway and Ingress
    cilium               # SDN, fast with full network policy
    dashboard            # The Kubernetes dashboard
    dns                  # CoreDNS
    fluentd              # Elasticsearch-Fluentd-Kibana logging and monitoring
    gpu                  # Automatic enablement of Nvidia CUDA
    helm                 # Helm 2 - the package manager for Kubernetes
    helm3                # Helm 3 - Kubernetes package manager
    host-access          # Allow Pods connecting to Host services smoothly
    ingress              # Ingress controller for external access
    istio                # Core Istio service mesh services
    jaeger               # Kubernetes Jaeger operator with its simple config
    keda                 # Kubernetes-based Event Driven Autoscaling
    knative              # The Knative framework on Kubernetes.
    kubeflow             # Kubeflow for easy ML deployments
    linkerd              # Linkerd is a service mesh for Kubernetes and other frameworks
    metallb              # Loadbalancer for your Kubernetes cluster
    metrics-server       # K8s Metrics Server for API access to service metrics
    multus               # Multus CNI enables attaching multiple network interfaces to pods
    portainer            # Portainer UI for your Kubernetes cluster
    prometheus           # Prometheus operator for monitoring and logging
    rbac                 # Role-Based Access Control for authorisation
    registry             # Private image registry exposed on localhost:32000
    storage              # Storage class; allocates storage from host directory
    traefik              # traefik Ingress controller for external access

如何卸载 MicroK8s。

可以使用以下命令轻松执行。

$ sudo snap remove microk8s

总结

从「MicroK8s」这个名字来看,我一开始以为它是一个非常小巧的K8s,即使在低配置的情况下也能运行!但我错了。
实际上,MicroK8s是符合Kubernetes规范的,虽然很小,但似乎具备足够的可用性,可以在生产环境中使用。

此外,鑑於不同版本所需的規格差異很大,參考過去案例時需要特別注意。尤其是在v1.18、v1.19和v1.20之間存在著一道高牆(可能與v1.19引入的HA集群有關)。

在官方网站上,建议的内存大小为4GB。
MicroK8s的安装本身非常简单,只要准备满足系统要求的环境,就可以进行学习了。
如果有闲置的电脑,可以安装Ubuntu操作系统,并在其上安装MicroK8s,非常简便。(Ubuntu已经预装了snap)

如果这篇文章能对即将学习K8s的人有所帮助,那就太好了。

广告
将在 10 秒后关闭
bannerAds