一、Kubernetes体系架构
Kubernetes是Google开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下:
1) 使用Docker对应用程序包装(package)、实例化(instantiate)、运行(run)。
2) 以集群的方式运行、管理跨机器的容器。
3) 解决Docker跨机器容器之间的通讯问题。
4) Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态。
Kubernetes Master节点的组成
1、etcd
所有的持久性状态都保存在etcd中。Etcd同时支持watch,这样组件很容易得到系统状态的变化,从而快速响应和协调工作。
2、Kubernetes API Server
这个组件提供对API的支持,响应REST操作,验证API模型和更新etcd中的相应对象。
3、Scheduler
通过访问Kubernetes中/binding API, Scheduler负责Pods在各个节点上的分配。Scheduler是插件式的,Kubernetes将来可以支持用户自定义的scheduler。
4、Kubernetes Controller Manager Server
Controller Manager Server负责所有其它的功能,比如endpoints控制器负责Endpoints对象的创建,更新。node控制器负责节点的发现,管理和监控。将来可能会把这些控制器拆分并且提供插件式的实现。
Kubernetes slave节点的组成
1、Kubelet
Kubelet组件管理Pods和它们的容器,镜像和卷等信息。
2、Kube-Proxy
Kube-proxy是一个简单的网络代理和负载均衡器。它具体实现Service模型,每个Service都会在所有的Kube-proxy节点上体现。根据Service的selector所覆盖的Pods, Kube-proxy会对这些Pods做负载均衡来服务于Service的访问者。
二、Kubernetes组件
Kubernetes以RESTFul形式开放接口,用户可操作的REST对象有三个:
1、pod:是Kubernetes最基本的部署调度单元,可以包含container,逻辑上表示某种应用的一个实例。比如一个web站点应用由前端、后端及数据库构建而成,这三个组件将运行在各自的容器中,那么我们可以创建包含三个container的pod。
2、service:是pod的路由代理抽象,用于解决pod之间的服务发现问题。因为pod的运行状态可动态变化(比如切换机器了、缩容过程中被终止了等),所以访问端不能以写死IP的方式去访问该pod提供的服务。service的引入旨在保证pod的动态变化对访问端透明,访问端只需要知道service的地址,由service来提供代理。
3、replicationController:是pod的复制抽象,用于解决pod的扩容缩容问题。通常,分布式应用为了性能或高可用性的考虑,需要复制多份资源,并且根据负载情况动态伸缩。通过replicationController,我们可以指定一个应用需要几份复制,Kubernetes将为每份复制创建一个pod,并且保证实际运行pod数量总是与该复制数量相等(例如,当前某个pod宕机时,自动创建新的pod来替换)。
可以看到,service和replicationController只是建立在pod之上的抽象,最终是要作用于pod的,那么它们如何跟pod联系起来呢?这就要引入label的概念:label其实很好理解,就是为pod加上可用于搜索或关联的一组key/value标签,而service和replicationController正是通过label来与pod关联的。如下图所示,有三个pod都有label为"app=backend",创建service和replicationController时可以指定同样的label:"app=backend",再通过label selector机制,就将它们与这三个pod关联起来了。例如,当有其他frontend pod访问该service时,自动会转发到其中的一个backend pod。
三、软件包安装
centos7系统通过yum方式安装即可。当前kubernetes的最新版本为1.9,目前尚不建议在生产环境使用1.9版本,官网推荐使用kubeadm部署,为了更简单也更系统的学习kubernetes集群的组件,本系列文章采用rpm方式安装kubernetes 1.5.2 版本,后续会介绍如何本地离线安装1.9版本。
# yum -y install etcd kubernetes
1、通用配置文件
/etc/kubernetes/config
2、Apiserver服务配置文件
/etc/kubernetes/apiserver
启动脚本:/lib/systemd/system/kube-apiserver.service
3、kube-controller-manager 服务配置文件
/etc/kubernetes/controller-manager
启动脚本:/lib/systemd/system/kube-controller-manager.service
4、kube-scheduler服务配置文件
/etc/kubernetes/scheduler
启动脚本: /lib/systemd/system/kube-scheduler.service
5、kubernet服务配置文件
/etc/kubernetes/kubelet
启动脚本:/lib/systemd/system/kubelet.service
6、Kube-proxy服务
/etc/kubernetes/proxy
启动脚本:/lib/systemd/system/kube-proxy.service
五、服务启动
1、master节点
# systemctl start etcd
# systemctl start kube-apiserver*
# systemctl start kube-controller-manager*
# systemctl start kube-scheduler*
2、slave节点
# systemctl start docker*
# systemctl start kubelet*
# systemctl start kube-proxy*
六、注意事项
在kubernetes系统中,对容器的要求是,需要一直在前台执行。