kubeadm搭建高可用集群

使用 kubeadm 搭建单节点集群已经介绍过了,关于如何初始化环境,安装依赖组件请参考kubeadm搭建单节点集群, 这篇文章介绍如何使用kubeadm搭建高可用集群。

高可用拓扑模型

堆叠ETCD模型(Stacked etcd topology)

该模式主要特点:

  1. etcd和k8s master 组件部署在同一个node上
  2. 每个kube-apiserver、kube-schedule、kube-controller-manager 只连接本地etcd服务

外部ETCD模型(External etcd topology)

该模式主要特点:

  1. etcd集群单独部署,不通过kubeadm创建管理
  2. 每个kube-apiserver、kube-schedule、kube-controller-manager 会连接到外部etcd集群

使用kubeadm创建集群时,如果etcd和master部署在同一个节点时使用 堆叠ETCD模型(Stacked etcd topology),否则配置使用外部ETCD模型(External etcd topology)

创建 kube-api 负载均衡

如以上集群结构图可知,我们首先需要为多个master节点创建负载均衡,负载均衡的配置需要注意以下几点:

  • 负载均衡创建成功后,需要将 kubaadm 的 ControlPlaneEndpoint 字段配置为负载均衡ip
  • 需要先把第一个待初始化master节点挂载到负载均衡后端,当第一个master创建完成后,将下一个初始化的master节点ip加入到负载均衡后端,以此类推,直到所有master节点创建完毕。

创建高可用集群

1. 配置kubeadm config 文件

  • 创建堆叠ETCD模型的配置:
cat <<EOF > /root/kubeadm-config
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.13.4
apiServer:
  certSANs:
  - "MASTER1_IP"
  - "MASTER2_IP"
  - "MASTER3_IP"
  - "LOAD_BALANCER_IP"
controlPlaneEndpoint: "LOAD_BALANCER_IP:LOAD_BALANCER_PORT"
imageRepository: registry.cn-beijing.aliyuncs.com/hsxue
networking:
  dnsDomain: cluster.local
  podSubnet: 10.128.0.0/23
  serviceSubnet: 10.192.0.0/22
EOF

配置中的 MASTER1_IP、MASTER2_IP、 MASTER3_IP、LOAD_BALANCER_IP、LOAD_BALANCER_PORT 需要替换成实际的值

  • 创建外部ETCD模型的配置
cat <<EOF > /root/kubeadm-config
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.13.4
apiServer:
  certSANs:
  - "MASTER1_IP"
  - "MASTER2_IP"
  - "MASTER3_IP"
  - "LOAD_BALANCER_IP"
controlPlaneEndpoint: "LOAD_BALANCER_IP:LOAD_BALANCER_PORT"
imageRepository: registry.cn-beijing.aliyuncs.com/hsxue
networking:
  dnsDomain: cluster.local
  podSubnet: 10.128.0.0/23
  serviceSubnet: 10.192.0.0/22
etcd:
    external:
        endpoints:
        - https://ETCD_0_IP:2379
        - https://ETCD_1_IP:2379
        - https://ETCD_2_IP:2379
        caFile: /etc/kubernetes/pki/etcd/ca.crt
        certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt
        keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key

如上配置增加了外部etcd的配置,配置中如下值需要替换成实际的值:

  • MASTER1_IP
  • MASTER2_IP
  • MASTER3_IP
  • LOAD_BALANCER_IP
  • LOAD_BALANCER_PORT
  • ETCD_0_IP
  • ETCD_1_IP
  • ETCD_2_IP

2. 初始化第一个master节点

如果安装的是外部ETCD模型集群,需要先将etcd证书拷贝到当前master节点,否则不需要执行这一步

export CONTROL_PLANE="MASTER1_IP"
scp /etc/kubernetes/pki/etcd/ca.crt "${CONTROL_PLANE}":
scp /etc/kubernetes/pki/apiserver-etcd-client.crt "${CONTROL_PLANE}":
scp /etc/kubernetes/pki/apiserver-etcd-client.key "${CONTROL_PLANE}":

注意:etcd证书需要和上一步配置的etcd证书路径匹配


将该节点kube-apiserver地址和端口挂载到负载均衡后端,然后执行如下命令

kubeadm init --config=/root/kubeadm-config --node-name=master1 --upload-certs

部署成功后会输出如下信息:

...
You can now join any number of control-plane node by running the following command on each as a root:
kubeadm join 192.168.0.200:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 --control-plane --certificate-key f8902e114ef118304e561c3ecd4d0b543adc226b7a07f675f56564185ffe0c07

Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use kubeadm init phase upload-certs to reload certs afterward.

Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.0.200:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866

以上信息有两行关键信息需要记下来(每个人安装完成后,输出的信息肯定不一样):

  1. 加入master节点命令
kubeadm join 192.168.0.200:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 --control-plane --certificate-key f8902e114ef118304e561c3ecd4d0b543adc226b7a07f675f56564185ffe0c07
  1. 加入worker节点命令
kubeadm join 192.168.0.200:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866

3. 安装pod网络插件

如下安装 flannel 为例,执行如下命令:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

执行 kubectl get pod -n kube-system -w 等待master组件全部 running

详情参考:pod network addon

4. 加入剩余的master节点到集群

先将待初始化节点kube-apiserver地址和端口挂载到负载均衡后端,然后执行上面得到的加入master节点的命令

kubeadm join 192.168.0.200:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 --control-plane --certificate-key f8902e114ef118304e561c3ecd4d0b543adc226b7a07f675f56564185ffe0c07
  • --control-plane 参数表示 kubeadm join 命令创建的是一个master节点
  • --certificate-key master加入集群时,会从 kubeadm-certs Secret下载证书,并使用该certificate-key解密证书,
    <div class="tip">
    kubeadm-certs Secret 和 certificate-key 2小时后会过期,如果过期则需要重新生成
    </div>

重新生成certificate-key,可执行如下命令

kubeadm init phase upload-certs --upload-certs

执行完成后,继续登陆到剩余master节点做同样操作。直到所有master节点创建完毕

5. 加入worker节点

登陆到worker主机,直接执行加入worker节点命令即可

kubeadm join 192.168.0.200:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866

引用


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