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日程 kubectl schedule](https://i-blog.csdnimg.cn/blog_migrate/10a0d76eaf1287061acc09d83570c4c7.png)
我们将其更改为每25秒写入一次资源:
![Kubectl日程 kubectl schedule](https://i-blog.csdnimg.cn/blog_migrate/5071e6329239516231490cccbd240053.png)
编写之后,我们可以看到它已更改。
$ 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命令