模块 2 - 部署应用
难度: 初级 预计时间: 10 分钟
本场景的目标是帮助你使用 kubectl 在 Kubernetes 上部署你的第一个应用。你将学习 kubectl 命令行界面的基础知识以及如何与你的应用程序交互。
步骤 1 - kubectl 基础知识
在终端中输入 kubectl 以查看其用法。kubectl 命令的常见格式是:kubectl 操作 资源。这会对指定的资源(例如节点、容器)执行指定的操作(例如创建、描述)。你可以在命令后使用 --help
来获取有关可能参数的更多信息(kubectl get nodes --help
)。
通过运行 kubectl version
命令来检查 kubectl 是否配置为与你的集群通信
kubectl version
好的,kubectl 已安装,你可以看到客户端和服务器版本。
要查看集群中的节点,请运行 kubectl get nodes
命令
kubectl get nodes
在这里我们看到可用的节点(在我们的例子中是 1 个)。Kubernetes 将根据节点的可用资源选择在哪里部署我们的应用程序。
步骤 2 - 部署我们的应用
让我们使用 kubectl create deployment
命令在 Kubernetes 上部署我们的第一个应用程序。我们需要提供部署名称和应用程序映像位置(对于托管在 Docker Hub 之外的映像,请包括完整的存储库 URL)。
kubectl create deployment kubernetes-bootcamp --image=gcr.io/k8s-minikube/kubernetes-bootcamp:v1
太棒了!你刚刚通过创建部署来部署了你的第一个应用程序。这为你执行了一些操作
- 搜索了一个合适的节点,可以在该节点上运行应用程序的实例(我们只有一个可用节点)
- 计划在该节点上运行该应用程序
- 配置集群在需要时在新节点上重新调度该实例
要列出你的部署,请使用 get deployments
命令
kubectl get deployments
我们看到有一个部署正在运行你的应用程序的单个实例。该实例正在你的节点上的 Docker 容器内运行。
步骤 3 - 查看我们的应用
在 Kubernetes 内部运行的 Pod 在一个私有的、隔离的网络上运行。默认情况下,它们对于同一 Kubernetes 集群内的其他 Pod 和服务是可见的,但在该网络之外不可见。当我们使用 kubectl
时,我们是通过 API 端点进行交互来与我们的应用程序通信的。
我们将在模块 4 中介绍有关如何在 Kubernetes 集群外部公开你的应用程序的其他选项。
kubectl
命令可以创建一个代理,该代理将通信转发到集群范围内的私有网络。该代理可以通过按 control-C 来终止,并且在运行时不会显示任何输出。
我们将打开第二个终端窗口来运行代理。
echo -e "Starting Proxy. After starting it will not output a response. Please return to your original terminal window\n"; kubectl proxy
我们现在在主机(在线终端)和 Kubernetes 集群之间建立了连接。代理允许从这些终端直接访问 API。
你可以看到通过代理端点托管的所有这些 API。例如,我们可以使用 curl
命令直接通过 API 查询版本
curl http://localhost:8001/version
注意:代理是在新选项卡中运行的,最近的命令是在原始选项卡中执行的。代理仍在第二个选项卡中运行,这使得我们的 curl 命令可以使用 localhost:8001
。
如果端口 8001 不可访问,请确保上面启动的 kubectl proxy
正在运行。
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 http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME
为了使新的部署在不使用代理的情况下可访问,需要一个服务,这将在接下来的模块中解释。