microk8s 搭建

发布时间:2020-02-23 12:40:51编辑:admin阅读(2648)

    一、简述

    microk8s不通过虚拟机但与主机隔离方式,快速轻巧安装Kubernetes。通过在单个快照包中打包Kubernetes,Docker.io,iptables和CNI的所有上游二进制文件来实现此隔离。 snap包是一个应用程序容器 - 您可以将其想象为Docker容器的轻量级版本。它使用了许多相同的底层技术进行隔离,而没有网络隔离的所有开销。最终结果是一种超越任何一个发行版的包格式,因为快照可以安装在大多数Linux操作系统上,同时还利用原子更新,升级失败回滚以及来自用户主机的软件限制级别等功能。

     

    microk8s可以说是minikube在Linux平台上的一个替代品。

     

    二、安装

    环境说明

    配置操作系统ip地址
    1核2Gubuntu-16.04.5-server-amd64192.168.0.162

     

     

     

    通过 microk8s 可以非常快速的搭建起一个 Kubernetes 单机环境,安装极其非常方便,通过 snap 命令一键安装:

    ubuntu 自带 snap 命令,可以直接执行,centos 需要先安装 snap

     

    安装docker

    apt-get  -y docker.io
    apt-get clean all

     

    注意:microk8s依赖于docker,否则执行microk8s命令,会卡顿,甚至报错!

     

    安装 1.12版本

    sudo snap install microk8s --classic --channel=1.12/stable
    # 如需卸载,使用命令:
    # sudo snap remove microk8s

     

    注意:安装最新版本,使用命令:sudo snap install microk8s --classic 

    但是这里并没有安装最新版本,为什么呢?因为新版没有microk8s.docker命令。

    如果没有这个命令。必须使用代理方式,下载镜像!

    下文,会提到,如何使用microk8s.docker命令,来避免访问gfw问题。

     

    三、常用操作

    // 1. 启动
    microk8s.start
     
    // 2. 关闭
    microk8s.stop
     
    // 3. kubectl 操作
    // --- 查看 cluster
    microk8s.kubectl cluster-info
     
    // --- 查看 nodes
    microk8s.kubectl get nodes
     
    // --- 查看 pods
    microk8s.kubectl get pods
     
    // 4. docker 操作
    microk8s.docker ps
    microk8s.docker images

     

    可以看到,在 microk8s 环境中执行 kubectl 时,需要在 kubectl 命令前添加前缀 microk8s.

    为了方便,可以为 microk8s.kubectl 添加一个 别名:

    snap alias microk8s.kubectl kubectl

     

    kubectl 命令自动补全

    echo "source <(kubectl completion bash)" >> ~/.bashrc
    source ~/.bashrc

     

    停止 启动 microk8s

    microk8s.stop
     
    microk8s.start
     
    microk8s.status

     

    四、开启DNS服务

    microk8s.enable dns

     

    查看dns运行状态

    root@ubuntu:~# kubectl get pods -n kube-system
    NAME                        READY   STATUS    RESTARTS   AGE
    kube-dns-67b548dcff-75hgc   0/3     ContainerCreating   0          45

     

    查看pod详情

    kubectl describe po kube-dns-67b548dcff-75hgc -n kube-system

     

    会提示错误:

    pulling image "k8s.gcr.io/pause:3.1"
    ...

     

    解决gfw问题

    在国内,由于gfw的原因, 我们是访问不了google的镜像服务的, 因此很多时候我们会碰到类似这样的错误failed pulling image k8s.gcr.io/pause:3.1。这个问题我们可以通过手动下载镜像来解决。做法如下:

    microk8s.docker pull mirrorgooglecontainers/pause-amd64:3.1microk8s.docker tag mirrorgooglecontainers/pause-amd64:3.1 k8s.gcr.io/pause:3.1

     

    microk8s会自带一个docker, 如果你的系统里已经安装了docker的话, 它还是用自带的那个docker,也就是microk8s.docker。因此,在解决上面提到的镜像问题的时候, 一定要使用microk8s.docker命令来操作, 使用系统原有的docker是不起作用的。能否让microk8s使用系统的docker楼主还没研究出来

     

    除了 k8s.gcr.io/pause:3.1 之外,还需要其他镜像

    microk8s.docker pull mirrorgooglecontainers/k8s-dns-kube-dns-amd64:1.14.7
    microk8s.docker tag mirrorgooglecontainers/k8s-dns-kube-dns-amd64:1.14.7 gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.7
     
    microk8s.docker pull mirrorgooglecontainers/k8s-dns-sidecar-amd64:1.14.7
    microk8s.docker tag mirrorgooglecontainers/k8s-dns-sidecar-amd64:1.14.7 gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.7
     
    microk8s.docker pull mirrorgooglecontainers/k8s-dns-dnsmasq-nanny-amd64:1.14.7
    microk8s.docker tag mirrorgooglecontainers/k8s-dns-dnsmasq-nanny-amd64:1.14.7 gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.7

     

    查看镜像

    复制代码

    root@ubuntu:~# microk8s.docker images
    REPOSITORY                                             TAG                 IMAGE ID            CREATED             SIZE
    mirrorgooglecontainers/pause-amd64                     3.1                 da86e6ba6ca1        17 months ago       742kB
    k8s.gcr.io/pause                                       3.1                 da86e6ba6ca1        17 months ago       742kB
    gcr.io/google_containers/k8s-dns-sidecar-amd64         1.14.7              db76ee297b85        19 months ago       42MB
    mirrorgooglecontainers/k8s-dns-sidecar-amd64           1.14.7              db76ee297b85        19 months ago       42MB
    mirrorgooglecontainers/k8s-dns-kube-dns-amd64          1.14.7              5d049a8c4eec        19 months ago       50.3MB
    gcr.io/google_containers/k8s-dns-kube-dns-amd64        1.14.7              5d049a8c4eec        19 months ago       50.3MB
    gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64   1.14.7              5feec37454f4        19 months ago       41MB
    mirrorgooglecontainers/k8s-dns-dnsmasq-nanny-amd64     1.14.7              5feec37454f4        19 months ago       41MB

    复制代码

     

    删除掉dns pod

    kubectl delete po kube-dns-67b548dcff-75hgc -n kube-system --grace-period=0 --force

     

    再次查看dns pod,状态就正常了

    root@ubuntu:~# kubectl get pods -n kube-system
    NAME                        READY   STATUS    RESTARTS   AGE
    kube-dns-67b548dcff-75hgc   3/3     Running   0          45m

     

    五、部署Nginx

    下载nginx镜像

    microk8s.docker pull nginx:1.7.9

     

    新建service文件 

    vim nginx-service.yaml

     

    内容如下:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-deployment
    spec:
      type: NodePort
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
          name: http
          nodePort: 30080
      selector:
        name: nginx

     

    新建rc文件 

    vim nginx-rc.yaml

    内容如下:

    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      selector:
        matchLabels:
          name: nginx
      replicas: 1 # tells deployment to run 2 pods matching the template
      template:
        metadata:
          labels:
            name: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80

     

    启动应用

    kubectl apply -f nginx-service.yaml
    kubectl apply -f nginx-rc.yaml

     

    使用浏览器访问

    http://192.168.0.162:30080/

     

    效果如下:

    1.png

     

    六、开启registry

    对于非公网的镜像,不能使用 microk8s.docker 命令来下载镜像。这个时候,需要使用私有仓库了!

    开启自带的registry

    microk8s.enable registry

     

    访问私有库地址

    wget http://localhost:32000/

    如果输出:

    --2019-06-14 15:28:09--  http://localhost:32000/
    Resolving localhost (localhost)... ::1, 127.0.0.1
    Connecting to localhost (localhost)|::1|:32000... connected.
    HTTP request sent, awaiting response...

    表示无法连接!!!

     

    那么使用以下命令

    microk8s.docker tag nginx:1.7.9 localhost:32000/nginx:1.7.9
    microk8s.docker push localhost:32000/nginx:1.7.9

    就会报错:

    The push refers to repository [localhost:32000/nginx]
    Get http://localhost:32000/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)

     

    解决方法

    vi /etc/hosts

    注释掉这一行

    #::1     localhost ip6-localhost ip6-loopback

     

    再次使用wget命令,就正常了!

    root@ubuntu:/root/mysql# wget http://localhost:32000/
    --2019-06-14 15:28:42--  http://localhost:32000/
    Resolving localhost (localhost)... 127.0.0.1
    Connecting to localhost (localhost)|127.0.0.1|:32000... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 0
    Saving to: ‘index.html’
    
    index.html                      [ <=>                                      ]       0  --.-KB/s    in 0s      
    
    2019-06-14 15:28:42 (0.00 B/s) - ‘index.html’ saved [0/0]

     

    下载别的私有库

    对于下载别的私有库,必须修改文件

    vim /var/snap/microk8s/current/args/docker-daemon.json

     

    增加内网中的私有库地址

    {
      "insecure-registries" : ["localhost:32000","192.168.0.45:5000"]
    }

     

    重启docker

    /etc/init.d/docker restart

     

    下载内网中私有库的镜像

    root@ubuntu:/root/mysql# microk8s.docker pull 192.168.0.45:5000/mysql5.7.23
    Using default tag: latest
    latest: Pulling from mysql5.7.23
    ad965b2cd940: Downloading  20.15MB/43.02MB
    08cdc197aeb5: Download complete 
    87da4a64f82f: Download complete 
    1f15cc32d2ec: Download complete 
    3184f9337a95: Download complete 
    5586ed3c006c: Downloading  11.09MB/111.7MB
    6be3e1b4270e: Download complete 
    2eb841e4f573: Download complete 
    6e39824b78a8: Download complete 
    d9c21a3025f7: Download complete 
    3c9f6c373477: Download complete



    本文参考链接:

    https://www.jianshu.com/p/2f5eb7ef1d0f

    http://opentutorial.info/kubernetes/k8s/microk8s/

    https://itnext.io/microk8s-docker-registry-c3f401faa760

    https://github.com/ubuntu/microk8s/issues/196

    https://github.com/ubuntu/microk8s/issues/173


关键字