番外篇:使用MicroK8s

作者 : 开心源码 本文共5259个字,预计阅读时间需要14分钟 发布时间: 2022-05-13 共325人阅读

    在单节点的Kubernetes搭建过程中,一般会采用MiniKube,可是MiniKube会要求宿主机安装虚拟机,在其上完成部署,这个过程会比较麻烦,有没有一种方式,能够提供一种不依赖虚拟机,但是能和宿主机相对隔离的方案来搭建单节点的Kubernetes呢?答案是有的,Canonical 提供了MicroK8s,可以用它来完成不依赖虚拟机的搭建,同时它提供了非常好的安装体验。

    MicroK8s的形容是 “Zero-ops Kubernetes for workstations and edge / IoT
A single package of k8s for 42 flavours of Linux. Made for developers, and great for edge, IoT and appliances.”
,可以看到这是一个目标在单节点的Kubernetes部署方案,同时它也通过了Kubernetes认证。

MicroK8s也可以通过add node组成多节点模式,但是它主要是用来完成单节点原型搭建,而非生产环境的构建。

网上也有少量搭建教程,但大部分都是摘抄,很多都跑不通。

工具安装

    工具安装的环境是Ubuntu 18.04 LTS,接下来开始安装MicorK8s

    先安装MicroK8s本体。

// 安装`MicroK8s`sudo snap install microk8s --classic// 查看一下版本,当前1.18已经发布,目前笔者使用的是1.17.3snap info microk8s// 客户组sudo usermod -a -G microk8s $USER// 防火墙设置sudo ufw allow in on cni0 && sudo ufw allow out on cni0sudo ufw default allow routed// 启动相关的add-onmicrok8s.enable dashboard dns

    运行完这些命令,假如在国内,不出意外,是无法启动的,假如运行成功是如下输出:

$  microk8s.statusmicrok8s is runningaddons:cilium: disableddashboard: enableddns: enabledfluentd: disabledgpu: disabledhelm3: disabledhelm: disabledingress: disabledistio: disabledjaeger: disabledjuju: disabledknative: disabledkubeflow: disabledlinkerd: disabledmetallb: disabledmetrics-server: disabledprometheus: disabledrbac: disabledregistry: disabledstorage: disabled

    起因还是gcr镜像无法下载,这里需要先调整一下docker的配置。

sudo vi /etc/docker/daemon.json

前提是安装了Docker

    对应的配置下,添加insecure-registries

{  "registry-mirrors": ["https://heli2ujx.mirror.aliyuncs.com"],  "insecure-registries" : ["localhost:32000"]}

    无法启动的起因是少量关键的镜像无法下载,在墙那边,所以需要下载后,方可启动。但是其中的POD无法正常启动的起因需要能够查清楚,MicroK8s提供的命令可以帮助查看对应的POD处于的状态。

其实也就是describe命令。

可以使用microk8s.kubectl get all --all-namespaces来查看所有的PODSERVICE等资源运行情况。

    使用如下命令,可以查看对应的POD相关情况。

microk8s.kubectl describe pod ${pod name}  -n kube-system

    例如:microk8s.kubectl describe pod monitoring-influxdb-grafana-v4-6d599df6bf-28m97 -n kube-system,假如这个POD运行存在问题,会将问题显示出来,可以跟进排查。

镜像下载

    对于 1.17.3 版本的MicroK8s,可以使用如下脚本将镜像从aliyun搬到本地,而后打上对应的tag,这样镜像就在本地存在了。

$ more fetch-image.sh #!/bin/bashimages=(k8s.gcr.io/pause:3.1=gcr.azk8s.cn/google-containers/pause:3.1gcr.io/google_containers/defaultbackend-amd64:1.4=gcr.azk8s.cn/google-containers/defaultbackend-amd64:1.4k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1=registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1k8s.gcr.io/heapster-influxdb-amd64:v1.3.3=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-influxdb-amd64:v1.3.3k8s.gcr.io/heapster-amd64:v1.5.2=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.2k8s.gcr.io/heapster-grafana-amd64:v4.4.3=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-grafana-amd64:v4.4.3)OIFS=$IFS; # 保存旧值for image in ${images[@]};do    IFS='='    set $image    docker pull $2    docker tag  $2 $1    docker rmi  $2    docker save $1 > 1.tar && microk8s.ctr --namespace k8s.io image import 1.tar && rm 1.tar    IFS=$OIFS; # 复原旧值done

    sudo ./fetch-image.sh执行后,这些镜像被下载到本地。而后运行microk8s.stop && microk8s.start,等待成功。

