将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%,稳定在可持续区域内。但是,由于所有扩展功能都被禁用,其他应用程序也未启动,所以实际使用可能有一些困难。
以下是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的人有所帮助,那就太好了。