本文共 10756 字,大约阅读时间需要 35 分钟。
kubectl命令
是当今基础架构的主导技术,这意味着系统管理员需要熟悉其管理。 多年来,我一直每天都在管理Kubernetes集群,并且我总结了一些技巧,强烈建议其他人简化他们的管理体验。
,分享有关kubectl的主要说明以及我每天用来保持集群正常运行的命令。 它分为几部分,以帮助您确定是否应将它们用于某些任务。 我还以长号和简写形式包含了一些标志,以帮助您更快地使用它们。从命令行实用程序开始最安全的地方是提问(读操作)而不是发出命令(写操作)。 有用的get命令可以使您滚动。
使用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 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编辑的地方。
运行此命令时,可以编辑集群中的任何资源。 它将打开您的默认文本编辑器。 因此,我们将编辑现有的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秒:
我们将其更改为每25秒写入一次资源:
编写之后,我们可以看到它已更改。
$ kubectl edit cronjob / my-existing-cron cronjob.batch / my-existing-cron edited
如果要使用其他编辑器,可以使用此KUBE_EDITOR语法添加来覆盖它。
$ KUBE_EDITOR = "nano" kubectl edit cronjob / my-existing-cron
到目前为止,除了将其完全删除之外,我们已经做了所有事情,这就是我们下一步要做的。 我们刚刚编辑的cronjob是两个cronjobs之一 ,因此现在我们将删除整个资源。
$ kubectl delete cronjob my-existing-cron cronjob.batch "my-existing-cron" deleted
作为警告,您永远不要删除不知道所有相关信息的内容。 一旦资源被删除,就无法恢复。 您将不得不重新创建它,因此在运行此命令之前请三思。
之前,我提到过某些命令将需要配置文件。 apply命令允许您通过文件为集群中的资源应用配置。 也可以通过命令行(STDIN)中的标准来完成此操作,但是建议始终是按文件进行的。
我认为该命令有些高级,因为您需要知道如何使用群集以及要应用哪种配置文件。 对于此示例,我将的基于角色的访问控制(RBAC)配置用于服务帐户。
$ kubectl apply -f commands.yaml serviceaccount / tiller created clusterrolebinding.rbac.authorization.k8s.io / tiller created
您可以应用几乎任何所需的配置,但始终需要确定要应用的配置,否则可能会看到意想不到的结果。
Describe显示您正在查看的资源的详细信息。 最常见的用例是描述一个Pod或节点,以检查事件中是否有错误,或者资源是否太有限而无法使用。
您可以描述的资源包括:
在此示例中,我们可以从前面的示例中描述集群中当前的cronjob 。
$ kubectl describe cronjob my-cron
片段:
Name : my-cron Namespace : default Labels :Annotations : Schedule : */5 * * * * Concurrency Policy : Allow Suspend : False Successful Job History Limit : 3 Failed Job History Limit : 1 Starting Deadline Seconds : Selector : Parallelism : Completions : Pod Template : Labels : Containers : my-cron : Image : busybox Port : Host Port :
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 。
与docker exec命令非常相似,您也可以执行到容器中以直接对应用程序进行故障排除。 当Pod中的日志没有为您提供调试问题的答案时,此功能很有用。 使用exec命令时,该行的末尾必须始终提供您在pod内使用的shell。
$ kubectl exec -it cherry-chart-88d49478c-dmcfv -n charts -- / bin / bash root @ cherry-chart-88d49478c-dmcfv: / #
该命令用于在容器之间复制文件和目录,就像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
作为Kubernetes管理员,有很多小命令对您有所帮助。 希望这份备忘单能为您提供方便!
翻译自:
kubectl命令
转载地址:http://tnszd.baihongyu.com/