kubeadm搭建高可用K8s集群

准备

准备3台机器,分别设置hostname如下所示(此处主要是为了便于标识不同的机器,其实不设置hostname也可以正常搭建):

机器IP hostname
10.103.24.18 master1
10.120.162.6 master2
10.136.22.7 master3

kubeadm搭建高可用K8s集群

第一步:初始化第一个master节点

参考《使用Kubeadm搭建Kubernetes(1.13.1)集群》在master1搭建一个单master节点的k8s集群。

第二步:拷贝证书

参考《使用Kubeadm搭建Kubernetes(1.13.1)集群》在master2master3安装docker、kubeadm 、 kubectl、flannel,但不要执行kubeadm init。(如果执行了kubeadm init也没关系,再执行kubeadm reset就行了)。

然后在master1节点 /etc/kubernetes/ 目录下执行tar -czvf pki.tar.gz pki对 pki 目录进行压缩生成 pki.tar.gz 文件。

将pki.tar.gz文件上传到第二和第三个master节点{$HOME}/~目录下(可以用scp、rsync、sz/rz等命令都可以)。

然后在第二和第三个master节点{$HOME}/~目录下执行如下命令将证书拷贝到/etc/kubernetes/pki/目录下:

# 解压缩文件
tar -xzvf pki.tar.gz
# 移除已处在的文件
rm -rf /etc/kubernetes/pki/*
# 删除etcd相关的证书
rm -f ~/pki/etcd/peer* ~/pki/etcd/server* ~/pki/etcd/healthcheck-client*
# 拷贝证书到/etc/kubernetes/pki/目录下
sudo cp -ar pki/* /etc/kubernetes/pki/

注意:一定要删除etcd相关的证书,否则会把整个k8s集群搞挂。

第三步:加入其它master节点

在第一步master1搭建完成后,会得到如下的kubeadm join命令。这一步在master2和master3分别执行该kubeadm join命令即可。
注意:一定要加上参数 --experimental-control-plane

sudo kubeadm join 10.136.21.13:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:9e6fcf8e46473f8158bb4214af4ab93c01247a442b45887a0cf82c312298abb9 --experimental-control-plane

Q&A

1.如果第二步执行出错,把k8s集群搞挂了怎么办?

登录master1,修改/etc/kubernetes/manifests/etcd.yaml。这一步的目的是启动只有一个etcd节点的集群,然后往这个集群中添加新节点等待数据同步。

# 添加下面两个参数
- --initial-cluster-state=new
- --force-new-cluster=true
# 添加上面两个参数
image: docker2.yidian.com:5000/k8simages/etcd:3.2.24

然后重启kubelet

sudo systemctl restart kubelet

通过sudo docker ps 查看启动的etcd容器ID

通过sudo docker exec -it b69913e36ce1 sh进入容器内。
通过下面的命令可以查看当前etcd集群的节点列表:

etcdctl \
--ca-file=/etc/kubernetes/pki/etcd/ca.crt \
--cert-file=/etc/kubernetes/pki/etcd/healthcheck-client.crt  \
--key-file=//etc/kubernetes/pki/etcd/healthcheck-client.key \
--endpoints=https://127.0.0.1:2379 \
member list

可以看到当前集群中只有一个节点:

此时,apiserver已经可以正常访问etcd,可以通过kubectl get nodes 验证一下:

2.不小心重置了master节点怎么办?

如果不小心在master节点上执行了 sudo kubeadm reset -f ,导致节点重置,etcd容器被kill,数据清空。直接通过 kubeadm join xxx并不能直接将该节点添加回去,而会报出下面的错误:

[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[etcd] Checking Etcd cluster health
error syncing endpoints with etc: dial tcp 10.120.162.6:2379: connect: connection refused</pre>

解决方案参考文档:Kubernetes master无法加入etcd 集群解决方法

解决方法:

1.在kubeadm-config删除的状态不存在的etcd节点:

`kubectl edit configmaps -n kube-system kubeadm-config`

把上边的删掉:

我尝试了方案一,然后重新执行下面的命令,问题就成功解决了。

sudo kubeadm reset -f
sudo ipvsadm --clear
sudo cp -ar pki/* /etc/kubernetes/pki/
sudo kubeadm join 10.136.21.13:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:9e6fcf8e46473f8158bb4214af4ab93c01247a442b45887a0cf82c312298abb9 --experimental-control-plane

效果如下:


3. error uploading configuration: the server was unable to return a response in the time allotted, but may still be processing the request (get configmaps kubeadm-config)

在执行kubectl join xxx命令时,出现这种情况是和docker残留信息有关系,可以考虑重启docker:

sudo systemctl restart docker

如果重启docker还不好使,就删除掉 /var/run/dockershim.sock 文件

sudo rm -f /var/run/dockershim.sock

这样反复多试几次就成功了(个人经验)。

4. join成功后,master始终是NotReady状态

出现这种情况的原因是:该master节点安装flannel失败了。

此时,如果查看kubelet的状态,一般是启动失败的状态。通过 sudo journalctl xe -no-pager 可以看到如下报错误信息:

kubelet[45748]: E0222 23:29:19.444759   45748 kubelet.go:1308] Image garbage collection failed once. Stats initialization may not have completed yet: failed to get imageFs info: unable to find data in memory cache
kubelet[45748]: F0222 23:29:19.444777   45748 server.go:174] Failed to create listener for podResources endpoint: listen unix /var/lib/kubelet/pod-resources/kubelet.sock: bind: no such file or directory

这种情况可以尝试手动安装flannel,然后重启机器就可以解决,flannel安装过程参考《安装Kubernetes报错:STATUS NotReady

如果上述方式不管用,可以尝试下面的方式:

sudo rm -f /var/run/dockershim.sock
sudo rm -f /var/run/docker.sock
sudo systemctl restart docker
sudo systemctl restart kubelet
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容