kubectl命令_系统管理员需要了解的9个kubectl命令

kubectl命令

Kubernetes是当今基础架构的主导技术,这意味着系统管理员需要熟悉其管理。 多年来,我一直每天都在管理Kubernetes集群,并且我总结了一些技巧,强烈建议其他人简化他们的管理体验。

备忘单 ,分享有关kubectl的主要说明以及我每天用来保持集群正常运行的命令。 它分为几部分,以帮助您确定是否应将它们用于某些任务。 我还以长号和简写形式包含了一些标志,以帮助您更快地使用它们。

使用Kubectl获取,创建,编辑和删除资源

从命令行实用程序开始最安全的地方是提问(读操作)而不是发出命令(写操作)。 有用的get命令可以使您滚动。

Kubectl得到

使用get可以获取群集中当前拥有的资源列表。 您可以获得的资源类型包括:

  • 命名空间
  • 节点
  • 部署方式
  • 服务
  • 副本集

每个选项都提供有关群集中可用资源的详细信息。 作为示例,这是get nodes命令的输出,该命令提供了Kubernetes的用法和状态版本。


   
   
$ kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   9d    v1.18.0

这些命令大多数都具有缩短的版本。 要获取名称空间,可以运行kubectl get命名空间kubectl get ns (完整列表请参见备忘单):


   
   
$ kubectl get ns
NAME              STATUS   AGE
charts            Active   8d
default           Active   9d
kube-node-lease   Active   9d
kube-public       Active   9d
kube-system       Active   9d

每个get命令都可以使用–namespace-n标志集中于给定的名称空间。 当您想查看kube-system中的Pod时,我会特别提供帮助,这是运行Kubernetes本身所需的服务。


   
   
$ kubectl get pods -n kube-system
NAME                               READY   STATUS    RESTARTS   AGE
coredns-66bff467f8-mjptx           1 / 1     Running   2          9d
coredns-66bff467f8-t2xcz           1 / 1     Running   2          9d
etcd-minikube                       1 / 1     Running   1          9d
kube-apiserver-minikube             1 / 1     Running   1          9d
kube-controller-manager-minikube   1 / 1     Running   2          9d
kube-proxy-rpc9d                   1 / 1     Running   1          9d
kube-scheduler-minikube             1 / 1     Running   2          9d
storage-provisioner                 1 / 1     Running   1          9d

Kubectl创建

现在我们已经收集了一些资源,让我们创建更多资源。 使用kubectl,您几乎可以在集群中创建任何类型的资源。 其中一些资源确实需要配置文件和名称空间来设置资源以及​​名称。 您可以创建的资源包括:

  • 服务
  • cronjob
  • 部署
  • 工作
  • 命名空间(ns)

因此,例如, 创建 名称空间需要另一个参数来命名名称空间。


   
   
$ kubectl create ns hello-there
namespace / hello-there created

我们也可以使用cron创建连续运行的作业,就像许多Linux朋友会熟悉的那样 。 在这里,我们使用cronjob每五秒钟回显一次“ hello”。


   
   
$ kubectl create cronjob my-cron --image =busybox --schedule = "*/5 * * * *" -- echo hello
cronjob.batch / my-namespaced-cron created

您也可以使用简化版本cj而不是cronjob


   
   
$ kubectl create cj my-existing-cron --image =busybox --schedule = "*/15 * * * *" -- echo hello
cronjob.batch / my-existing-cron created

Kubectl编辑

那么,当我们创建某些东西并想要更新时会发生什么呢? 这就是kubectl编辑的地方。

运行此命令时,可以编辑集群中的任何资源。 它将打开您的默认文本编辑器。 因此,我们将编辑现有的cron作业,我们可以运行:

 $  kubectl edit cronjob / my-existing-cron 

这显示了我们要编辑的配置。


   
   
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion
: batch/v1beta1
kind
: CronJob
metadata
:
  creationTimestamp
: "2020-04-19T16:06:06Z"
  managedFields
:
  - apiVersion
: batch/v1beta1
    fieldsType
: FieldsV1
    fieldsV1
:
      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秒:

kubectl schedule

我们将其更改为每25秒写入一次资源:

kubectl schedule

编写之后,我们可以看到它已更改。


   
   
$ kubectl edit cronjob / my-existing-cron
cronjob.batch / my-existing-cron edited

如果要使用其他编辑器,可以使用此KUBE_EDITOR语法添加来覆盖它。

 $  KUBE_EDITOR = "nano" kubectl edit cronjob / my-existing-cron 

Kubectl删除

到目前为止,除了将其完全删除之外,我们已经做了所有事情,这就是我们下一步要做的。 我们刚刚编辑的cronjob是两个cronjobs之一 ,因此现在我们将删除整个资源。


   
   
