k8s筆記5--k8s常見命令

昕光xg發表於2020-12-14

kubectl 具備豐富的命令,其使用方法如下:
kubectl [flags] [options]
通過 "kubectl --help"來查詢指定命令的更多資訊;
通過 “kubectl options” 來查詢所用命令列選項 (適用於所有命令).

此處根據 kubectl --help 將各類命令加以分類,後續將按照分類補充各命令的使用案例。

1 Basic Commands (Beginner)

  1. create
    Create a resource from a file or from stdin.
    1) 通過dry-run 的方式建立一個deployment 基本資訊
    kubectl create deployment my-web --image=nginx --dry-run=client -o yaml >my-web.yaml
    通過 apply -f 建立實際的deployment
    kubectl apply -f my-web.yaml 
    
  2. expose
    使用 replication controller, service, deployment 或者 pod 並暴露它作為一個新的 Kubernetes Service
    $ kubectl expose deployment my-web --port=5000 --target-port=5000 --type=NodePort
    
    $ kubectl get svc
    NAME     TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
    my-web   NodePort   10.1.175.63   <none>        5000:32020/TCP   4m5s
    
    此時通過nodeIP:NodePort可以正常訪問my-web 中的5000埠: 在這裡插入圖片描述
  3. run
    在叢集中執行一個指定的映象
    在當前名稱空間中建立一個pod,容器埠為80
    kubectl run nginx2  --image=nginx:latest --port=80
    等價:
    apiVersion: v1
    kind: Pod
    metadata:
     creationTimestamp: null
     labels:
       run: nginx2
     name: nginx2
    spec:
     containers:
     - image: nginx:latest
       name: nginx2
       ports:
       - containerPort: 80
       resources: {}
     dnsPolicy: ClusterFirst
     restartPolicy: Always
    status: {}
    
  4. set
    為 objects 設定一個指定的特徵
    1) 設定 my-web 中的容器nginx的映象為nginx:latest
    kubectl set image deployment/my-web nginx=nginx:latest
    2) 設定 my-web 中的環境變數 env_dir為/local
    kubectl set env deployment/my-web env_dir=/local
    3) 檢視所有pod的環境變數
    kubectl set env  pods --all --list
    

2 Basic Commands (Intermediate)

  1. explain
    檢視資源的文件
    1)檢視pod 的所有子欄位的文件
    kubectl explain pods
    2)檢視pod的spec.containers 的所有子欄位文件
    kubectl explain pods.spec.containers
    
  2. get
    顯示一個或更多 resources
    1) 獲取 pod 資訊
    $ kubectl get pods  -n=test-online 等價 kubectl get pods  --namespace=test-online
    NAME                  READY   STATUS    RESTARTS   AGE
    web-96d5df5c8-4q4vx   1/1     Running   0          62m
    $ kubectl get pods  --namespace=test-online  -o wide
    NAME                  READY   STATUS    RESTARTS   AGE   IP            NODE                              NOMINATED NODE   READINESS GATES
    web-96d5df5c8-4q4vx   1/1     Running   0          63m   10.244.1.15   test02.i.xxx.net   <none>           <none> 
    
    jsonpath 可以檢視pod資訊指定key的資料,若直接為"{}", 則返回一個未格式化的大json字串
    $ kubectl get pod  web-96d5df5c8-4q4vx -o jsonpath="{.metadata.labels}"
    {"app":"web","pod-template-hash":"96d5df5c8"}
    
    2) 檢視 configmap 資訊
    $ kubectl get configmap  -n=kube-public
    NAME           DATA   AGE
    cluster-info   1      3d23h
    
  3. edit
    在伺服器上編輯一個資源
    1) 編輯 deployment my-web
    kubectl edit deployment/my-web
    2) 編輯 pod nginx2
    kubectl edit pod nginx2 [-o json 以json格式編輯]
    
  4. delete
    Delete resources by filenames, stdin, resources and names, or by resources and label selector
    1) 刪除pod nginx2
    kubectl delete pod nginx2
    

3 Deploy Commands

  1. rollout
    Manage the rollout of a resource
