k8s,盤他!kubectl常規命令操作集錦

前言

一:kubectl管理

  • kubectl是管理k8s的命令行工具,通過生成json格式傳遞給apiserver進行一些操作

  • 更全的kubectl命令請查看kubectl --help,以下僅列出常用的命令

    [root@master ~]# kubectl --help
    kubectl controls the Kubernetes cluster manager. 
    
    Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/
    
    Basic Commands (Beginner):
      create         Create a resource from a file or from stdin.
      expose         使用 replication controller, service, deployment 或者 pod 並暴露它作爲一個 新的 Kubernetes Service
      run            在集羣中運行一個指定的鏡像
      set            爲 objects 設置一個指定的特徵
    
    Basic Commands (Intermediate):
      explain        查看資源的文檔
      get            顯示一個或更多 resources
      edit           在服務器上編輯一個資源
      delete         Delete resources by filenames, stdin, resources and names, or by resources and label selector
    
    Deploy Commands:
      rollout        Manage the rollout of a resource
      scale          爲 Deployment, ReplicaSet, Replication Controller 或者 Job 設置一個新的副本數量
      autoscale      自動調整一個 Deployment, ReplicaSet, 或者 ReplicationController 的副本數量
    
    Cluster Management Commands:
      certificate    修改 certificate 資源.
      cluster-info   顯示集羣信息
      top            Display Resource (CPU/Memory/Storage) usage.
      cordon         標記 node 爲 unschedulable
      uncordon       標記 node 爲 schedulable
      drain          Drain node in preparation for maintenance
      taint          更新一個或者多個 node 上的 taints
    
    Troubleshooting and Debugging Commands:
      describe       顯示一個指定 resource 或者 group 的 resources 詳情
      logs           輸出容器在 pod 中的日誌
      attach         Attach 到一個運行中的 container
      exec           在一個 container 中執行一個命令
      port-forward   Forward one or more local ports to a pod
      proxy          運行一個 proxy 到 Kubernetes API server
      cp             複製 files 和 directories 到 containers 和從容器中複製 files 和 directories.
      auth           Inspect authorization
    
    Advanced Commands:
      apply          通過文件名或標準輸入流(stdin)對資源進行配置
      patch          使用 strategic merge patch 更新一個資源的 field(s)
      replace        通過 filename 或者 stdin替換一個資源
      wait           Experimental: Wait for a specific condition on one or many resources.
      convert        在不同的 API versions 轉換配置文件
    
    Settings Commands:
      label          更新在這個資源上的 labels
      annotate       更新一個資源的註解
      completion     Output shell completion code for the specified shell (bash or zsh)
    
    Other Commands:
      alpha          Commands for features in alpha
      api-resources  Print the supported API resources on the server
      api-versions   Print the supported API versions on the server, in the form of "group/version"
      config         修改 kubeconfig 文件
      plugin         Provides utilities for interacting with plugins.
      version        輸出 client 和 server 的版本信息
    
    Usage:
      kubectl [flags] [options]
    
    Use "kubectl <command> --help" for more information about a given command.
    Use "kubectl options" for a list of global command-line options (applies to all commands).
    
    

1.1:使用kubectl命令管理項目的生命週期

  • 項目的生命週期:創建、發佈、更新、回滾、刪除
1.1.1:創建
  • 創建一個nginx的pod

    [root@master ~]# kubectl run nginx-test --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-test created
    [root@master ~]# kubectl get pods -w	'//-w:動態查看'
    [root@master ~]# kubectl  get pods -o wide	'//查看資源創建在那個節點上'
    [root@master ~]# kubectl get all	'//查看更詳細信息:副本資源和控制器資源'
    [root@master ~]# kubectl get deployment,replicaset	'//僅查詢pod資源的兩個項'
    
    
