解决阿里云ECS下kubeadm部署k8s无法指定公网IP
2020.5.6更,flannel CrashLoopBackOff
不知道是多节点k8s集群的通病,还是因为是公网部署的缘故,使用flannel时可能出现CrashLoopBackOff的错误,网上找到的个人觉得应该可行的解决方案(几台服务器都过期没续费,没空测试):
- kubernetes使用flannel网络插件服务状态显示CrashLoopBackOff
- Kubernetes pod状态出现CrashLoopBackOff 的原因
- K8s问题【flannel一直重启问题,CrashLoopBackOff】
其它方案自行百度,注意查看报错信息是否与百度到的解决方案一致。
2020.4.12更,此贴作废
这是之前刚开始玩k8s时候写的,那时候对k8s理解不够深入,随便捣鼓几台学生机玩玩就算是入门了。后来一直没空再学习就放下来了,这几天稍微有点儿空,又折腾了下,发现k8s没那么简单。
虽然修改etcd可以通过公网ip部署集群,而且可以运行应用,但是集群节点信息里是没有公网ip的,而且貌似k8s是让kubelet直接与apiserver通过内网通信的,使用kubectl log等命令时还是用的内网IP,所以会提示timeout。要想真正实现公网ip部署k8s还是配置iptables进行重定向或其它更专业的方式。传送门1 传送门2
贴就不删了,给有需要的孩纸提供点而思路,不用走那么多弯路。
更新
以下方法比较笨拙,实用性不高,这里贴出知乎上一位大佬的文章——Kubernetes——部署基于公网的k8s集群
大佬给出的解决方案有两种,一是虚拟出一个绑定公网IP的网卡;二是使用k8s v1.8.0 + 版本引入的分段初始化方法,在初始化etcd的时候指定配置文件——传送门——kubeadm init phase;
公网部署的资料少得可怜,当初在找资料的时候,百度、谷歌、官网翻了好久,居然没发现这篇文章。。。ε=(´ο`*)))唉。
===2020.4.6更
背景
一般情况下,"kubeadm"部署集群时指定"--apiserver-advertise-address=<public_ip>"参数,即可在其他机器上,通过公网ip join到本机器,然而,阿里云ecs里没配置公网ip,etcd会无法启动,导致初始化失败。
环境、工具
阿里云ECS学生机、ECS对应的公网ip、kubeadm1.15.4、kubelet1.15.4、kubectl1.15.4、ubuntu18.04.3、linux4.15.0-66-generic、docker18.9.7
步骤
准备
该实现需要在kubeadm初始化过程中对etcd进行修改,而kubeadm初始化是阻塞的,因此,需要建立两个ssh对话,即用ssh工具新建两个标签,一个用来初始化节点,另一个在初始化过程中修改配置文件。注意是初始化过程中,每次运行kubeadm init,kubeadm都会生成etcd的配置文件,如果提前修改了配置文件,在运行kubeadm init时会把修改的结果覆盖,那么也就没有作用了。

运行kubeadm
输入命令"kubeadm init --kubernetes-version=<your_versin> --apiserver-advertise-address=<public_ip>"

此时会卡在
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[kubelet-check] Initial timeout of 40s passed.
修改etcd.yaml
在输入上述命令后,kubeadm即开始了master节点的初始化,但是由于etcd配置文件不正确,所以etcd无法启动,要对该文件进行修改。
文件路径"/etc/kubernetes/manifests/etcd.yaml"。
修改前

修改后

此处"xxx"为公网ip,要关注的是"--listen-client-urls"和"--listen-peer-urls"。需要把--listen-client-urls 和 --listen-peer-urls 都改成0.0.0.0:xxx
旧: 需要把"--listen-client-urls"后面的公网ip删除,把"--listen-peer-urls"改为本地的地址。
连接master节点
稍等片刻之后,master节点就初始化好了

拷贝"root"后面的连接token,在其他服务器,如腾讯云或阿里云ecs上就可以join这台master。

此时再安装好网络插件即可

过程记录
当指定"--apiserver-advertise-address"为公网ip时,kubeadm会在"[kubelet-check] Initial timeout of 40s passed."后卡很长时间,然后提示说初始化失败:

查看kubelet日志,未发现有价值的错误提示。于是进行了第二次尝试,并新建了一个ssh对话,用来查看在初始化的时候docker容器的状态。
发现etcd的容器处于退出状态:

于是对该容器打个log:

显示无法指定ip,ip为公网ip查看kubeadm生成的etcd配置文件,"xxx"为我的公网ip:

发现kubeadm自动把"--listen-peer-urls"改为了kubeadm初始化时指定的"--apiserver-advertise-address",即公网ip,而且"--listen-client-urls=",后面也加上了公网ip。这两个参数大概意思是指定要监听的ip地址,而阿里云学生机ecs的网卡没有配置公网ip,因此就无法指定该ip,导致etcd无法正常启动。对其进行修改即可,经测试,worker node 可以通过指定的公网ip join到master node,可以完成项目部署。

解决阿里云ECS下kubeadm部署k8s无法指定公网IP的更多相关文章
- 在阿里云ECS CentOS7上部署基于MongoDB+Node.js的博客
前言:这是一篇教你如何在阿里云的ECS CentOS 7服务器上搭建一个个人博客的教程,教程比较基础,笔者尽可能比较详细的把每一步都罗列下来,包括所需软件的下载安装和域名的绑定,笔者在此之前对Linu ...
- 阿里云ECS下基于Centos7.4安装MySQL5.7.20
1.首先登录阿里云ECS服务器,如下图所示: 2.卸载MariaDB 说明:CentOS7.x默认安装MariaDB而不是MySQL,而且yum服务器上也移除了MySQL相关的软件包.因为Maria ...
- 阿里云ECS单节点Kubernetes部署
参考资料: kubernetes官网英文版 kubernetes官网中文版 环境.工具 阿里云学生机ECS.Ubuntu.docker.kubectl1.15.4.kubelet1.15.4.kube ...
- 阿里云ECS(Ubuntu)单节点Kubernetes部署
参考资料: kubernetes官网英文版 kubernetes官网中文版 前言 这篇文章是比较久之前写的了,无聊翻了下博客发现好几篇博文排版莫名其妙的变了... 于是修改并完善了下.当初刚玩k8s的 ...
- SecureCRT发送心跳机制保持SSH在线(解决阿里云ECS)
设置如下:
- 阿里云ECS下CentOS7.4 yum安装Python3.6环境
一.安装EPEL和IUS软件源 二.安装Python3.6 三.创建python3软链接连接符 四.安装pip3 五.创建pip3链接符 六.进行验证是否安装成功 一.安装EPEL和IUS软件源 yu ...
- 阿里云ECS下Ubuntu 16.04系统安装python3.6.5 环境并设置为默认
一.添加python3.6安装包并安装: 二.修改系统默认python版本为3.6: 三.安装并升级pip版本: 一.添加python3.6安装包并安装: sudo apt-get install s ...
- 阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建
准备: 两台配置CentOS 7.3的阿里云ECS服务器: hadoop-2.7.3.tar.gz安装包: jdk-8u77-linux-x64.tar.gz安装包: hostname及IP的配置: ...
- 使用kubeadm部署k8s集群[v1.18.0]
使用kubeadm部署k8s集群 环境 IP地址 主机名 节点 10.0.0.63 k8s-master1 master1 10.0.0.63 k8s-master2 master2 10.0.0.6 ...
随机推荐
- Open Source Software List: The Ultimate List
http://www.datamation.com/open-source/ Accessibility 1. The Accessibility Project The Business Value ...
- es6新增语法之`${}`
这是es6中新增的字符串方法 可以配合反单引号完成拼接字符串的功能 1.反单引号怎么打出来?将输入法调整为英文输入法,单击键盘上数字键1左边的按键. 2.用法step1: 定义需要拼接进去的字符串变量 ...
- SuperSocket从服务器端主动发起连接
你可以从服务器端主动连接客户端, 连接建立之后的网络通信处理将和客户端主动建立连接的处理方式一样. var activeConnector = appServer as IActiveConnecto ...
- PHP 面试题 一
1.用PHP打印出前一天的时间格式是2017-5-10 22:21:21(2分) 月,日没有前导零:2017-5-1 22:21:21echo date("Y-n-j H:i:s" ...
- H3C OSPF协议区域LSA发布
- 21个项目玩转深度学习:基于TensorFlow的实践详解01—MNIST机器学习入门
数据集 由Yann Le Cun建立,训练集55000,验证集5000,测试集10000,图片大小均为28*28 下载 # coding:utf-8 # 从tensorflow.examples.tu ...
- tet-2
一.html和css部分 1.如何理解CSS的盒子模型? 标准盒子模型:宽度=内容的宽度(content)+ border + padding 低版本IE盒子模型:宽度=内容宽度(content+ ...
- C# 文件在数据库 的 存取
... /// <summary> /// 获取数据库Image字段数据,保存到本地 /// </summary> /// <param name="sende ...
- Linux 内核 EISA 总线
扩展 ISA (EISA) 总线是一个对 ISA 的 32-位 扩展, 带有一个兼容的接口连接器; ISA 设备板可被插入一个 EISA 连接器. 增加的线在 ISA 接触之下被连接. 如同 PCI ...
- javascript修改css样式表
//创建var sheet=document.createElement('style');document.bodt.appendChild(sheet);sheet.styleSheet.cssT ...