前提
最近总有小伙伴说kubeadm的高可用集群怎么安装,故写了这篇文章。
创建高可用首先先有一个 Master 节点,然后再让其他服务器加入组成三个 Master 节点高可用,然后再将工作节点 Node 加入。
Kuberadm 功能
- kubeadm init: 启动一个 Kubernetes 主节点
- kubeadm join: 启动一个 Kubernetes 工作节点并且将其加入到集群
- kubeadm upgrade: 更新一个 Kubernetes 集群到新版本
- kubeadm config: 如果使用 v1.7.x 或者更低版本的 kubeadm 初始化集群,您需要对集群做一些配置以便使用 kubeadm upgrade 命令
- kubeadm token: 管理 kubeadm join 使用的令牌
- kubeadm reset: 还原 kubeadm init 或者 kubeadm join 对主机所做的任何更改
- kubeadm version: 打印 kubeadm 版本
- kubeadm alpha: 预览一组可用的新功能以便从社区搜集反馈
初始化
主机名称解析
分别进入不同服务器,进入 /etc/hosts 进行编辑
1 | 10.16.16.100 master.sy.com k8s-vip |
我用的openstack虚拟机,vip需要提前开通,具体开通vip地址可以看我另一篇文章
https://shenshengkun.github.io/posts/dk456akf.html
安装依赖包
以下操作均在所有机器操作
1 | yum install -y epel-release conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget unzip net-tools |
关闭防火墙
1 | systemctl stop firewalld |
关闭 swap 分区
1 | swapoff -a |
关闭 SELinux
1 | setenforce 0 |
设置系统参数
1 | modprobe ip_vs_rr |
Keepalived安装
安装
1 | yum install -y keepalived |
配置Keepalived
1 | cat <<EOF > /etc/keepalived/keepalived.conf |
启动
1 | systemctl enable keepalived && systemctl start keepalived |
安装haproxy
1 | yum install -y haproxy |
此处的haproxy为apiserver提供反向代理,haproxy将所有请求轮询转发到每个master节点上。相对于仅仅使用keepalived主备模式仅单个master节点承载流量,这种方式更加合理、健壮。
1 | cat > /etc/haproxy/haproxy.cfg << EOF |
启动haproxy
1 | systemctl enable haproxy && systemctl start haproxy |
安装Docker (所有节点)
1 | yum install -y yum-utils \ |
安加速,并且修改cgroup driver
根据文档CRI installation中的内容,对于使用systemd作为init system的Linux的发行版,使用systemd作为docker的cgroup driver可以确保服务器节点在资源紧张的情况更加稳定,因此这里修改各个节点上docker的cgroup driver为systemd。
1 | [root@sy1 ~]# systemctl start docker |
安装kubeadm、kubelet
配置yum源
1 | cat <<EOF > /etc/yum.repos.d/kubernetes.repo |
查看kubelet版本列表
1 | yum list kubelet --showduplicates | sort -r |
安装 kubeadm、kubelet
1 | yum install -y kubelet-1.15.3-0 kubeadm-1.15.3-0 |
初始化第一个kubernetes master节点
创建kubeadm配置的yaml文件
1 | cat > kubeadm-config.yaml << EOF |
初始化第一个master节点
1 | kubeadm init --config kubeadm-config.yaml |
1 | Your Kubernetes control-plane has initialized successfully! |
kubeconfig
1 | [root@sy1 ~]# mkdir -p $HOME/.kube |
安装网络插件
配置flannel插件的yaml文件
1 | cat > kube-flannel.yaml << EOF |
部署
1 | kubectl apply -f kube-flannel.yaml |
加入集群
Master加入集群构成高可用
复制文件,从master1上复制到2和3
1 | ssh root@master02.sy.com mkdir -p /etc/kubernetes/pki/etcd |
master节点加入集群
1 | kubeadm join master.sy.com:8443 --token ltjuyu.2otdxrrsy4ku6lri --discovery-token-ca-cert-hash sha256:f6562358b50a516e7814136c73b57827626a75ae82389fbe0c70b6328700ee4a --experimental-control-plane |
结果如下
1 | [root@sy1 ~]# kubectl get nodes |
node加入集群
1 | kubeadm join master.sy.com:8443 --token ltjuyu.2otdxrrsy4ku6lri \ |