规划与设计
gui hua yu she ji
分布式和微服务的关系50
基于K8S 的Docker 分布式容器自动化运维系统的
设计与实现
◎王时睿
摘要:本文针对如何管理这些微服务集的容器这个问题,分析了如何基于K8S 搭建一个Docker 分布式容器自动化运维系统,从而解决微服务集容易的管理编排问题;将对Google 开源的K8S 系统,进行一些简单的介绍,以及展示k8s 如何建立一个可用的自动化运维集。关键词: K8S;Docker;集搭建
一、Kubernetes 和Docker 介绍(一)Kubernetes 介绍
kubernetes 其本质上是一个微服务框架,其主要的概念有Pod,Server,Label, Replica Set 等。如
图1,K8S 的一个集的服务器架构是由一个主要的控制节点Master 节点,和其他的集子节点组成的一个可以灵活调度的服务集。在一个集中,K8s 要对集内部的所有节点进行管理,就必须能够让在这个节点中的所有节点能够进行通信。而K8s 使用的就是Prod 技术,prod 能够实现内部通信的原理就是,k8s 所有的子节点在创建的时候,都是基于prod 的pause 根容器,那么其他的集节点在这个父容器的基础上进行创建以后,自然的就会基础prod 的基本网络服务和volume,这样在这个k8s 的集内部,所有的节点就实现了通信。K8s 的master 节点就用这个技术,可以每时每刻的内部服务器进行检测,如果发送了异常,可以直接重启或者替换掉。 K8s 还会使用label 技术对集内部所有的服务器做标记,这样将内部服务器的信息和label 的名字做映射关系,这种映射关系可以保证即使集内部有庞大的服务器,k8s 的主节点依然能够非常快速的进行子节点的定位和问题排查。
(二)Docker 介绍
Docker 旨在使用容器更轻松地创建、部署和运行应用程序。容器允许开发人员将应用程序与它所需的所有部分(如库和其他依赖项)打包,并全部作为一个包进行发布,通过这种方式,在开发的时候,需要什么软件只需要启动对应软件的docker 镜像就可以实现,这样可以保证开发环境和线上环境的一直,Docker 守护进程是一种在主机操作系统上运行的服务。Docker 在Linux 系统中运行,很少运用在Windows 系统中,但是随着时间的演变,人们不断的推出MacOS,使用该种方法进行演示,使得这种方法也可以在普通大众化的电脑中运用。
Docker 容器是一个开源软件开发平台。它的主要好处是将应用程序打包在"容器"中,允许它们在任何运行Linux 操作系统(OS)的系统中可移植,在使用的整个过程中可以使用虚拟主机进行映射,同时还可以将整个系统映射到硬件的系统环境中去,因此在整个自动化运维系统的建设中起到了连接纽带的作用。
二、自动化运维系统的需求分析
基于k8s 的docker 分布式自动化运维系统在整个软件的什么周期中,需要能够实现内部集节点的自动构建。
(1)开发人员需求分析:开发人员需要能够在各自的模块代码开发以后,通过docker 进行自动化的部署,当部署钩子触发以后,k8s 需要能够自动的对当前代码运维分配合适的节点进行自动化测试的构建。(2)测试人员需求分析:也需要能够编写好针对特定服务的功能测试用例以后, k8s 能够进行调度这些测试用例,将这些测试用例和模块代码进行节点分配。而且还需要能够将代码开发或者测试的结果通过一些可视化的软件进行信息反馈,告知这个软件开发的团队人员,当前服务代码的状态情况。
三、K8S 集实现(一)集搭建
本文介绍采用三台Ubantu18.0版本系统搭建K8S 集,需要在每台Ubantu 服务器上,使用install_docker.sh 脚本进行Docker 的安装。当Docker 安装完成以后,可以通过docker 命令进行验证,保证Docker 安装完毕。然后还需要在服务集中使用install_k8s.sh 脚本,完成Kubernetes 的安装。安装完K8s 和Docker 以后,为了提升K8S 的性能,我们需要关闭掉Swap 交换分区,Swap 如果不关闭,K8s 在内存不够的时候,会将其作为内存访问,但是Swap 的访问速度非常慢,为了提升k8S 的性能,直接将swap 缓存关闭是一个很好的选择。
(二)K8S 集初始化
K8S 集初始化需要对K8S 进行Master 节点初始化,在K8S 的集中,我们需要选择一台服务器作为K8S 的master 节点。选择master 节点以后,使用SSH 方式登录到master 节点中。使用sudo hostnamectl set-hostname master-node 命令对master 节点进行hostName 的设置,自定义修改了K8S 的主机名以后,前文提到K8s 有一个Label 技术,这里就直接可以使用Label 技术将每个节点的各种属性和Label 进行对于,这样k8s 调度子节点就会非常高效。
当K8s 的master 节点和子节点都配置好以后,使用sudo kubeadm init --pod-network-cidr=10.244.0.0/16对k8S 的整个集进行初始化。等待命令执行完。必须将kubeadm join 进行备份,这个是以后还有服务器需要加入当前k8s 集的关键秘钥,为了能够使得K8s 的各个节点之间能
够正常通过网络进行通信,我们需要安装网络通信插件Flannel。Flannel 可以为K8s 集中的所有节点进行虚拟IP 的分配,这样就可以实现了集内部子节点的通信。
(三)集扩容
本文前文介绍了如果进行k8s 的集搭建和集初始化,对于k8s 的集来说,可能在实际的运行过程中,经常需要对集进行扩容,这个时候,我们就可以通过在前文提到的的kubeadm join 命令,就可以将我们想加入k8s 的服务器加入到k8s 的集中进行管理。
四、总结
本文对当前流行的K8s 框架进行了简单的介绍,并展示了如何基于K8S 搭建Docker 分布式容器部署的自动化运维系统。微服务是未来软件开发运维的发展方向,而K8s 作为优秀的微服务管理框架,作为开发或者运维人员都非常有必要对k8s 进行学习和研究。
(作者单位:中博信息技术研究院有限公司)
作者简介:王时睿(1989-),男,本科,研究方向为软件研发方面的工作。
参考文献
[1]金子威.基于K8S 的Docker 分布式容器自动化运维系统的设计与实现[D].武汉:中南民族大学,2018.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。