$ kubectl delete cronjob my-existing-cron
cronjob.batch "my-existing-cron" deleted

作为警告,您永远不要删除不知道所有相关信息的内容。 一旦资源被删除,就无法恢复。 您将不得不重新创建它,因此在运行此命令之前请三思。

Kubectl适用

之前,我提到过某些命令将需要配置文件。 apply命令允许您通过文件为集群中的资源应用配置。 也可以通过命令行(STDIN)中的标准来完成此操作,但是建议始终是按文件进行的。

我认为该命令有些高级,因为您需要知道如何使用群集以及要应用哪种配置文件。 对于此示例,我将Helm的基于角色的访问控制(RBAC)配置用于服务帐户。


   
   
$ kubectl apply -f commands.yaml
serviceaccount / tiller created
clusterrolebinding.rbac.authorization.k8s.io / tiller created

您可以应用几乎任何所需的配置,但始终需要确定要应用的配置,否则可能会看到意想不到的结果。

使用Kubectl对Kubernetes进行故障排除

Kubectl描述

Describe显示您正在查看的资源的详细信息。 最常见的用例是描述一个Pod或节点,以检查事件中是否有错误,或者资源是否太有限而无法使用。

您可以描述的资源包括:

  • 节点数
  • 豆荚
  • 服务
  • 部署
  • 副本集
  • Cronjobs

在此示例中,我们可以从前面的示例中描述集群中当前的cronjob

 $  kubectl describe cronjob my-cron 

片段:


   
   
Name :                         my-cron
Namespace
:                    default
Labels
:                       <none>
Annotations
:                  <none>
Schedule
:                     */5 * * * *
Concurrency Policy
:           Allow
Suspend
:                      False
Successful Job History Limit
: 3
Failed Job History Limit
:     1
Starting Deadline Seconds
:    <unset>
Selector
:                     <unset>
Parallelism
:                  <unset>
Completions
:                  <unset>
Pod Template
:
  Labels
: <none>
  Containers
:
   my-cron
:
    Image
:     busybox
    Port
:      <none>
    Host Port
: <none>

Kubectl日志

describe命令为您提供Pod内部的应用程序发生的事件,而日志则提供了有关Kubernetes内部与Pod相关的详细信息。 了解这种区别使您可以对应用程序内部和Kubernetes内部发生的问题进行故障排除,因为它们并不总是相同的问题。

 $  kubectl logs cherry-chart-88d49478c-dmcfv -n charts 

片段:


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

您也可以通过在此命令中使用grep来消除额外的噪音或寻找其他事件。 kube-probe可能很吵,所以让我们用grep过滤掉它。


   
   
$ kubectl logs cherry-chart-88d49478c-dmcfv -n charts | grep -vie kube-probe
127.0.0.1 - - [ 10 / Apr / 2020 : 23 :01: 55 +0000 ] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0" “-”

由于某些部署在一个Pod中具有多个容器,因此您还可以在日志中使用-c <容器名称> ,以便仅在一个特定的容器中查找log

Kubectl执行器

docker exec命令非常相似,您也可以执行到容器中以直接对应用程序进行故障排除。 当Pod中的日志没有为您提供调试问题的答案时,此功能很有用。 使用exec命令时,该行的末尾必须始终提供您在pod内使用的shell。


   
   
$ kubectl exec -it cherry-chart-88d49478c-dmcfv -n charts -- / bin / bash
root @ cherry-chart-88d49478c-dmcfv: / #

Kubectl cp

该命令用于在容器之间复制文件和目录,就像Linux cp命令一样。 它不是您每天都会使用的东西,但是它是我个人最喜欢的,用于在自动化失败时在紧急情况下拉出或还原备份。

这是将本地文件复制到容器的示例。 语法遵循kubectl cp <文件名> <名称空间/ podname:/ path / tofile>格式:


   
   
$ kubectl cp commands_copy.txt charts / cherry-chart-88d49478c-dmcfv:commands.txt
$ kubectl exec -it cherry-chart-88d49478c-dmcfv -n charts -- / bin / bash
root @ cherry-chart-88d49478c-dmcfv: / # ls
bin  boot  commands.txt  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

这是另一个示例,但是这次是从容器将文件拉到我们的本地计算机上。 语法为kubectl cp <namespace / podname:/ path / tofile>格式:


   
   
$ kubectl cp charts / cherry-chart-88d49478c-dmcfv:commands.txt commands_copy.txt
$ ls
commands_copy.txt

下载kubectl备忘单

作为Kubernetes管理员,有很多小命令对您有所帮助。 希望这份备忘单能为您提供方便!

翻译自: https://opensource.com/article/20/5/kubectl-cheat-sheet

kubectl命令

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值