使用 kubectl 创建 Deployment

目标

  • 了解应用程序 Deployment。
  • 使用 kubectl 在 Kubernetes 上部署你的第一个应用程序。

Kubernetes Deployments

一旦你拥有一个 正在运行的 Kubernetes 集群,你就可以在其上部署容器化应用程序。 为此,你创建一个 Kubernetes Deployment。 Deployment 指示 Kubernetes 如何创建和更新你的应用程序的实例。 创建 Deployment 后,Kubernetes 控制平面会将 Deployment 中包含的应用程序实例调度到集群中的各个节点上运行。

创建应用程序实例后,Kubernetes Deployment 控制器会持续监控这些实例。 如果托管实例的节点发生故障或被删除,Deployment 控制器会在集群中的另一个节点上用另一个实例替换该实例。 这提供了一种自我修复机制来解决机器故障或维护问题。

在预编排的世界中,安装脚本通常用于启动应用程序,但它们不允许从机器故障中恢复。 通过创建应用程序实例并在节点上保持其运行,Kubernetes Deployments 提供了一种根本不同的应用程序管理方法。

在 Kubernetes 上部署你的第一个应用程序

你可以使用 Kubernetes 命令行界面 kubectl 创建和管理 Deployment。 kubectl 使用 Kubernetes API 与集群交互。 在本模块中,你将学习创建在 Kubernetes 集群上运行应用程序的 Deployment 所需的最常见的 kubectl 命令。

创建 Deployment 时,你需要指定应用程序的容器镜像以及要运行的副本数。 稍后可以通过更新 Deployment 来更改这些信息;引导训练的 模块 5模块 6 讨论了如何缩放和更新 Deployment。

对于你的第一个 Deployment,你将使用打包在 Docker 容器中的 hello-node 应用程序,该应用程序使用 NGINX 来回显所有请求。 (如果你还没有尝试创建 hello-node 应用程序并使用容器部署它,可以先按照 Hello Minikube 教程 中的说明进行操作。)

你还需要安装 kubectl。 如果需要安装它,请访问 安装工具

既然你已经知道什么是 Deployments,让我们部署我们的第一个应用程序吧!

kubectl 基础知识

kubectl 命令的常用格式是:kubectl action resource

这将在指定的 resource(例如 nodedeployment)上执行指定的 action(例如 createdescribedelete)。 你可以使用 --help 在子命令后获取有关可能参数的更多信息(例如:kubectl get nodes --help)。

通过运行 kubectl version 命令检查 kubectl 是否配置为与你的集群通信。

检查 kubectl 是否已安装,并且你可以看到客户端和服务器版本。

要查看集群中的节点,请运行 kubectl get nodes 命令。

你将看到可用的节点。 稍后,Kubernetes 将根据节点可用资源选择在哪里部署我们的应用程序。

部署应用程序

让我们使用 kubectl create deployment 命令在 Kubernetes 上部署我们的第一个应用程序。 我们需要提供部署名称和应用程序镜像位置(包括托管在 Docker Hub 之外的镜像的完整仓库 URL)。

kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1

很好! 你刚刚通过创建 Deployment 部署了你的第一个应用程序。 这为你执行了以下几件事

  • 搜索了一个合适的节点,可以在该节点上运行应用程序的实例(我们只有一个可用的节点)
  • 将应用程序调度到该节点上运行
  • 配置集群,以便在需要时将实例重新调度到另一个节点上

要列出你的 Deployment,请使用 kubectl get deployments 命令

kubectl get deployments

我们看到有一个 Deployment 正在运行你的应用程序的单个实例。 该实例正在你的节点上的容器内运行。

查看应用程序

Pod 在 Kubernetes 内部运行,运行在一个私有、隔离的网络中。 默认情况下,它们可以从同一 Kubernetes 集群中的其他 Pod 和服务看到,但无法从该网络外部看到。 当我们使用 kubectl 时,我们正在通过 API 端点与我们的应用程序通信。

我们将在 模块 4 中稍后介绍其他将你的应用程序暴露在 Kubernetes 集群外部的方法。 另外,作为基本教程,我们在这里不会详细解释什么是 Pods,它将在后面的主题中介绍。

kubectl proxy 命令可以创建一个代理,该代理会将通信转发到集群范围内的私有网络。 可以通过按 control-C 终止代理,并且在运行期间不会显示任何输出。

你需要打开第二个终端窗口来运行代理。

kubectl proxy

现在我们有一个主机(终端)和 Kubernetes 集群之间的连接。 代理允许通过这些终端直接访问 API。

你可以通过代理端点看到所有这些 API。 例如,我们可以使用 curl 命令直接通过 API 查询版本

curl https://:8001/version

API 服务器将根据 Pod 名称自动为每个 Pod 创建一个端点,该端点也可以通过代理访问。

首先我们需要获取 Pod 名称,并将其存储在环境变量 POD_NAME 中。

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME

你可以通过代理的 API 访问 Pod,方法是运行

curl https://:8001/api/v1/namespaces/default/pods/$POD_NAME:8080/proxy/

为了使新的 Deployment 能够访问,而无需使用代理,需要一个 Service,将在 模块 4 中进行说明。

接下来

最后修改时间:2025 年 6 月 25 日下午 2:14 PST:修复 deploy-intro.md 中缺失的闭合圆括号 (#51302) (9a7ec41c24)