1) 回滾到前一個版本
kubectl rollout undo deployment/my-web 
2)檢視回滾歷史記錄
kubectl rollout history deployment/my-web
  1. scale
    Set a new size for a Deployment, ReplicaSet or Replication Controller
    kubectl scale --replicas=2 deployment/my-web
    
  2. autoscale
    自動調整一個 Deployment, ReplicaSet, 或者 ReplicationController 的副本數量
    kubectl autoscale deployment my-web --min=2 --max=3
    此時可以通過hpa 檢視pod數量,若再次scale為1,則過一會兒會自動伸縮為2
    $ kubectl get hpa
    NAME     REFERENCE           TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
    my-web   Deployment/my-web   <unknown>/80%   2         3         2          111s
    若想取消自動伸縮,則直接delete hpa 即可 :
    kubectl delete hpa my-web
    

4 Cluster Management Commands

  1. certificate
    修改 certificate 資源.
  2. cluster-info
    顯示叢集資訊
    1) 檢視叢集基礎資訊,包括master 和kubedns
    $ kubectl cluster-info 
    Kubernetes master is running at https://10.120.75.102:6443
    KubeDNS is running at https://10.120.75.102:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    2) 診斷叢集
    kubectl cluster-info dump
    輸出很多叢集診斷資訊
    
  3. top
    Display Resource (CPU/Memory/Storage) usage.
    kubectl top node [node-name 檢視指定node的cpu mem資訊] # (不指定node-name)顯示所有節點cpu 記憶體使用情況
    kubectl top pod -A # 顯示所有pod 的cpu 和 記憶體使用情況
    
  4. cordon
    標記 node 為 unschedulable
    kubectl cordon node-name 
    標記不可排程後,get nodes 發現 status 變為 Ready,SchedulingDisabled 
    
  5. uncordon
    標記 node 為 schedulable
    kubectl uncordon node-name 
    
  6. drain
    Drain node in preparation for maintenance
    該操作為驅逐或者刪除node上的pod,常見常見為磁碟爆了會出現pod被驅逐現象
    $ kubectl drain node-name
    
  7. taint
    更新一個或者多個 node 上的 taints

5 Troubleshooting and Debugging Commands

  1. describe
    顯示一個指定 resource 或者 group 的 resources 詳情
  2. logs
    輸出容器在 pod 中的日誌
  3. attach
    Attach 到一個執行中的 container
  4. exec
    在一個 container 中執行一個命令;
    當前同時支援 pod cmd 和 pod -- cmd模式,後續會拋棄pod cmd 模式;
    $ kubectl exec web-96d5df5c8-4q4vx  -- hostname
    web-96d5df5c8-4q4vx
    
  5. port-forward
    Forward one or more local ports to a pod
  6. proxy
    執行一個 proxy 到 Kubernetes API server
  7. cp
    複製 files 和 directories 到 containers 和從容器中複製 files 和 directories.
  8. auth
    Inspect authorization

6 Advanced Commands

  1. diff
    Diff live version against would-be applied version
  2. apply
    通過檔名或標準輸入流(stdin)對資源進行配置
  3. patch
    使用 strategic merge patch 更新一個資源的 field(s)
  4. replace
    通過 filename 或者 stdin替換一個資源
  5. wait
    Experimental: Wait for a specific condition on one or many
    resources.
  6. convert
    在不同的 API versions 轉換配置檔案
  7. kustomize
    Build a kustomization target from a directory or a remote url.

7 Settings Commands

  1. label
    更新在這個資源上的 labels
  2. annotate
    更新一個資源的註解
  3. completion
    Output shell completion code for the specified shell (bash or zsh)

8 Other Commands

  1. alpha
    Commands for features in alpha
  2. api-resources
    Print the supported API resources on the server
  3. api-versions
    Print the supported API versions on the server, in the form of “group/version”
  4. config
    修改 kubeconfig 檔案
    修改預設 ns 為test-online(k8s 預設的為default ns)
    kubectl config set-context $(kubectl config current-context) --namespace=test-online
    
  5. plugin
    Provides utilities for interacting with plugins.
  6. version
    輸出 client 和 server 的版本資訊

10 說明

docs/reference/kubectl/overview/
kubectl/kubectl-commands

相關文章