Kubernetes管理员手边必备的9个kubectl命令

Stella981
• 阅读 590

Kubernetes管理员手边必备的9个kubectl命令

Kubernetes管理员手边必备的9个kubectl命令

导语

将这9个关键的kubectl命令放在手边,它们可以帮您快速排除故障并管理Kubernetes集群。

正文

Kubernetes是当今基础架构的主导技术,这意味着系统管理员需要熟悉其管理。多年来,笔者一直坚持每天管理Kubernetes集群,并且总结了一些技巧,希望可以帮助其他人简化他们的管理。

笔者在这里分享9个有关kubectl的命令,主要说明笔者每天用来管理Kubernetes集群的正常运行的命令。笔者将它们分为几部分,以帮助读者确定是否应将它们用于某些任务。笔者还以长号和简写形式包含了一些标志,以帮助读者更快地使用它们。

1. 使用Kubectl获取(get)、创建(create)、编辑(edit)和删除(delete)资源

从命令行实用程序开始,最安全的地方是提问(读操作)而不是发出命令(写操作)。有用的get命令可以使您滚动起来。

命令1:Kubectl get

使用get可以获取集群中当前拥有的资源列表。您可以获得的资源类型包括:

Namespace

Pod

Node

Deployment

Service

ReplicaSets

每个选项都提供有关群集中可用资源的详细信息。例如,这是get nodes命令的输出,该命令提供了Kubernetes的用法和状态版本。

$ kubectl get nodes

这些命令大多数都有缩减版。要获取命名空间,可以运行kubectl get namespaces或kubectl get ns:

$ kubectl get ns

每个get命令都可以使用–namespace或-n标志集中于给定的命名空间。当您想要查看kube-system中的Pod时,笔者会特别提供帮助,这是运行Kubernetes本身所需的服务。

$ kubectl get pods -n kube-system

命令2:Kubectl create

使用kubectl,您几乎可以在集群中创建任何类型的资源。其中一些资源确实需要配置文件和命名空间来设置资源以及名称。您可以创建的资源包括:

service

cronjob

deployment

job

namespace (ns)

因此,创建create namespace需要另一个参数来命名命名空间。

$ kubectl create ns hello-there

我们也可以使用cron命令来连续创建运行作业,就像许多Linux朋友会熟悉的那样。在这里,我们使用cronjob命令每五秒钟回显一次“ hello”。

$ kubectl create cronjob my-cron --image=busybox --schedule="*/5 * * * *" -- echo hello

您也可以使用简化版的命令cj而不是cronjob。

$ kubectl create cj my-existing-cron --image=busybox --schedule="*/15 * * * *" -- echo hello

命令3:Kubectl edit

那么,当笔者们创建某些东西并想要更新时会发生什么呢?这就是kubectl edit的作用。

运行此命令时,可以编辑集群中的任何资源。它将打开您的默认文本编辑器。因此,我们将编辑现有的cronjob,我们可以运行:

$ kubectl edit cronjob/my-existing-cron

这显示了我们要编辑的配置。

# Please edit the object below. Lines beginning with a '#' will be ignored,

这个计划设置为每15秒一次:

Kubernetes管理员手边必备的9个kubectl命令

我们将其更改为每25秒写入一次资源:

Kubernetes管理员手边必备的9个kubectl命令

编写完成后,我们可以看到它已更改。

$ kubectl edit cronjob/my-existing-cron

如果要使用其他编辑器,可以使用此KUBE_EDITOR语法添加来覆盖它。

$ KUBE_EDITOR="nano" kubectl edit cronjob/my-existing-cron

命令4:Kubectl delete

到目前为止,除了将其完全删除之外,我们已经做了所有事情,这就是我们下一步要做的。我们刚刚编辑的cronjob是两个cronjobs之一,因此现在我们将删除整个资源。

$ kubectl delete cronjob my-existing-cron

作为警告,切勿删除你所不知道的所有相关信息的内容。一旦资源被删除,就无法恢复。您将不得不重新创建它,因此在运行此命令之前请三思。

命令5:Kubectl apply

之前,笔者提到过某些命令将需要配置文件。该apply命令允许您在集群内通过文件应用配置资源。这也可以通过命令行standard in (STDIN)来完成此操作,但是建议始终是按文件进行。

笔者认为该命令有些高级,因为您需要知道如何使用群集以及要应用哪种配置文件。对于此示例,笔者曾经使用来自Helm的基于角色访问控制(RBAC)配置用于一个服务帐户。

$ kubectl apply -f commands.yaml

您可以应用几乎任何所需的配置,但是始终需要确定要应用的配置,否则可能会看到意想不到的结果。

2. 使用Kubectl对Kubernetes进行故障排除

命令6:Kubectl describe

Describe显示您正在查看的资源的详细信息。最常见的用例是描述一个pod或节点,以检查事件中是否有错误,或者资源是否太有限而无法使用。

您可以描述的资源包括:

Nodes

Pods

Services

Deployments

Replica sets

Cronjobs

在此示例中,我们可以从前面的示例中describe集群中当前的cronjob。

$ kubectl describe cronjob my-cron

命令7:Kubectl logs

虽然describe命令提供pod内应用程序发生的事件,但logs提供了与pod相关的Kubernetes内发生的事件详细信息。理解这一区别可以帮助您解决应用程序内部和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" "-"

您还可以通过使用grep命令来消除额外的噪音或寻找其他事件。该kube-probe可能有噪音,让我们用grep命令过滤出来。

$ kubectl logs cherry-chart-88d49478c-dmcfv -n charts | grep -vie kube-probe

由于某些部署在一个pod中有多个容器,您还可以对日志使用-c,从而只在一个特定容器中查找日志。

命令8:Kubectl exec

与docker exec命令非常相似,您也可以执行到容器中以直接对应用程序进行故障排除。当Pod中的日志没有为您提供可能要调试的问题的答案时,此功能很有用。使用exec命令时,该行的末尾必须始终提供您在pod内使用的shell。

$ kubectl exec -it cherry-chart-88d49478c-dmcfv -n charts -- /bin/bash

命令9:Kubectl cp

该命令用于在容器之间复制文件和目录,就像Linux cp命令一样。它不是您每天都会使用的东西,但是它是笔者个人最喜欢的,用于在自动化失败时在紧急情况下提取或还原备份。

这是将本地文件复制到容器的示例。语法遵循kubectl cp <namespace/podname:/path/tofile> 格式:

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

这是另一个示例,但是这次是从容器中将文件提取我们的本地计算机上。语法为kubectl cp <namespace/podname:/path/tofile>格式:

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

希望了解更多详细细节欢迎查看“阅读原文”。

Kubernetes管理员手边必备的9个kubectl命令

Kubernetes管理员手边必备的9个kubectl命令

本文分享自微信公众号 - 开源村OSV(osvosvosv)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这