zoukankan      html  css  js  c++  java
  • 用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

  • 相关阅读:
    程序员必看书籍(转载)
    JBPM的ORACLE脚本
    XFire构建web service客户端的五种方式
    为什么中国出不了facebook和Twitter?
    用dwr封装表单项提交表单
    Java 程序员容易犯的10个SQL错误
    SQL语句优化方法30例
    sqlserver sql语句查看分区记录数、查看记录所在分区
    SQL Case when 的使用方法
    sqlserver sql语句附加 分离数据库
  • 原文地址:https://www.cnblogs.com/lippon/p/14117728.html
Copyright © 2011-2022 走看看