通过MicroK8和Snap部署轻量级Kubernetes
在容器化和微服务领域,Kubernetes是最流行的词。
但是部署Kubernetes可能很昂贵,主要是在不完成生产应用程序供电的情况下。
在本教程中,我将向我们介绍MicroK8s工具,该工具使我们可以在Snap中运行最新的稳定上游Kubernetes版本。
生产部署:使用Ansible&Kubespray部署生产Kubernetes集群
对于Docker用户:如何在Docker中运行本地Kubernetes集群
MicroK8只是k8的一个软件包,可安装在大多数Linux版本和任何其他可以运行Snap的系统上。
此部署适合在Raspberry Pi,个人计算机和台式机等IoT设备上运行。
不建议将此部署用于生产设置,而仅用于脱机开发,原型制作,测试或者将其作为小型,廉价,可靠的k8在VM上使用用于CI/CD。
MicroK8s的功能–(https://microk8s.io/)
快速安装–可以在60秒内运行完整的Kubernetes系统。
小型–在CI/CD管道中使用MicroK8,可以轻松完成一天的工作。
一个docker注册表,以便我们可以制作容器,将其推入容器,然后将其全部部署到笔记本电脑上。
升级–当出现新的主要版本时,请使用单个命令(或者自动)进行升级。
功能–很酷的事情我们可能想尝试小型标准K8都是内置的。
只需启用它们即可。
GPU直通–为MicroK8s提供一个GPGPU,Docker容器可以得到所有不错的CUDA。
设置要求
Linux作业系统–已安装Debian,Ubuntu,CentOS,RHEL,Fedora,Arch 等Snap,并带有sudo
步骤1:安装Snapd
我们有安装Snapd的教程:在Ubuntu/Debian,CentOS 7,Fedora,Arch Linux/Manjaro上安装Snap。
步骤2:安装MicroK8
安装Snap之后,我们可以使用Snap开始MicroK8s的安装。
快照会经常更新以匹配Kubernetes的每个发行版。
sudo snap install microk8s --classic
安装应如下所示:
可以使用以下命令检查所有发布的版本:
snap info microk8s
安装MicroK8s后,它将开始创建一个节点的Kubernetes集群。
可以使用检查此部署的状态。
# microk8s.status microk8s is running addons: jaeger: disabled fluentd: disabled gpu: disabled storage: disabled registry: disabled ingress: disabled dns: disabled metrics-server: disabled prometheus: disabled istio: disabled dashboard: disabled
从输出中,我们可以看到MicroK8s正在运行并且添加组件的状态可用。
要检查群集信息,请使用:
# microk8s.kubectl cluster-info Kubernetes master is running at https://127.0.0.1:16443
同时获取k8s节点的状态。
# microk8s.kubectl get nodes NAME STATUS ROLES AGE VERSION microk8s Ready 5m17s v1.14.0
如果我们不满意 microk8s.kubectl
命令,我们可以为其创建别名。
echo "alias kubectl='microk8s.kubectl'" >>~/.bashrc source ~/.bashrc
那你可以用 kubectl
命令:
# kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME microk8s Ready <none> 10m v1.14.0 192.168.10.175 <none> Ubuntu 18.04.2 LTS 4.15.0-45-generic containerd://1.2.5
在MicroK8上启用/禁用Kubernetes插件
适用于MicroK8的插件包括:仪表板:部署kubernetes仪表板以及grafana和influxdb.dns:部署kube dnsstorage:创建默认存储类。
该存储类使用指向主机上目录的hostpath-provisioner。
永久卷在${SNAP_COMMON}/default-storage下创建。
ingress:创建入口控制器。
istio:部署核心Istio服务。
使用 microk8s.istioctl
用于管理Deployments.registry的命令:部署镜像专用注册表并将其公开 localhost:32000
metrics-server:部署MetricsServer。
prometheus:部署Prometheus Operatorv0.25.
fluentd:部署Elasticsearch-Kibana-Fluentd日志和监视解决方案。
jaeger:在"最简单"的配置中部署Jaeger Operator v1.8.2.
启用和禁用可用于Kubernetes的插件。
启用插件
使用 microk8s.enable
启用插件的命令。
# microk8s.enable dashboard dns Enabling dashboard secret/kubernetes-dashboard-certs created serviceaccount/kubernetes-dashboard created deployment.apps/kubernetes-dashboard created service/kubernetes-dashboard created service/monitoring-grafana created service/monitoring-influxdb created service/heapster created deployment.extensions/monitoring-influxdb-grafana-v4 created serviceaccount/heapster created configmap/heapster-config created configmap/eventer-config created deployment.extensions/heapster-v1.5.2 created dashboard enabled Enabling DNS Applying manifest service/kube-dns created serviceaccount/kube-dns created configmap/kube-dns created deployment.extensions/kube-dns created Restarting kubelet DNS is enabled
启用存储插件:
# microk8s.enable storage Enabling default storage class deployment.extensions/hostpath-provisioner created storageclass.storage.k8s.io/microk8s-hostpath created Storage will be available soon
要启用存储和Istio添加组件,请执行以下操作:
# microk8s.enable istio
相同格式适用于其他插件。
使用以下命令确认已启用的插件:
# microk8s.status microk8s is running addons: jaeger: disabled fluentd: disabled gpu: disabled storage: enabled registry: enabled ingress: disabled dns: disabled metrics-server: disabled prometheus: disabled istio: disabled dashboard: enabled
有关URL之类的更多信息,请使用:
microk8s.kubectl cluster-info
输出:
禁用插件
使用 microk8s.disable
禁用插件的命令。
# microk8s.disable istio Disabling Istio namespace "istio-system" deleted Istio is terminating
在MicroK8上部署Pod和容器
部署以标准的Kubernetes方式完成。
请参阅下面的示例,该示例将使用两个容器创建Nginx部署。
# microk8s.kubectl run nginx --replicas 2 --image nginx deployment.apps/nginx created # microk8s.kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE nginx 2/2 2 2 39s # microk8s.kubectl get pods NAME READY STATUS RESTARTS AGE nginx-7db9fccd9b-7662b 1/1 Running 0 61s nginx-7db9fccd9b-87z6d 1/1 Running 0 61s
公开服务:
# microk8s.kubectl expose deployment nginx --port 80 --target-port 80 \ --type ClusterIP --selector=run=nginx --name nginx service/nginx exposed # microk8s.kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.152.183.1 443/TCP 27m nginx ClusterIP 10.152.183.54 80/TCP 104s
删除部署
# microk8s.kubectl delete deployment nginx deployment.extensions "nginx" deleted # microk8s.kubectl delete service nginx service "nginx" deleted
停止并重新启动MicroK8
不使用MicroK8时,无需卸载即可轻松关闭它。
# microk8s.stop Stopped.
使用以下命令启动MicroK8:
# microk8s.start Started.
卸下MicroK8
如果要完全卸下MicroK8,请首先停止所有正在运行的Pod。
microk8s.reset
然后卸下MicroK8s。
snap remove microk8s