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