前言(坑)
负载均衡问题
- 阿里不支持LVS,没有vip可用,必须通过申请SLB来固定VIP
- 因Kubernetes apiserver为https协议,阿里SLB中能负载均衡HTTPS的只有TCP方式,但TCP协议不能转发到发起主机(
apiserver 需要有回环路访问,简单说就是自己给自己发请求
)
为了解决kubernets apiserver高可用问题,故用以下方式来解决:
- 申请一个内网的SLB(获取VIP),8443为监听端口,6443为apiserver的后端端口
- 在每台master机器上搭建keepalived+haproxy,VIP 用SLB的VIP
环境介绍
IP | Hostname | 备注 |
---|---|---|
172.19.170.183 | master-1 | 安装keepalived + haproxy |
172.19.170.184 | master-2 | 安装keepalived + haproxy |
172.19.170.185 | master-3 | 安装keepalived + haproxy |
172.19.170.186 | node-1 | 无 |
172.19.170.187 | node-2 | 无 |
172.19.170.100 | vip | 申请阿里云的SLB获取到 |
环境初始化
修改hosts信息,在所有master机器上运行
1 | cat <<EOF >> /etc/hosts |
在master-1 机器上执行以下命令:
1 | ssh-keygen -t rsa |
优化所有master & node 节点的机器环境
在所有master & node 机器上都要执行以下命令
1 |
|
搭建keepalived + haproxy
在master-1上配置
keepalived 安装配置
1 | docker run --net=host --cap-add=NET_ADMIN \ |
haproxy 安装配置
1 | mkdir /etc/haproxy |
在master-2上配置
keepalived 安装配置
1 | docker run --net=host --cap-add=NET_ADMIN \ |
haproxy 安装配置
1 | mkdir /etc/haproxy |
在master-3上配置
keepalived 安装配置
1 | docker run --net=host --cap-add=NET_ADMIN \ |
haproxy 安装配置
1 | mkdir /etc/haproxy |
搭建kubernetes master 集群
配置阿里云 SLB
在阿里云SLB 管理界面添加8443监听端口,使用
TCP
协议,后端服务器选择一台你即将初始化的master机器,后端服务器端口为6443,健康检查默认配置即可,保存配置。此时你的SLB是不进行工作的,因为后端服务器的6443端口还未监听。
初始化master-1
在master-1 上执行
1 | cat << EOF > $HOME/kubeadm-1.yaml |
安装calico 网络插件
在master-1 上执行
确保 Kubernetes controller manager (/etc/kubernetes/manifests/kube-controller-manager.yaml)
设置了以下标志:--cluster-cidr=192.168.0.0/16和--allocate-node-cidrs=true
。
提示:在kubeadm上,您可以传递--pod-network-cidr=192.168.0.0/16
给kubeadm以设置两个Kubernetes控制器标志。
在ConfigMap命名中calico-config
,找到typha_service_name
,删除none
值,并替换为calico-typha
我们建议每200
个节点至少复制一个副本
,不超过20个副本。在生产中,我们建议至少使用三个副本
来减少滚动升级和故障的影响。
警告:如果您设置typha_service_name而不增加其默认值为0 Felix的副本计数将尝试连接到Typha,找不到要连接的Typha实例,并且无法启动。
1
kubectl apply -f www.jiunile.com/k8s/plugin/1.12.3/calico.yaml
初始化其它master节点
在master-1 上执行
1 | #初始化master-2 |
再次配置阿里云 SLB
同样进入阿里云SLB管理界面,将其余的两台master机器加入到后端服务器中。这样你的apiserver 就高可用了
开启kubernetes 插件
在随意一台master执行
安装heapster 监控插件
1 | kubectl apply -f www.jiunile.com/k8s/plugin/1.12.3/heapster.yaml |
安装dashboard 插件
1 | kubectl apply -f www.jiunile.com/k8s/plugin/1.12.3/dashboard.yaml |
获取加入master集群命令
1 | kubeadm token create --print-join-command |
初始化所有kubernetes node
1 | docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 |
可以在master机器上查看对应的node状态
1 | kubectl get node |
测试
测试应用和dns是否正常
在随意一台master机器上运行
1 | # 部署一个服务 |
测试master & Haproxy高可用
1 | #随机关掉一台master机器 |