Kubernetes 概念 目录: 介绍 Kubernetes 对象 Kubernetes 架构 教程资源 参考 介绍 什么是 Kubernetes? Kubernetes,最基础的,是一个用于跨多台机器协调运行容器化应用程序的系统。它是一个平台,旨在通过提供可预测性、可扩展性和高可用性的方法来完全管理容器化应用程序和服务的生命周期。 作为 Kubernetes 用户,您可以定义您的应用程序应该如何运行以及它们应该如何与其他应用程序或外部世界交互。您可以扩展或缩减服务规模,执行平滑的滚动更新,并在不同版本的应用程序之间切换流量以测试功能或回滚有问题的部署。Kubernetes 提供了接口和可组合的平台原语,使您能够以高度灵活、强大和可靠的方式定义和管理应用程序。
什么是 Kubernetes?
Kubernetes,最基础的,是一个用于跨多台机器协调运行容器化应用程序的系统。它是一个平台,旨在通过提供可预测性、可扩展性和高可用性的方法来完全管理容器化应用程序和服务的生命周期。
作为 Kubernetes 用户,您可以定义您的应用程序应该如何运行以及它们应该如何与其他应用程序或外部世界交互。您可以扩展或缩减服务规模,执行平滑的滚动更新,并在不同版本的应用程序之间切换流量以测试功能或回滚有问题的部署。Kubernetes 提供了接口和可组合的平台原语,使您能够以高度灵活、强大和可靠的方式定义和管理应用程序。
Kubernetes 包含许多表示系统状态的抽象:部署的容器化应用程序和工作负载、它们相关的网络和磁盘资源以及其他关于集群正在做什么的信息。这些抽象由 Kubernetes API 中的对象表示。有关更多详细信息,请参阅理解 Kubernetes 对象。
基本的 Kubernetes 对象包括:
Kubernetes 部署管理在集群上运行的无状态服务(而不是像 StatefulSets 这样的管理有状态服务)。其目的是保持一组相同的 Pod 运行并以受控方式升级它们。例如,您可以在部署定义中定义要运行的应用程序副本数,Kubernetes 将在节点上分配这些副本。如果您说在 3 个节点上有 5 个副本,则某些节点将运行应用程序的多个副本。
DaemonSet 管理一组重复的 Pod。然而,DaemonSet 力求实现每节点一个 Pod 的模型,要么在整个集群中,要么在节点子集中。DaemonSet 不会在每个节点上运行超过一个副本。使用 DaemonSet 的另一个优势是,如果您向集群添加一个节点,DaemonSet 将自动在该节点上生成 Pod,而部署则不会这样做。
DaemonSet 适用于部署需要在所有或某些节点上运行且不需要用户干预的持续后台任务。此类任务的例子包括存储守护进程(如 Ceph)、日志收集守护进程(如 Fluentd)和节点监控守护进程(如 Collected)。
让我们看看您在问题中提到的例子,为什么 kube-dns 是部署而 kube-proxy 是 DaemonSet?
原因在于 kube-proxy 需要在集群中的每个节点上运行以运行 IP 表,从而使每个节点上的所有 Pod 可访问,无论它们位于哪个节点。因此,当我们使 kube-proxy 成为 DaemonSet 并稍后向集群添加一个新节点时,kube-proxy 将自动在该节点上启动。
kube-dns 的职责是通过名称发现服务 IP,即使只有一个 kube-dns 副本也足以将服务名称解析为其 IP,因此我们将 kube-dns 设定为部署,因为我们不需要在每个节点上都运行 kube-dns。
KiB 是在计算机科学领域设计用来替换 Kilobyte 的术语,当 Kilobyte 被用来表示 1024 字节时,这与 SI 定义的前缀 kilo(1000)相冲突。
因此,如您所见,5G 表示 5 GB,而 5Gi 表示 5 GiB。它们的数量如下:
5 G = 5000000 KB / 5000 MB
5 Gi = 5368709.12 KB / 5368.70 MB
正确地说,一个是 10 的幂,另一个是 2 的幂。所以,
10^3 是 10 的幂。结果是 1000,即 1G
2^10 是 2 的幂。结果是 1024,即 1Gi

