文章目錄
Kubectl是管理K8S集羣的命令行工具,通過生成的json格式傳遞給apiserver進行創建、查看、管理的操作。
一、常用命令
#幫助信息:kubectl --help
具體列表就不一一列出了,僅列出常用的幾條命令
命令 | 用途 |
---|---|
create | 創建資源 |
expose | 把資源提供出去被外部直接訪問 |
run | 在集羣中運行一個指定的鏡像 |
set | 爲對象設置一個指定的特徵 |
get | 顯示 |
edit | 編輯某一個資源 |
delete | 刪除 |
rollout | 回滾(更新了一個資源,出現了問題或不兼容,所以需要還原回原本的狀態,執行回滾) |
scale | 創建多個副本 |
autoscale | 自動調整副本數量 |
certificate | 修改 certificate 資源(證書授權時使用) |
cluster-info | 顯示集羣信息 |
logs | 輸出容器在pod中的日誌 |
describe | 查看指定信息 |
exec | 進入資源 |
cp | 複製 |
1、run創建
kubectl run NAME --image=image [–env=“key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [–command] --[COMMAND] [args…] [options]
NAME:資源名稱 --image=:指向鏡像 --env=:指定參數,變量 --port=:指定端口 --replicas:指定副本集數量 --dry-run=:試運行 --overrides=:是否在線 --command:參數指令
示例:
多副本有效的創建
#創建資源名稱nginx-deployment,鏡像nginx,端口80,副本集3個
[root@master01 dashboard]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3
2、get查看
① kubectl get pods:查看pods資源
使用kubectl get pods -w可以自動去監控創建的狀態
[root@master01 dashboard]# kubectl get pods
② kubectl get pods -o wide:查看資源詳細狀態及所在節點
[root@master01 dashboard]# kubectl get pods -o wide
③ kubectl get all :查看全部資源信息,包括service的資源信息(提供對外資源),deployment控制器的資源,replicaset副本集資源
[root@master01 dashboard]# kubectl get all
pod資源的創建會伴隨着控制器資源及副本集資源的創建
3、describle查看
可以查看某個資源的信息
[root@master01 ~]# kubectl describe pod nginx-deployment-5477945587-7dc92
另外,再查看資源詳細信息下面的events裏面,相當於是一個日誌記錄
4、exec進入pod
#與進入docker容器類似,使用exec進入資源的bash環境
[root@master01 ~]# kubectl exec -it nginx-deployment-5477945587-7dc92 bash
5、delete刪除
#刪除單個的pod
[root@master01 dashboard]# kubectl delete deploy/nginx
#刪除多個pods資源
[root@master01 dashboard]# kubectl delete deploy/nginx-deployment
二、項目週期(演示)
#項目的完整的生命週期:創建——發佈——更新——回滾——刪除
1、創建nginx
#創建nginx資源,名字nginx,鏡像nginx最新鏡像,端口80,3個副本集
[root@master01 dashboard]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3
[root@master01 dashboard]# kubectl get pods
#查看pods資源,deployment控制器資源,replicaset副本集資源
[root@master01 dashboard]# kubectl get pods,deployment,replicaset
2、發佈nginx service(提供負載均衡的功能)
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]
expose:發佈 -f:指定文件 --port:對外提供的端口 -target-port:目標端口 -name:資源名稱
① 發佈
- –type類型:NodePort形式對外提供服務
[root@master01 dashboard]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
② 查看service資源
[root@master01 dashboard]# kubectl get service
類型是NodePort,所以使用nodeIP(任何節點)加上外部端口進行訪問
kube-porxy提供了負載均衡,所以不管訪問哪個節點都可以訪問到裏面的資源
③ 驗證負載均衡功能
kubernetes裏kube-porxy支持三種模式,在v1.8之前我們使用的是iptables以及userspace兩種模式,在v1.8之後引入了ipvs模式
在node01操作,查看負載均衡端口
#下載管理ipvs的工具
[root@node01 ~]# yum install ipvsadm -y
#查看ipvs負載均衡
[root@node01 ~]# ipvsadm -L -n
可以看到,兩個node節點都做了負載均衡,不管訪問哪個node節點加上對應的端口,都可以訪問到3個副本集服務資源
#訪問驗證
訪問前先看下日誌記錄,三個資源都還沒有訪問記錄
這時進行訪問,兩個nodeIP均嘗試下訪問
可以看到兩個node均可以訪問,現在我們再看下每個資源的日誌情況
③ 查看pods資源網絡狀態詳細信息
[root@master01 dashboard]# kubectl get pods -o wide
④ 查看關聯後端的節點
[root@master01 dashboard]# kubectl get endpoints
⑤ 查看資源對象簡寫
[root@master01 dashboard]# kubectl api-resources
3、更新版本
① 查看當前版本號
進入網頁——開發者工具——Network——找到訪問的記錄——Header——找到Server看到當前版本
② 變更版本爲1.14
#獲取修改模板
[root@master01 ~]# kubectl set image --help
kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
#按照模板變更
[root@master01 ~]# kubectl set image deployment/nginx nginx=nginx:1.14
#動態監聽顯示狀態
[root@master01 ~]# kubectl get pods -w
原本的三個資源沒有了,出現了三個新的資源
結論:
1.容器是不可以被重啓的,要想實現更新操作,是需要刪掉重新創建的(等同於重啓)。總而言之:容器只能被刪除,然後再創建。
2.更新的過程是逐步進行的,在一個新的資源創建好以後纔會準備刪除一箇舊的資源。而由於3副本集的原因,可運行的資源始終有3個。並且replicaset副本集也會進行更新
③ 驗證版本更新
重新訪問發現版本號已由原nginx/1.17.10變更爲nginx/1.14.2
4、回滾
假設版本更新後有bug,需要還原爲之前的版本,執行回滾(業務不會停止)
[root@master01 ~]# kubectl rollout --help
- history 顯示 rollout 歷史
- pause 標記提供的 resource 爲中止狀態
- resume 繼續一個停止的 resource
- status 顯示 rollout 的狀態
- undo 撤銷上一次的 rollout
① 查看歷史版本
[root@master01 ~]# kubectl rollout history deployment/nginx
② 執行回滾
會回滾到上一個狀態
[root@master01 ~]# kubectl rollout undo deployment/nginx
③ 檢查回滾狀態
[root@master01 ~]# kubectl rollout status deployment/nginx
#再次檢查history歷史狀態,會發現狀態又疊加了
④ 再次驗證當前版本,會發現發現版本號已經又變回原本的nginx/1.17.10版本
建議瀏覽器清空歷史記錄後訪問,否則會有緩存
5、刪除nginx
① 查看deployment
[root@master01 ~]# kubectl get deployment
② 刪除(刪除時,pod資源,控制器資源及副本集資源會一起刪除,但是提供服務的service資源不會刪除)
[root@master01 ~]# kubectl delete deployment/nginx
③ 刪除service資源
[root@master01 ~]# kubectl delete service/nginx-service
這樣纔算是徹底刪除nginx