标签:linux docker ip地址 学生 elf 过程 参数 没有 容器
一般情况下,"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 --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.
在输入上述命令后,kubeadm即开始了master节点的初始化,但是由于etcd配置文件不正确,所以etcd无法启动,要对该文件进行修改。
文件路径"/etc/kubernetes/manifests/etcd.yaml"。
此处"xxx"为公网ip,要关注的是"--listen-client-urls"和"--listen-peer-urls"。需要把"--listen-client-urls"后面的公网ip删除,把"--listen-peer-urls"改为本地的地址。
稍等片刻之后,master节点就初始化好了
拷贝"root"后面的连接token,在其他服务器,如腾讯云或阿里云ecs上就可以join这台master。
此时再安装好网络插件即可
当指定"--apiserver-advertise-address"为公网ip时,kubeadm会在"[kubelet-check] Initial timeout of 40s passed."后卡很长时间,然后提示说初始化失败:
因为是在master节点进行初始化,kubelet用于worker节点的容器等的管理,所以初始化失败应该是与kubelet无关的,而且查看kubelet日志,未发现有价值的错误提示。于是进行了第二次尝试,并新建了一个ssh对话,用来查看在初始化的时候docker容器的状态。
查看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,可以完成项目部署。
标签:linux docker ip地址 学生 elf 过程 参数 没有 容器
原文地址:https://www.cnblogs.com/life-of-coding/p/11879067.html