方案

环境

  • 操作系统: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

用Ubuntu和树莓派系统部署kubernetes集群后的一些心得的更多相关文章

  1. 和我一步步部署 kubernetes 集群

    和我一步步部署 kubernetes 集群 本系列文档介绍使用二进制部署最新 kubernetes v1.6.1 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群: 在部署的过程中, ...

  2. 使用Rancher的RKE快速部署Kubernetes集群

    简要说明: 本文共涉及3台Ubuntu机器,1台RKE部署机器(192.168.3.161),2台Kubernetes集群机器(3.162和3.163). 先在Windows机器上,将rke_linu ...

  3. 二进制包部署Kubernetes集群

    今天这篇文章教给大家如何快速部署一套Kubernetes集群.K8S集群部署有几种方式:kubeadm.minikube和二进制包.前两者属于自动部署,简化部署操作,我们这里强烈推荐初学者使用二进制包 ...

  4. 二进制部署 Kubernetes 集群

    二进制部署 Kubernetes 集群   提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernet ...

  5. CentOS上手工部署kubernetes集群

    本文完全是根据二进制部署kubernets集群的所有步骤,同时开启了集群的TLS安全认证. 环境说明 在下面的步骤中,我们将在三台CentOS系统的物理机上部署具有三个节点的kubernetes1.7 ...

  6. 高可用Kubernetes集群-15. 部署Kubernetes集群统一日志管理

    参考文档: Github:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsear ...

  7. 高可用Kubernetes集群-14. 部署Kubernetes集群性能监控平台

    参考文档: Github介绍:https://github.com/kubernetes/heapster Github yaml文件: https://github.com/kubernetes/h ...

  8. Kubernetes探索学习001--Centos7.6使用kubeadm快速部署Kubernetes集群

    Centos7.6使用kubeadm快速部署kubernetes集群 为什么要使用kubeadm来部署kubernetes?因为kubeadm是kubernetes原生的部署工具,简单快捷方便,便于新 ...

  9. 使用Kubespray部署Kubernetes集群

    转载请标明出处: http://blog.csdn.net/forezp/article/details/82730382 本文出自方志朋的博客 Kubespray是Google开源的一个部署生产级别 ...

随机推荐

  1. BlockingQueue中 take、offer、put、add的一些比较

    (转自:https://blog.csdn.net/wei_ya_wen/article/details/19344939 侵删) 在java多线程操作中, BlockingQueue<E> ...

  2. VM共享文件夹设置

    1.打开设置 2.启动共享文件夹 3.设置共享文件夹向导     4.验证共享是否成功 出现以下情况说明共享成功,否则就是失败  

  3. python程序基础

    高级程序设计语言包括Python.C/C++.Java等 低级程序设计语言包括汇编语言和机器语言   Python是一种解释型语言,但为了提高运行效率,Python程序在 执行一次之后会自动生成扩展名 ...

  4. IDEA 使用的一些快捷键记录

    1,ctrl+tab 导航当前编辑打开的所有文件,按住Ctrl,使用backspace 可以关闭某个文件 2,ctrl+shift+alt+s 打开项目设置,alt+shift+s 打开所有设置 3, ...

  5. Java项目读取resources资源文件路径那点事

    今天在Java程序中读取resources资源下的文件,由于对Java结构了解不透彻,遇到很多坑.正常在Java工程中读取某路径下的文件时,可以采用绝对路径和相对路径,绝对路径没什么好说的,相对路径, ...

  6. python-基础入门-7基础

    1.语法和语句 Python中有一些基本规则和特殊字符 1)#符号之后的表示注释 2)\n符号表示换行 3)\继续上一行的内容 推荐使用括号,这样可读性更好 4):将两个语句链接在一行中 类似于c语言 ...

  7. 超强工具集——GitHub 热点速览 Vol.47

    作者:HelloGitHub-小鱼干 本周 GitHub 趋势榜精彩至极,先是 JetBrains 开源的图像渲染引擎 Skia 有了 Java 封装,一开源便获得 500+ star,再是支持开发者 ...

  8. 【转】Java工程师知识图谱

    一.Java工程师知识图谱(思维导图版) 二.Java工程师知识图谱(文字链接版) 专业基石 数据结构 数组 链表 队列 栈 哈希表 堆 树 图 BitMap 算法思想 排序 查找 分支算法 动态规划 ...

  9. CorelDRAW复制及镜面反转对象

    复制的设计都是由简单的图案和基础的操作堆砌而成的,如何恰当地使用这些基础操作,就是各位新学者要格外注意的地方. 这次我们介绍CorelDRAW中的复制和镜面操作. 一.复制 1.复制单个对象 使用Co ...

  10. FL Studio在线面板的作用

    FL Studio的在线面板主要是用来显示其自身与Image-Line公司相关的新闻.我们点击它后会看到一个新闻列表菜单,其中每一个项目都包含日期.标题.简介以及URL.详细的内容我们将在下文介绍,一 ...