通过MicroK8和Snap部署轻量级Kubernetes

时间:2020-02-23 14:30:20  来源:igfitidea点击:

在容器化和微服务领域,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:32000metrics-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