Kubernetes来历
Kubernetes是Google的开源产品。
Kubernetes,也叫K8s。之所以叫K8s是因为Kubernetes这个单词从开头的字母K到末尾的s,中间刚好有8个字母,所以也叫K8s。
Kubernetes这个词在希腊语是“舵手”的意思,有意思的是Docker把自己比做鲸鱼,Google就把他们的产品起名叫舵手,我理解Google可能是想通过Kubernetes去操控Docker这个鲸鱼的意思。
Kubernetes的开发和设计都受到Google内部超大规模管理系统Borg的影响。
Google的Borg是一个约有 3-4 人、与新版的谷歌新搜索引擎合作的小规模项目。它跨多个集群运行成千上万的作业,这些作业来自成千上万个不同的应用程序,每个集群最多有成千上万台计算机。
谷歌其实在很早以前就宣称可以在同一个集群中同时调度在线任务,这个其实应该就是指的Borg。
2003年是非典那一年,中国互联网刚刚起步,京东淘宝也才刚刚创立。差不多就在2003-2004年,Borg已经在Google诞生。从此Borg就在Google内部运行了数十年之久。
关于Borg的介绍,这里就不多说了,有兴趣的朋友可以参看这个链接:Borg
2014年6月Google首次对外发布Kubernetes并对外开源。Kubernetes开发和设计都受到了Borg的影响。很多地方都是相似的。你甚至可以把Kubernetes就理解成是Borg的开源版本。
2015年7月,Google正式加入OpenStack基金会。与此同时,Kuberentes v1.0正式对外发布。
同年7月,IBM、微软、Docker、Red Hat、CoreOS、 Mesosphere和Saltstack 等公司,相继宣布加入Kuberentes。
Kubernetes(K8s)是一个开源系统,用于自动化容器化应用程序的部署,扩展和管理。它将组成应用程序的容器分组为逻辑单元,以便于管理和发现。Kubernetes拥有15年在Google上运行生产工作负载的经验,并结合了社区中最好的想法和实践。
Kubernetes特性
- 易学:轻量级,简单,容易理解
- 便携:支持公有云,私有云,混合云,以及多种云平台
- 可扩展:模块化,可插拔,支持钩子,可任意组合
- 自修复:自动重调度,自动重启,自动复制
Kubernetes架构与组件
- 架构示意图
生产环境一个Pod建议只放一个container
Master组件:
- kube-apiserver
Kubernetes API,集群统一入口,各组件协调者,以RESTful API提供接口服务,所有对象的资源的增删改查和监听操作都交给APIServer处理后在提交给Etcd存储。 - kube-controller-manager
处理集群中常规的后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的 - kube-scheduler
根据调度算法为新创建的Pod选择一个node节点,可以部署在同一个节点上,也可以部署在不同节点上。 - etcd
分布式键值存储系统,用于保存群集状态数据,比如Pod、service等对象信息。
Node组件:
- kubelet
kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载Secret、获取容器节点状态工作。kubelet将每个Pod转换成一组容器。 - kube-proxy
在node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作 - docker或rocket
容器引擎,运行容器。
Kubernetes核心概念
master:master指的是集群控制节点,来负责整个集群的管理和控制,基本上k8s的所有控制命令都是发给它。我们后面执行的命令基本都是在master节点上运行的。通常它会占据一个独立的x86服务器(或一个虚拟机)
Node:k8s集群中其他机器被称为node节点,Node可以是一台物理机,也可以是一台虚拟机。当某个node宕机,其上的工作负载会被master自动转移到其他节点上。
Pod
- 最小部署单元
- 一组容器的集合
- 一个Pod中的容器共享网络命名空间
- Pod是短暂的
Controllers
- RelicaSet:确保预期的Pod副本数量
- Deployment:无状态应用部署
- StatefulSet:有状态应用部署
- DaemonSet:确保node运行同一个Pod
- Job:一次性任务
- Cronjob:定时任务
Service
- 防止Pod失联
- 定义一组Pod访问策略
Label:标签,附加到某个资源上,用于关联对象、查询和筛选
Namespace:命名空间,将对象逻辑上隔离
Annotation:注释
Volume:存储卷
RC
- 确保Pod数量: 它会确保Kubernetes中有指定数量的Pod在运行,如果少于指定数量的Pod,RC就会创建新的,反之会删除多余的,保证Pod的副本数量不变
- 确保Pod健康: 当Pod不健康,RC会杀死不健康的Pod,重新创建新的
- 弹性伸缩: 在业务高峰或者低峰的时候,可以用RC来动态调整Pod数量来提供资源的利用率吧,当然也可以使用HPA来实现
- 滚动升级: 滚动升级是一种平滑的升级方式,通过逐步替换的策略,保证整体系统的稳定性
HPA(horizontal Pod Autoscaler):Pod自动弹性伸缩,K8S通过对Pod中运行的容器各项指标(CPU占用、内存占用、网络请求量)的检测,实现对Pod实例个数的动态新增和减少
kubernetes用途
在您生产环境中使用 Kubernetes 的主要优势在于,它提供了一个便捷有效的平台,让您可以在物理机和虚拟机集群上调度和运行容器。更广泛一点说,它可以帮助您在生产环境中,完全实施并依托基于容器的基础架构运营。由于 Kubernetes 的实质在于实现操作任务自动化,所以您可以将其它应用平台或管理系统分配给您的许多相同任务交给容器来执行。
利用 Kubernetes,您能够达成以下目标:
- 跨多台主机进行容器编排。
- 更加充分地利用硬件,最大程度获取运行企业应用所需的资源。
- 有效管控应用部署和更新,并实现自动化操作。
- 挂载和增加存储,用于运行有状态的应用。
- 快速、按需扩展容器化应用及其资源。
- 对服务进行声明式管理,保证所部署的应用始终按照部署的方式运行。
- 利用自动布局、自动重启、自动复制以及自动扩展功能,对应用实施状况检查和自我修复。
但是,Kubernetes 需要依赖其它项目来全面提供这些经过编排的服务。因此,借助其它开源项目可以帮助您将 Kubernetes 的全部功用发挥出来。这些功能包括:
- 注册表,通过 Atomic 注册表或 Docker 注册表等项目实现。
- 联网,通过 OpenvSwitch 和智能边缘路由等项目实现。
- 遥测,通过 heapster、kibana、hawkular 和 elastic 等项目实现。
- 安全性,通过 LDAP、SELinux、RBAC 和 OAUTH 等项目以及多租户层来实现。
- 自动化,参照 Ansible 手册进行安装和集群生命周期管理。
- 服务,可通过自带预建版常用应用模式的丰富内容目录来提供。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/5573.html