前言:

kubectl是Kubernetes命令行工具,用于与Kubernetes集群进行交互。它允许用户执行各种操作,包括管理容器、部署应用程序、查看集群状态等。kubectl是操作k8s集群的命令行工具,安装在k8s的master节点,kubectl在$HOME/.kube目录中查找一个名为config的文件, 你可以通过设置Kubeconfig环境变量或设置–kubeconfig来指定其他的kubeconfig文件。可参考官方文档:https://kubernetes.io/docs/reference/kubectl/kubectl/

kubectl语法

kubectl语法格式如下:

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

command:指定要对一个或多个资源执行的操作,例如create、get、describe、delete等。

type:指定资源类型。资源类型不区分大小写,可以指定单数、复数或缩写形式。例如pod、svc

NAME:指定资源的名称。名称区分大小写。如果省略名称,则显示所有资源的详细信息:kubectl get pods。

flags: 指定可选的参数。例如,可以使用-s或-server参数指定 Kubernetes API服务器的地址和端口。

一、在对多个资源执行操作时,可以按类型、名称、一个或者多个文件指定每个资源

1.1、按类型和名称指定资源:

要对所有类型相同的资源进行分组,请执行以下操作:TYPE1 name1 name2 name。

 例:kubectl get pod example-pod1 example-pod2

分别指定多个资源类型:TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>。

 例:kubectl get pod/example-pod1 deployment/example-rc1

1.2、用一个或多个文件指定资源:-f file1 -f file2 -f file (yaml文件)

 例:kubectl get pod -f ./pod.yaml

二、kubectl操作相关的命令和语法

2.1、annotate

   语法格式:
    kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]

添加或更新一个或多个资源的注释。

   例如:kubectl describe pod kube-flannel-ds-6wh2p -n kube-flannel

查看flannel查看的信息Annotations: <none>

   修改:kubectl annotate pod kube-flannel-ds-6wh2p description="This is a node01 flannel" -n kube-flannel

再使用kubectl describe pod kube-flannel-ds-6wh2p -n kube-flannel查看资源信息

   Annotations:          description: This is a node01 flannel

2.2、api-versions

命令用于查看 Kubernetes API Server 支持的 API 版本。它会列出所有已安装的 API 组及其版本。

   [root@master .kube]# kubectl api-versions
   admissionregistration.k8s.io/v1
   apiextensions.k8s.io/v1
   apiregistration.k8s.io/v1
   ...
   rbac.authorization.k8s.io/v1
   scheduling.k8s.io/v1
   storage.k8s.io/v1
   v1

yaml文件中应用:

apiVersion: v1
//yaml文件中的apivision
kind: Pod
metadata:
  name: poststart-pod
  namespace: default
spec:
  containers:
  - name: poststart-container
    image: nginx
    imagePullPolicy: IfNotPresent
    lifecycle:
      postStart:
        exec:
          command: ["/bin/bash","-c","echo home >> /usr/share/nginx/html/index.html"]
    ports:
    - name: http
      containerPort: 80

2.3、apply

apply是kubectl命令的一个子命令,用于将配置文件中定义的资源应用到 Kubernetes 集群中。它可以用来创建、更新或删除资源。

  例:kubectl apply -f deployment.yaml

2.4、autoscale

autoscale是Kubernetes的一种特性,用于自动调整部署的副本数量,以满足应用程序的负载需求。通过自动扩展,Kubernetes能够根据配置的指标自动增加或减少 Pod 的副本数量,以保持应用程序的稳定性和可用性。

  语法格式:kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]

1、目标资源:指定要自动扩展的Deployment、ReplicaSet或者StatefulSet的名称。

2、目标CPU利用率或者其他指标HPA使用Metrics Server收集指标,并根据这些指标自动调整Pod的副本数量。

3、最小和最大副本数:指定在自动扩展过程中允许的最小和最大副本数量。

2.5、cluster-info

cluster-info是kubectl命令的一部分,用于获Kubernetes集群中的主服务器和服务的端点信息,对于连接到Kubernetes集群、管理和监控集群以及进行故障排除都非常有用

  语法格式:kubectl cluster-info [flags]

2.6、config

kubectl config 命令用于管理 Kubernetes 配置文件,允许您管理多个 Kubernetes 集群、用户和上下文,修改kubeconfig文件。

  语法格式:kubectl config SUBCOMMAND [flags]

2.7、delete

从文件、标准输入或指定标签选择器、名称、资源选择器或资源中删除资源。

 语法格式:kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]

2.8、describe

用于显示 Kubernetes 资源的详细信息。

 语法格式:kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]

2.9、edit

edit是kubectl的一个子命令,用于编辑资源的配置。使用edit命令可以在默认编辑器中打开指定资源的配置文件,并允许您对其进行修改。

 语法格式:kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]

2.10、exec

exec是kubectl的一个子命令,用于在容器内执行命令或进入容器。

 语法格式:kubectl exec POD-name [-c CONTAINER-name] [-i] [-t] [flags] [-- COMMAND [args...]]

