kubectl是Kubernetes的一个命令行管理工具,可用于Kubernetes上的应用部署和日常管理。本文列举了9个常见的kubectl命令,并对每个命令进行了简单扼要的介绍,供大家参考。同时,大家也可以通过文中连接获取更详细的介绍。如今,Kubernetes已成为IT基础设施管理界的老大,这也意味着系统管理员需要对其管理非常熟悉。多年以来,我每天都在管理Kubernetes集群,所以我总结了一些可以帮助管理员简化管理工作的技巧,供大家参考。我创建了一个备忘清单,用于分享kubectl相关的主题,以及我日常使用的kubectl管理命令。备忘清单分为多个小节,方便你判断其是否适合于你的工作。我还在清单引入了一些标签,方便你快速的查阅和使用。通过kubectl查询,创建,编辑和删除资源

熟悉一个命令行工具最安全的方式是提出问题(读操作),而非发出命令(写操作)。所以使用查询相关的命令是一个很好的开始。Kubectl get 使用get命令可以列出当前集群上可用的资源清单。你可以通过get获取到的资源包括:

  • Namespace

  • Pod

  • Node

  • Deployment

  • Service

  • Replicasets

每个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查询namespaces信息(可查看备忘录获取完整列表)。

$ 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现在你已经查询到了一些资源,接下来让我创建资源。通过kubectl,你几乎可以创建Kubernetes集群中任何类型的资源。一些资源在创建时,需要指定配置文件,namespace以及资源名称。你可以创建的资源包括:

  • service

  • cronjob

  • deployment

  • job

  • namespace (ns)

例如,create namespace需要一个额外的参数指定namespace的名称。

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

我们也可以通过cron创建连续运行的任务,很多使用Linux的朋友可能对此比较熟悉。下面我使用cronjob每隔5秒钟返回一个"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了。当你执行这个命令时,你可以编辑集群中的任何资源,它将打开你的默认文本编辑器。而当我想编辑已经存在的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="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命令允许你通过配置文件将配置应用于你的资源。这些配置也可以通过标准输入在命令行输入,但是建议使用文件。我觉得这是一个进阶命令,因为你需要知道如何使用你的集群,以及什么样的配置文件可以应用于集群。举个例子,我将Helm的基于角色的访问控制(RBAC)配置用于服务账户。

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

你可以应用几乎任何所需的配置,但是你自己必须清楚这些配置,否则可能得到意想不到的结果。使用kubectl对Kubernetes进行故障排除

Describe会显示你正在查看的资源的详情,最常见的用例是查看一个Pod或节点, 以检查是否有异常事件,或者资源是否即将耗尽。可以查看详情的资源包括:

  • Nodes

  • Pods

  • Services

  • Deployments

  • Replica sets

  • Cronjobs

例如,我们可以查看前面示例中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:

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" “-”

在有些部署里,一个Pod中有多个容器,因此你还可以在日志中使用-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该命令用于在容器间复制文件和目录,跟linux cp类似。可能这不是你每天都会使用的命令,但却是我个人最喜欢的,用于在自动化失败的紧急情况下进行备份恢复。以下是一个拷贝本地文件到容器的示例,其命令格式为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 :

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

关注公众号『分布式实验室』,回复命令,可下载kubectl命令清单。原文链接:https://opensource.com/article/20/5/kubectl-cheat-sheet基于Kubernetes的DevOps实战培训

基于Kubernetes的DevOps实战培训将于2020年6月19日在上海开课,3天时间带你系统掌握Kubernetes,学习效果不好可以继续学习。本次培训包括:容器特性、镜像、网络;Kubernetes架构、核心组件、基本功能;Kubernetes设计理念、架构设计、基本功能、常用对象、设计原则;Kubernetes的数据库、运行时、网络、插件已经落地经验;微服务架构、组件、监控方案等,点击下方图片或者阅读原文链接查看详情。

