1.部署流程

项目需要最近在了解k8s,尝试使用虚拟机模拟集群环境,结合了不同的部署教程,给出一个基本的安装流程,以及遇到的问题。
    安装环境:windows10+vmware(模拟集群环境)+ubuntu 16.04
思路:利用虚拟机模拟集群环境,虚拟机上安装ubuntu 16.04系统,创建了两个虚拟机,一个作为master节点(集群的总控节点,相当于集群的大脑),一个作为从节点node(相当于集群里可供调度的资源),二者的关系相当于将军-士兵,将军只有一个,士兵可以有很多,供将军调配。需要在所有的节点(master和所有node)上安装docker,kubeadm,kubelet,kubectl,master节点需要一些特别的配置,这是作为“大脑”的特殊地方。

  • kubeadm:引导启动k8s集群的安装与启动。
  • kubelet:在集群中所有节点上运行的核心组件,用来执行如启动pods和containers等操作。
  • kubectl:操作集群的命令行工具。

安装命令:
    https://blog.csdn.net/qq_14845119/article/details/83349471
    https://www.cnblogs.com/rainingnight/p/using-kubeadm-to-create-a-cluster-1-13.html
    因为我安装的过程遇到了太多的坑,主要精力花费在解决问题上了,所以安装过程没有截图了,所有的命令都可以在这里找到。

2.遇到的问题

遇到的大部分问题都在于访问限制,所以在一些命令中需要更换aliyun源,尤其是在集群初始化的时候。

1.kubeadm init --kubernetes-version=v1.17.3 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address=0.0.0.0 --image-repository registry.aliyuncs.com/google_containers --ignore-preflight-errors=Swap

这是集群的初始化命令,其中–pod-network-cidr参数指定的是pod网络的地址(对网络了解不深,为什么这么写的原因还不了解),–apiserver-advertise-address指定的是master节点的网络地址,–image-registry指定的是国内镜像地址

2.集群初始化遇到问题时,用该命令进行清理:sudo kubeadm reset

需要注意的是初始化之后有一系列的创建、拷贝admin.conf文件到$HOME/.kube/下的操作,而reset操作并不会清理这个目录,所以无比要手动删除,否则之后的操作会报错“Unable to connect to the server: x509: certificate signed by unknown authority”。

  1. The connection to the server raw.githubusercontent.com was refused - did you specify the right host or port?

遇到该问题是在执行“kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml”命令时遇到的,解决办法就是添加该地址的ip到hosts文件里,操作可见这里

  1. The connection to the server localhost:8080 was refused - did you specify the right host or port?

遇到该问题同样是在执行apply kube-flannel.yml命令之后,解决办法见这里

  1. networkPlugin cni failed to set up pod “coredns-9d85f5447-2j4t8_kube-system” network: open /run/flannel/subnet.env: no such file or directory

遇到该问题是在获取命名空间中的全部pod时出现的,主要原因是coredns对应的pod一直没有running,针对这个问题有以下几种解决办法:
(1)查看指定路径下是否存在subnet.env文件
/run/flannel/subnet.env的内容:
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.224.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
(2)coredns pod的状态显示为“CrashLoopBackOff”
这个问题在报错中给出了官方的解决办法,造成这一问题的主要原因在于resolv.conf文件中的nameserver设置为了127.0.0.1,指向了自身,导致出现了环路,而k8s环境中的某种机制检测到了这种环路,所以不停的重启该pod。解决办法有两种:
    (i)sudo情况下修改resolv.conf文件,将指向自身(127开头)的nameserver一行注释掉,添加8.8.8.8或114.114.114.114.(需要注意的是我的系统中resolv.conf文件存在多个,而etc目录下的resolv.conf连接到了run/resolvconf/resolv.conf,所以需要修改根源的文件内容,注意注意!),然后重启kubelet服务,
    (ii)直接暴力删除coredns出错的节点,系统会自动重建该节点,如果进行了上述操作没有反应的话可以尝试这一招。

6.之前apply的flannel-pod可以正常running,但是在修改hostname之后状态一直为“pending”。

造成这一问题的原因在于:我在集群初始化之后修改了hostname(这一操作应当放在配置环境的开头,否则原来可以running的pod变成了pending,错误日志显示找不到修改后的hostname),解决办法就是kubeadm reset,然后重新操作。

7.[kubelet] Downloading configuration for the kubelet from the “kubelet-config-1.11” ConfigMap in the kube-system namespace configmaps “kubelet-config-1.11” is forbidden: User “system:bootstrap:7df77e” cannot get configmaps in the namespace "kube-system

这个错误出现在 在从节点上执行join命令加入master节点的时候,造成这一错误的原因在于master节点与“士兵”节点node的kubeadm,kubelet,kubectl或者docker版本不一致。在这种集群部署的过程中,版本还是一个非常重要的地方,应当时刻注意版本信息。解决办法就是将所有相关的组件都卸载,然后apt-get install时指定为master节点所采用的版本。

8.节点添加成功,但状态显示notready

