实战 Kubectl 创建 Deployment 部署应用

Posted CSDN云计算

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实战 Kubectl 创建 Deployment 部署应用相关的知识,希望对你有一定的参考价值。

作者 | 洲的学习笔记

来源 | CSDN博客

本篇文章主要是实战 Kubectl 创建 Deployment 部署应用。

通过本期文章:

我们将学习创建在 Kubernetes 集群上运行应用程序的 Deployment 所需的最常见的 Kubectl 命令。

用 Kubectl 创建 Deployment

当运行 Kubernetes 集群,就可以在其上部署容器化应用程序。

此时,需要我们创建 Kubernetes Deployment 配置。

  • Deployment 指挥 Kubernetes 如何创建和更新应用程序的实例。创建 Deployment 后,Kubernetes master 将应用程序实例调度到集群中的各个节点上。

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

在没有 Kubernetes 这种编排系统之前,安装脚本通常用于启动应用程序,但它们不允许从机器故障中恢复。通过创建应用程序实例并使它们在节点之间运行, Kubernetes Deployments 提供了一种与众不同的应用程序管理方法。

1、部署第一个在K8s上的应用程序

接下来将使用 Kubernetes 命令行界面 Kubectl 创建和管理 Deployment。Kubectl 使用 Kubernetes API 与集群进行交互。将学习创建在 Kubernetes 集群上运行应用程序的 Deployment 所需的最常见的 Kubectl 命令。

实战部署

1、查看Kubectl配置

Kubectl命令的常见格式是:Kubectl action resource。这将对指定的资源(如节点、容器)执行指定的操作(如创建、描述)。我们也可以在命令之后使用——help来获得关于可能参数的额外信息(kubectl get nodes——help)。

通过运行kubectl version命令,检查kubectl是否被配置为与集群通信:

$ kubectl version
Client Version: version.InfoMajor:"1", Minor:"20", GitVersion:"v1.20.4", GitCommit:"e87da0bd6e03ec3fea7933c4b5263d151aafd07c", GitTreeState:"clean", BuildDate:"2021-02-18T16:12:00Z", GoVersion:"go1.15.8", Compiler:"gc", Platform:"linux/amd64"
Server Version: version.InfoMajor:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:20:00Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"

通过上述代码,可以看到Kubectl已经安装,可以看到客户端和服务器版本。

2、查询集群中节点信息

接下来我们需要查询集群中的节点信息,使用Kubectl get nodes命令。

$ kubectl get nodes
NAME       STATUS   ROLES                  AGE     VERSION
minikube   Ready    control-plane,master   3m44s   v1.20.2
$

通过上述的命令可以看到可用的节点。Kubernetes将根据Node可用资源选择部署我们的应用程序的位置。

3、部署程序应用

现在需要使用Kubectl创建部署命令在Kubernetes上部署我们的第一个应用程序。我们需要提供部署名称和应用程序映像位置(包括Docker中心之外托管的映像的完整存储库url)。命令如下:

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

上一个命令为我们实现了:

  • 搜索可以运行应用程序实例的合适节点(本次实验环境只有1个可用节点)。

  • 计划应用程序在该节点上运行。

  • 配置集群在需要时在新节点上重新计划实例。

现在要列出部署,使用kubectl get deployments部署命令:

$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           80s

可以看到有一个部署运行着你的应用程序的单个实例。这个实例运行在节点上的Docker容器中。

4、查看部署的程序

Kubernetes内部运行的Pods是在一个私有的、孤立的网络上运行的。默认情况下,它们对同一个kubernetes集群内的其他pods和服务是可见的,但在该网络之外是不可见的。当使用Kubectl时,通过一个API端点与应用程序进行交互。

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

现在将打开第二个终端窗口来运行代理。

echo -e "\\n\\n\\n\\e[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tab\\n";

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

可以看到通过代理端点托管的所有api。比如,可以使用curl命令curl http://localhost:8001/version直接通过API查询版本:

$ curl http://localhost:8001/version

"major": "1",
"minor": "20",
"gitVersion": "v1.20.2",
"gitCommit": "faecb196815e248d3ecfb03c680a4507229c2a56",
"gitTreeState": "clean",
"buildDate": "2021-01-13T13:20:00Z",
"goVersion": "go1.15.5",
"compiler": "gc",
"platform": "linux/amd64"
$

需要注意的是,需要检查终端顶部。代理在一个新选项卡(终端2)中运行,最近的命令在原始选项卡(终端1)中执行。代理仍然在第二个选项卡中运行,这允许curl命令使用localhost:8001工作。

如果无法访问端口8001,请确保上面启动的kubectl代理正在运行。

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

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

使用:**export POD_NAME=$(kubectl get pods -o go-template --template ‘range .items.metadata.name“\\n”end’)**命令

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

可以通过运行下面的API来访问Pod:

curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/

为了在不使用代理的情况下访问新部署,需要一个服务,这一点我们将在下一篇文章中进行讲解。

总结

通过本篇文章,我们已经大致了解到了如何在实战中Kubectl创建Deployment部署应用。也学习熟悉了创建在 Kubernetes 集群上运行应用程序的 Deployment 所需的最常见的 Kubectl 命令。

往期推荐

Redis 内存优化神技,小内存保存大数据

使用 nginx 轻松管理 kubernetes 资源文件

Redis 内存满了怎么办?这样置才正确!

中间表是如何被消灭的?

点分享

点收藏

点点赞

点在看

以上是关于实战 Kubectl 创建 Deployment 部署应用的主要内容,如果未能解决你的问题,请参考以下文章

Deployment的管理与使用(6)

10,kubectl命令管理工具

k8s 实操部署应用

K8S 使用 Deployment 运行一个无状态应用:Nginx

k8s实战之理解helm

k8s实战之理解helm