Kubernetes 介绍
Kubernetes 是 google 在 2014 年 6 月开源的一个容器集群管理系统, 使用 go 语言开发, Kubernetes 也称 k8s.
k8s 是 google 内部一个叫 borg 的容器集群管理系统衍生出来的, borg 已经在 google 大规模生产运行十年之久.
k8s 主要用于自动化部署, 扩展和管理容器应用, 提供了资源调度, 部署管理, 服务发现, 扩容缩容, 监控等一整套功能.
2015 年 7 月, kubernetes v1.0 正式发布.
kubernetes 目标是让部署容器化应用简单高效.
官方网址: https://kubernetes.io/
Kubernetes 主要功能
数据卷
Pod 中容器之间共享数据, 可以使用数据卷.
应用程序健康检查
容器内服务可能进程阻塞无法处理请求, 可以设置监控检查策略保证应用健壮性.
复制应用程序实例
控制器维护 pod 副本数量, 保证一个 pod 或一组同类的 pod 数量始终可用.
弹性伸缩
根据设定的指标 (CPU 利用率) 自动缩放 pod 副本数.
服务发现
使用环境变量或 DNS 服务插件保证容器中程序发现 pod 入口访问地址.
负载均衡
一组 pod 副本分配一个私有的集群 ip 地址, 负载均衡转发请求到后端容器. 在集群内部其他 pod 可通过这个 clusterIP 访问应用.
滚动更新
更新服务不中断, 一次更新一个 pod, 而不是同时删除整个服务.
服务编排
通过文件描述部署服务, 使得应用程序部署变得更高效.
资源监控
Node 节点组件集成 cAdvisor 资源收集工具, 可通过 Heapster 汇总整个集群节点资源数据, 然后存储到 InfluxDB 时序数据库, 再由 Grafana 展示.
提供认证和授权
支持角色访问控制 (RBAC) 认证授权等策略.
基本对象概念
基本对象
Pod
Pod 是最小部署单元, 一个 Pod 有一个或多个容器组成, Pod 中容器共享存储和网络, 在同一台 Docker 主机上运行.
Service
Service 一个应用服务抽象, 定义了 Pod 逻辑集合和访问这个 Pod 集合的策略.
Service 代理 Pod 集合对外表现是为一个访问入口, 分配一个集群 IP 地址, 来自这个 IP 的请求将负载均衡转发后端 Pod 中的容器.
Service 通过 Lable Selector 选择一组 Pod 提供服务.
Volume
数据卷, 共享 Pod 中容器使用的数据.
Namespace
命名空间将对象逻辑上分配到不同 Namespace, 可以是不同的项目, 用户等区分管理, 并设定控制策略, 从而实现多租户.
命名空间也称为虚拟集群.
Lable
标签用于区分对象(例如 Pod,Service), 键值对存在, 每个对象可以有多个标签, 通过标签关联对象.
基于基本对象更高层次抽象
ReplicaSet
下一代 Replication Controller. 确保任何给定时间指定的 Pod 副本数量, 并提供声明正式更新等功能.
RC 与 RS 唯一区别就是 lable selector 支持不同, RS 支持新的基于集合的标签, RC 仅支持基于等式的标签.
Deployment
Deployment 是一个更高层次的 API 对象, 它管理 ReplicaSets 和 Pod, 并提供声明式更新等功能.
官方建议使用 Deployment 管理 ReplicaSets, 而不是直接使用 ReplicaSets, 这就意味着可能永远不需要直接操作 ReplicaSet 对象.
StatefulSet
StatefulSet 适合持久性的应用程序, 有唯一的网络标识符(IP), 持久存储, 有序的部署, 扩展, 删除和滚动更新.
DaemonSet
DaemonSet 确保所有 (或一些) 节点运行同一个 Pod. 当节点加入 Kubernetes 集群中, Pod 会被调度到该节点上运行, 当节点从集群中移除时, DaemonSet 的 Pod 会被删除. 删除 DaemonSet 会清理它所有创建的 Pod.
Job
一次性任务, 运行完成后 Pod 销毁, 不再重新启动新容器, 还可以任务定时运行.
系统架构及组件功能
master 组件
kube-apiserver
kube-apiserver API, 集群的统一入口, 各组件协调者, 以 HTTP API 提供接口服务, 所有对象资源的增删改查和监听操作都交给 APIService 处理后再提交给 Etcd 存储.
kuber-controller-manager
处理集群中常规后台任务, 一个资源对应一个控制器, 而 controllerManager 就是负责管理这些控制器的.
kuber-scheduler
根据调度算法为新创建的 Pod 选择一个 Node 节点.
Node 组件
kubelet
kubelet 是 master 在 Node 节点上的 Agent, 管理本机运行容器的生命周期, 例如创建容器, Pod 挂载数据卷, 下载 secret, 获取容器和节点状态等工作. kubelet 将每个 Pod 转换成一组容器.
kube-proxy
在 Node 节点上实现 Pod 网络代理, 维护网络规和四层负载均衡工作.
docker 或 rocket/rkt
运行容器.
第三方服务
etcd
分布式键值存储系统. 用于保持集群状态, 例如 Pod,Service 等对象信息.
kubernetes(k8s)容器集群管理
来源: http://www.bubuko.com/infodetail-3108681.html