要了解 Kubernetes 如何提供这些功能,最好从高层次了解其设计和组织方式。Kubernetes 可以被视为分层构建的系统,每一层都抽象出下层的复杂性。
最底层,Kubernetes 将单独的物理或虚拟机组成一个集群,使用共享网络在服务器之间通信。这个集群是所有 Kubernetes 组件、功能和工作负载配置的物理平台。
集群中的每台机器都在 Kubernetes 生态系统中扮演一个角色。一台服务器(或在高可用部署中的一小组服务器)充当主服务器。这台服务器充当集群的网关和大脑,通过公开一个供用户和客户端使用的 API、健康检查其他服务器、决定如何最好地划分和分配工作(称为“调度”),以及协调其他组件之间的通信,来充当集群的主要接触点。主服务器充当集群的主要接触点,并负责提供 Kubernetes 提供的大部分中心逻辑。
集群中的其他机器被指定为节点:负责接受和运行工作负载的服务器,使用本地和外部资源。为了帮助隔离、管理和灵活性,Kubernetes 在容器中运行应用程序和服务,因此每个节点都需要配备一个容器运行时(如 Docker 或 rkt)。节点从主服务器接收工作指令,并根据需要创建或销毁容器,调整网络规则以适当地路由和转发流量。
如前所述,应用程序和服务本身在集群内以容器的形式运行。底层组件确保应用程序的实际状态与集群的期望状态相匹配。用户通过直接或通过客户端和库与主 API 服务器交互来与集群交互。要启动一个应用程序或服务,可以提交一个定义创建什么以及如何管理它的声明性计划,该计划以 JSON 或 YAML 格式定义。主服务器然后通过检查要求和系统的当前状态来确定如何在基础设施上运行该计划。这一组根据指定计划运行的用户定义的应用程序代表了 Kubernetes 的最终层。

- [基础知识](https://kubernetes.io/docs/tutorials/#basics) - [配置 Kubernetes](https://kubernetes.io/docs/tutorials/#configuration) - [无状态应用](https://kubernetes.io/docs/tutorials/#stateless-applications) - [有状态应用](https://kubernetes.io/docs/tutorials/#stateful-applications) - [CI/CD 管道](https://kubernetes.io/docs/tutorials/#ci-cd-pipeline) - [管理 Kubernetes 集群](https://kubernetes.io/docs/tutorials/#clusters) - [服务](https://kubernetes.io/docs/tutorials/#services)
- 这是一系列精心编写和组织良好的文章。有时它们专注于在 DigitalOcean 上运行 Kubernetes,但您仍然会学到很多适用于任何其他基础设施的 Kubernetes 基础知识。一些值得注意的主题包括: - [Kubernetes 入门](https://www.digitalocean.com/community/tutorials/an-introduction-to-kubernetes) - [Kubernetes DNS 服务简介](https://www.digitalocean.com/community/tutorials/an-introduction-to-the-kubernetes-dns-service) - [Kubernetes 的软件包管理器 Helm 入门](https://www.digitalocean.com/community/tutorials/an-introduction-to-helm-the-package-manager-for-kubernetes) - [面向 Kubernetes 现代化应用程序](https://www.digitalocean.com/community/tutorials/modernizing-applications-for-kubernetes) - [为 Kubernetes 构建优化容器](https://www.digitalocean.com/community/tutorials/building-optimized-containers-for-kubernetes) - [Kubernetes 网络详解](https://www.digitalocean.com/community/tutorials/kubernetes-networking-under-the-hood) - [面向 Kubernetes 的应用程序架构](https://www.digitalocean.com/community/tutorials/architecting-applications-for-kubernetes) - [使用 Kubernetes 进行 CI/CD 的构建块](https://www.digitalocean.com/community/tutorials/webinar-series-building-blocks-for-doing-ci-cd-with-kubernetes) - [如何使用 Heptio Ark 在 DigitalOcean 上备份和恢复 Kubernetes 集群](https://www.digitalocean.com/community/tutorials/how-to-back-up-and-restore-a-kubernetes-cluster-on-digitalocean-using-heptio-ark) - [如何在 DigitalOcean Kubernetes 上设置带有 Cert-Manager 的 Nginx 入口](https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes) - [如何检查 Kubernetes 网络](https://www.digitalocean.com/community/tutorials/how-to-inspect-kubernetes-networking)
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。