服务器之家:专注于服务器技术及软件下载分享
分类导航

服务器资讯|IT/互联网|云计算|区块链|软件资讯|操作系统|手机数码|百科知识|免费资源|头条新闻|

服务器之家 - 新闻资讯 - 云计算 - K8s Kubectl 技巧集锦

K8s Kubectl 技巧集锦

2023-06-21 12:01未知服务器之家 云计算

kubectl 是 Kubernetes 的一个命令行管理工具,可用于 Kubernetes 上的应用部署和日常管理。本文列举了 9 个常见的 kubectl 命令,并总结了一些使用技巧,希望可以帮助系统管理员简化管理工作。 一、使用 Kubectl 查询、创建、编辑和删除

kubectl 是 Kubernetes 的一个命令行管理工具,可用于 Kubernetes 上的应用部署和日常管理。本文列举了 9 个常见的 kubectl 命令,并总结了一些使用技巧,希望可以帮助系统管理员简化管理工作。

一、使用 Kubectl 查询、创建、编辑和删除资源

K8s Kubectl 技巧集锦

对于刚开始使用命令行工具的开发者,最保险的方法是提出问题(读取操作),而不是发出命令(写入操作),所以从使用 get 命令开始是个不错的选择。

  • Kubectl get

使用 get 命令可以获取当前集群中可用的资源列表,包括:

  • Namespace

  • Pod

  • Node

  • Deployment

  • Service

  • ReplicaSet

每个 get 命令都能提供集群中可用资源的详细信息。例如 get nodes 命令就提供了 Kubernetes 的状态和版本。
这些命令大多数还具有简写版本。例如,要获取命名空间,可以使用 kubectl get ns 命令:

$kubectlgetnsNAMESTATUSAGEchartsActive8ddefaultActive9dkube-node-leaseActive9dkube-publicActive9dkube-systemActive9d
  • Kubectl create

可以查询资源后,下一步是创建资源。我们可以用 kubectl 在集群中创建任何类型的资源,包括:

  • Service

  • Cronjob

  • Deployment

  • Job

  • Namespace(ns)

