我们真的了解Kubernetes吗?
Kebernetes系列一Kebernetes简介
在很多同仁了解和调研Kubernetes时,认为它是一套非常复杂的系统,各种抽象概念以及复杂的安装过程,学习和使用成本高,排除故障难度大,在有完善的开发、测试、生产环境发布流程和平台时,使用Kubernetes反而增加运维负担,如不能及时排除故障提升业务的故障率,本人在此对Kubernetes做一下简介、Kubernetes安装、dockerfile和deployment demo。
Kubernetes是一个十分强大的容器编排系统。它通过管理控制、高效的任务包装、超售、和进程级别性能隔离实现了高利用率。它支持高可用性应用程序与运行时功能,最大限度地减少故障恢复时间,减少相关故障概率的调度策略。目的是实现资源管理的自动化以及跨多个数据中心的资源利用率最大化。它是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。
在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
Kubernetes 主要功能包括:
- 基于容器的应用部署、维护和滚动升级
- 负载均衡和服务发现
- 跨机器和跨地区的集群调度
- 自动伸缩,随时扩展或收缩容器规模
- 无状态服务和有状态服务
- 一次打包多地部署
- 广泛的 Volume 支持
- 支持公有云,私有云,混合云,多重云(multi-cloud)
- 提供容器弹性,如果容器失效就替换它,等等...
Kubernetes架构图:
Kubernetes核心组件
Kubernetes 主要由以下几个核心组件组成:
- etcd 提供监听watch机制,监听和推送变更,键值发生变化时会通知到API Server,保存了整个集群的状态;
- apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制,结果状态持久存储于etcd中,API Server是整个集群的网关;
- controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
- kubelet 负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理;
- kube-proxy 负责为Service 提供 cluster 内部的服务发现和负载均衡
资源抽象
- Pod
为最小调度单元,同一Pod中容器共享网络名称空间和存储资源,由回环口lo直接通信
- 资源标签
Label是将资源进行分类的标识符,是key/values数据,为指定对象提供辨识性属性
- 标签选择器
Selector根据Label来过滤符合条件的资源对象,使用标签对资源对象进行分类,使用标签选择器挑选出它们
- Pod管制器
通常不直接部署及管理Pod,而是借助控制器Controller进行管理包括 ReplicationController、ReplicaSet、Deployment、StatefulSet、Job等
- 服务资源Service
Service是Pod上的资源抽像,将标签选择器选定的一组Pod定义统一固定访问入口(IP及DNS名称),到达Service的请求将负载均衡到后端的各Pod,Service也可将集群外部流量引入到集群中
- 存储卷