官网Install MicroK8s on Windows
使用Microk8s快速部署kubernetes
MicroK8s是一款功能强大,重量轻,可靠的生产型Kubernetes衍生版。 它是一种企业级Kubernetes发行版,具有较小的磁盘和内存占用空间,同时提供开箱即用的生产级附加组件,如Istio,Knative,Grafana,Cilium等。 无论您是在运行生产环境还是有兴趣探索K8s,MicroK8都能满足您的需求。
MicroK8s是最小,最快的多节点Kubernetes。 单包完全一致的轻量级Kubernetes,适用于42种Linux发行版,以及使用Multipass的Mac和Windows。 适合:开发人员工作站,IoT(物联网),Edge(边缘计算),CI/CD。
尝试使用过Kubernetes的人都知道必须处理设置和运行部署的痛苦。 市场上有极简主义的解决方案可以减少部署时间和复杂性,但重量轻的解决方案是以牺牲关键的可扩展性和缺少附件为代价的。
如果你不想花时间在坑里面让Kubernetes启动并运行,MicroK8s会让你在60秒内开始。
(1)轻量级别:开发人员希望最小的K8s用于笔记本电脑和工作站开发。 当您在Ubuntu上运行时,MicroK8s提供与Azure AKS,Amazon EKS,Google GKE兼容的独立K8s。
(2)简单化:使用单个软件包安装最大限度地减少管理和操作,该软件包没有移动部件以简化和确定。 包括所有依赖项和组件。
(3)安全:更新适用于所有安全问题,可立即应用或计划至您希望的维护周期执行。
(4)当前版本:MicroK8s跟踪上游并在同一天发布beta,RC和正式版,与上游K8s相同。 您可以跟踪最新的K8s或从1.10开始坚持任何发布版本。
(5)综合性:MicroK8s包括针对常见K8s功能和服务的策划集合:
(1)Service Mesh: Istio, Linkerd
(2)Serverless: Knative
(3)Monitoring: Fluentd, Prometheus, Grafana, Metrics
(4)Ingress, DNS, Dashboard, Clustering
(5)Automatic updates to the latest Kubernetes version
(6)GPGPU bindings for AI/ML
(7)Cilum, Helm and Kubeflow!
准备材料:
想要允许MicroK8s,你需要一台Linux的电脑且支持snap应用,例如Ubuntu。 如果你在使用Windows或者Mac OS,可以使用Multipass来允许MicroK8s。
Kubeflow已经作为一个附加组件内置到MicroK8s中。这意味着一旦安装MicroK8s,就可以立即启用Kubeflow。
MicroK8s可在Windows、macOS和任何支持快照的Linux发行版上使用。您可以按照MicroK8s官方网站上的安装步骤下载并安装MicroK8s。
如何简单搭建Kubernetes集群,当时使用的是官方的工具箱:Kubeadm,这个方案对于只是想试试的同学来说,还是过于复杂。这里介绍一款简单的工具:MicroK8s。
官方给这款工具的人设是“无需运维的 Kubernetes ,服务于工作站、物联网。”最大的价值在于可以快速搭建单节点的容器编排系统,用于生产试验。
(1)虚拟化
目前仅支持Windows 10 Pro或企业版1803(“2018年4月更新”)或更高版本。这是因为Hyper-V的正确版本仅在这些版本上可用。
(2)虚拟机
Multipass还支持将VirtualBox用作虚拟化提供程序。你可以在这里下载最新版本。
(3)网络
确保你连接的网络被标记为私有(这实际上意味着受信任),否则Windows将阻止multipass启动。
这一步可以选择安装,也可以选择不安装。
multipass下载地址
安装包multipass-1.8.0+win-win64.exe
Multipass是一个轻量级VM管理器,支持Linux、Windows与macOS,这是为希望使用单个命令提供全新Ubuntu环境的开发人员而设计的。
使用Linux上的KVM、Windows上的Hyper-V和macOS上的HyperKit来以最小的开销运行VM,同时它还可以在Windows和macOS上使用VirtualBox。
windows10中安装MicroK8s步骤
我们推荐Windows 10 Professional或Windows 10 Enterprise。MicroK8还需要至少4GB的可用RAM和40GB的存储空间。
一、下载安装包
microk8s-installer.exe【40M】
二、双击安装
三、自动安装Multipass【Hype-V】
安装程序检查Hyper-V是否可用并打开。如果您没有Hyper-v(例如在Windows 10 Home edition上),可以使用VirtualBox作为替代方案。
选择跳过,不使用安装包中自带的multipass。
四、配置MicroK8s
您可以在以后通过重新运行安装程序来更改此配置。
请注意,内存和磁盘限制最初设置为最小值。
如果您计划运行大型工作负载(例如,kubeflow将需要大约12GB的RAM),您将希望将这些设置得更高。
会自动拉取镜像。
打开命令行窗口,进行后续的操作。
五、查看MicroK8s何时启动并运行
CMD>microk8s status --wait-ready
Microk8s是本地部署Kubernetes集群的click-and-run方案,最初由Ubuntu的发布者Canonical开发。不同于Minikube的是,它使用snap包进行部署,而不是在本地启动虚拟机来进行部署。
从跨平台的角度来考虑,Minikube确实可以支持更多的平台,而Microk8s只支持少数几个特定平台。但是从资源占用的角度来考虑,由于不需要使用虚拟机,Microk8s使得你可以留更多的物理资源供你的应用使用。同时令人惊喜的是,Microk8s目前已经支持用多个机器来构建多节点的k8s集群了。
总的来说,MicroK8s提供了一种快速简易的方法,使得少量的计算机和虚拟机变成一个多节点的 Kubernetes集群。
安装ubuntu时会自动安装。
MicroK8s捆绑了自己版本的kubectl,用于访问Kubernetes。使用它运行命令来监视和控制你的Kubernetes。
例如,要查看节点,请执行以下操作:
CMD>microk8s kubectl get nodes
CMD>microk8s kubectl get services
MicroK8s使用最少的组件,打造出一款纯粹、轻盈的Kubernetes。
然而,通过使用“add-ons”——对你的Kubernetes,提供额外功能的预包装组件,从简单的DNS管理到机器学习Kubeflow!
要启动,建议添加DNS管理以方便服务之间的通信。对于需要存储的应用程序,"storage"附加组件
在主机上提供目录空间。这些设置很容易:
启动服务
CMD>microk8s enable dns storage
CMD>microk8s enable dashboard
停止服务
CMD>microk8s disable dns
MicroK8s封装了Kubernetes用户熟悉的kubectl命令,因此您可以简单地执行任何常见的Kubernetes操作。
CMD>microk8s kubectl get all --all-namespaces
进入Kubernetes dashboard
microk8s dashboard-proxy
Kubernetes是一个系统服务的集合,它们一直在相互通信。如果你不需要它们在后台运行,那么你可以通过停止它们来节省电池和资源。
CMD>microk8s start
CMD>microk8s stop
(3)在Kubernetes启动时检查状态
microk8s status --wait-ready
(4)启动服务
microk8s enable dashboard dns registry istio
查看可用的内建服务列表
microk8s enable --help
microk8s disable turns off a service.
使用Microk8s在本地启动一个单节点k8s集群。
启动microk8s自带的几个插件,包括DNS和Dashboard。
运行一个nginx应用查看效果。
检查安装的集群状态
sudo microk8s.kubectl get nodes
NAME STATUS ROLES AGE VERSION
mymachine NotReady <none> 18d v1.23.6-2+2a84a218e3cd52
正常情况下应该看到的是当前状态为Ready这样的输出,显示我们的集群中有一个k8s工作节点。但是如果你使用的机器不能够科学上网的话,可能节点的状态会为NotReady。接下来先介绍如何简化kubectl命令使用,接着介绍节点NotReady情况下要怎么修复。
(1)首先解决必须要sudo才能执行microk8s命令的问题。运行下面的命令,将你当前的用户加到 microk8s 用户组内:
sudo usermod -a -G microk8s ubuntu
sudo chown -f -R ubuntu ~/.kube
newgrp microk8s//重新加载用户组
(2)然后解决每次kubectl命令前面都必须要加上microk8s的问题,我们给microk8s.kubectl取别名为mkubectl:
sudo snap alias microk8s.kubectl mkubectl
mkubectl get nodes//可以简单使用
该问题NotReady的原因是由于谷歌服务器被墙,导致有一些镜像拉不到。通过下面的几条命令就可以看到为什么集群的状态不健康了:
mkubectl get pods -n kube-system
mkubectl describe pod calico-node-q424c -n kube-system
具体问题如下所示:我们只需要从别的地方下载到所需要的镜像(这里是k8s.gcr.io/pause:3.1),保证运行在我们机器上的Pod可以正常获取镜像就可以了。具体怎么解决可以参考其他文章,我个人使用的是阿里云镜像加速器。
(1)拉取镜像
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
(2)修改标签
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
(3)删除原镜像
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
当本地Docker镜像仓库中有了k8s.gcr.io/pause:3.1这个镜像之后,Pod却仍然无法获取镜像,这是怎么回事?原来Microk8s使用的CRE是containerd,我们需要再将Docker镜像仓库里的镜像放到Microk8s使用的镜像仓库里去:
sudo docker save k8s.gcr.io/pause:3.1 > pause.tar
microk8s ctr image import pause.tar
这下再看pod状态已经都正常了:
后面的使用过程中,我们仍然会多次遇到镜像拉取不到的问题,都需要用这种方法解决。
使用MicroK8s其中最大的好处之一事实上是也支持各种各样的插件和扩展。更重要的是它们是开箱即用的,用户仅仅需要启动它们。通过运行 microk8s.status命令检查出扩展的完整列表。
sudo microk8s.status
sudo microk8s enable dns
sudo microk8s kubectl get pods -n kube-system
开启过后kube-system名字空间下面会多一个coredns的Pod。
sudo microk8s enable dashboard
sudo microk8s kubectl get pods -n kube-system
mkubectl describe pod metrics-server-679c5f986d-fnpq2 -n kube-system
发现缺少镜像k8s.gcr.io/metrics-server/metrics-server:v0.5.2
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.5.2
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.5.2 k8s.gcr.io/metrics-server/metrics-server:v0.5.2
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.5.2
sudo docker save k8s.gcr.io/metrics-server/metrics-server:v0.5.2 > metrics-server.tar
microk8s ctr image import metrics-server.tar
二、获取Token:
token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
microk8s kubectl -n kube-system describe secret $token
三、获取dashboard的ClusterIP
microk8s kubectl get svc -n kube-system
访问页面 https://{ClusterIP}:443,使用刚刚获取到的Token登录,就可以看到如下画面了。
实际上通过ClusterIP什么也访问不到。
一、编辑aa.yaml文件
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-zdy
namespace: kube-system
spec:
type: NodePort
ports:
- port: 443
nodePort: 32000
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
二、启动
sudo microk8s kubectl create -f aa.yaml