热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于kubernetes的docker集群实践

在公司内部,基于kubernetes实现了简单的docker应用集群系统,拿出来和大家分享下,在这个系统中,实现了应用的自动部署、动态扩容、节点切换、健康检查、AB式版本更新等功能

在公司内部,基于kubernetes实现了简单的docker应用集群系统,拿出来和大家分享下,在这个系统中,实现了应用的自动部署、动态扩容、节点切换、健康检查、AB式版本更新等功能,也欢迎大家将各自的实现也分享给我。

整体架构

整体架构如下图:

基于kubernetes的docker集群实践

其中分为分为这几个块:

  • APPBuilder: 应用构建模块,负责将app打包成dockerimage,并入image版本库;

  • container: 容器运行,docker容器实际运行的地方;

  • thirdPart: 应用依赖的第三方资源,如redis、mysql等;

  • scheduler: 调度系统,核心部分,负责各个子模块的智能调度;

  • router: 基于7层的请求分发,根据url将请求分发到对应的app容器;

  • nats: 基于4层的负载均衡,,将流量负载均衡到router集群;

  • healthManage: 健康检查系统,包括了对router rules、容器状态、物理机状态等各个子模块健康的检查,并做相应补救action;

  • log模块: 统一处理app所产生的日志;

scheduler

首先先介绍下最重要的部分,使用kubernetes作为技术实现,关于介绍和部署可以参考之前的 blog:kubernetes 0.18.1 安装 & 部署 & 初试,不过这个文档中只有单机的master-slave,不太符合线上使用,我们在此基础上做了以下升级:

  • 部署etcd集群,具体过程可以参考etcd官方:Clustering Guide

  • 部署kubernetes master cluster,分别部署有 kube-apiserver,kube-scheduler,kube-controller-manager;

  • 增加对kubernetes访问的 认证 & 授权, 具体可参考我之前的blog,|72fb2910302a12da3b6c7d219f31484c3|, |72fb2910302a12da3b6c7d219f31484c4| , kubernetes中的Admission Controllers

  • 关闭kube master的非安全端口访问,关闭 insecure-port,开启secure-port,并对kubernetes secure api访问增加前端负载均衡,如在blog kubernetes 实用 api list 所示,访问就是通过认证&https请求api(当然了其中的信息都是假的,但是格式不变);

  • 设置相关的访问权限,如,kube slave节点只允许来自kube-master节点的iP访问,kube-master只允许具有操作权限的机器节点的ip访问等等;

  • 对kubernetes master子模块的参数做符合我们要求的调整等;

附上制作https私有key&证书的方法:

openssl genrsa -aes256 -out ca-key.pem 2048

openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem (在提示输入Common Name时,输入https访问的host,如10.10.5.103)
openssl genrsa -out server-key.pem 2048
openssl req -subj "/CN=10.10.5.103" -new -key server-key.pem -out server.csr

echo subjectAltName = IP:10.10.5.103,IP:127.0.0.1 > extfile.cnf

openssl x509 -req -days 3650 -in server.csr -CA ca.pem -CAkey ca-key.pem \

                -CAcreateserial -out **server-cert.pem** -extfile extfile.cnf

产生三个文件: ca-key.pemserver-key.pemserver-cert.pem
设置kube-apiserver参数:

--tls-cert-file=./server-cert.pem   \
--tls-private-key-file=./server-key.pem

在client访问时,通过ca-key.pem来进行访问

container

对于container节点,没什么好说的,其实就是kubernetes slave节点,部署有:kube-proxy, kubelet,docker。
没有什么好说的,主要是对个别参数做了调整等等。

Router

我们选用gorouter作为七层路由转发工具,并将其搭建起cluster,部署见blog gorouter 安装部署, 不过在设置rules的生命周期时,我们将周期设定为永久,如果发生rules失效,通过healthCheck来删掉已失效的rule。

nats

四层负载均衡,就很统一了,开源的可以使用LVS,土豪的可以使用F5,我们是土豪,我们使用的是F5.

ThirdPart

为app应用所依赖的mysql、redis等,有专门的童鞋负责维护,短期内不考虑和kubernetes、docker结合。

APP Builder

负责应用的镜像打包,我们这里选用 jekins 作为使用的工具,每次app上线前,首先要先构建此app 版本的dockerimage,push 到私有的docker-registry。之后的升级操作流程如下:
基于kubernetes的docker集群实践

执行AB上线
如果是回滚也十分方便,将上一个版本在走一次这个流程即可,对应用使用者来说,没有任何终端感知,当AB两个版本都生效后,将AB两个版本的rule都加入router,在将A版本的router下掉,就完成了上线/回滚的操作。
代码地址稍后放出。

health Manage

健康监控检查,可以说是集群中最重要的一部分了。
我们在这里没有使用kubernetes推荐的方式,我们自己将其与内部的zabbix系统做了结合,通过zabbix来对整个集群进行监控、报警、自动化操作。

  1. 对于kubernetes master,监控项有:

    • kuber-apiserver的状态;

    • kube-controller-manager的状态;

    • kube-scheduler的状态;

    • kubernetes中namespace、replicationcontroller、service、pods等主要资源的数量&状态变化;

  2. 对于kubernetes slave(即container节点),监控项有:

    • kubelet健康状态;

    • kube-proxy健康状态;

    • docker 的dataspace、metadataspace 使用情况;

    • 当前节点运行容器的信息,包括了全部数量、正在运行的数量、版本等;

  3. 对于docker容器本身,可参考blog Docker 监控的一点想法 ,监控项有:

    • 创建时间 & 信息参数;

    • 容器运行状态;

    • 容器内存、cpu、流量情况;

  4. 还有一个重点是对router及其rule做重点监控

    • 检查所有router的运行状态;

    • 监控所有node状态,如果非健康,及时删除router中所以指向此node的rules;

    • 检查所有的pods及对应的rule,如果pods中的app服务失效 或者 没有对应的rule指向pods(比如node节点损坏,其原有的pod移动到新node节点),此时为pod更新router中的rule;

log

对于日志这块,业界一直没有一项统一的做法,在这里我们的做法是通过透传的方式,将容器中的日志汇总到宿主机,在进行进一步的处理:

  1. 统一了所有接入系统的app的日志规范,包括了日志格式、日志路径;

  2. 将容器中应用的日志根据app的不同映射到宿主机中指定的路径;

  3. 结合 flume, kafka, influxDB 还有其他一些组件( 日志系统经典的 ELK组合),将应用的日志进行汇总,方便RD同学对日志进行处理。

目前先简单介绍到这里,稍后如有可能再将具体实现细节放出。


推荐阅读
  • Redis API
    安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • (九)Docker常用安装
    一、总体步骤1、搜索镜像2、拉取镜像3、查看镜像4、启动镜像5、停止镜像6、移除镜像二、安装tomcat1、dockerhub上面查找tomcat镜像 dockersearchto ... [详细]
  • 转自:http:www.phpweblog.netfuyongjiearchive200903116374.html一直对字符的各种编码方式懵懵懂懂,什 ... [详细]
  • 篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打开查询设计器时,ReportBuilder3.0会冻结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • SOA架构理解理解SOA架构,了解ESB概念,明白SOA与微服务的区别和联系,了解SOA与热门技术的结合与应用。1、面向服务的架构SOASOA(ServiceOrien ... [详细]
  • UMTS基础知识汇总
    协议框架23G接口UMTS实体EntityNameDescriptionAuCAuthenticationCenterCBCCellBroadcastCenterC-RNCCon ... [详细]
author-avatar
神烟醉_263
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有