經常使用的kubectl命令

本文主要介紹kubernetes排查問題時常常用到的命令。這裏主要藉助kubectl命令來實現。如下列出經常使用命令,後面會對每一個命令進行詳細解釋,並舉例:node

kubectl核心命令

get  獲取列出一個或多個資源的信息。(資源分爲pod、instance、service等不少種)
describe  輸出指定的一個/多個資源的詳細信息。(通常describe狀態有問題節點,如Pending等)
logs  輸出pod中一個容器的日誌。(若是pod只包含一個容器則能夠省略容器名)
apply  指定Yaml或Json,建立資源。(經過文件或者控制檯輸入)
edit
編輯服務器上定義的資源。(文件默認輸出格式爲YAML。要以JSON格式編輯,請指定「-o json」選項。)json

rolling-update  執行指定ReplicationController的滾動更新。(不中斷業務的更新方式)
delete  刪除一個資源(能夠是pod、instance等)
exec  在容器內部執行命令
 bash

1、get

獲取全部namespace:服務器

kubectl get ns

 

在指定的namespace下獲取資源:app

kubectl -n {$nameSpace} get pods

 

以yaml格式輸出資源:less

kubectl -n {$nameSpace} -o yaml

 

通用格式:分佈式

kubectl get {$sourceType} --all-namespaces

 

經常使用的資源類型({$resourceType})有:ide

  • po(pod)
  • ns(命名空間namespace)
  • instance(實例)
  • svc(service服務):定義了一個 Pod 的邏輯分組,一種能夠訪問它們的策略(微服務)。
  • cm(configMap):存儲全局配置變量的,將分佈式系統中不一樣模塊的環境變量統一到一個對象中管理。
  • ds(deamonSet):在每臺計算節點上運行一個守護進程(如日誌採集等),有時pod處於pending多是由於某個deamonSet沒起來。
  • deploy(deployment):用於啓動(上線/部署)一個Pod或者ReplicaSet。這個若是有問題,那麼其餘依賴它來部署的資源就確定不會正常了。

-o支持的格式有微服務

  • custom-columns=<spec>             根據自定義列名進行輸出,逗號分隔
  • custom-columns-file=<filename>       從文件中獲取自定義列名進行輸出
  • json                         以JSON格式顯示結果
  • jsonpath=<template>               輸出jasonpath表達式定義的字段信息
  • jasonpath-file=<filename>           輸出jsonpath表達式定義的字段信息,來源於文件
  • name                         僅輸出資源對象的名稱
  • wide                         輸出更多信息,好比會輸出node名
  • yaml                         以yaml格式輸出

2、describe 

描述一個資源:oop

kubectl -n {$nameSpace} describe {$resourceType} {$resourceName}

 

3、logs

查看日誌,--tail指定只看最後1000行:

kubectl -n {$nameSpace} logs --tail=1000 {$podName} | less

 

5、apply

經過配置文件名建立一個集羣資源對象。

kubectl apply -f {$yamlorJsonFilePath}

 

6、edit

編輯一個資源文件,這裏以編輯configMap資源對象爲例(yaml格式):

kubectl -n {$nameSpace} edit {$resourceType} {$resourceName} -o yaml

 

7、rolling-update

執行指定ReplicationController的滾動更新。該命令會建立一個新的RC,等新pod徹底起來後刪除一箇舊的pod,以後重複操做,直到替換掉全部的pod。

kubectl rolling-update {$resourceName} -f {$yamlFile} 

 

8、delete

指定資源類型和名字刪除一個資源:

kubectl -n {$nameSpace} delete {$resourceType} {$resourceName}

 

批量刪除資源:

kubectl -n {$nameSpace} delete {$resourceType} -l {$label}={$labelValue}

 

9、exec

exec主要做用是在容器內部執行命令(通常爲查看容器內部日誌),這裏以一個小例子說明kubectl exec命令的做用。

 

場景描述:當咱們用命令行,以root用戶身份登陸機器,要修改HDFS某個目錄權限。

此狀況通常是不容許的,由於在HDFS中,最高權限並非root用戶,而是hdfs用戶,這個時候若是更改,會提示權限不足。以下咱們以root用戶登陸機器,想修改HDFS的/tmp/jbw目錄權限爲777,發現此目錄並不屬於root組,沒權限修改。

 

 

查看/tmp/jbw目錄,發現其屬於hdfs組的hadoop用戶。

 

 

嘗試着用hdfs用戶去執行命令,發現本機上並無hdfs用戶,由於真正的hdfs用戶只存在於真實部署HDFS的容器內部。

 

 

但咱們若是非要想改其權限應該怎麼辦呢?那就用kubectl的exec命令,進入HDFS的任意一個namenode容器內部去更改就好(前提是以容器化方式部署HDFS)。

 一、獲取namenode的pod

kubectl get pods | grep namenode

 

結果如圖所示:

 

 

二、任選一個pod進入(利用kubectl exec命令)

kubectl exec -it hadoop-hdfs-namenode-hdfs1-765788744-21mft bash

 

以下已經進入所選pod: 

 

 

若看到~,表示進入成功(由於當前目錄有所變化,如果在不放心df -h看一下文件系統是否有變化也可)。

若是進入部署HDFS的容器pod內部(這裏是進入了部署namenode的一個pod,理論上datenode也能夠),這些pod裏固然就有hdfs用戶了,接下來以hdfs用戶執行相應修改目錄權限命令便可。

sudo -u hdfs hadoop fs -chmod 777 /tmp/jbw

 

下圖即執行修改目錄權限命令結果:

 

 

exit退出當前pod,再查看一下HDFS上的/tmp/jbw目錄,就會發現,權限已修改!以下圖所示:

 

 

相關文章
相關標籤/搜索