• 用Ubuntu和树莓派系统部署kubernetes集群后的一些心得


    方案

    环境

    • 操作系统:Ubuntu 16.04 & Raspbian GNU/Linux 9(Stretch Desktop)
    • kubernetes :1.15.3
    • flannel:0.11.0
    • docker:docker-io 18.09.1

    节点部署

    将运行Ubuntu的PC机作为master节点,树莓派作为普通的slave节点

    踩过的一些坑

    Ubuntu上部署k8s的线上资料比较多,安装的时候基本比较顺利,但是树莓派是基于arm架构实现的,因此资料也比较少,出现的问题需要自己找问题解决。下面就把遇到过的问题和解决方法分类罗列一下。

    镜像缺少

    由于高墙的原因,原本可以自动pull的镜像需要我们在各个节点手动下载。
    需要在arm节点上手动下载的镜像有:

    • k8s.gcr.io/kube-proxy
    • quay.io/coreos/flannel
    • k8s.gcr.io/pause
      需要注意的是,镜像版本要对应master节点的kubernetes版本。对应镜像,我执行的命令分别为:
    docker pull docker.io/mirrorgooglecontainers/kube-p                                                                                                              roxy-arm:v1.15.3
    docker pull quay.io/coreos/flannel:v0.11.0-arm 
    docker pull anjia0532/google-containers.pause-arm:3.1                                                                                                
    

    由于kube-proxy和pause拉的是国内的镜像,需要重新打回k8s.gcr.io的镜像tag,执行如下:

     docker tag mirrorgooglecontainers/kube-proxy-arm:v1.15.3 k8s.gcr.io/kube-proxy:v1.15.3  
     docker tag anjia0532/google-containers.pause-arm:3.1 k8s.gcr.io/pause:3.1                                                                                        
    

    docker版本不一致

    最开始ubuntu上安装的是docker的io版本,而树莓派上安装的是docker的ce版本,于是树莓派加入集群后,master一直无法启动slave节点中的pod,用kubectl describe pods --namespace=kube-system命令查看pod的日志,在events中发现如下错误:

    Error response from daemon: unable to find "net_prio" in controller set: unknow...
    

    谷歌之后发现是可能是因为docker版本不同导致的问题,于是将树莓派中的docker替换成io版本,就没有这条错误。

    kubernetes版本不一致

    通常slave节点上的kubernetes版本不得高于master节点上的,于是将所有的节点上的kubeadm、kubectl
    、kubelet统一成一个版本的。

    感悟

    为了部署这个混合架构的集群花费了将近一周的时间,还是认识到了一些东西。
    此类软件部署安装需要很多步骤,而软件是在经常更新的,于是网上的教程往往只能适用于一时,有些源可能已经不能使用了,因此,尽量去参考官方教程,获得最新的部署步骤。
    对于一些被墙了的镜像源,可以寻找国内的镜像源,搜索镜像的名称即刻得到相关的源,同时还可能需要修改镜像版本编号。
    遇到错误要学会看系统日志并且分析错误原因,这样才是根本学习之道,而不是只会把错误内容进行搜索,往往解决方法是过时的,长久之后,也只会学个皮毛,遇到一个奇怪的问题就措手无策了。根据错误信息,挨个解决,总会成功实现的。

    参考资料:
    https://blog.csdn.net/qq_40806970/article/details/97245650
    https://blog.csdn.net/liukuan73/article/details/83150473

  • 相关阅读:
    [自娱自乐] 2、超声波测距模块DIY笔记(二)
    [自制简单操作系统] 9、命令行与应用程序 整体回顾
    [汇编] C语言中嵌入汇编
    [Java Web] 5、JSP (1) 注释 & Scriptlet
    [自娱自乐] 1、超声波测距模块DIY笔记(一)
    [Java Web] 4、JavaScript 简单例子(高手略过)
    [C#] Timer + Graphics To Get Simple Animation (简单的源码例子,适合初学者)
    [自制简单操作系统] 8、多任务(三)——多窗口与优先级
    [自制简单操作系统] 7、多任务(二)——任务管理自动化&任务休眠
    [自制简单操作系统] 6、多任务(一)
  • 原文地址:https://www.cnblogs.com/lippon/p/14117728.html
Copyright © 2020-2023  润新知