1. 程式人生 > >Kubernetes之kubectl常用命令使用指南 1 建立和刪除

Kubernetes之kubectl常用命令使用指南 1 建立和刪除

                       

這裡寫圖片描述
kubectl是一個用於操作kubernetes叢集的命令列介面,通過利用kubectl的各種命令可以實現各種功能,是在使用kubernetes中非常常用的工具。這裡我們會通過一些簡單的例項來展現其中一些高頻命令的使用方法。
更為重要的是這些命令使用的場景以及能夠解決什麼樣的問題。這篇文章我們來介紹一下建立和刪除相關的命令。

常用命令

kubectl建立和刪除相關,本文將會簡單介紹一下如下命令

                       
項番 命令 說明
No.1 run 在叢集上執行一個映象
No.2 create 使用檔案或者標準輸入的方式建立一個資源
No.3 delete 使用檔案或者標準輸入以及資源名稱或者標籤選擇器來刪除某個資源

事前準備

版本

[[email protected] tmp]# kubectl versionClient Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:57:25Z"
, GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"
}Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:52:34Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}[[email protected] tmp]#
  • 1
  • 2
  • 3
  • 4

叢集構成

一主三從的Kubernetes叢集

                                       
項番 型別 Hostname IP
No.1 Master ku8-1 192.168.32.131
No.1 Node ku8-2 192.168.32.132
No.1 Node ku8-3 192.168.32.133
No.1 Node ku8-4 192.168.32.134
[root@ku8-1 tmp]# kubectl get nodesNAME             STATUS    AGE192.168.32.132   Ready     12m192.168.32.133   Ready     11m192.168.32.134   Ready     11m[root@ku8-1 tmp]# 
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

kubectl run

執行一個映象

kubectl run和docker run一樣,它能將一個映象執行起來,我們使用kubectl run來將一個sonarqube的映象啟動起來。

[root@ku8-1 tmp]# kubectl run sonarqube --image=192.168.32.131:5000/sonarqube:5.6.5 --replicas=1 --port=9000deployment "sonarqube" created[root@ku8-1 tmp]#
   
  • 1
  • 2
  • 3

讓我們來看看這條kubectl run之後,kubernetes做了什麼,從它的提示看到建立了一個deployment(1.4之後推薦的方式)。

確認Deployment

[root@ku8-1 tmp]# kubectl get deploymentNAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGEsonarqube   1         1         1            1           5m[root@ku8-1 tmp]# 
   
  • 1
  • 2
  • 3
  • 4

確認pod

kubernetes將映象執行在pod中以方便實施卷和網路共享等管理,使用get pods可以清楚的看到生成了一個pod

[root@ku8-1 tmp]# kubectl get podsNAME                         READY     STATUS    RESTARTS   AGEsonarqube-1880671902-s3fdq   1/1       Running   0          6m[root@ku8-1 tmp]# 
   
  • 1
  • 2
  • 3
  • 4

kubectl delete

讓我們來試著使用kubectl delete刪除一下這些建立的物件

刪除pod

[root@ku8-1 tmp]# kubectl delete pods sonarqube-1880671902-s3fdqpod "sonarqube-1880671902-s3fdq" deleted[root@ku8-1 tmp]#
   
  • 1
  • 2
  • 3

確認結果

可以看到剛剛生成的sonarqube-1880671902-s3fdq正在結束(Terminating),隨之一個新的sonarqube-1880671902-n75d2正在建立,這是正是確保replicas為1的動作。

[root@ku8-1 tmp]# kubectl get podsNAME                         READY     STATUS              RESTARTS   AGEsonarqube-1880671902-n75d2   0/1       ContainerCreating   0          11ssonarqube-1880671902-s3fdq   0/1       Terminating         0          10m[root@ku8-1 tmp]#
   
  • 1
  • 2
  • 3
  • 4
  • 5

再次確認

稍等之後再次確認,發現replicas仍然保持在1個的狀態

[root@ku8-1 tmp]# kubectl get podsNAME                         READY     STATUS    RESTARTS   AGEsonarqube-1880671902-n75d2   1/1       Running   0          40s[root@ku8-1 tmp]# kubectl get deploymentsNAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGEsonarqube   1         1         1            1           15m[root@ku8-1 tmp]#
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

刪除deployment

直接刪除pod觸發了replicas的確保機制,那麼我們刪除deployment

[root@ku8-1 tmp]# kubectl delete deployment sonarqubedeployment "sonarqube" deleted[root@ku8-1 tmp]#
   
  • 1
  • 2
  • 3

結果確認

通過使用deployment進行刪除,則全部刪除。

[root@ku8-1 tmp]# kubectl get podsNo resources found.[root@ku8-1 tmp]# kubectl get deploymentsNo resources found.[root@ku8-1 tmp]#
   
  • 1
  • 2
  • 3
  • 4
  • 5

kubectl create

使用kubectl run在設定很複雜的時候需要非常長的一條語句,敲半天也很容易出錯,也沒法儲存,在碰到轉義字元的時候也經常會很抓狂,所以更多場景下會使用yaml或者json檔案,而使用kubectl create或者delete就可以利用這些yaml檔案。 
比如,我們使用如下的方式來分別建立mysql和sonarqube的RC。

事前準備

