K8s Kubectl 技巧集锦,这样轻松管理集群有多爽?
一、使用 Kubectl 查询、创建、编辑和删除资源
对于刚开始使用命令行工具的开发者,最保险的方法是提出问题(读取操作),而不是发出命令(写入操作),所以从使用 get
命令开始是个不错的选择。
-
Kubectl get
使用 get 命令可以获取当前集群中可用的资源列表,包括:
-
Namespace
-
Pod
-
Node
-
Deployment
-
Service
-
ReplicaSet
$ 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
-
Kubectl create
可以查询资源后,下一步是创建资源。我们可以用 kubectl 在集群中创建任何类型的资源,包括:
-
Service
-
Cronjob
-
Deployment
-
Job
-
Namespace(ns)
其中,一些资源的创建需要设置配置文件、命名空间以及资源名称。例如,创建命名空间就需要一个额外参数来指定命名空间。
$ kubectl create ns hello-there
namespace/hello-there created
$ kubectl create cronjob my-cron --image=busybox --schedule="*/5 * * * *" -- echo hello
cronjob.batch/my-namespaced-cron created
我们也可以使用 cronjob 的简写版本 cj。
$ kubectl create cj my-existing-cron --image=busybox --schedule="*/15 * * * *" -- echo hello
cronjob.batch/my-existing-cron created
-
Kubectl edit
$ 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
-
Kubectl delete
$ kubectl delete cronjob my-existing-cron
cronjob.batch "my-existing-cron" deleted
-
Kubectl apply
kubectl apply -f commands.yaml
serviceaccount/tiller created
clusterrolebinding.rbac.authorization.k8s.io/tiller created
我们可以应用几乎任何配置,但是一定要明确所要应用的配置,否则可能会引发意料之外的后果。 二、使用 Kubectl 对 Kubernetes 进行故障排除
-
Kubectl describe
该命令可以查看的资源包括:
-
Nodes
-
Pods
-
Services
-
Deployments
-
Replica sets
-
Cronjobs
举个例子,我们用 describe 命令查看上文集群中 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 logs
$ 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 有多个容器的情况,因此我们可以在 logs 命令中使用 -c <容器名称>
,以查找指定容器的日志。
-
Kubectl exec
$ kubectl exec -it cherry-chart-88d49478c-dmcfv -n charts -- /bin/bash
root@cherry-chart-88d49478c-dmcfv:/#
-
Kubectl cp
$ 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
号外号外! 第二十一届 GOPS 全球运维大会 将于2023年10月20日-21日在上海召开啦!
报名通道 ▼
早鸟票立省1260元!
近期好文:
深化场景赋能,中国农业银行 AIOps 智能运维是如何建设的?
“高效运维”公众号诚邀广大技术人员投稿
投稿邮箱:jiachen@greatops.net,或添加联系人微信:greatops1118。
点个“在看”,一年不宕机
发表评论