Kubernetes

来自站长百科
跳转至: 导航、​ 搜索

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。

概述[ ]

Kubernetes(通常缩写为 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理在多个主机上的容器化应用程序。它的主要目标是提供一种高效和灵活的方式来管理容器化应用,确保应用能够在任何环境中一致地运行,无论是在云中还是在本地数据中心。

Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。K8s 这个缩写是因为 K 和 s 之间有 8 个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。

主要功能[ ]

1、自动化上线和回滚

Kubernetes 会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。如果出现问题,Kubernetes 会为你回滚所作更改。你应该充分利用不断成长的部署方案生态系统。

2、服务发现与负载均衡

你无需修改应用来使用陌生的服务发现机制。Kubernetes 为每个 Pod 提供了自己的 IP 地址并为一组 Pod 提供一个 DNS 名称,并且可以在它们之间实现负载均衡。

3、自我修复

重新启动失败的容器,在节点死亡时替换并重新调度容器, 杀死不响应用户定义的健康检查的容器, 并且在它们准备好服务之前不会将它们公布给客户端

4、存储编排

自动挂载所选存储系统,包括本地存储、公有云提供商所提供的存储或者诸如 iSCSI 或 NFS 这类网络存储系统。

5、Secret 和配置管理

部署和更新 Secret 和应用程序的配置而不必重新构建容器镜像, 且不必将软件堆栈配置中的秘密信息暴露出来。

6、自动装箱

根据资源需求和其他限制自动放置容器,同时避免影响可用性。 将关键性的和尽力而为性质的工作负载进行混合放置,以提高资源利用率并节省更多资源。

7、批量执行

除了服务之外,Kubernetes 还可以管理你的批处理和 CI 工作负载,在期望时替换掉失效的容器。

8、IPv4/IPv6 双协议栈

为 Pod 和 Service 分配 IPv4IPv6 地址。

9、水平扩缩

使用一个简单的命令、一个 UI 或基于 CPU 使用情况自动对应用程序进行扩缩。

10、为扩展性设计

无需更改上游源码即可扩展你的 Kubernetes 集群。

Kubernetes对象[ ]

在 Kubernetes 系统中,Kubernetes 对象是持久化的实体。 Kubernetes 使用这些实体去表示整个集群的状态。

创建 Kubernetes 对象时,必须提供对象的 spec,用来描述该对象的期望状态, 以及关于对象的一些基本信息(例如名称)。 当使用 Kubernetes API 创建对象时(直接创建或经由 kubectl 创建), API 请求必须在请求主体中包含 JSON 格式的信息。 大多数情况下,你会通过 清单(Manifest) 文件为 kubectl 提供这些信息。 按照惯例,清单是 YAML 格式的(你也可以使用 JSON 格式)。 像 kubectl 这样的工具在通过 HTTP 进行 API 请求时, 会将清单中的信息转换为 JSON 或其他受支持的序列化格式。

Kubernetes组件[ ]

控制平面组件[ ]

  • API Server (kube-apiserver):作为Kubernetes控制平面的前端,是其他组件交互的集中点。它处理REST请求,更新对象的状态,并触发调度器进行调度等工作。
  • ETCD:是一个轻量级、分布式的键值存储,用于保存所有集群数据,包括配置数据、状态信息等,确保数据的一致性。
  • Controller Manager (kube-controller-manager):运行控制器,这些控制器负责管理集群中的各种资源(如节点、Pods、服务等)的状态。
  • Scheduler (kube-scheduler):负责监视新创建的、还没有分配节点的Pods,并为它们选择一个节点以便运行。
  • Cloud Controller Manager (cloud-controller-manager):与云服务提供商交互,例如AWS或GCE,以确保与云资源的兼容性。

节点组件[ ]

  • Kubelet:确保容器在Pod中运行,按照预期的方式工作。
  • Kube-proxy:负责为服务实现网络代理,维护网络规则,使集群内的服务能够相互通信。
  • Container Runtime (如Docker, rkt):负责运行容器。
  • Supervisord:监控和重启那些退出的进程。
  • Fluentd:负责日志记录的工具,它会采集容器和应用的日志。

相关条目[ ]