[[email protected]1 tmp]# ls yamlsmysql.yaml  sonar.yaml[[email protected]1 tmp]# cat yamls/mysql.yaml ---kind: ReplicationControllerapiVersion: v1metadata:  name: mysqlspec:  replicas: 1  selector:    name: mysql  template:    metadata:      labels:        name: mysql    spec:      containers:      - name: mysql        image: 192.168.32.131:5000/mysql:5.7.16        ports:        - containerPort: 3306          protocol: TCP        env:          - name: MYSQL_ROOT_PASSWORD            value: "hello123"[[email protected]1 tmp]# [[email protected]1 tmp]# cat yamls/sonar.yaml ---kind: ReplicationControllerapiVersion: v1metadata:  name: sonarqubespec:  replicas: 1  selector:    name: sonarqube  template:    metadata:      labels:        name: sonarqube    spec:      containers:      - name: sonarqube        image: 192.168.32.131:5000/sonarqube:5.6.5        ports:        - containerPort: 9000          protocol: TCP[[email protected]1 tmp]# 
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

建立(MYSQL)

[root@ku8-1 tmp]# kubectl create -f yamls/mysql.yaml replicationcontroller "mysql" created[root@ku8-1 tmp]#
   
  • 1
  • 2
  • 3

確認(MYSQL)

[root@ku8-1 tmp]# kubectl get rcNAME      DESIRED   CURRENT   READY     AGEmysql     1         1         1         1m[root@ku8-1 tmp]# kubectl get podNAME          READY     STATUS    RESTARTS   AGEmysql-nl8sq   1/1       Running   0          1m[root@ku8-1 tmp]# 
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

建立(SONARQUBE)

[root@ku8-1 tmp]# kubectl create -f yamls/sonar.yaml replicationcontroller "sonarqube" created[root@ku8-1 tmp]# 
   
  • 1
  • 2
  • 3

確認(SONARQUBE)

[root@ku8-1 tmp]# kubectl get podsNAME              READY     STATUS    RESTARTS   AGEmysql-nl8sq       1/1       Running   0          2msonarqube-p1cnj   1/1       Running   0          46s[root@ku8-1 tmp]# kubectl get rcNAME        DESIRED   CURRENT   READY     AGEmysql       1         1         1         2msonarqube   1         1         1         51s[root@ku8-1 tmp]# 
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

刪除(SONARQUBE)

使用yaml檔案也可以直接刪除所創建出來的內容,比如我們先刪除剛剛建立的sonarqube相關。

[root@ku8-1 tmp]# kubectl delete -f yamls/sonar.yaml replicationcontroller "sonarqube" deleted[root@ku8-1 tmp]# 
   
  • 1
  • 2
  • 3

確認(SONARQUBE)

[root@ku8-1 tmp]# kubectl get podsNAME          READY     STATUS    RESTARTS   AGEmysql-nl8sq   1/1       Running   0          4m[root@ku8-1 tmp]# kubectl get rcNAME      DESIRED   CURRENT   READY     AGEmysql     1         1         1         4m[root@ku8-1 tmp]# 
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

刪除(MYSQL)

[root@ku8-1 tmp]# kubectl delete -f yamls/mysql.yaml replicationcontroller "mysql" deleted[root@ku8-1 tmp]#
   
  • 1
  • 2
  • 3

確認(MYSQL)

[root@ku8-1 tmp]# kubectl get podsNo resources found.[root@ku8-1 tmp]# kubectl get rcNo resources found.[root@ku8-1 tmp]#
   
  • 1
  • 2
  • 3
  • 4
  • 5

Deployment方式:準備

RC在1.4之後已經被建議用Deployment方式替換,主要只需要替換kind和apiversion和selector即可,1.5和1.6在此處也略有區別。

[[email protected]1 tmp]# ls yamls/mysql.yaml  sonar.yaml[[email protected]1 tmp]# cat yamls/mysql.yaml ---kind: DeploymentapiVersion: extensions/v1beta1metadata:  name: mysqlspec:  replicas: 1  template:    metadata:      labels:        name: mysql    spec:      containers:      - name: mysql        image: 192.168.32.131:5000/mysql:5.7.16        ports:        - containerPort: 3306          protocol: TCP        env:          - name: MYSQL_ROOT_PASSWORD            value: "hello123"[[email protected]1 tmp]# [[email protected]1 tmp]# cat yamls/sonar.yaml ---kind: DeploymentapiVersion: extensions/v1beta1metadata:  name: sonarqubespec:  replicas: 1  template:    metadata:      labels:        name: sonarqube    spec:      containers:      - name: sonarqube        image: 192.168.32.131:5000/sonarqube:5.6.5        ports:        - containerPort: 9000          protocol: TCP[[email protected]1 tmp]# 
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

建立

有多個yaml檔案的時候,可以使用如下方式一下全部建立

[root@ku8-1 tmp]# kubectl create -f yamls/deployment "mysql" createddeployment "sonarqube" created[root@ku8-1 tmp]# 
   
  • 1
  • 2
  • 3
  • 4

確認

[root@ku8-1 tmp]# kubectl get podsNAME                         READY     STATUS    RESTARTS   AGEmysql-478535978-2l7kq        1/1       Running   0          3msonarqube-3574384362-x3mg2   1/1       Running   0          3m[root@ku8-1 tmp]# kubectl get deploymentsNAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGEmysql       1         1         1            1           3msonarqube   1         1         1            1           3m[root@ku8-1 tmp]#
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

刪除

同樣,有多個yaml檔案的時候,可以使用如下方式一下全部刪除

[root@ku8-1 tmp]# kubectl delete -f yamls/deployment "mysql" deleteddeployment "sonarqube" deleted[root@ku8-1 tmp]# 
   
  • 1
  • 2
  • 3
  • 4

確認

[root@ku8-1 tmp]# kubectl get podsNo resources found.[root@ku8-1 tmp]# kubectl get deploymentsNo resources found.[root@ku8-1 tmp]#
   
  • 1
  • 2
  • 3
  • 4
  • 5

總結

這篇文章通過幾個最簡單的命令熟悉瞭如何使用kubectl對映象進行建立和刪除,在後面我們會進一步介紹一些常用的命令。

           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow