Kubernetes容器编排平台
Kubernetes是Google团队发起的开源项目,主要实现语言为Go语言(现代版c语言)。它的目标是管理跨多个主机的容器,提供基本的部署,维护以及应用伸缩。(编排就是为了处理应用之间的关联动作)
Kubernetes特点:
- 便携:支持公有云,私有云,混合云,以及多种云平台。
- 可拓展∶模块化,可插拔,可任意组合
- 自修复:自动重调度,自动重启,自动复制
主流容器编排平台及其特点
Swarm:和docker无缝集成,适合节点较少的集群,内置程度高,不用关心细节即可运行cluster,但是不好定制化,不好Debug,不好干预。
Mesos:适合超大集群规模,但是功能单一,就自身来讲是个不错的调度器,但并不是一个优秀的容器编排平台。
Kubernetes:模块划分细,功能丰富,松耦合结构,方便定制化,适合大规模集群,但是抽象概念很多,学习门槛高。
kubernetes和openstack
Kubernetes架构
一套Kubernetes架构是由一个或者多个Master和Node两种节点组成,每个节点可以是物理机也可以是虚拟机
Master节点(控制节点)提供集群控制
- kube-apiserver:负责接收和处理用户的请求,集群的持久化数据由api处理后保存在etcd中。被设计为可以水平扩展,也就是可以集群部署,避免单点故障
- kube-scheduler:负责任务调度,选择node节点应用部署
- kube-cintroller-manager:运行控制器,负责容器编排,处理集群中常规任务的后台进程(每个控制器对应一个进程)
- etcd:k8s的后端存储,所有集群数据都存放在这,始终为k8s集群的etcd数据提供备份计划
Node节点(计算节点)维护pod,和提供资源
- kubelet:Master的狗腿子,管理本机容器,可以调用网络插件(CNI)和存储插件(CSI)配置网络和持久化存储
- 功能:
- 挂载Pod所需要的数据卷(Volume)。
- 下载Pod的secrets。
- 通过Docker(或通过rkt)运行Pod中的容器。
- 周期性的对容器生命周期进行探测。
- kube-proxy:提供网络代理,负载均衡等操作
- 容器引擎:通常使用docker来运行容器,也可以使用rkt(近似于docker)
常用其他组件:Add-ons
Kubernetes使用中通常需要一些额外的组件实现特定功能,常用的Add-ons包括:
- Core-dns:为整个集群提供DNS服务
- Ingress Controller:为Service提供外网访问入口 Dashboard:提供图形化管理界面
- Heapster:提供集群资源监控
- Flannel:为Kubernetes提供方便的网络服务
命名空间 - namespace
命名空间提供了良好的资源隔离,是在多个用户之间划分集群资源的一种方法(通过资源配额)
常用命令
kubectl get namespace #查看存在哪些namespace
kubectl get pod -namespace=kube-system #查看命名空间中的pod
kubectl get pod -n kube-system #查看命名空间(命令简写)
常见的namespace有
- Kube-system: Kubernetes系统创建对象所使用的命名空间。
- Default:没有指明使用其他命名空间的对象所使用的默认命名空间。
Kubernetes管理对象
Pod
Pod是Kubernetes基本管理单元,每个Pod是一个或多个容器的一组集合,一个Pod作为一个整体运行在一个节点(node)上,Pod内的容器共享存储和网络。
ReplicationController(RC)(老版本使用,只支持匹配单标签,RS和DP支持标签集合)
Kubernetes需要管理大量的Pod,使用大量的Pod组成一个简单应用。管理这些大量的Pod的一个方式就是RC。
RC可以指定Pod的副本数量,并且在其中有Pod故障时可以自动拉起新的Pod,大大简化了管理难度。
ResplicaSet(RS)
ReplicaSet是新一代的RC,主要功能和RC一样,维持Pod的数量稳定,指定Pod的运行位置等使用方法也相似,主要区别是更新了api,支持更多功能。
ReplicaSet不建议直接使用,而是用更上层的概念Deployment调用ReplicaSet。
Deployment
目前最常用的控制器就是Deployment,创建Deployment时也会自动创建ReplicaSet。Deployment可以管理一个或多个RS,并且通过RS来管理Pod。
从小到大的管理逻辑
容器<Pod<ReplicaSet<Deployment
通常情况下
- Pod中包含一个容器,或关系特别紧密的几个容器。
- 一个ReplicaSet中包含一个或多个相同的Pod。
- Deployment中包含一个或几个不同的RS。
文章内容仅用于作者学习使用,如果内容侵犯您的权益,请立即联系作者删除,作者不承担任何法律责任。