阿里云部署高可用K8S集群
环境:
- 阿里云
ECS
,Ubuntu 16.04.3 LTS
,共6台,其中三台master
,三台node
- 阿里云
VPC
网络环境 k8s
版本1
2
3kubectl version
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.4", GitCommit:"9befc2b8928a9426501d3bf62f72849d5cbcd5a3", GitTreeState:"clean", BuildDate:"2017-11-20T05:28:34Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.4", GitCommit:"9befc2b8928a9426501d3bf62f72849d5cbcd5a3", GitTreeState:"clean", BuildDate:"2017-11-20T05:17:43Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
部署主集群
- 部署参考https://github.com/gjmzj/kubeasz
- 部署所使用配置
1 | # 部署节点:运行这份 ansible 脚本的节点 |
注意事项
高可用
master
的虚拟VIP
正常情况下安装HAPROXY
后即可自动通过ARP
协议生成虚拟IP
并告知同网络其他机器,但是阿里云的网络不允许ARP
,这样的话有2种解决方案:- 用阿里云
SLB
,后端挂载三台master
即可,很简单,但这样只实现了负载均衡,并不能实现高可用,因为无法通过SLB
的健康检查来踢掉挂掉的节点 - 使用阿里云高可用虚拟
IP
功能,但这个属于阿里云测试功能,需要找客服开通,且仅支持VPC
网络
- 用阿里云
网络模型
这个方案采用的calico
网络模型作为POD
网络,它默认使用bgp
协议,但是阿里云同样不支持这个,所以出现的现象就是暴露出来的nodeport
只能通过pod
所在的node
访问,这样的话k8s
niubility的地方就不存在了。所幸它还支持另一种IPIP
模式,通过IP
包方式进行通信,所以需要修改roles/calico/templates/calico-node.service.j2
找到-e CALICO_IPV4POOL_IPIP=off \
这行,把off
改成always
.
保存后继续安装即可
部署addons
安装kube-dns
1
kubectl create -f /etc/ansible/manifests/kubedns/kubedns.yaml
安装kube-dashbord
1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
注意需要修改svc kubernetest-dashbord
里的type
为nodeport
,这样可以从集群外进行访问dashbord
的权限问题
采用了token
认证的方式,首先建一个admin role
,创建 admin
用户并赋予管理员权限1
kubectl apply -f https://raw.githubusercontent.com/rootsongjc/kubernetes-handbook/master/manifests/dashboard-1.7.1/admin-role.yaml
创建完成后获取 secret
和 token
的值1
2token=`kubectl -n kube-system get secret|grep admin-token | awk '{print $1}'`
kubectl -n kube-system describe secret $token
获取到的token
既可以用来登录
或者也可以用kubeconfig
文件进行登录,位置是每台node
机器上的/root/.kube/config
安装promethus和grafana
1
2kubectl apply \
--filename https://raw.githubusercontent.com/giantswarm/kubernetes-prometheus/master/manifests-all.yaml各种
dashbord
后续再说日志入graylog
ubuntu16.04
下修改/etc/docker/daemon.json
,添加
1 | "log-driver": "gelf", |
支持私有docker-registery
ubuntu16.04
下修改/etc/docker/daemon.json
,添加1
"insecure-registries" : ["harbor.com"],
centos7.x
下1
cp /lib/systemd/system/docker.service /etc/systemd/system/ && sed -i '12s/$/ --insecure-registry=harbor.com/' /etc/systemd/system/docker.service && systemctl daemon-reload && service docker restart