高级主题
<!– After checking out the current page and its linked sections, you should have a better understanding of the following:注意: 本页假设您熟悉核心 Kubernetes 概念,并且可以轻松部署自己的应用程序。如果没有,您应首先查看 中级应用程序开发人员主题。
- Advanced features that you can leverage in your application
- The various ways of extending the Kubernetes API –> 在检测完当前页和它的链接部分后,您应该对以下内容有更好的了解:
- 您可以在应用程序中使用的高级功能
- 扩展 Kubernetes API 的各种方法
用高级功能部署应用程序
现在您知道了 Kubernetes 提供的一组 API 对象。理解DaemonSet确保 Pod 的副本在集群中的一组节点上运行。 和DeploymentDeployment 是管理应用副本的 API 对象。 之间的差异通常足以支持应用程序的部署。话虽如此,也值得熟悉 Kubernetes 鲜为人知的功能。当应用于正确的用例时,它们可以非常强大。
容器级功能
就像你知道的那样,将整个应用程序(例如,容器化的 Rails 应用程序,MySQL 数据库和所有应用程序)迁移到单个 Pod 中是一种反模式。话虽如此,有一些非常有用的模式超出了容器和它的 pod 之间 1:1 的对应关系。
- Init 容器:*Init 容器*在 Pod 的任何应用程序容器之前运行。阅读更多,请参阅nginx 服务器示例,和了解如何调试这些容器。
Pod 配置
通常,您使用labels用来为对象设置可标识的属性标记;这些标记对用户而言是有意义且重要的。 和annotations注解是以键值对的形式给资源对象附加随机的无法标识的元数据。 将元数据附加到您的资源。要将数据注入到您的资源,您最好创建ConfigMapsConfigMap 是一种 API 对象,用来将非机密性的数据保存到健值对中。使用时可以用作环境变量、命令行参数或者存储卷中的配置文件。 (对于非机密数据)或SecretsSecret 用于存储敏感信息,如密码、OAuth 令牌和 SSH 密钥。 (对于机密数据)。
以下是一些其他鲜为人知的配置资源的方法:
- 污点和容忍度 -这些为节点“吸引“或”击退“你的 Pod 提供了一种方法。通常在应用程序需要部署在特殊硬件上时使用,比如用于科学计算的 GPU。阅读更多。 <!–
- Downward API - This allows your containers to consume information about themselves or the cluster, without being overly coupled to the Kubernetes API server. This can be achieved with environment variables or DownwardAPIVolumeFiles. –>
- 下载 API -这允许您的容器使用有关自身或集群的信息,而不会过度耦合到 Kubernetes API 服务器。这个可以通过环境变量或者向下的 API 卷文件来实现。 <!–
- Pod Presets - Normally, to mount runtime requirements (such as environmental variables, ConfigMaps, and Secrets) into a resource, you specify them in the resource’s configuration file. PodPresets allow you to dynamically inject these requirements instead, when the resource is created. For instance, this allows team A to mount any number of new Secrets into the resources created by teams B and C, without requiring action from B and C. See an example. –>
- Pod 预设 -通常,将运行时的要求安装到资源中(比如环境变量、ConfigMaps、和 Secrets),请在资源的配置文件中指定它们。Pod 预设值允许您在创建资源时动态地注入这些需求。例如,这允许团队 A 将任意数量的新 Secrets 安装到团队 B 和 C 创建的资源中,而无需 B 和 C 的命令操作。看一个例子。
-
其他 API 对象
* Horizontal Pod Autoscaler (HPA)Pod 水平自动扩缩器(Horizontal Pod Autoscaler)是一种 API 资源,它根据目标 CPU 利用率或自定义度量目标扩缩 Pod 副本的数量。 - 这些资源是在 CPU 使用或其他自定义指标峰值时自动执行缩放应用程序的好方法。 参看一个例子以了解如何设置 HPA。 * 联合集群对象 - 如果您在多个 Kubernetes 集群上使用*federation*运行应用程序,您需要部署标准 Kubernetes API 对象的联合版本。有关参考,请查看设置指南联邦 ConfigMaps and 联邦 Deployments。注意: 在设置以下资源之前,请检查您的组织是否负责集群 operators配置、控制、监控集群的人。 。
扩展 Kunernetes API
Kubernetes 在设计时考虑了可扩展性。如果以上提到的 API 资源和功能不足以满足您的需求,可以通过各种方法自定义其行为,而无需修改核心 Kubernetes 代码。
了解 Kubernetes 的默认行为
在进行任何自定义之前,了解 Kubernetes API 对象背后的一般抽象非常重要。尽管 Deployments 和 Secrets 可能看起来非常不同,以下概念适用于any 对象:
- Kubernetes 对象是一种存储集群结构化数据的方法。 对于 Deployments,此数据表示所需的状态(例如“应运行多少个副本?”),但它也可以是常规元数据(例如数据库凭据)。 <!–
- Kubernetes objects are modified via the Kubernetes APIKubernetes API 是通过 RESTful 接口提供 Kubernetes 功能服务并负责集群状态存储的应用程序。 . –>
- Kubernetes 对象通过Kubernetes APIKubernetes API 是通过 RESTful 接口提供 Kubernetes 功能服务并负责集群状态存储的应用程序。
进行修改。
换句话说,您可以对特定的资源路径(例如
<api-server-url>/api/v1/namespaces/default/deployments
)发出GET
和POST
请求来读写相应的对象类型。 <!– - By leveraging the Controller pattern, Kubernetes objects can be used to enforce desired state. For simplicity, you can think of the Controller pattern as the following continuous loop: –>
- 通过利用控制器模式,可以使用 Kubernetes 对象来强制执行所需的状态。为简单起见,您可以将 Controller 模式视为以下连续循环:
这些状态来自 Kubernetes API。
<!–注意: 不是所有 Kubernetes 对象都需要一个 Controller。尽管 Deployment 会触发集群进行状态更改,但 ConfigMap 仅作为存储使用。
Create Custom Resources
–>
创建自定义资源
基于以上想法,您可以定义一个新的自定义资源作为合理的部署。例如,如果CronJobs
没有提供您需要的所有功能,您可能希望为定期备份定义一个Backup
对象。
设置自定义资源有两种主要方式: 1.自定义资源定义 (CRDs) - 此方法需要的实施工作量最少。请参阅一个例子。 2.API 聚合 - 此方法需要一些预配置在你实际上设置一个单独的扩展的 API 服务器之前。
请注意,与标准的 Kubernetes 对象不同,后者依赖于内置的kube-controller-manager
,您需要编写并运行自己的自定义控制器。
您可能还会发现以下信息有用: * 如何知道自定义资源是否适合您的用例 * 如何决定 CRD 和 API 聚合
服务目录
如果您想使用或提供完整的服务(而不是单个资源),Service Catalog服务目录是一种扩展 API,它能让 Kubernetes 集群中运行的应用易于使用外部托管的软件服务,例如云供应商提供的数据仓库服务。 An extension API that enables applications running in Kubernetes clusters to easily use external managed software offerings, such as a datastore service offered by a cloud provider. 提供规格来这样做。这些服务使用Service Brokers由第三方提供并维护的一组托管服务的访问端点。 注册(请参阅一些例子)。
如果您没有cluster operator配置、控制、监控集群的人。 来管理服务目录的安装,您可以使用Helm 或安装程序二进制。
探索其他资源
参考
以下主题对于构建更复杂的应用程序也很有用:
- Kubernetes 中的其他可扩展性点 - 概述您可以在何处进入 Kubernetes 架构。
- Kubernetes 客户库 - 用于构建需要与 Kubernetes API 进行大量交互的应用程序。
接下来是什么
恭喜您完成应用程序开发者用户之旅!您已经掌握了 Kubernetes 提供的大多数功能。现在该做什么?
- 如果您想推荐新功能或者了解 Kubernentes 应用程序开发的最新进展,请考虑加入SIG (特别兴趣小组)共同管理大范畴 Kubernetes 开源项目中某组件或方面的一组社区成员。 ,例如SIG Apps。
- 如果您有兴趣了解 Kubernetes 的内部工作(例如网络),请考虑查看Cluster Operator journey。
反馈
此页是否对您有帮助?
感谢反馈。如果您有一个关于如何使用 Kubernetes 的特定的、需要答案的问题,可以访问 Stack Overflow. 在 GitHub 仓库上登记新的问题 报告问题 或者 提出改进建议.