运行服务

    运行命令创立一个echoserver服务,运行如下命令:

microk8s.kubectl run hello-minikube --image=registry.cn-hangzhou.aliyuncs.com/google-containers/echoserver:1.4 --port=8080microk8s.kubectl expose deployment hello-minikube

    下载完镜像,启动了服务,可以看一下当前的部署情况:

$ microk8s.kubectl get all --all-namespacesNAMESPACE     NAME                                                  READY   STATUS    RESTARTS   AGEdefault       pod/hello-minikube-7dfbb66787-j54tw                   1/1     Running   0          4m59skube-system   pod/coredns-7b67f9f8c-4bm8b                           1/1     Running   2          6d4hkube-system   pod/dashboard-metrics-scraper-687667bb6c-lvf85        1/1     Running   2          6d4hkube-system   pod/heapster-v1.5.2-5c58f64f8b-wzm6g                  4/4     Running   8          6d4hkube-system   pod/kubernetes-dashboard-5c848cc544-kq8c7             1/1     Running   2          6d4hkube-system   pod/monitoring-influxdb-grafana-v4-6d599df6bf-28m97   2/2     Running   4          6d4hNAMESPACE     NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGEdefault       service/hello-minikube              ClusterIP   10.152.183.119   <none>        8080/TCP                 4m8sdefault       service/kubernetes                  ClusterIP   10.152.183.1     <none>        443/TCP                  6d5hkube-system   service/dashboard-metrics-scraper   ClusterIP   10.152.183.120   <none>        8000/TCP                 6d4hkube-system   service/heapster                    ClusterIP   10.152.183.135   <none>        80/TCP                   6d4hkube-system   service/kube-dns                    ClusterIP   10.152.183.10    <none>        53/UDP,53/TCP,9153/TCP   6d4hkube-system   service/kubernetes-dashboard        NodePort    10.152.183.251   <none>        443:32100/TCP            6d4hkube-system   service/monitoring-grafana          ClusterIP   10.152.183.84    <none>        80/TCP                   6d4hkube-system   service/monitoring-influxdb         ClusterIP   10.152.183.183   <none>        8083/TCP,8086/TCP        6d4hNAMESPACE     NAME                                             READY   UP-TO-DATE   AVAILABLE   AGEdefault       deployment.apps/hello-minikube                   1/1     1            1           4m59skube-system   deployment.apps/coredns                          1/1     1            1           6d4hkube-system   deployment.apps/dashboard-metrics-scraper        1/1     1            1           6d4hkube-system   deployment.apps/heapster-v1.5.2                  1/1     1            1           6d4hkube-system   deployment.apps/kubernetes-dashboard             1/1     1            1           6d4hkube-system   deployment.apps/monitoring-influxdb-grafana-v4   1/1     1            1           6d4hNAMESPACE     NAME                                                        DESIRED   CURRENT   READY   AGEdefault       replicaset.apps/hello-minikube-7dfbb66787                   1         1         1       4m59skube-system   replicaset.apps/coredns-7b67f9f8c                           1         1         1       6d4hkube-system   replicaset.apps/dashboard-metrics-scraper-687667bb6c        1         1         1       6d4hkube-system   replicaset.apps/heapster-v1.5.2-5c58f64f8b                  1         1         1       6d4hkube-system   replicaset.apps/kubernetes-dashboard-5c848cc544             1         1         1       6d4hkube-system   replicaset.apps/monitoring-influxdb-grafana-v4-6d599df6bf   1         1         1       6d4h

    接下来请求本地,而后看一下输出:

$ curl http://10.152.183.119:8080/123CLIENT VALUES:client_address=10.1.17.1command=GETreal path=/123query=nilrequest_version=1.1request_uri=http://10.152.183.119:8080/123SERVER VALUES:server_version=nginx: 1.10.0 - lua: 10001HEADERS RECEIVED:accept=*/*host=10.152.183.119:8080user-agent=curl/7.58.0BODY:-no body in request-
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 番外篇:使用MicroK8s

发表回复