apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: mcr.microsoft.com/oss/nginx/nginx:1.15.2-alpine
ports:
- containerPort: 80
resources:
requests:
cpu: 250m
memory: 64Mi
limits:
cpu: 500m
memory: 256Mi
YAML 清单文件中的部署规范明细如下:
有关详细信息,请参阅 Kubernetes 部署。
使用 Helm 进行包管理
Helm 通常用于管理 Kubernetes 中的应用程序。 可生成和使用包含应用程序代码打包版本和 Kubernetes YAML 清单的现有公共 Helm 图表来部署资源。 Helm 图表可存储在本地,也可存储在远程存储库中,例如 Azure 容器注册表 Helm 图表存储库。
要使用 Helm,请在计算机上安装 Helm 客户端,或使用 Azure Cloud Shell 中的 Helm 客户端。 搜索或创建 Helm 图表,然后将其安装到 Kubernetes 群集。 有关详细信息,请参阅在 AKS 中使用 Helm 安装现有应用程序。
StatefulSet 和 DaemonSet
借助 Kubernetes 计划程序,部署控制器能够在具有可用资源的任何可用节点上运行副本。 虽然此方法对无状态应用程序来说可能已经足够,但部署控制器并不适合需要下列项的应用程序:
永久性命名约定或存储。
群集中每个特选节点上存在的副本。
不同,可通过下面两种 Kubernetes 资源管理这类应用程序:
StatefulSet 维护超出单个 Pod 生命周期的应用程序的状态(如存储)。
DaemonSet 确保在 Kubernetes 启动进程早期每个节点上都有正在运行的实例。
StatefulSet
现代应用程序开发通常以无状态应用程序为目标。 对于有状态应用程序(例如包含数据库组件的应用程序),可使用 StatefulSets。 与部署类似,StatefulSet 创建和管理至少一个相同的 Pod。 StatefulSet 中的副本按照正常有序的方法来部署、缩放、升级和终止。 以副本形式保存的命名约定、网络名称和存储用 StatefulSet 重新计划。
使用 kind: StatefulSet
按 YAML 格式定义应用程序。 从这里,由 StatefulSet 控制器处理所需副本的部署和管理。 数据会写入到由 Azure 托管磁盘或 Azure 文件提供的永久性存储。 如果使用 StatefulSet,甚至在删除 StatefulSet 时,基础持久性存储仍然保持不变。
有关详细信息,请参阅 Kubernetes StatefulSet。
计划 StatefulSet 中的副本,并在 AKS 群集中的任何可用节点上运行这些副本。 若要确保集中至少有一个 Pod 在节点上运行,请改用 DaemonSet。
DaemonSet
对于特定的日志集合或监视,可能需要在所有或选定的节点上运行 Pod。 可以在一个或多个相同的 Pod 上使用 DaemonSet 部署,但 DaemonSet 控制器可确保指定的每个节点都运行该 Pod 的一个实例。
在默认的 Kubernetes 计划程序启动之前,DaemonSet 控制器可以在群集启动进程的早期计划节点上的 Pod。 此功能可确保在计划 Deployment 或 StatefulSet 中的传统 Pod 之前启动 DaemonSet 中的 Pod。
与 StatefulSet 一样,系统使用 kind: DaemonSet
将 DaemonSet 定义为 YAML 定义的一部分。
有关详细信息,请参阅 Kubernetes DaemonSet。
如果使用虚拟节点附加产品,DaemonSet 将不会在虚拟节点上创建 Pod。
Kubernetes 资源(例如 Pod 和部署)按逻辑分组到一个命名空间中,以划分 AKS 群集并限制创建、查看或管理资源的权限。 例如,可创建命名空间来分隔业务组。 用户只能与分配的命名空间内的资源进行交互。
创建 AKS 群集时,以下命名空间可用:
default
不提供任何命名空间时,默认在此命名空间中创建 Pod 和部署。 在小型环境中,可以将应用程序直接部署到默认命名空间,而无需创建其他逻辑分隔。 与 Kubernetes API(例如 kubectl get pods
)交互时,如果未指定命名空间,则使用默认值。
kube-system
此命名空间中有核心资源,例如 DNS 和代理等网络功能或 Kubernetes 仪表板。 通常不会将应用程序部署到此命名空间中。
kube-public
通常不使用此命名空间,但可用于让资源在整个群集中可见,并可供任何用户查看。
有关详细信息,请参阅 Kubernetes 命名空间。
本文涵盖了一些核心 Kubernetes 组件以及如何将它们应用于 AKS 群集的内容。 有关核心 Kubernetes 和 AKS 概念的详细信息,请参阅以下文章:
Kubernetes/AKS 访问和标识
Kubernetes/AKS 安全性
Kubernetes/AKS 虚拟网络
Kubernetes/AKS 存储
Kubernetes/AKS 规模