阿里云部署高可用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访问,这样的话k8sniubility的地方就不存在了。所幸它还支持另一种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