[新手踩坑]k8s部署遇到的问题及可参考的解决办法
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”。
- 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文件里,操作可见这里
- The connection to the server localhost:8080 was refused - did you specify the right host or port?
遇到该问题同样是在执行apply kube-flannel.yml命令之后,解决办法见这里
- 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部署遇到的问题及可参考的解决办法相关推荐
- 【踩坑专栏】idea的language level默认为5解决办法
idea里的language level默认为5,改了project中 的project language level也没用.基本上处于过两分钟就会有提示告诉你,你刚改的modele language ...
- protoc cpp_out 新手踩坑
protoc cpp_out 新手踩坑 1.protoc cpp_out =./ *.proto 对'google::protobuf::Message:: ** 未定义的引用 : error: '* ...
- 在宝塔部署出现require(): open_basedir restriction in effect. File解决办法
在宝塔部署出现require(): open_basedir restriction in effect. File解决办法 报错代码: Warning: require(): open_basedi ...
- 踩坑 微信小程序开发mpvue使用iconfont,顺便解决偶现图标显示不正确
刚刚接触iconfont, 发现它真是个好东西. 使用字体图标的好处: 改颜色,改大小 都可以随时所欲,写个多态按钮分分钟搞定,爽的不要太过分! 阿里的字体图库 https://www.iconfon ...
- Linux下数据库连接超时时长,关于.Net Core 部署在Linux下连接SqlServer数据库超时解决办法...
.Net Core 在 Linux 下连接 SqlServer 需要 SqlServer2008 SP3或以上版本,或SqlServer2012,或SqlServer2014. 如果SqlServer ...
- 关于js的冒泡--新手踩坑案例
先通过一段html代码了解各个div的从属关系 <div id='wrapper' class="wrapper"><button id="clickM ...
- mvdbos php spider,踩坑,windows部署phpspider采集,报错:failed to open stream
报错界面如下: 主要错误就是:在我的代码第三行,有一个require错误 require.'../vendor/owner888/phpspider/autoloader.php'; 原先我是这样写的 ...
- Bootstrap Table踩坑——设置多级表头后只显示第一级表头问题解决办法
今天设置了Bootstrap Table的复杂表头,设置了多级表头(两行列名),但是只能显示第一级表头(第一行的列名),第二级的表头被第一级的表头覆盖.但是我仿照其他网上的其他设置复杂表头例子都能正常 ...
- 前端踩坑之TinyMCE富文本编辑器表情插件报错解决
最近项目中需要使用文本编辑器,比较了下最终选择了TinyMCE这款富文本编辑器. 我安装的是TinyMCE v5但是在使用表情插件的时候,表情一直都出不来,报错信息如下: Uncaught Synta ...
最新文章
- MySQL federated 引擎跨服务器使用实例
- [原]关于鼠标滚轮的编程
- CodeIgniter源码分析(一) 目录结构
- 《深入理解Java虚拟机》读书笔记七
- linux rs232触摸屏驱动程序,Linux下的触摸屏驱动
- CentOS7 LVM磁盘扩容
- Waymo自动驾驶数据集介绍与使用教程
- Elasticsearch5中安装Elasticsearch-head插件
- 关于查询结果插入新表中 怪哉怪哉
- Lego-美团点评接口自动化测试实践
- 阮一峰网络日志 第36期 2018年12月21日
- 6个免费科技外文文献下载网址,拿走不谢
- python爬取千图网_python 爬取 花瓣网图片,千图网图片
- Ubuntu 20.04 禁用笔记本电脑自带键盘
- 17行python代码轻松搞定堆糖网所有小姐姐图片
- 深度学习之图像分类(十二)--MobileNetV3 网络结构
- 自定义文字云/词云图----基于echarts
- Failed to push the item
- cordova在使用jqmobile中出现的问题(使用$(window).on与window.addEventListener)
- Python画各种爱心
热门文章
- ubuntu16.04 opencv3.3 python2.7 caffe GPU环境搭建
- 个人项目——找水王续
- HDMI转Displayport转换器支持4K分辨率
- vsimk is exiting with code 211
- UiPath:Windows计划任务调度UiPath(直接调用及.bat方式)
- Tessent scan ATPG(7) 设计规则检查 (DRC)
- 货郎问题和计算复杂度
- CodeForces - 1005A . Tanya and Stairways
- 设计模式学习第二十二节 策略模式
- Android studio输入m自动提示成员变量名称