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 nodesNAME STATUS ROLES AGE VERSIONminikube Ready master 9d v1.18.0
这些命令大多数都有缩减版。要获取命名空间,可以运行kubectl get namespaces或kubectl get ns:
$ kubectl get nsNAME STATUS AGEcharts Active8ddefaultActive9dkube-node-lease Active9dkube-public Active9dkube-system Active9d
每个get命令都可以使用–namespace或-n标志集中于给定的命名空间。当您想要查看kube-system中的Pod时,笔者会特别提供帮助,这是运行Kubernetes本身所需的服务。
$ kubectl get pods -n kube-systemNAME READY STATUS RESTARTS AGEcoredns-66bff467f8-mjptx1/1Running29dcoredns-66bff467f8-t2xcz1/1Running29detcd-minikube1/1Running19dkube-apiserver-minikube1/1Running19dkube-controller-manager-minikube1/1Running29dkube-proxy-rpc9d1/1Running19dkube-scheduler-minikube1/1Running29dstorage-provisioner1/1Running19d
命令2:Kubectl create
使用kubectl,您几乎可以在集群中创建任何类型的资源。其中一些资源确实需要配置文件和命名空间来设置资源以及名称。您可以创建的资源包括:
service
cronjob
deployment
job
namespace (ns)
因此,创建create namespace需要另一个参数来命名命名空间。
$kubectl create ns hello-therenamespace/hello-there created
我们也可以使用cron命令来连续创建运行作业,就像许多Linux朋友会熟悉的那样。在这里,我们使用cronjob命令每五秒钟回显一次“ hello”。
$kubectl create cronjob my-cron --image=busybox --schedule="*/5 * * * *"--echohellocronjob.batch/my-namespaced-cron created
您也可以使用简化版的命令cj而不是cronjob。
$kubectl create cj my-existing-cron --image=busybox --schedule="*/15 * * * *"--echohellocronjob.batch/my-existing-cron created
命令3:Kubectl edit
那么,当笔者们创建某些东西并想要更新时会发生什么呢?这就是kubectl edit的作用。
运行此命令时,可以编辑集群中的任何资源。它将打开您的默认文本编辑器。因此,我们将编辑现有的cronjob,我们可以运行:
$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/v1beta1kind: CronJobmetadata: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-croncronjob.batch/my-existing-cron edited
如果要使用其他编辑器,可以使用此KUBE_EDITOR语法添加来覆盖它。
$ KUBE_EDITOR="nano"kubectl edit cronjob/my-existing-cron
命令4:Kubectl delete
到目前为止,除了将其完全删除之外,我们已经做了所有事情,这就是我们下一步要做的。我们刚刚编辑的cronjob是两个cronjobs之一,因此现在我们将删除整个资源。
$ kubectldeletecronjobmy-existing-croncronjob.batch"my-existing-cron"deleted
作为警告,切勿删除你所不知道的所有相关信息的内容。一旦资源被删除,就无法恢复。您将不得不重新创建它,因此在运行此命令之前请三思。
命令5:Kubectl apply
之前,笔者提到过某些命令将需要配置文件。该apply命令允许您在集群内通过文件应用配置资源。这也可以通过命令行standard in (STDIN)来完成此操作,但是建议始终是按文件进行。
笔者认为该命令有些高级,因为您需要知道如何使用群集以及要应用哪种配置文件。对于此示例,笔者曾经使用来自Helm的基于角色访问控制(RBAC)配置用于一个服务帐户。
$kubectl apply -f commands.yamlserviceaccount/tiller createdclusterrolebinding.rbac.authorization.k8s.io/tiller created
您可以应用几乎任何所需的配置,但是始终需要确定要应用的配置,否则可能会看到意想不到的结果。
2. 使用Kubectl对Kubernetes进行故障排除
命令6:Kubectl describe
Describe显示您正在查看的资源的详细信息。最常见的用例是描述一个pod或节点,以检查事件中是否有错误,或者资源是否太有限而无法使用。
您可以描述的资源包括:
Nodes
Pods
Services
Deployments
Replica sets
Cronjobs
在此示例中,我们可以从前面的示例中describe集群中当前的cronjob。
$ kubectldescribecronjob my-cron片段:Name: my-cronNamespace:defaultLabels: Annotations: Schedule: */5* * * *ConcurrencyPolicy:AllowSuspend:FalseSuccessful Job HistoryLimit:3FailedJob HistoryLimit:1StartingDeadlineSeconds: Selector: <unset>Parallelism: <unset>Completions: <unset>PodTemplate:Labels: Containers: my-cron: Image: busyboxPort: Host Port:
命令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"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:20+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:25+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:30+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:35+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:40+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:45+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:50+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"172.17.0.1- - [19/Apr/2020:16:01:55+0000]"GET / HTTP/1.1"200612"-""kube-probe/1.18""-"
您还可以通过使用grep命令来消除额外的噪音或寻找其他事件。该kube-probe可能有噪音,让我们用grep命令过滤出来。
$ kubectl logs cherry-chart-88d49478c-dmcfv -n charts |grep-vie kube-probe127.0.0.1- - [10/Apr /2020:23:01:55+0000]"GET / HTTP/1.1"200612"-""Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0"“-”
由于某些部署在一个pod中有多个容器,您还可以对日志使用-c<container name>,从而只在一个特定容器中查找日志。
命令8:Kubectl exec
与docker exec命令非常相似,您也可以执行到容器中以直接对应用程序进行故障排除。当Pod中的日志没有为您提供可能要调试的问题的答案时,此功能很有用。使用exec命令时,该行的末尾必须始终提供您在pod内使用的shell。
$ kubectl exec -it cherry-chart-88d49478c-dmcfv -n charts --/bin/bashroot@cherry-chart-88d49478c-dmcfv:/#
命令9:Kubectl cp
该命令用于在容器之间复制文件和目录,就像Linux 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/bashroot@cherry-chart-88d49478c-dmcfv:/# lsbin 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$lscommands_copy.txt
Kubernetes管理员手边必备的9个kubectl命令的更多相关文章
- kubernetes系列(小知识):kubectl命令自动补全
kubectl命令自动补全 linux系统 yum install -y bash-completion source /usr/share/bash-completion/completions/d ...
- rancher下的kubernetes之三:在linux上安装kubectl工具
本章是<rancher下的kubernetes>系列之三,前面两章我们完成了racher下搭建kubernetes环境的实战,本章我们来安装kubectl工具: 系列文章地址 <ra ...
- Kubernetes源码之旅:从kubectl到API Server
概述: Kubernetes项目目前依然延续着之前爆炸式的扩张.急需能够理解Kubernetes原理并且贡献代码的软件开发者.学习Kubernetes源码并不容易.Kubernetes是使用相对年轻的 ...
- K8S从入门到放弃系列-(4)kubernetes集群之kubectl命令行工具部署
摘要:随着版本的不断迭代,k8s为了集群安全,集群中趋向采用TLS+RBAC的安全配置方式,所以我们在部署过程中,所有组件都需要证书,并启用RBAC认证. 我们这里采用二进制安装,下载解压后,把对应组 ...
- k8s技术--Kubernetes集群kubectl命令的常见使用方法
简介:kubectl是一个命令行界面,用于运行针对Kubernetes群集的命令. 语法: kubectl [command] [TYPE] [NAME] [flags] command:指定您希望对 ...
- Kubernetes kubectl 命令
kubectl 命令用来操作 Kubernetes 集群中的资源对象,包括对资源的创建.删除.查看.修改.配置.运行等 命令语法:kubectl [command] [TYPE] [NAME] [fl ...
- kubernetes高可用设计-master节点和kubectl
部署master 节点 上一遍是CA证书和etcd的部署,这一篇继续搭建k8s,废话不多说.开始部署. kubernetes master 节点包含的组件有: kube-apiserver kube- ...
- Kubernetes kubectl 命令概述
kubectl用于运行Kubernetes集群命令的管理工具. 语法 kubectl [command] [TYPE] [NAME] [flags] command:指定要在一个或多个资源执行的操作 ...
- kubernetes 实践二:kubectl命令使用
这里记录kubernetes学习和使用过程中的内容. CentOS7 k8s-1.13 flanneld-0.10 docker-18.06 etcd-3.3 kubectl用法概述 kubectl是 ...
随机推荐
- mybatis源码配置文件解析之二:解析settings标签
在前边的博客中分析了mybatis解析properties标签,<mybatis源码配置文件解析之一:解析properties标签>.下面来看解析settings标签的过程. 一.概述 在 ...
- 【题解】P3959 宝藏 - 状压dp / dfs剪枝
P3959 宝藏 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝 ...
- Python 代码编辑器怎么选?PyCharm、VS Code、Jupyter Notebook 都各有特色
Python 代码编辑器怎么选?PyCharm.VS Code.Jupyter Notebook 都各有特色,Jupyter 适合做数据分析这些需要可视化的操作,PyCharm 更适合做完整的 Pyt ...
- DataTable 与XML 交互
一.将DataTable的内容写入到XML文件中 /// <summary> /// 将DataTable的内容写入到XML文件中 /// </summary> /// < ...
- 为什么要你们现在要学习python
说学习python之前,我们先来聊聊其他的.我们都认为成功靠的是勤奋和努力,但是事实是只靠勤奋和努力是不一定会成功的,而且很大一部分都不会成功. 你有没有想过,同样是做企业,有些公司年收入百万,而腾讯 ...
- ERC20 Short Address Attack
ERC20 Short Address Attack 什么是ERC20 Application Binary Interface(ABI) ERC20 Short Address Attack 开始攻 ...
- 15个Nodejs应用场景
15个Nodejs应用场景 我们已经对Nodejs有了初步的了解,接下来看看Nodejs的应用场景. 2.1 Web开发:Express + EJS + Mongoose/MySQL express ...
- IT服务,共享经济的下一个风口?
前两天,在上千名CIO参加.释放10亿采购需求的2017华南CIO大会暨信息技术交易会上,一款"一站式IT工程师共享平台"成为大会关注焦点--这就是神州数码旗下的神州邦邦. 其实最 ...
- 修复.NET的HttpClient
\ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 早在2016年我们就报道过 ,.NET的HttpClient存在一些问题.随着.NET Co ...
- 批量将制定文件夹下的全部Excel文件导入微软SQL数据库
以下代码将c:\cs\文件夹下的全部Excle中数据导入到SQL数据库 declare @query vARCHAR(1000) declare @max1 int declare @count1 i ...