1.1.2、發佈
  • [root@master ~]# kubectl get svc	'//查看原有的service服務'
    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   92m
    [root@master ~]# kubectl expose deployment nginx-test --port=80 --target-port=80 --name=nginx-service --type=NodePort	'//將剛剛創建的暴露出來'
    service/nginx-service exposed
    [root@master ~]# kubectl get svc	'//再次查看'
    NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        92m
    nginx-service   NodePort    10.0.0.176   <none>        80:36355/TCP   3s
    [root@master ~]# kubectl get pods -o wide	'//查看pods在哪個節點上'
    NAME                          READY   STATUS    RESTARTS   AGE     IP            NODE              NOMINATED NODE
    nginx-dbddb74b8-5s6h7         1/1     Running   0          7d10h   172.17.26.2   192.168.233.132   <none>
    nginx-test-59f87d55d6-4rvpl   1/1     Running   0          9m55s   172.17.4.3    192.168.233.133   <none>
    nginx-test-59f87d55d6-qwrc6   1/1     Running   0          9m55s   172.17.4.2    192.168.233.133   <none>
    nginx-test-59f87d55d6-xhtpb   1/1     Running   0          9m55s   172.17.26.4   192.168.233.132   <none>
    [root@master ~]# kubectl get endpoints	'//查看pod資源的endpoint'
    NAME            ENDPOINTS                                    AGE
    kubernetes      192.168.233.130:6443,192.168.233.131:6443    93m
    nginx-service   172.17.26.4:80,172.17.4.2:80,172.17.4.3:80   38s
    
    
  • 可以查看資源對象的縮寫

    [root@master dashboard]# kubectl api-resources
    
    
  • pod資源的調度

    當我們創建多個pod、service資源時,kube-proxy會做負載均衡,此時我們通過訪問任意node節點ip可以訪問所有的資源

    kubernetes中kube-proxy支持三種模式,在v1.8之前我們使用的是iptables以及userspace兩種模式,在kubernetes1.8之後加入了ipvs

    [root@node01 ~]# yum -y install ipvsadm 
    [root@node01 ~]# ipvsadm -L -n	'//查看調度'
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  127.0.0.1:30005 rr
      -> 172.17.26.3:8443             Masq    1      0          0         
    TCP  127.0.0.1:36355 rr	'//發現可以訪問本地地址可以自動輪詢給三個pod資源,node02也是一樣的'
      -> 172.17.4.2:80                Masq    1      0          0         
      -> 172.17.4.3:80                Masq    1      0          0         
      -> 172.17.26.4:80               Masq    1      0          0         
    
     
    
  • 訪問網頁,查看日誌

mark

[root@master ~]# kubectl logs nginx-test-59f87d55d6-4rvpl
[root@master ~]# kubectl logs nginx-test-59f87d55d6-qwrc6
[root@master ~]# kubectl logs nginx-test-59f87d55d6-xhtpb	'//網頁只訪問了一次,所以只有一個pod資源有日誌'
    ...省略內容
172.17.26.1 - - [08/May/2020:04:03:06 +0000] "GET /favicon.ico HTTP/1.1" 404 556 "http://192.168.233.132:36355/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" "-"

1.1.3:更新
  • 開發者模式查看版本號(我使用的是谷歌瀏覽器)

    mark

    [root@master ~]# kubectl set image deployment/nginx-test nginx-test=nginx:1.13 	'//更新版本'
    deployment.extensions/nginx-test image updated
    [root@master ~]# kubectl get pods -w	'//動態查看'
    '//容器的更新:滾動更新,容器只有刪除和創建,沒有重啓的'
    
  • 重新訪問網頁,再次查看版本

    mark

1.1.4:回滾
  • 查看歷史狀態

    [root@master ~]# kubectl rollout history deployment/nginx-test
    deployment.extensions/nginx-test 
    REVISION  CHANGE-CAUSE
    1         <none>
    2         <none>
    
  • 執行回滾

    [root@master ~]# kubectl rollout undo deployment/nginx-test
    deployment.extensions/nginx-test
    [root@master ~]# kubectl get pods -w	'//動態查看'
    
    
  • 檢查回滾狀態

    mark

