1. 程式人生 > 其它 >Kuberbetes學習記錄(三):kubectl和YAML

Kuberbetes學習記錄(三):kubectl和YAML

1. 常用指令

1.1 建立一個java測試專案

kubectl create deployment java-web --image=lizhenliang/java-demo

 

apply和create的區別:

apply是資源的建立和更新,create只能用於資源建立,再更新yaml之後是不能用create的

所以直接用apply代替create就可以

 

1.2 暴露埠

這裡暴露的埠是k8s內部訪問的埠,外部訪問埠需要在pod資訊檢視

實際上是建立了一個service資源

kubectl expose deployment java-web --port=80 --target-port=8080
--name=java-web-service --type=NodePort

 

檢視暴露的埠資訊,可以看到之前部署的那個java應用對外暴露在30850埠

 

1.3 模擬升級

如果應用上線之後需要升級,可以通過修改yaml的映象源或者採用命令列的形式來修改

比如我們要把之前的java-web資源中的景象由java-demo更換為tomcat

kubectl set image deployment java-web java-demo=tomcat

 

檢視pod的執行狀況,可以看到在一個升級操作中,在新版本上線之前,舊版本不會停止執行

 

檢視一個資源的歷史版本資訊

kubectl rollout history deployment/java-web

 

可以看到當前有兩個版本

 

1.4 回滾

 回滾到上一個版本

kubectl rollout undo deployment/java-web

 

回滾到指定版本

kubectl rollout undo deployment/java-web --to-revision=3

 

注意只能回滾到history能看到的歷史版本,再往前是沒辦法回滾的

 

1.5 擴容

kubectl scale deployment java-web --replicas=10

 

1.6 刪除

刪除資源不能直接刪除pod,要刪除其控制器,同時也要刪除其service

kubectl delete deployment/java-web
kubectl delete service
/java-web-service

 

1.7 指令文件

Kubernetes kubectl 命令表 _ Kubernetes(K8S)中文文件_Kubernetes中文社群

 

2. YAML檔案

2.1 YAML檔案格式

YAML是一種簡潔的非標記語言

語法格式:

  • 縮排表示層級關係
  • 不支援製表符 "tab" 縮排,使用空格縮排
  • 通常開頭縮排2個空格
  • 字元後縮排1個空格,比如冒號、逗號
  • “---” 表示YAML格式,一個檔案的開始
  • "#" 表示註釋

 

2.2 一個簡單的YAML檔案

 

整個YAML檔案大體上可以分為定義控制器和定義被控制物件

在控制器部分:

  • apiVersion:當前版本
  • kind:控制器型別,其中deployment就是用來部署無狀態應用的
  • metadata:一些控制器的元資訊,比如它之下的控制器名稱name和控制器所在的名稱空間namespace
  • spec:控制器的資源規格,控制3個副本數、標籤選擇器選擇app:nginx這一組pod
  • template:pod的模板,其中包含了一些資訊
    • metadata:pod的元資訊,其中包含了一個標籤資訊app:nginx,表示這組pod受上面定義的deployment管理
    • spec:Pod的資源規格,包含了容器配置
      • containers:容器配置,主要包含容器名稱、映象源、暴露埠、資料卷掛載等

 

YAML檔案關鍵字太多,格式太亂了記不住

可以使用以下兩個命令匯出YAML檔案

kubectl create  deployment nginx --image=nginx:1.14 -o yaml --dry-run=client > my-deploy.yaml

 

 

對於一個正在執行的pod,也可以通過get命名匯出

這是一個比較全的YAML模板

kubectl get deploy nginx -o yaml > nginx-deploy.yaml

 

可以用kebuctl explain來檢視關鍵字的寫法,以及其下級有什麼欄位