kubectl logs -f tail 显示100_系统管理员应该知道的9个kubectl命令相关推荐

  1. linux管理员权限命令_每个系统管理员应该知道的20个Linux命令

    linux管理员权限命令 在一个充满新工具和多样化开发环境的世界中,几乎所有开发人员或工程师都必须学习一些基本的sysadmin命令. 特定的命令和程序包可以帮助开发人员组织,排除故障和优化其应用程序 ...

  2. 系统管理员应该知道的 20 条 Linux 命令

    微信上看到的一篇文章,觉得挺适合非专业人士的,转载过来 https://my.oschina.net/editorial-story/blog/1499026 摘要: 如果您的应用程序不工作,或者您希 ...

  3. 系统管理员应该知道的20条Linux命令

    如果您的应用程序不工作,或者您希望在寻找更多信息,这 20 个命令将派上用场. 在这个全新的工具和多样化的开发环境井喷的大环境下,任何开发者和工程师都有必要学习一些基本的系统管理命令.特定的命令和工具 ...

  4. Linux学习总结(39)——系统管理员应该知道的 20 条 Linux 命令

    1. curl curl 用于传输一个 URL.可以使用这条命令用于测试应用程序的端点或与上游服务端点的连接.curl 还可用于检查你的应用程序是否能连接到其他服务,例如数据库,或检查您的服务是否处于 ...

  5. Linux系统管理员应该知道的journalctl知识

    Linux系统管理员应该知道的journalctl知识 在Systemd出现之前,Linux系统及各应用的日志都是分别管理的,Systemd开始统一管理了所有Unit的启动日志,这样带来的好处就是可以 ...

  6. linux成为管理员_成为系统管理员需要知道的

    linux成为管理员 过去的系统管理员整日忙于用户和服务器的争夺,在早晚之间花费了数百米的数百根电缆. 如今仍然如此,云计算,容器和虚拟机的复杂性增加了. 从外部看,很难确定sysadmin的确切功能 ...

  7. lombok null字段不显示 继承_Lombok 要知道的 8 个点

    原标题:Lombok 要知道的 8 个点 关注:"锅外的大佬" 专注分享国外最新技术内容 帮助每位开发者更优秀地成长 和其他语言相比, Java经常因为不必要的冗长被批评. Lom ...

  8. surface6桌面显示计算机,你所应该知道的Surface快捷键全攻略

    导言:作为微软在Windows8桌面操作系统和WindowsPhone手机操作系统之外.介于桌面和手持设备之间的又一力作,Surface的出现给我们带来了很多惊喜.但是在使用过程中有哪些容易被忽略的使 ...

  9. Kubectl logs 命令

    1.查看创建的状态,状态为Pending[准备中],Running状态[已经创建成功] kubectl get pods -n test-gt 2.查看POD详细信息 kubectl get pods ...

最新文章

  1. 【Android】自定义listview快速滚动条
  2. 【jQuery插件分享】Cropper——一个简单方便的图片裁剪插件
  3. 用VS Express 2010开发第一个应用程序
  4. MathLab混合编程成功总结
  5. mysql root 无法建立数据库_MySQL - 在root用户下你跟我说无法建表!?
  6. 坚持是一件很难的事情
  7. iPhone开发【一】从HelloWorld開始
  8. t3 修改服务器配置,t3如何修改服务器地址
  9. 怎么样解决小交换机引起的路由环路故障?
  10. android 4.2修改设置菜单的背景颜色
  11. 区块链和比特币的 6 个神话:揭穿了这项技术的有效性
  12. 坐飞机还是尽量早点出发(差点误机)
  13. 四针角oled屏连接arduino_Arduino提高篇03—OLED屏图片显示
  14. SolidEdge完整安装教程-亲测
  15. 信息系统项目管理师2019年上半年上午试题解析(四)
  16. 男人:别光着上身睡觉
  17. FineReport的数据决策系统注册
  18. java求多项式回归_通过LINEST进行多项式回归(Polynomial Regression via LINEST)
  19. 1630 - FUNCTION XXXX.now does not exist. Check the 'Function Name Parsing and Resolution' section in
  20. pandas基本数据对象及操作(DataFrame篇)

热门文章

  1. 基于https国密算法构建安全数据传输链路
  2. 【ECS最佳实践】基于多块云盘构建LVM逻辑卷
  3. 提升不止一点点,Dubbo 3.0 预览版详细解读
  4. 阿里云重磅发布RDS for SQL Server AlwaysOn集群版
  5. 一文教你如何在生产环境中在Kubernetes上部署Jaeger
  6. 技术差的程序员,90%都输在这点上!骨灰级开发:其实都是在瞎努力!
  7. KubeCon 、 CloudNativeCon、Open Source Summit 2019三会交融,看点不断!
  8. 从 0 到 300,Instagram 创始人 CTO 分享工程团队成长的经验
  9. 中科院信工所经验_2021中科院信息工程研究所电子信息专业考研经验指导分享...
  10. ethercat 网卡不兼容_曾经的洋垃圾万兆网卡无人问津因为一张转接卡如今身价暴涨数十倍...