前言:

  • 本篇介绍k8s高可用集群的自动化安装

  • 版本:

    • k8s 1.12.1

    • coreOS1855


 准备工作:

  • 完成前篇《基础架构八:coreOS的安装》

 

相关代码与资源:

HA基本结构:

  • 3主多从, 坏任一台不影响集群工作

  • 前端:keepalived's VIP+haproxy's 8443 to real IP's 6443

  • 外部etcd三台集群

 

 

 

01文件说明

  • CONFIG    ---安装配置文件

  • install.sh  ---安装执行脚本

  • fab_inst.py ---fabric执行程序,由install.sh调用

  • coreos-tgz ---k8s1.12.1所需基础镜相与配置

  • ha.tgz       ---keepalived/haproxy/etcd三个集群安装基础镜相

  • coreosbase2 ---CoreOS 1855.4版本KVM基础镜相 20G硬盘;

  • 其它文件说明见README.md

 

 

02  安装步骤

 

  一.下载好相关文件放于同一目录,见(相关代码与资源); 

 

  二.调整好KVM虚拟机并clone三主一从(可多从);

 

  三.修改CONFIG配置文件相关IP与主机名;

三主一从的配置示例 :红色部分是三主一从及VIP等配置,需要根据实际情况修改,绿色部分用于clone虚拟机脚本自动配置

 

  四.执行安装: sh -x install.sh allha

 

03  验证安装

 

  • 安装完毕会显示dashboard 的nodeport端口与登陆token

  • 使用firefox 登录dashboard:(任一结点IP的nodeport端口)

 

 

04 相关步骤分解说明:

 

  • keepalived

    • docker run脚本: docker-keepalived.sh 由fab-inst.py安装时调用在每台服务器上运行

  • haproxy

    • haproxy.cfg :由haproxy_conf.sh根据CONFIG自动生成,不必理睬

    • docker run脚本: docker-haproxy.sh 由fab-inst.py安装时调用在每台服务器上运行

  • etcd

    • SSL证书生成脚本:etcdssl.sh生成证书放于SSL目录,自动调用不必理睬

    • docker run脚本:docker-etcd.sh 由fab-inst.py安装时调用在每台服务器上运行

    • 配置参考:https://kubernetes.io/docs/setup/independent/setup-ha-etcd-with-kubeadm/

    • 状态检查:etcdctl --key-file ssl/etcd-key.pem --cert-file ssl/etcd.pem --ca-file ssl/ca.pem --endpoints=https://192.168.253.31:2379cluster-health

    • sh install.sh etcdcheck

  • installha.sh p1: 准备好coreos-k8s.tgz, k8s1.12.1基础镜相到各服务器

  • installha.sh p5:准备好ha.tgz,包括config/haproxy/keepalived/etcd,并启动集群三件套haproxy/keepalived/etcd

  • master1:

    • kubeadm init --config kubeadm-config.yaml

    • tar ca files

    • scp 回宿主机

    • init后,三running三pending状态正常:

  • master2:

    • scp 到master2/3

    • master2/3:   sh install.sh master2

  • calico网络

    • 见问题一

  • dashboard:

    • 1.10版本,需token登陆,见验证环节

  • node:

    • 结点 join到集群

 

05  Q&A

 

  • 问题一:calico 网络问题:

    • 像单master安装时一样apply后,发现calico node一直不正常,重启,coredns也是;查calico-etcd有三个,member list只有一个,官网只有单master的介绍,etcd.yaml是个daemonset, 会在每个master上启一个etcd pod, 可导致calico etcd的服务不正常, 连锁反应是calico node/coredns/dashboard等都不正常;

    • 解决方法一:

      • 把calico etcd的daemonset 改为deployment, replicas 设为1

    • 方法二:

      • 把etcd的指向到kubernetes集群的etcd上去,configmap里配置好ca验证

      • 参考:http://blog.51cto.com/newfly/2085836

    • 方法三

      • 用打标签的方法让calico etcd只运行在指定的master上,临时解决方法,没法高可用;

        • 改etcd.yaml, nodeselector, =master1

        • kubectl label nodes master1 node-role.kubernetes.io/master=master1--overwrite

        • reboot所有结点或删除重启calico相关pods

  • 问题二:无外网情况下,kubeadm init 后,无coredns/kube-proxy的pods出现:

    • 调通网络

  • 问题三:k8s集群kubeadm的官方介绍方法有两种:

    • 方法一是使用k8s自身的etcd,安装起来速度慢,常出现莫名的故障;

    • 方法二即自建外部etcd的方法,速度快且稳定,install.sh采用此方法;

  • 问题四:重新安装

    • 先执行 sh install.sh reset

  • 问题五:etcd备份

    • etcd集群数据:/var/lib/etcd

    • calico etcd数据: /var/etcd

 

 

06 install.sh的更多用法

 

 

 

 

参考资料

  • https://cloud.tencent.com/developer/article/1138668

  • http://www.cnblogs.com/chenjingbiao/articles/9213620.html

  • http://www.ebanban.com/?p=677&from=singlemessage&isappinstalled=0

  • https://kubernetes.io/docs/setup/independent/high-availability/

  • http://blog.51cto.com/newfly/2288088

 

往期链接:

    进入公众号 -> 输入help或index

 

 

                                  

                                                   Linux命令速查,如lsof

 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