2020.5.6更,flannel 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。



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

过程记录

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

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

  3. 发现etcd的容器处于退出状态:

  4. 于是对该容器打个log:



    显示无法指定ip,ip为公网ip

  5. 查看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的更多相关文章

  1. 在阿里云ECS CentOS7上部署基于MongoDB+Node.js的博客

    前言:这是一篇教你如何在阿里云的ECS CentOS 7服务器上搭建一个个人博客的教程,教程比较基础,笔者尽可能比较详细的把每一步都罗列下来,包括所需软件的下载安装和域名的绑定,笔者在此之前对Linu ...

  2. 阿里云ECS下基于Centos7.4安装MySQL5.7.20

     1.首先登录阿里云ECS服务器,如下图所示: 2.卸载MariaDB 说明:CentOS7.x默认安装MariaDB而不是MySQL,而且yum服务器上也移除了MySQL相关的软件包.因为Maria ...

  3. 阿里云ECS单节点Kubernetes部署

    参考资料: kubernetes官网英文版 kubernetes官网中文版 环境.工具 阿里云学生机ECS.Ubuntu.docker.kubectl1.15.4.kubelet1.15.4.kube ...

  4. 阿里云ECS(Ubuntu)单节点Kubernetes部署

    参考资料: kubernetes官网英文版 kubernetes官网中文版 前言 这篇文章是比较久之前写的了,无聊翻了下博客发现好几篇博文排版莫名其妙的变了... 于是修改并完善了下.当初刚玩k8s的 ...

  5. SecureCRT发送心跳机制保持SSH在线(解决阿里云ECS)

    设置如下:

  6. 阿里云ECS下CentOS7.4 yum安装Python3.6环境

    一.安装EPEL和IUS软件源 二.安装Python3.6 三.创建python3软链接连接符 四.安装pip3 五.创建pip3链接符 六.进行验证是否安装成功 一.安装EPEL和IUS软件源 yu ...

  7. 阿里云ECS下Ubuntu 16.04系统安装python3.6.5 环境并设置为默认

    一.添加python3.6安装包并安装: 二.修改系统默认python版本为3.6: 三.安装并升级pip版本: 一.添加python3.6安装包并安装: sudo apt-get install s ...

  8. 阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建

    准备: 两台配置CentOS 7.3的阿里云ECS服务器: hadoop-2.7.3.tar.gz安装包: jdk-8u77-linux-x64.tar.gz安装包: hostname及IP的配置: ...

  9. 使用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 ...

随机推荐

  1. 箭头函数表达式和声名式函数表达式的区别以及 Function.prototype的bind, apply,call方法

    箭头函数不能用做构造函数 箭头函数没有arguments参数 箭头函数没有自己的this,是从作用域链上取this,是与箭头函数定义的位置有关的,与执行时谁调用无关,所以用call,apply,bin ...

  2. [转]swagger2 入门教程

    swagger2 是一个规范和完整的框架,用于生成.描述.调用和可视化Restful风格的web服务,现在我们使用spring boot 整合它 作用: 1.接口的文档在线自动生成 2.功能测试 先介 ...

  3. springmvc 过滤器和拦截器

     1. 拦截器: interceptor 过滤器(filter)与拦截器(intercepter)相同点:1) 都可以拦截请求,过滤请求2) 都是应用了过滤器(责任链)设计模式 2.区别: 1) fi ...

  4. Python--day61--Django ORM关系的简单梳理

    models.py中的代码和数据库中的表对应

  5. Python--day30--互联网协议与osi模型

  6. 洛谷P1280 尼克的任务 题解 动态规划/最短路

    作者:zifeiy 标签:动态规划.最短路 题目链接:https://www.luogu.org/problem/P1280 题目大意: 有k个任务分布在第1至n这n个时间点,第i个任务的于第 \(P ...

  7. HDU 6621"K-th Closest Distance"(二分+主席树)

    传送门 •题意 有 $m$ 次询问,每次询问求 $n$ 个数中, $[L,R]$ 区间距 $p$ 第 $k$ 近的数与 $p$ 差值的绝对值: •题解 二分答案,假设当前二分的答案为 $x$,那么如何 ...

  8. H3C RIPv2的改进

  9. win10 uwp 商业游戏 1.1.5

    本文是在win10 uwp 商业游戏 基础上继续开发,添加一些无聊的游戏 因为在发布几个月,下载量很少,小伙伴说游戏就玩不到几分钟就不想玩,于是我就想加入其他游戏 下面我来告诉大家如何在游戏中添加多个 ...

  10. background:url(./images.png) no-repeat 0 center的用法

    background:url(./images.png) no-repeat 0 center; //图像地址 不重复 水平位置0 垂直位置居中 background:url(./images.png ...