文章目錄
一、概述
Kubectl 是管理k8s集羣的命令行工具,通過生成的 json 格式傳遞給 apiserver 進行創建、查
看、管理的操作。
二、kubectl 語法
2.1、語法格式
可以使用–help來查詢語法格式
[ root@localhost bin ]# kubectl --help
kubectl 的語法格式:
kubectl [command] [TYPE] [NAME] [flags]
1、command
指定要在一個或多個資源進行的操作,例如create,apply,get,describe,delete。
2、TYPE
指定資源類型。資源類型不區分大小寫,可以指定單數,複數或縮寫形式。
3、NAME
- 注意點:
名稱有大小寫的區分。
如果省略名稱,則顯示所有資源的詳細信息,如“kubectl get pods”。
在對多個資源執行操作時,我們可以按類型和名稱指定每個資源,或指定一個或多個文件
-
要按類型和名稱指定資源:
-
如果資源類型相同,則對資源進行分組
例:
kubectl get pod example-pod1 example-pod2
- 分別指定多種資源類型
例:
kubectl get pod/example-pod1 replicationcontroller/example-rc1
- 要使用一個或多個文件指定資源
-f file1 -f file2 -f file<#>
//注意使用YAML而不是JSON格式的文件,因爲YAML往往更加用戶友好,特別是對於配置文件。
例:
kubectl get pod -f ./pod.yaml
4、flags
指定的可選標誌,不過值得注意的是,使用命令行指定參數會覆蓋默認值以及相關的環境變量。
例如,我們可以使用-s或–server標誌來指定Kubernetes API服務器的地址和端口。
2.2、commond命令詳情瞭解
- 基礎命令:
類型 | 命令 | 描述 |
---|---|---|
基礎命令 | create | 通過文件名或標準輸入創建資源 |
expose | 將一個資源公開爲一個新的Kubernetes Service | |
run | 在集羣中運行一個指定的鏡像 | |
set | 爲 objects 設置一個指定的特徵 | |
get | 顯示一個或多個資源 | |
explain | 查看資源的文檔 | |
edit | 在服務器上編輯一個資源 | |
delete | 通過文件名、標準輸入、資源名稱或標籤選擇器來刪除資源 |
- 部署命令:
類型 | 命令 | 描述 |
---|---|---|
部署命令 | rollout | 管理資源的發佈 |
scale | 爲Deployment,ReplicaSet,Replication Controller 或 Job設置一個新的副本數量 | |
autoscale | 自動調整一個Deployment,ReplicaSet,Replication Controller 或 Job的副本數量 |
- 集羣管理命令:
類型 | 命令 | 描述 |
---|---|---|
集羣管理命令 | certificate | 修改證書資源 |
cluster-info | 顯示集羣信息 | |
top | 顯示資源(CPU/Memory/Storage)使用。需要Heapster運行 | |
cordon | 標記節點不可調度 | |
uncordon | 標記節點可調度 | |
drain | 驅逐節點上的應用,準備下線維護 | |
taint | 更新一個或多個node上的taint標記 |
- 調試命令:
類型 | 命令 | 描述 |
---|---|---|
調試命令 | describe | 顯示指定資源或資源組的詳細信息 |
logs | 在一個Pod中打印一個容器日誌。如果Pod只有一個容器, 容器名稱是可選的 | |
attach | 附加到一個運行的容器 | |
exec | 執行命令到容器 | |
port-forward | 轉發一個或多個本地端口到一個pod | |
proxy | 運行一個proxy到KubemetesAPIserver | |
cp | 拷貝文件或目錄到容器中 | |
auth | 檢查授權 |
三、命令的使用
#常用語法:
kubectl run NAME --image=image [--env="key=value"參數] [--port=port端口] [--replicas=replicas副本集] [--dry-run=bool狀態] [--overrides=inline-json] [--command命令] -- [COMMAND] [args...] [options]`
例1:
//根據上面的格式創建一個名字爲nginx-deployment 的資源Pod,鏡像是nginx,端口是80,有三個副本數量。
[root@master1 ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx-deployment created
[root@master1 ~]# kubectl get pods #查看剛剛創建的Pod資源
NAME READY STATUS RESTARTS AGE
nginx-dbddb74b8-r9gp4 1/1 Running 1 12h
nginx-deployment-5477945587-4rvlq 1/1 Running 0 2m53s
nginx-deployment-5477945587-kd9m8 1/1 Running 0 2m53s
nginx-deployment-5477945587-zsv7l 1/1 Running 0 2m53s
[root@master1 ~]# kubectl get pods -o wide #查看3個副本所在的node節點
[root@master1 ~]# kubectl get all #查看default空間內的所有資源
刪除Pod資源nginx-deployment
[root@master1 ~]# kubectl delete deploy/nginx-deployment
3.1、項目的生命週期
- 創建->發佈->更新->回滾->刪除
3.1.1、創建nginx的Pod資源
[root@master1 ~]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx created
[root@master1 ~]# kubectl get pods,deployment,replicaset
NAME READY STATUS RESTARTS AGE
pod/nginx-7697996758-2cm9d 1/1 Running 0 2m54s
pod/nginx-7697996758-2vbqs 1/1 Running 0 2m54s
pod/nginx-7697996758-kst46 1/1 Running 0 2m54s
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.extensions/nginx 3 3 3 3 2m54s
NAME DESIRED CURRENT READY AGE
replicaset.extensions/nginx-7697996758 3 3 3 2m54s
//創建Pod資源的同時也創建了3個控制器和3個副本集
3.1.2、發佈nginx service提供LVS負載均衡的功能
#常用語法:
kubectl expose (-f FILENAME | TYPE NAME) [--port=port羣集之間內部通信的端口] [--protocol=TCP|UDP|SCTP] [--target-port對外暴露的端口=number-or-name] [--name=name指定名稱] [--external-ip=external-ip-of-service] [--type=type指定類型] [options]
[root@master1 ~]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
這裏的NodePort提供了一個負載均衡,也就是所有node節點的48656端口都可訪問nginx-service。
//查看網絡狀態詳細信息
[root@master1 ~]# kubectl get pods -o wide
或者查看後端提供負載均衡的節點
[root@master1 ~]# kubectl get endpoints
- kubernetes裏kube-proxy支持三種模式,在v1.8之前我們使用的是iptables 以及 userspace兩種模式,在kubernetes 1.8之後引入了ipvs模式。所以所有的node節點都可安裝ipvsadmin工具,用於查看負載均衡的服務端口
[root@node1 ~]# ipvsadm -L -n
[root@node2 ~]# ipvsadm -L -n
- 在node1和node2節點上查看都有LVS負載均衡功能,說明服務發佈成功!通過任意node節點:端口48656都可以訪問。
在master節點查看Pod資源的日誌
[root@master1 ~]# kubectl get pods
接下來用瀏覽器訪問Pod資源,然後在查看相對應的日誌內容。
3.1.3、更新nginx 爲1.14版本
首先在谷歌瀏覽器中打開開發者選項—>F5刷新訪問—>找到network-- ->點擊name —>找到headers頭部信息,就可以看到nginx版本信息。
在master1節點上
//通過set命令來獲取更新的修改模板
[root@master1 ~]# kubectl set --help
//更新nginx爲1.14版本
[root@master1 ~]# kubectl set image deployment/nginx nginx=nginx:1.14
//處於動態監聽狀態
[root@master1 ~]# kubectl get pods -w
更新過程中變化:
1、容器資源更新過程中不能重啓
2、容器更新是先創建一個新的容器,再刪除一個原有的容器,完成更新。
3、更新過程中保證副本數量是3個
這個時候再次刷新並查看瀏覽器的nginx版本
3.1.4、業務回滾上一個版本
如果業務更新完,大量用戶訪問出現error問題,那麼就要業務回滾上一個版本。
#查看歷史版本
[root@master1 ~]# kubectl rollout history deployment/nginx
#執行回滾到上一次版本
[root@master1 ~]# kubectl rollout undo deployment/nginx
#檢查回滾狀態
[root@master1 ~]# kubectl rollout status deployment/nginx
//再次查看歷史版本,在瀏覽器中刷新查看版本
3.1.5、刪除業務
查看deployment資源的名稱
[root@master1 ~]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 3 3 3 3 164m
1、刪除nginx項目的 deployment資源
[root@master1 ~]# kubectl delete deployment/nginx
2、刪除nginx的 service資源
[root@master1 ~]# kubectl get svc
3.2、其他的命令
- 1、查看具體資源的詳細信息
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) Pod資源名稱
例:查看deployment資源的詳細信息
kubectl describe deployment/nginx
- 2、進入相應pod中
kubectl exec POD [-c CONTAINER] -- COMMAND [args...] [options]
- 3、查看生成的YAML格式文件
kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml
- 4、查看生成的JSON格式文件
kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json
- 5、生成YAML 、 JSON文件導出
kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json(yaml) > test.json(yaml)
- 6、將現有資源進行導出
kubectl get svc/nginx-svc --export -o yaml > nginx-svc.yaml
- 7、測試命令正確性,不執行(類似shell腳本中的sh -n)
kubectl run nginx --image=nginx --port=80 --replicas=2 --dry-run