构建生产环境可用的高可用kubernetes集群
构建生产环境可用的高可用kubernetes集群 | sealos项目地址
特性
- [x] 支持任意节点的etcd集群自动构建,且etcd集群使用 安全证书,通过static pod方式启动,这样可以通过监控pod来监控etcd集群健康状态
- [x] 支持多master节点,允许任意一台master宕机集群功能不受影响
- [x] calico使用etcd集群,配置安全证书,网络管控数据无单点故障
- [x] 包含dashboard, heapster coreDNS addons, coreDNS双副本,无单点故障
- [x] 使用haproxy负载master节点,同样是用static pod,这样可通过统一监控pod状态来监控haproxy是否健康
- [x] haproxy节点使用keepalived提供虚拟IP,任意一个节点宕机虚拟IP可实现漂移,不影响node连接master
- [x] node节点与kube-proxy配置使用虚拟IP
- [ ] 集群健康检测功能
- [ ] promethus 监控功能,一键安装,无需配置
- [ ] EFK 日志收集功能
- [ ] 分布式HA模式,不用keepalived,减少集群构建出错概率,无VIP切换时间
- [x] istio 微服务支持
ship on docker
你必须已经有了sealyun kubernetes离线安装包 (默认支持kubernetes版本v1.12.x,针对特殊版本的适配会切分支处理)
针对后续高版本会有更多优化
大概原理是为了减少大家搭建ansible和sealos的环境,客户端的东西都放到docker里,把安装包挂载到容器中,然后ansible脚本会把包分发到你在hosts文件中配置的所有服务器上
所以大概分成三步:
- 配置免密钥,把docker里的公钥分发给你所有的服务器
- 配置ansible playbook的hosts文件
- 执行ansible
下面逐一说明:
启动ansible容器与免密钥设置
找台宿主机如你的PC,或者一台服务器,把下载好的离线包拷贝到/data目录,启动sealos容器,把离线包挂载进去:
docker run --rm -v /data/kube1.12.0.tar.gz:/data/kube1.12.0.tar.gz -it -w /etc/ansible fanux/sealos:v1.12.0-beta bash
在容器里面执行:
mkdir ~/.ssh cd ~/.ssh ssh-keygen -t rsa
ssh public key:
cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7fTirP9zPcx7wIjhsF+Dyu0A2sV5llC8jsmp/xtiyuJirE3mclpNEqgrzHC26f+ckfzwoE0HPU0wDPxbWFl3B0K89EwJSBsVZSZ0VLYnZp0u2JgwCLZzZzKfY0018yoqoL9KHz/68RpqtG2bWVf0/WSj+4hN7xTRpRTtXJHBOQRQBfqVSIcfMBSEnO15buUbDaLol/HvQd0YBrWwafQtMacmBlqDG0Z6/yeY4sTNRVRV2Uu5TeaHfzgYgmY9+NxtvPn8Td6tgZtq7cVU//kSsbzkUzDSD8zsh8kPUm4yljT5tYM1cPFLGM4m/zqAjAZN2YaEdFckJFAQ7TWAK857d root@8682294b9464
这样公钥就生成了
在其它所有要安装k8s的服务器上执行:
cd ~/.ssh echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7fTirP9zPcx7wIjhsF+Dyu0A2sV5llC8jsmp/xtiyuJirE3mclpNEqgrzHC26f+ckfzwoE0HPU0wDPxbWFl3B0K89EwJSBsVZSZ0VLYnZp0u2JgwCLZzZzKfY0018yoqoL9KHz/68RpqtG2bWVf0/WSj+4hN7xTRpRTtXJHBOQRQBfqVSIcfMBSEnO15buUbDaLol/HvQd0YBrWwafQtMacmBlqDG0Z6/yeY4sTNRVRV2Uu5TeaHfzgYgmY9+NxtvPn8Td6tgZtq7cVU//kSsbzkUzDSD8zsh8kPUm4yljT5tYM1cPFLGM4m/zqAjAZN2YaEdFckJFAQ7TWAK857d root@8682294b9464" >> authorized_keys
这样公钥分发工作完成了,所有的机器直接ssh无需输入密码即可登录
修改配置
Config your own hosts
# cd /etc/ansible # vim hosts
配置说明:
[k8s-master] 10.1.86.204 name=node01 order=1 role=master lb=MASTER lbname=lbmaster priority=100 10.1.86.205 name=node02 order=2 role=master lb=BACKUP lbname=lbbackup priority=80 10.1.86.206 name=node03 order=3 role=master [k8s-node] 10.1.86.207 name=node04 role=node [k8s-all:children] k8s-master k8s-node [all:vars] vip=10.1.86.209 # 同网段未被占用IP k8s_version=1.12.0 # kubernetes版本 ip_interface=eth.* etcd_crts=["ca-key.pem","ca.pem","client-key.pem","client.pem","member1-key.pem","member1.pem","server-key.pem","server.pem","ca.csr","client.csr","member1.csr","server.csr"] k8s_crts=["apiserver.crt","apiserver-kubelet-client.crt","ca.crt", "front-proxy-ca.key","front-proxy-client.key","sa.pub", "apiserver.key","apiserver-kubelet-client.key", "ca.key", "front-proxy-ca.crt", "front-proxy-client.crt" , "sa.key"]
注意role=master的会装etcd与kubernetes控制节点,role=node即k8s node节点,配置比较简单,除了改IP和版本,其它基本不用动
启动安装
# ansible-playbook roles/install-all.yaml
uninstall all
# ansible-playbook roles/uninstall-all.yaml
本文转自SegmentFault- 构建生产环境可用的高可用kubernetes集群 低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
译见 | 掌舵 Kubernetes:云原生时代的 Kubernetes 部署
容器提供了将应用程序及其依赖项与操作系统解耦的能力。因为其不同于虚拟机镜像打包操作系统的方式,容器可以节省大量的系统资源:计算、内存和磁盘空间。同时,容器还可以进行更快的下载、更新、部署和迭代。因 此,在技术领域上来说,容器技术引领了一场技术革命,并被谷歌、微软和亚马逊等大佬级公司采用。 同样,由容器技术引领的这场技术革命也带了激烈的竞争,来满足容器 的编排和管理的需求。而 Kubernetes 在这样的竞争中能成为领先的解决方案(包括 Amazon ECS 和 Docker Swarm),主要原因有三: 云原生设计:支持部署和运行下一代应用程序 开源生态:快速创新,避免供应商的独断 可移植性:无论是在云、内部、虚拟机中,都可以在任意的地方进行部署 下图便显示了 Kubernetes 在你的云原生部署中所发挥的作用: 请点击此处输入图片描述 如你所见,Kubernetes 可以部署和管理你的容器应用程序, 这其中包括了NGINX、MySQL、Apache 等等。它可以为容器提供配置、缩放、复制、监听等其他功能。 一旦你选择了容器编排平台之后, 下一步便是部署 Kubernetes。如前...
- 下一篇
kubernetes的调度机制
k8s的调度机制 scheduler组件 k8s调度器会将pod调度到资源满足要求并且评分最高的node上。我们 可以使用多种规则比如:1.设置cpu、内存的使用要求;2.增加node的label,并通过pod.Spec.NodeSelector进行强匹配;3.直接设置pod的nodeName,跳过调度直接下发。 k8s 1.2加入了一个实验性的功能:affinity。意为亲和性。这个特性的设计初衷是为了替代nodeSelector,并扩展更强大的调度策略。 调度器的工作机制是这样的:一、预备工作 1、缓存所有的node节点,记录他们的规格:cpu、内存、磁盘空间、gpu显卡数等; 2、缓存所有运行中的pod,按照pod所在的node进行区分,统计每个node上的pod request了多少资源。request是pod的QoS配置,可以参考之前的文章。 3、list & watch pod资源,当检查到有新的Pending状态的pod出现,就将它加入到调度队列中。 4、调度器的worker组件从队列中取出pod进行调度。 二、调度过程 1、先将当前所有的node放入队列; 2、...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路