方案

环境

  • 操作系统: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. Azure 静态 web 应用集成 Azure 函数 API

    前几次我们演示了如果通过Azure静态web应用功能发布vue跟blazor的项目.但是一个真正的web应用,总是免不了需要后台api服务为前端提供数据或者处理数据的能力.同样前面我们也介绍了Azur ...

  2. 使用 JavaScript 操作浏览器历史记录 API

    History 是 window 对象中的一个 JavaScript 对象,它包含了关于浏览器会话历史的详细信息.你所访问过的 URL 列表将被像堆栈一样存储起来.浏览器上的返回和前进按钮使用的就是 ...

  3. CSS z-index应用靠近用户的框

    1.z-index (1)z轴.数值越大,越靠近你 (2)只能作用于定位过的标签元素 应用示例 <!DOCTYPE html> <html lang="zh-CN" ...

  4. sqlilab less1-less10

    less-1 参数被单引号包裹,加单引号,闭合后绕过 less-2 参数没有被包裹,直接带入查询,不需要闭合 less-3 参数被 ('$id') 包裹,需要将他闭合 less-4 参数被小括号和双引 ...

  5. __METHOD__

  6. nginx的403权限问题

    修改访问目录的权限为755 找到Nginx的配置文件nginx.conf,做如下改变: (1)将user nobody; 改为user root; (2)找到 autoindex  off 更改为on ...

  7. springboot中aop的使用

    Spring AOP(Aspect Oriented Programming),即面向切面编程,是OOP(Object Oriented Programming,面向对象编程)的补充和完善. OOP引 ...

  8. 面试阿里,首先要掌握的 Java 泛型,帮你一次性搞懂!

    引言 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除. 泛型基础 泛型类 我们首 ...

  9. 一键加Q群的实现

    打开网址 选择创建的群 选择所需要的二维码或者代码

  10. SwiftUI:看我展示52张扑克牌,“很快啊!”

    目录 思路 效果图 相关代码解析 枚举创建扑克牌号码 枚举创建扑克牌类型 viewModel逻辑 UI实现 源码 感受 思路 使用 SwiftUI 创建 UI 结构: 使用 swift 的枚举和结构体 ...