使用 kubectl 创建 Deployment

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

目标

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

Kubernetes 部署

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

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

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

总结

  • Deployment
  • Kubectl

部署负责创建和更新应用程序的实例


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


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

创建部署时,您需要指定应用程序的容器镜像以及要运行的副本数量。您可以在以后通过更新部署来更改这些信息;训练营的模块 56 讨论了如何扩展和更新部署。

应用程序需要打包到支持的容器格式之一,以便在 Kubernetes 上部署

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

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

现在您已经了解了部署,让我们部署第一个应用程序!


kubectl 基础

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

这将在指定的 资源(例如创建, 描述删除)上执行指定的 操作(例如节点部署)。您可以在子命令后使用 --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

太棒了!您刚刚通过创建部署来部署第一个应用程序。这为您执行了一些操作

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

要列出您的部署,请使用 kubectl get deployments 命令

kubectl get deployments

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

查看应用程序

在 Kubernetes 内部运行的 Pod 运行在私有的隔离网络上。默认情况下,它们对同一 Kubernetes 集群内的其他 Pod 和服务可见,但对该网络外部不可见。当我们使用 kubectl 时,我们通过 API 端点进行交互以与我们的应用程序通信。

我们将在后面的 模块 4 中介绍如何将应用程序暴露在 Kubernetes 集群外部的其他选项。此外,作为基本教程,我们不会在这里详细解释什么是 Pod,这将在后面的主题中介绍。

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

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

kubectl proxy

现在,我们的主机(终端)与 Kubernetes 集群之间建立了连接。代理允许从这些终端直接访问 API。

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

curl https://127.0.0.1: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 Pod 的名称:$POD_NAME

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

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

为了使新的部署无需使用代理即可访问,需要一个服务,这将在 模块 4 中解释。

准备就绪后,请继续 查看 Pod 和节点

上次修改时间:2024 年 3 月 21 日下午 8:32 PST:显示部署介绍中的正确代理 URL。 (f69cbbde73)