番外篇:使用MicroK8s

作者: weipeng2k | 来源:发表于2020-03-28 22:16 被阅读0次

        在单节点的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.3
    snap info microk8s
    
    // 用户组
    sudo usermod -a -G microk8s $USER
    
    // 防火墙设置
    sudo ufw allow in on cni0 && sudo ufw allow out on cni0
    sudo ufw default allow routed
    
    // 启动相关的add-on
    microk8s.enable dashboard dns
    

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

    $  microk8s.status
    microk8s is running
    addons:
    cilium: disabled
    dashboard: enabled
    dns: enabled
    fluentd: disabled
    gpu: disabled
    helm3: disabled
    helm: disabled
    ingress: disabled
    istio: disabled
    jaeger: disabled
    juju: disabled
    knative: disabled
    kubeflow: disabled
    linkerd: disabled
    metallb: disabled
    metrics-server: disabled
    prometheus: disabled
    rbac: disabled
    registry: disabled
    storage: 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/bash
    images=(
    k8s.gcr.io/pause:3.1=gcr.azk8s.cn/google-containers/pause:3.1
    gcr.io/google_containers/defaultbackend-amd64:1.4=gcr.azk8s.cn/google-containers/defaultbackend-amd64:1.4
    k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1=registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
    k8s.gcr.io/heapster-influxdb-amd64:v1.3.3=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-influxdb-amd64:v1.3.3
    k8s.gcr.io/heapster-amd64:v1.5.2=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.2
    k8s.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=8080
    microk8s.kubectl expose deployment hello-minikube
    

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

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

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

    $ curl http://10.152.183.119:8080/123
    CLIENT VALUES:
    client_address=10.1.17.1
    command=GET
    real path=/123
    query=nil
    request_version=1.1
    request_uri=http://10.152.183.119:8080/123
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    host=10.152.183.119:8080
    user-agent=curl/7.58.0
    BODY:
    -no body in request-
    

    相关文章

      网友评论

        本文标题:番外篇:使用MicroK8s

        本文链接:https://www.haomeiwen.com/subject/dsdeuhtx.html