新出炉的 kubectl 备忘单,可以帮助大家了解有关 Kubernetes 命令行实用程序的有用命令。
kubectl 是 Kubernetes 的一个命令行管理工具,可用于 Kubernetes 上的应用部署和日常管理。本文列举了 9 个常见的 kubectl 命令,并总结了一些使用技巧,希望可以帮助系统管理员简化管理工作。
使用 Kubectl 查询、创建、编辑和删除资源
get
命令开始是个不错的选择。Kubectl get
get
命令可以获取当前集群中可用的资源列表,包括:Namespace Pod Node Deployment Service ReplicaSet
get
命令都能提供集群中可用资源的详细信息。例如 get nodes
命令就提供了 Kubernetes 的状态和版本。$ kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready master 9d v1.18.0
kubectl get namespaces
或者 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
中的 Pods 会非常有用,因为这些 Pods 是 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 create
Service Cronjob Deployment Job Namespace(ns)
$ kubectl create ns hello-there namespace/hello-there created
cronjob
每五秒钟返回一次“hello”。$ 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
命令了。$ 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: {}
$ 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
cronjob
是两个 cronjobs
之一,现在我们删除整个资源。$ kubectl delete cronjob my-existing-cron cronjob.batch "my-existing-cron" deleted
Kubectl apply
apply
命令可以在集群内调整配置文件应用于资源。虽然也可以通过命令行 standard in (STNIN)
来完成,但 apply 命令更好一些,因为它可以让你知道如何使用集群,以及要应用哪种配置文件。作为示例,下文会将 Helm 的基于角色的访问控制(RBAC)配置用于服务帐户。$ kubectl apply -f commands.yaml serviceaccount/tiller created clusterrolebinding.rbac.authorization.k8s.io/tiller created
我们可以应用几乎任何配置,但是一定要明确所要应用的配置,否则可能会引发意料之外的后果。
使用 Kubectl 对 Kubernetes 进行故障排除
Kubectl describe
describe
命令可以查看资源的详细信息。比较常见的用法是查看一个 Pod 或节点信息,以检查是否有异常、资源是否耗尽。该命令可以查看的资源包括:
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
describe
命令可以让你知道 Pod 内部应用程序发生的事,但 logs
命令可以提供 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" “-”
logs
命令中使用 -c <容器名称>
,以查找指定容器的日志。Kubectl exec
docker exec
命令相似,exec
命令也可以在容器中直接对应用程序进行故障排除。尤其当 Pod 的日志无法定位问题时, 它会特别好用。另外要注意的是,使用 exec
命令时,必须要以 Pod 内使用的 shell 作为命令的最后一个参数。$ kubectl exec -it cherry-chart-88d49478c-dmcfv -n charts -- /bin/bash root@cherry-chart-88d49478c-dmcfv:/#
Kubectl cp
cp
命令类似,用于容器之间复制文件和目录。另外,该命令还能在自动化失败等紧急情况下进行恢复备份。kubectl cp <filename> <namespace/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
本文地址:https://dockerworld.cn/?id=68
温馨提示:文章内容系作者个人观点,不代表Docker中文社区对观点赞同或支持。
版权声明:本文为转载文章,来源于 K8sMeetup社区 ,版权归原作者所有,欢迎分享本文,转载请保留出处!
温馨提示:文章内容系作者个人观点,不代表Docker中文社区对观点赞同或支持。
版权声明:本文为转载文章,来源于 K8sMeetup社区 ,版权归原作者所有,欢迎分享本文,转载请保留出处!
发表评论