Kubernetes K8S 概述、特性与架构说明,以及核心技术概念和API对象详解
Kubernetes概述
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署、规划、更新、维护的一种机制。
在所有的容器编排工具中(类似的还有 docker swarm / mesos等),Kubernetes的生态系统更大、增长更快,有更多的支持、服务和工具可供用户选择。
Kubernetes是Google开源的容器集群管理系统。最初源于谷歌内部的Borg,是Google基于Borg开源的容器编排调度引擎。它构建在Docker技术之上,为跨主机的容器化应用提供资源调度、服务发现、高可用管理和弹性伸缩等一整套功能,它提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。
它的目标不仅仅是一个编排系统,而是提供一个规范,可以让你来描述集群的架构,定义服务的最终状态,Kubernetes可以帮你将系统自动的达到和维持在这个状态。
重点:跨机器、跨平台;协调资源使用
- 敏捷地创建和部署应用程序:相较于创建虚拟机镜像,创建容器镜像更加容易和快速
- 持续构建集成:可以更快更频繁地构建容器镜像、部署容器化的应用程序、并且轻松地回滚应用程序
- 分离开发和运维的关注点:在开发构建阶段就完成容器镜像的构建,构建好的镜像可以部署到多种基础设施上。这种做法将开发阶段需要关注的内容包含在如何构建容器镜像的过程中,将部署阶段需要关注的内容聚焦在如何提供基础设施以及如何使用容器镜像的过程中。降低了开发和运维的耦合度
- 可监控性:不仅可以查看操作系统级别的资源监控信息,还可以查看应用程序健康状态以及其他信号的监控信息
- 开发、测试、生产不同阶段的环境一致性:开发阶段在笔记本上运行的容器与测试、生产环境中运行的容器一致
- 跨云服务商、跨操作系统发行版的可移植性:容器可运行在 Ubuntu、RHEL、CoreOS、CentOS等不同的操作系统发行版上,可以运行在私有化部署、Google Kubernetes Engine、AWS、阿里云等不同的云供应商的环境中
- 以应用程序为中心的管理:虚拟机时代的考虑的问题是在虚拟硬件上运行一个操作系统,而容器化时代,问题的焦点则是在操作系统的逻辑资源上运行一个应用程序
- 松耦合、分布式、弹性、无约束的微服务应用程序被切分成更小的、独立的微服务,并可以动态部署和管理,而不是一个部署在专属机器上的庞大的单片应用程序
- 资源隔离:确保应用程序性能不受干扰
- 资源利用:资源高效、高密度利用
Kubernetes特性
1、自动化部署:yaml部署到K8S,会根据应用程序计算资源需求,自动分配到node。
2、系统自愈:重启已经停机的容器;替换、kill 那些不满足自定义健康检查条件的容器;在容器就绪之前,避免调用者发现该容器。
3、水平扩展:HPA周期调度RC的副本数量,将用户定义的resource值匹配。
4、服务发现和负载均衡:内置服务发现功能。可以通过 DNS 名称或 IP 地址暴露容器的访问方式;并且可以在同组容器内分发负载以实现负载均衡。
5、存储编排:可以自动挂载指定的存储系统,例如 local stroage/nfs/云存储等。
6、自动更新和回滚:可以在 K8S 中声明你期望应用程序容器应该达到的状态,Kubernetes将以合适的速率调整容器的实际状态,并逐步达到最终期望的结果,不会同时杀掉应用。更新出错,自动恢复到原先状态。
Kubernetes架构设计
Master说明
Master:集群控制节点,负责整个集群的管理和控制。
API Server&#