Kubernetes Kubectl 基本命令及示例 (13)

作者 : 慕源网 本文共4343个字,预计阅读时间需要11分钟 发布时间: 2021-11-27 共147人阅读

本文是Kubernetes权威指南系列的一部分,你可以点击Kubernetes权威指南查看所有教程

Kubernetes Kubectl 基本命令及示例 (13)

Kubernetes Kubectl 简介

Kubernetes kubectl 为我们提供了一个命令行界面来与 Kubernetes 集群交互。它可以安装在任何机器或工作站上,以便我们可以远程管理我们的 Kubernetes 集群。我们可以使用来自同一台机器或工作站的“use-context”命令来管理多个集群。它也被称为“Kube 控制”。我们可以管理集群中的节点,例如排空节点进行维护,更新节点上的污点等。每当我们运行 kubectl 命令时,它都会在 $HOME/.kube 文件夹中查找 kubeconfig 文件。

Kubernetes Kubectl 的语法和参数

语法:

kubectl [command] [TYPE] [NAME] [flags]

参数:

让我们了解语法的每个组成部分:

  • command:它定义了我们想要对集群的任何对象或资源执行的操作或操作,如获取、描述、删除等。
  • type:它定义了我们想要执行操作的资源类型,如 pod、deployments、服务等。我们可以使用单数、复数或缩写形式,例如,要列出一个 pod,我们可以使用类型为 pod、pods 或abbreviated 。它也不区分大小写。
  • Name:它定义了我们要在哪个资源上执行操作,并且区分大小写,这意味着 POD1 和 pod1 是 Kubernetes 集群中的两种不同资源。

kubernetes Kubectl 示例

下面是给出的例子:

kubectl get pods
kubectl get pods nginx-6db489d4b7-hzvwx

Kubernetes Kubectl 基本命令及示例 (13)

 

说明:在上面的例子中,第一个命令列出了在默认命名空间下运行的所有 pod。要获得特定的 pod,我们需要给出资源的名称,这里的 pod 名称是“nginx-6db489d4b7-hzvwx”。如果我们想列出所有命名空间中的所有 pod,我们使用“–all-namespaces”标志如下:

kubectl get po --all-namespaces

Kubernetes Kubectl 基本命令及示例 (13)

 

Kubectl 有一个很好的文档,我们可以知道它拥有的所有命令,使用“–help”标志如下:

kubectl --help

Kubernetes Kubectl 基本命令及示例 (13)

 

Kubernetes Kubectl 基本命令及示例 (13)

Kubernetes Kubectl 基本命令及示例 (13)

如果我们看到上面的快照,我们了解到命令分为基本命令、部署命令、集群管理命令、故障排除命令等组,并且大多数命令是不言自明的。

Kubernetes Kubectl 基本命令及示例

让我们探索一些基本但必不可少的命令:

1.create

此命令可用于从文件(主要是 yaml 文件)或主要来自终端的 stdin 创建新资源。

语法:

kubectl create -f <file_name>

例子:

kubectl create -f my-nginx.yml

这是 my-nginx.yml 文件的代码:

apiVersion: v1
kind: Pod
metadata:
name: my-nginx
labels:
app: nginx
spec:
containers:
- name: my-nginx
image: nginx
port:
- containerPort: 80

Kubernetes Kubectl 基本命令及示例 (13)

说明:在上面的例子中,它创建了一个名为 my-nginx 的 pod。

2.get

我们使用“get”命令来了解任何资源的状态,如 Pod、Deployments、服务等。我们刚刚创建了一个 Pod,我们想知道 Pod 的状态,我们可以使用如下 get 命令: –

语法:

$kubectl get <resource_type>
$kubectl get <resource_type><name_of_the resource>

例子:

$kubectl get pods
$kubectl get pods my-nginx

Kubernetes Kubectl 基本命令及示例 (13)

说明:在上面的快照中,第一个命令用于列出在默认命名空间下运行的所有 pod。如果 Pod 在不同的命名空间下运行,我们还需要指定命名空间。第二个命令显示特定 pod 的状态。

3.expose

它用于将我们的deployment、Pod、副本集、服务和复制控制器公开为 Kubernetes 服务,以便从主机访问它。例如,我们已经创建了一个 nginx pod,现在想要从我们的主机访问它,我们需要使用如下所示的expose 命令创建一个服务:

语法:

$kubectl expose <resource_type><resource_name> --port=<source-port> --target-port <destination-port><service_name>

例子:

kubectl get svc
kubectl expose pod my-nginx --port=80 --target-port=80 --name=my-nginx-svc

Kubernetes Kubectl 基本命令及示例 (13)

说明:在上面的快照中,第一个命令用于列出可用的服务,我们可以看到只有一个服务。第二个命令用于公开新创建的“my-nginx”pod,源端口和目标端口相同,并给出名为“my-nginx-svc”的服务名称,但此处服务名称是可选的,如果我们不这样做提供服务名称 它将默认选择 pod 名称作为服务名称。您还可以通过更改服务名称多次公开同一个 pod。当我们第二次运行第一个命令时,我们可以看到一个名为“my-nginx-svc”的新服务现在可见,如果我们curl 该服务的 IP,我们可以从主机本身访问我们的 nginx pod。

