博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kubectl命令_系统管理员需要了解的9个kubectl命令
阅读量:2537 次
发布时间:2019-05-11

本文共 10756 字,大约阅读时间需要 35 分钟。

kubectl命令

是当今基础架构的主导技术,这意味着系统管理员需要熟悉其管理。 多年来,我一直每天都在管理Kubernetes集群,并且我总结了一些技巧,强烈建议其他人简化他们的管理体验。

,分享有关kubectl的主要说明以及我每天用来保持集群正常运行的命令。 它分为几部分,以帮助您确定是否应将它们用于某些任务。 我还以长号和简写形式包含了一些标志,以帮助您更快地使用它们。

使用Kubectl获取,创建,编辑和删除资源

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

Kubectl得到

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

  • 命名空间
  • 节点
  • 部署方式
  • 服务
  • 副本集

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

$ kubectl get nodes     
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   9d    v1.18.0

这些命令大多数都具有缩短的版本。 要获取名称空间,可以运行kubectl get命名空间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中的Pod时,我会特别提供帮助,这是运行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创建

现在我们已经收集了一些资源,让我们创建更多资源。 使用kubectl,您几乎可以在集群中创建任何类型的资源。 其中一些资源确实需要配置文件和名称空间来设置资源以及​​名称。 您可以创建的资源包括:

  • 服务
  • cronjob
  • 部署
  • 工作
  • 命名空间(ns)

因此,例如, 创建 名称空间需要另一个参数来命名名称空间。

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

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

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

您也可以使用简化版本cj而不是cronjob

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

Kubectl编辑

那么,当我们创建某些东西并想要更新时会发生什么呢? 这就是kubectl编辑的地方。

运行此命令时,可以编辑集群中的任何资源。 它将打开您的默认文本编辑器。 因此,我们将编辑现有的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秒:

kubectl schedule

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

kubectl schedule

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

$ kubectl edit cronjob      
/ my-existing-cron
cronjob.batch
/ my-existing-cron edited

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

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

Kubectl删除

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

$ kubectl delete cronjob my-existing-cron     
cronjob.batch
"my-existing-cron" deleted

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

Kubectl适用

之前,我提到过某些命令将需要配置文件。 apply命令允许您通过文件为集群中的资源应用配置。 也可以通过命令行(STDIN)中的标准来完成此操作,但是建议始终是按文件进行的。

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

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

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

使用Kubectl对Kubernetes进行故障排除

Kubectl描述

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

您可以描述的资源包括:

  • 节点数
  • 豆荚
  • 服务
  • 部署
  • 副本集
  • 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日志

describe命令为您提供Pod内部的应用程序发生的事件,而日志则提供了有关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 <容器名称> ,以便仅在一个特定的容器中查找log

Kubectl执行器

docker 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 <文件名> <名称空间/ 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

作为Kubernetes管理员,有很多小命令对您有所帮助。 希望这份备忘单能为您提供方便!

翻译自:

kubectl命令

转载地址:http://tnszd.baihongyu.com/

你可能感兴趣的文章
DataNode 工作机制
查看>>
windows系统下安装MySQL
查看>>
实验二+070+胡阳洋
查看>>
Linux IPC实践(3) --具名FIFO
查看>>
Qt之模拟时钟
查看>>
第一次接触安卓--记于2015.8.21
查看>>
(转)在分层架构下寻找java web漏洞
查看>>
C++ ifstream ofstream
查看>>
跟初学者学习IbatisNet第四篇
查看>>
seL4环境配置
查看>>
Git报错:insufficient permission for adding an object to repository database .git/objects
查看>>
ajax跨域,携带cookie
查看>>
阶段3 2.Spring_01.Spring框架简介_03.spring概述
查看>>
阶段3 2.Spring_02.程序间耦合_1 编写jdbc的工程代码用于分析程序的耦合
查看>>
阶段3 2.Spring_01.Spring框架简介_04.spring发展历程
查看>>
阶段3 2.Spring_02.程序间耦合_3 程序的耦合和解耦的思路分析1
查看>>
阶段3 2.Spring_02.程序间耦合_5 编写工厂类和配置文件
查看>>
阶段3 2.Spring_01.Spring框架简介_05.spring的优势
查看>>
阶段3 2.Spring_02.程序间耦合_7 分析工厂模式中的问题并改造
查看>>
阶段3 2.Spring_02.程序间耦合_4 曾经代码中的问题分析
查看>>