exec命令中-c参数指定进入Pod中的某个容器,不加-c默认进入第一个容器。

2.11、explain(重要)

获取多种资源的文档。例如 pod, node, service 等,相当于帮助命令,可以告诉我们怎么创建资源。

 语法格式:kubectl explain RESOURCE_NAME
 例如:[root@master .kube]# kubectl explain pod.spec
 KIND:       Pod
 VERSION:    v1

 FIELD: spec <PodSpec>

 DESCRIPTION:
     Specification of the desired behavior of the pod. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
     PodSpec is a description of a pod.

FIELDS:
     activeDeadlineSeconds	<integer>
     Optional duration in seconds the pod may be active on the node relative to
     StartTime before the system will actively try to mark it failed and kill
...

containers	<[]Container> -required-
    List of containers belonging to the pod. Containers cannot currently be
    added or removed. There must be at least one container in a Pod. Cannot be
    updated.

在书写yaml文件时候需要严谨的缩进格式,这个命令提供了在书写yaml文件时需要关键字段解释。

2.12、expose

expose命令用于创建一个新的Kubernetes服务,并将其公开到集群内部或外部。

 语法格式:kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags]

 例:kubectl expose deployment nginx-deployment --port=80 --target-port=8080 --name=nginx-service

2.13、get

get命令用于获取Kubernetes集群中的资源对象的详细信息。

 语法格式:kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]

2.14、label

label命令,它用于为Kubernetes资源对象添加或修改标签。

 语法格式:kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]

2.15、logs

logs用于查询Pod日志

 语法格式:kubectl logs POD [-c CONTAINER] [--follow] [flags]

2.16、patch

patch是一种用于部分更新资源的操作。使用kubectl patch命令可以修改Kubernetes中的资源的部分属性,而不必重新提交整个资源对象。

 语法格式:kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]
 例: kubectl patch deployment my-deployment -p '{"spec":{"replicas":3}}'

2.17、port-forward(重要)

port-forward命令用于将本地端口与Kubernetes Pod之间建立端口转发,从而可以直接访问运行在Pod内部的服务。这个命令非常有用,特别是在调试和测试时。

 语法格式:kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]
 例如:要将名为 my-pod 的 Pod 的端口 8080 转发到本地的端口 8888,可以使用以下命令
    kubectl port-forward my-pod 8888:8080

2.18、proxy

kubectl proxy命令用于创建一个代理服务器,允许通过本地主机访问Kubernetes集群中的AP 服务器。通过该代理服务器,您可以在本地访问 Kubernetes API,从而执行一些操作,如查看集群状态、调试应用程序等。

 语法格式:kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]
 例如,要启动代理服务器,可以使用以下命令:kubectl proxy

默认情况下,代理服务器将在本地主机的8001端口启动。您可以通过访问 http://localhost:8001 来查看 Kubernetes API服务器的信息。通过该代理服务器,您可以执行诸如查看Pod、Service、Deployment 等资源的操作。

2.19、replace

kubectl replace命令用于替换现有资源的配置。它将覆盖现有资源的所有字段,并将其替换为新的配置。如果资源不存在,则会创建新资源。

 语法格式:kubectl replace -f FILENAM

2.20、run

kubectl run命令用于创建新的Deployment、Pod 或 Job 资源。它可以根据提供的参数自动生成相应的资源配置,并将其提交到 Kubernetes集群中。

 语法格式:kubectl run NAME --image=image [--env=“key=value”] [--port=port] [--dry-run=server | client | none] [--overrides=inline-json] [flags]

2.21、scale

kubectl scale命令用于动态调整 Deployment、ReplicaSet 或 StatefulSet 的副本数量。

 语法格式:kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]

–replicas=NEW_REPLICAS_COUNT 指定新的副本数量。

FILENAME 指定要扩展的资源的配置文件。

TYPE 指定要扩展的资源类型,如 Deployment、ReplicaSet 或 StatefulSet。

NAME 指定要扩展的资源的名称。

 例如:要将名为 my-deployment 的 Deployment 的副本数量扩展为 3,可以使用以下命令
      kubectl scale --replicas=3 deployment/my-deployment

三、资源类型

表列出所有受支持的资源类型及其缩写别名:

 kubectl api-resources

四、输出选项

kubectl命令的默认输出格式是人类可读的明文格式,若要以特定格式向终端窗口输出详细信息,可以将-o或—out参数添加到受支持的kubectl命令中

在这里插入图片描述

五、排序列表对象

要将对象排序后输出到终端窗口,可以将–sort-by参数添加到支持的kubectl命令。通过使用–sort-by参数指定任何数字或字符串字段来对 对象进行排序。要指定字段,请使用jsonpath表达式。

语法:
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>

要打印按名称排序的pod列表,请运行:

例:kubectl get pods -n kube-system --sort-by=.metadata.name
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