出现这一情况时,在从节点上执行 journalctl -f -u kubelet 查看 kubelet日志,提示notready的原因是
Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized”,造成这一问题的原因没有了解清楚,只是照做了它的操作,执行命令 docker images|grep flannel,之后再在master节点上get nodes 就显示ready了。

3.总结

新手入门,从来没有任何的部署经验,想要了解k8s的机制,最好的方法还是自己部署一遍,遇到错误变查边学对于了解大体的框架还是有很大帮助的。水平有限,欢迎指导。

【注意】最开始部署k8s完全是为了学习kubeflow,现在发现教程里的一个问题在于k8s版本过高,导致在该版本上配置kubeflow1.0不确定有没有问题,在利用apt-get 安装时,update之后的安装自动安装的是最新版本的docker和k8s,所以务必要自己指定安装的版本,以免部署之后发现不适配!!!!!!!!!!!!!!!

[新手踩坑]k8s部署遇到的问题及可参考的解决办法相关推荐

  1. 【踩坑专栏】idea的language level默认为5解决办法

    idea里的language level默认为5,改了project中 的project language level也没用.基本上处于过两分钟就会有提示告诉你,你刚改的modele language ...

  2. protoc cpp_out 新手踩坑

    protoc cpp_out 新手踩坑 1.protoc cpp_out =./ *.proto 对'google::protobuf::Message:: ** 未定义的引用 : error: '* ...

  3. 在宝塔部署出现require(): open_basedir restriction in effect. File解决办法

    在宝塔部署出现require(): open_basedir restriction in effect. File解决办法 报错代码: Warning: require(): open_basedi ...

  4. 踩坑 微信小程序开发mpvue使用iconfont,顺便解决偶现图标显示不正确

    刚刚接触iconfont, 发现它真是个好东西. 使用字体图标的好处: 改颜色,改大小 都可以随时所欲,写个多态按钮分分钟搞定,爽的不要太过分! 阿里的字体图库 https://www.iconfon ...

  5. Linux下数据库连接超时时长,关于.Net Core 部署在Linux下连接SqlServer数据库超时解决办法...

    .Net Core 在 Linux 下连接 SqlServer 需要 SqlServer2008 SP3或以上版本,或SqlServer2012,或SqlServer2014. 如果SqlServer ...

  6. 关于js的冒泡--新手踩坑案例

    先通过一段html代码了解各个div的从属关系 <div id='wrapper' class="wrapper"><button id="clickM ...

  7. mvdbos php spider,踩坑,windows部署phpspider采集,报错:failed to open stream

    报错界面如下: 主要错误就是:在我的代码第三行,有一个require错误 require.'../vendor/owner888/phpspider/autoloader.php'; 原先我是这样写的 ...

  8. Bootstrap Table踩坑——设置多级表头后只显示第一级表头问题解决办法

    今天设置了Bootstrap Table的复杂表头,设置了多级表头(两行列名),但是只能显示第一级表头(第一行的列名),第二级的表头被第一级的表头覆盖.但是我仿照其他网上的其他设置复杂表头例子都能正常 ...

  9. 前端踩坑之TinyMCE富文本编辑器表情插件报错解决

    最近项目中需要使用文本编辑器,比较了下最终选择了TinyMCE这款富文本编辑器. 我安装的是TinyMCE v5但是在使用表情插件的时候,表情一直都出不来,报错信息如下: Uncaught Synta ...

最新文章

  1. MySQL federated 引擎跨服务器使用实例
  2. [原]关于鼠标滚轮的编程
  3. CodeIgniter源码分析(一) 目录结构
  4. 《深入理解Java虚拟机》读书笔记七
  5. linux rs232触摸屏驱动程序,Linux下的触摸屏驱动
  6. CentOS7 LVM磁盘扩容
  7. Waymo自动驾驶数据集介绍与使用教程
  8. Elasticsearch5中安装Elasticsearch-head插件
  9. 关于查询结果插入新表中 怪哉怪哉
  10. Lego-美团点评接口自动化测试实践
  11. 阮一峰网络日志 第36期 2018年12月21日
  12. 6个免费科技外文文献下载网址,拿走不谢
  13. python爬取千图网_python 爬取 花瓣网图片,千图网图片
  14. Ubuntu 20.04 禁用笔记本电脑自带键盘
  15. 17行python代码轻松搞定堆糖网所有小姐姐图片
  16. 深度学习之图像分类(十二)--MobileNetV3 网络结构
  17. 自定义文字云/词云图----基于echarts
  18. Failed to push the item
  19. cordova在使用jqmobile中出现的问题(使用$(window).on与window.addEventListener)
  20. Python画各种爱心

热门文章

  1. ubuntu16.04 opencv3.3 python2.7 caffe GPU环境搭建
  2. 个人项目——找水王续
  3. HDMI转Displayport转换器支持4K分辨率
  4. vsimk is exiting with code 211
  5. UiPath:Windows计划任务调度UiPath(直接调用及.bat方式)
  6. Tessent scan ATPG(7) 设计规则检查 (DRC)
  7. 货郎问题和计算复杂度
  8. CodeForces - 1005A . Tanya and Stairways
  9. 设计模式学习第二十二节 策略模式
  10. Android studio输入m自动提示成员变量名称