1.1.5:刪除
  • 刪除不僅僅是pod,還有service

    [root@master ~]# kubectl delete deployment/nginx-test
    deployment.extensions "nginx-test" deleted
    [root@master ~]# kubectl get pods -w
    NAME                          READY   STATUS        RESTARTS   AGE
    nginx-dbddb74b8-5s6h7         1/1     Running       0          7d10h
    nginx-test-59f87d55d6-xgbrd   0/1     Terminating   0          3m13s
    nginx-test-59f87d55d6-zs5nf   0/1     Terminating   0          2m59s
    nginx-test-59f87d55d6-zs5nf   0/1   Terminating   0     3m4s
    nginx-test-59f87d55d6-zs5nf   0/1   Terminating   0     3m4s
    nginx-test-59f87d55d6-xgbrd   0/1   Terminating   0     3m18s
    nginx-test-59f87d55d6-xgbrd   0/1   Terminating   0     3m18s
    ^C[root@master ~]# kubectl get pods 	'//再次查看pod資源'
    NAME                    READY   STATUS    RESTARTS   AGE
    nginx-dbddb74b8-5s6h7   1/1     Running   0          7d10h
    [root@master ~]# kubectl get svc	'//查看service'
    NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        137m
    nginx-service   NodePort    10.0.0.176   <none>        80:36355/TCP   44m
    [root@master ~]# kubectl delete svc/nginx-service	'//刪除service'
    service "nginx-service" deleted
    [root@master ~]# kubectl get svc	'//重新查看'
    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   137m
    
    

1.2:其他常規操作

  • 查看資源的詳細信息

    [root@master ~]# kubectl get all
    NAME                        READY   STATUS    RESTARTS   AGE
    pod/nginx-dbddb74b8-5s6h7   1/1     Running   0          7d11h
    
    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    service/kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   163m
    
    NAME                    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/nginx   1         1         1            1           7d11h
    
    NAME                              DESIRED   CURRENT   READY   AGE
    replicaset.apps/nginx-dbddb74b8   1         1         1       7d11h
    
    
  • 查看service資源

    [root@master ~]# kubectl describe service/kubernetes
    Name:              kubernetes
    Namespace:         default
    Labels:            component=apiserver
                       provider=kubernetes
    Annotations:       <none>
    Selector:          <none>
    Type:              ClusterIP
    IP:                10.0.0.1
    Port:              https  443/TCP
    TargetPort:        6443/TCP
    Endpoints:         192.168.233.130:6443,192.168.233.131:6443
    Session Affinity:  None
    Events:            <none>
    
    
  • 查看deployment資源

    [root@master ~]# kubectl describe deployment.apps/nginx
    Name:                   nginx
    Namespace:              default
    CreationTimestamp:      Fri, 01 May 2020 01:31:30 +0800
    Labels:                 run=nginx
    Annotations:            deployment.kubernetes.io/revision: 1
    Selector:               run=nginx
    Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
      Labels:  run=nginx
      Containers:
       nginx:
        Image:        nginx
        Port:         <none>
        Host Port:    <none>
        Environment:  <none>
        Mounts:       <none>
      Volumes:        <none>
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   nginx-dbddb74b8 (1/1 replicas created)
    Events:          <none>
    
    
  • 進入pod

    [root@master ~]# kubectl exec -it nginx-dbddb74b8-5s6h7 bash
    root@nginx-dbddb74b8-5s6h7:/# ls
    bin   dev  home  lib64	mnt  proc  run	 srv  tmp  var
    boot  etc  lib	 media	opt  root  sbin  sys  usr
    root@nginx-dbddb74b8-5s6h7:/# exit 
    exit
    
    

如有疑問可評論區交流!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章