iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 7
0
Software Development

K8S - 30天從擦槍到提槍上陣學習筆記。系列 第 7

day 7 kubectl 常用指令介紹與管理Namespace

kubectl是用於針對K8s cluster 運行命令的接口, 他是用戶最常用來針對API Server發送命令的工具, kubectl採用的是Imperative programming的方式, 從kubectl下達的指令會覆蓋default和任何對應到的環境變量。

這篇只列出常用指令, 指令列表可以參考官網概述

  • 語法

    kubectl [command] [TYPE] [NAME] [flags]
    

    參數說明

    • command: 對資源執行操作的命令, ex: get, create, delete, run....等

    • TYPE: 指定資源類型, 不區分大小寫, 可以使用單數,複數或是類型縮寫, ex: pod, service, deployment...等,

      • 同一種TYPE底下可以指定操作一或多個NAME
        kubectl get pod nginx-pod-1 nginx-pod-2
        
      • 不同 TYPE 可以使用 TYPE/NAME 的方式
        kubectl get pod/nginx-pod-1 service/nginx-service
        
    • NAME: 對象名稱, 有區分大小寫,

    • flags: 命令列選項

  • 輸出object配置語法

    kubectl [command] [TYPE] [NAME] -o=<output_format>
    

    參數說明

    • output_format: 指定輸出格式, 常用格式有
      1. -o wide - 印出資源額外訊息
      2. -o name - 印出資源名稱
      3. -o yaml - 以yaml格式輸出object配置內容
      4. -o json - 以json格式輸出object配置內容
  • Server-side
    決定是否印出Server自動補上的相關資訊, 設定 --server-print=false 表示不印

    kubectl get pods <pod-name> --server-print=false
    
    • 不設定 server-print
      kubectl get pods
      
      回應
      NAME           READY   STATUS    RESTARTS   AGE
      nginx-deploy   1/1     Running   1          2d17h
      
    • 設定 server-print=false
      kubectl get pods nginx-deploy --server-print=false
      
      回應
      NAME           AGE
      nginx-deploy   2d17h
      
  • 常用操作

    • kubectl apply: 以directory的文件內容進行部署或更新

      kubectl apply -f <directory>
      
    • kubectl get: 列出object列表資源詳細狀態

      kubectl get pods
      
    • kubectl describe: 顯示一個或多個資源詳細狀態

      kubectl describe pod nginx-pod-1
      
    • kubectl delete: 從文件或指定的名稱、標籤選擇器、資源選擇緝獲資源中刪除資源

      kubectl delete pods --all
      
    • kubectl exec: 對 pod 中的容器執行命令

      kubectl exec -t pod1 /bin/bash
      
    • kubectl log: 印出Pod的log

      kubectl logs -f pod1
      
    • kubectl port-forward: 轉發一個本地端口到k8s pod上

      kubectl port-forward <pod>/<service> <local port>:<remote k8s port>
      

      1.例: k8s上的某台redis服務開的是 6379 port, 我想在本機 6379 port直接使用

      • 方式1: port-forward pod
      kubectl port-forward redis-master-1 6379:6379
      
      • 方式2: port-forward service
      kubectl port-forward svc/redis-master 6379:6379
      

      採用其中一個方式 port-forward 下來後就可以在本機使用redis-cli查看遠端的資料。

      2.例:k8s上有一台http服務開的是80 port, 我想在本機 1031使用

      kubectl port-forward svc/hello-svc 1031:80
      

      此時就可以直接ping到接口

      curl http://127.0.0.1:1031/api/hello
      
  • 查看其他選項

    kubectl options
    

今天只有看一下概述的部分, 另外還有發現完整列表, 指令超多, 實際應用時會再邊查資料。

Namespace

Namespace 是K8s Cluster層級的資源, 用來定義K8s cluter管理員層級設定相關配置資訊的object。它將cluster分割成各自獨立的區塊讓不同的用戶或環境可以使用, 在我們團隊中會依照專案與環境切割成不同的Namespace來使用 ex: dev-project1, dev-project2, qa-project1, qa-project2。
kubectl create namespace <name> 用來創建namespace, 其中 <name> 只接受英文, 數字, 下底線, 連接線; 在使用kubectl指令時如果有加上-n <namespace> 那指令就只會作用在指定的namespac上面;另外同一個cluster但是不同namespace中是可以使用同一個資源對象名稱的,跨namespace的pod之間也可以溝通, 因為 namespace 只提供資源對象的隔離, 網路隔離不在它的範疇。

今日小結

kubectl 上面列的常用指令在我開發過程中最常用的是 port-forward, 這樣不僅不需要在本機架設服務的環境, 也可以確保接到的版本是正確的版本!


上一篇
day 6 YAML上的資源配置
下一篇
day 8 Pod(1)-設計模式, 容器管理
系列文
K8S - 30天從擦槍到提槍上陣學習筆記。30

尚未有邦友留言

立即登入留言