注意: Pod 必须至少有一个标签,否则你会得到一个错误。

4.run

它用于运行集群中的任何镜像。当我们使用 ‘run’ 命令时,它默认创建一个部署并在该部署下运行一个 pod,默认情况下它将副本设置为 1。如果我们删除与该deployment 一起运行的 pod,deployment 将创建一个新的 pod 并且它将继续。如果我们必须删除在此deployment 下运行的 pod,我们需要删除deployment 。

语法:

$kubectl run <deployment_name> --image=<image_name>

例子:

kubectl run test-nginx --image=nginx
kubectl run --generator=run-pod/v1 test-nginx2 --image=nginx

Kubernetes Kubectl 基本命令及示例 (13)

说明:在上面的快照中,我们运行了一个 nginx 镜像,默认情况下,Kubernetes 使用 run 命令创建一deployment ,但它已被弃用。此命令在未来版本中可能不起作用。如果我们只需要使用 ‘run’ 命令创建一个 pod,我们需要使用 ‘–generator=run-pod/v1’ 选项或者使用 ‘create’ 命令从文件或标准输入创建 pod 或任何资源。

5.edit

它用于编辑集群中的任何现有资源。它会打开该资源的 yaml 文件。我们只需要对文件进行更改并保存即可。它将应用于资源。例如,如果我们想在我们正在运行的 ‘my-nginx’ pod 中进行更改,我们可以使用如下的 ‘edit’ 命令。

语法:

kubectl edit <resource_type><resource_name>

例子:

kubectl edit pod my-nginx

Kubernetes Kubectl 基本命令及示例 (13)

kubectl get pod my-nginx --show-labels

Kubernetes Kubectl 基本命令及示例 (13)

说明:在上面的快照中,我们编辑了 ‘my-nginx’ pod 并将环境标签从 ‘production’ 更改为 ‘test’。

6.describe

它用于了解任何资源,如 pod、deployment、服务等。它对于故障排除非常有用。例如,如果我们想更多地了解我们的 ‘my-nginx’ pod,因为我们使用 ‘get’ 命令获得的信息非常少。我们可以使用“describe”命令如下: –

语法:

$kubectl describe <resource_type><resource_name>

例子:

$kubectl describe pod my-nginx

Kubernetes Kubectl 基本命令及示例 (13)

Kubernetes Kubectl 基本命令及示例 (13)

Kubernetes Kubectl 基本命令及示例 (13)

说明:在上面的快照中,我们获得了“my-nginx”pod 的所有详细信息,从名称到容器、挂载、网络、事件等。事件对于解决 pod 中的任何问题非常有用。

7.scale

此命令用于根据我们的要求扩展我们的deployment、replica 或replica controller。例如,我们有一个名为“test-nginx”的部署,运行 1 个副本,并且想要扩展deployment以运行该 Pod 的 3 个副本,我们可以使用 scale 命令,如下所示:

语法:

$kubectl scale <resource_type><resource_name> --replicas=<replicas_count>

例子:

kubectl get deploy
kubectl scale deployment test-nginx --replicas=3
kubectl get pods

Kubernetes Kubectl 基本命令及示例 (13)

说明:在上面的快照中,我们只有一个deployment 副本,将副本数从 1 增加到 3 后,我们可以看到现在有 3 个 pod 正在运行。

8.drain

它用于排空节点以进行维护活动,就好像该节点上有任何硬件故障一样,我们不想在该节点上安排 Pod,直到对其执行维护。

语法:

$kubectl drain <node_name>

例子:

kubectl get nodes
kubectl drain node01 --ignore-daemonsets

Kubernetes Kubectl 基本命令及示例 (13)说明:在上面的快照中,我们有 2 个节点集群,1 个主节点和 1 个工作节点。我们可以看到在排空后节点状态已从“Ready”更改为“Ready,SchedulingDisabled”,这意味着 Kubernetes 控制器将在其上调度任何 Pod。现有的 pod 将迁移到集群中的其他可用节点。这里我们只有一个工作节点,所以我们需要使用“–ignore-daemonsets”选项来排空节点。

9.taint

它用于污染节点。节点亲和性用于吸引 pod 在特定节点上进行调度,而污点用于排斥一组 pod,使其不在节点上进行调度。它用于专用节点,如专用于特定用户组的节点,或者节点具有特殊硬件(如带有 GPU 的节点)或根据污点逐出节点。它使用具有污点效果 NoSchedule 的键和值。在这种情况下,除了具有容忍度的 Pod 之外,不会在这些节点上调度任何 Pod。

语法:

$kubectl taint nodes <node_name> key=value:NoSchedule

例子:

kubectl taint nodes node01 key=value:NoSchedule

Kubernetes Kubectl 基本命令及示例 (13)

10.version

它用于检查 Kubernetes 集群的客户端和服务器版本。

例子:

kubectl version

Kubernetes Kubectl 基本命令及示例 (13)

结论

Kubectl 有多个命令,其中一些是不言自明的,其中一些不用于 Kubernetes 集群的日常管理。在这里,我们讨论了用于管理和排除 Kubernetes 集群故障的最重要和日常使用的命令。


慕源网 » Kubernetes Kubectl 基本命令及示例 (13)

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录