其中,一些资源的创建需要设置配置文件、命名空间以及资源名称。例如,创建命名空间就需要一个额外参数来指定命名空间。

    $kubectlcreatenshello-therenamespace/hello-therecreated
    Linux 里可以使用 cron 创建定时运行的任务。同样的,这里我们使用 cronjob 每五秒钟返回一次“hello”。

    $kubectlcreatecronjobmy-cron--image=busybox--schedule="*/5****"--echohellocronjob.batch/my-namespaced-croncreated

    我们也可以使用 cronjob 的简写版本 cj。

    $kubectlcreatecjmy-existing-cron--image=busybox--schedule="*/15****"--echohellocronjob.batch/my-existing-croncreated
    • Kubectl edit

    当我们创建好资源后,如果需要修改,该怎么办?这时候就需要 kubectl edit 命令了。
    我们可以用这个命令编辑集群中的任何资源。它会打开默认文本编辑器。如果我们要编辑现有的 cron job,则可以执行:

    $kubectleditcronjob/my-existing-cron

    我们要编辑的配置如下:

    #Pleaseedittheobjectbelow.Linesbeginningwitha'#'willbeignored,#andanemptyfilewillaborttheedit.Ifanerroroccurswhilesavingthisfilewillbe#reopenedwiththerelevantfailures.#apiVersion:batch/v1beta1kind:CronJobmetadata:creationTimestamp:"2020-04-19T16:06:06Z"managedFields:-apiVersion:batch/v1beta1fieldsType:FieldsV1fieldsV1:f:spec:f:concurrencyPolicy:{}f:failedJobsHistoryLimit:{}f:jobTemplate:f:metadata:f:name:{}f:spec:f:template:f:spec:f:containers:k:{"name":"my-new-cron"}:.:{}f:command:{}f:image:{}f:imagePullPolicy:{}

    原本调度间隔设置为 15 秒:

    K8s Kubectl 技巧集锦

    我们将其更改为每 25 秒:

    K8s Kubectl 技巧集锦

    编写完成后,可以看到修改已生效。

    $kubectleditcronjob/my-existing-croncronjob.batch/my-existing-cronedited

    另外,我们可以通过 KUBE_EDITOR 命令来使用其他编辑器。

    $KUBE_EDITOR="nano"kubectleditcronjob/my-existing-cron
    • Kubectl delete

    学会了以上命令后,下面我们将进行删除操作。刚刚编辑的 cronjob 是两个 cronjobs 之一,现在我们删除整个资源。
      $kubectldeletecronjobmy-existing-croncronjob.batch"my-existing-cron"deleted
      需要注意的是,如果不知道资源是否有关联信息,最好不要删除。因为删除后无法恢复,只能重新创建。

      • Kubectl apply

      上文提到,某些命令需要配置文件,而 apply 命令可以在集群内调整配置文件应用于资源。虽然也可以通过命令行 standard in (STNIN) 来完成,但 apply 命令更好一些,因为它可以让你知道如何使用集群,以及要应用哪种配置文件。作为示例,下文会将 Helm 的基于角色的访问控制(RBAC)配置用于服务帐户。

      $kubectlapply-fcommands.yamlserviceaccount/tillercreatedclusterrolebinding.rbac.authorization.k8s.io/tillercreated

      我们可以应用几乎任何配置,但是一定要明确所要应用的配置,否则可能会引发意料之外的后果。

      二、使用 Kubectl 对 Kubernetes 进行故障排除


      • Kubectl describe

      describe 命令可以查看资源的详细信息。比较常见的用法是查看一个 Pod 或节点信息,以检查是否有异常、资源是否耗尽。

      该命令可以查看的资源包括:

      • Nodes

      • Pods

      • Services

      • Deployments

      • Replica sets

      • Cronjobs

      举个例子,我们用 describe 命令查看上文集群中 cronjob 的详细信息。

      $kubectldescribecronjobmy-cron

      以下是部分信息:

      Name:my-cronNamespace:defaultLabels:<none>Annotations:<none>Schedule:*/5****ConcurrencyPolicy:AllowSuspend:FalseSuccessfulJobHistoryLimit:3FailedJobHistoryLimit:1StartingDeadlineSeconds:<unset>Selector:<unset>Parallelism:<unset>Completions:<unset>PodTemplate:Labels:<none>Containers:my-cron:Image:busyboxPort:<none>HostPort:<none>
      • Kubectl logs

      虽然 describe 命令可以让你知道 Pod 内部应用程序发生的事,但 logs 命令可以提供 Kubernetes 中 Pod 的更多详细信息。了解这种区别可以帮助开发者更好地对应用程序内部以及 Kubernetes 内部发生的问题,并进行故障排除,这二者往往并不相同。

      $kubectllogscherry-chart-88d49478c-dmcfv-ncharts

      以上命令的部分输出结果如下:

      172.17.0.1--[19/Apr/2020:16:01:15+0000]"GET/HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1--[19/Apr/2020:16:01:20+0000]"GET/HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1--[19/Apr/2020:16:01:25+0000]"GET/HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1--[19/Apr/2020:16:01:30+0000]"GET/HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1--[19/Apr/2020:16:01:35+0000]"GET/HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1--[19/Apr/2020:16:01:40+0000]"GET/HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1--[19/Apr/2020:16:01:45+0000]"GET/HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1--[19/Apr/2020:16:01:50+0000]"GET/HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1--[19/Apr/2020:16:01:55+0000]"GET/HTTP/1.1"200612"-""kube-probe/1.18""-"

      grep 命令可以过滤无关信息或查看特定事件。例如,下面的 kube-probe 可能是无关信息,我们用 grep 命令对其进行过滤。
        $kubectllogscherry-chart-88d49478c-dmcfv-ncharts|grep-viekube-probe127.0.0.1--[10/Apr/2020:23:01:55+0000]"GET/HTTP/1.1"200612"-""Mozilla/5.0(X11;Ubuntu;Linuxx86_64;rv:75.0)Gecko/20100101Firefox/75.0"“-”
        在有些部署中,存在一个 Pod 有多个容器的情况,因此我们可以在 logs 命令中使用 -c <容器名称> ,以查找指定容器的日志。

        • Kubectl exec

        与 docker exec 命令相似,exec 命令也可以在容器中直接对应用程序进行故障排除。尤其当 Pod 的日志无法定位问题时, 它会特别好用。另外要注意的是,使用 exec 命令时,必须要以 Pod 内使用的 shell 作为命令的最后一个参数。

        $kubectlexec-itcherry-chart-88d49478c-dmcfv-ncharts--/bin/bashroot@cherry-chart-88d49478c-dmcfv:/#
        • Kubectl cp

        Kubectl cp 命令与 Linux cp 命令类似,用于容器之间复制文件和目录。另外,该命令还能在自动化失败等紧急情况下进行恢复备份。
        以下是将本地文件拷贝到容器的示例。命令格式为: kubectl cp namespace/podname:/path/tofile

        $kubectlcpcommands_copy.txtcharts/cherry-chart-88d49478c-dmcfv:commands.txt$kubectlexec-itcherry-chart-88d49478c-dmcfv-ncharts--/bin/bashroot@cherry-chart-88d49478c-dmcfv:/#lsbinbootcommands.txtdevetchomeliblib64mediamntoptprocrootrunsbinsrvsystmpusrvar

        下面是将容器内的文件拷贝到本地计算机上的示例。命令格式为:
        kubectl cp namespace/podname:/path/tofile

        $kubectlcpcharts/cherry-chart-88d49478c-dmcfv:commands.txtcommands_copy.txt$lscommands_copy.txt


        延伸 · 阅读

        精彩推荐