Kubernetes K8S之kubectl命令詳解及經常使用示例

 

Kubernetes kubectl命令詳解與經常使用示例,基於k8s v1.17.4版本node

 

kubectl經常使用示例

查看類命令

 1 # 獲取節點和服務版本信息
 2 kubectl get nodes
 3 # 獲取節點和服務版本信息,並查看附加信息
 4 kubectl get nodes -o wide
 5 
 6 # 獲取pod信息,默認是default名稱空間
 7 kubectl get pod
 8 # 獲取pod信息,默認是default名稱空間,並查看附加信息【如:pod的IP及在哪一個節點運行】
 9 kubectl get pod -o wide
10 # 獲取指定名稱空間的pod
11 kubectl get pod -n kube-system
12 # 獲取指定名稱空間中的指定pod
13 kubectl get pod -n kube-system podName
14 # 獲取全部名稱空間的pod
15 kubectl get pod -A 
16 # 查看pod的詳細信息,以yaml格式或json格式顯示
17 kubectl get pods -o yaml
18 kubectl get pods -o json
19 
20 # 查看pod的標籤信息
21 kubectl get pod -A --show-labels 
22 # 根據Selector(label query)來查詢pod
23 kubectl get pod -A --selector="k8s-app=kube-dns"
24 
25 # 查看運行pod的環境變量
26 kubectl exec podName env
27 # 查看指定pod的日誌
28 kubectl logs -f --tail 500 -n kube-system kube-apiserver-k8s-master
29 
30 # 查看全部名稱空間的service信息
31 kubectl get svc -A
32 # 查看指定名稱空間的service信息
33 kubectl get svc -n kube-system
34 
35 # 查看componentstatuses信息
36 kubectl get cs
37 # 查看全部configmaps信息
38 kubectl get cm -A
39 # 查看全部serviceaccounts信息
40 kubectl get sa -A
41 # 查看全部daemonsets信息
42 kubectl get ds -A
43 # 查看全部deployments信息
44 kubectl get deploy -A
45 # 查看全部replicasets信息
46 kubectl get rs -A
47 # 查看全部statefulsets信息
48 kubectl get sts -A
49 # 查看全部jobs信息
50 kubectl get jobs -A
51 # 查看全部ingresses信息
52 kubectl get ing -A
53 # 查看有哪些名稱空間
54 kubectl get ns
55 
56 # 查看pod的描述信息
57 kubectl describe pod podName
58 kubectl describe pod -n kube-system kube-apiserver-k8s-master  
59 # 查看指定名稱空間中指定deploy的描述信息
60 kubectl describe deploy -n kube-system coredns
61 
62 # 查看node或pod的資源使用狀況
63 # 須要heapster 或metrics-server支持
64 kubectl top node
65 kubectl top pod 
66 
67 # 查看集羣信息
68 kubectl cluster-info   或  kubectl cluster-info dump
69 # 查看各組件信息【172.16.1.110爲master機器】
70 kubectl -s https://172.16.1.110:6443 get componentstatuses

 

操做類命令

 1 # 建立資源
 2 kubectl create -f xxx.yaml
 3 # 應用資源
 4 kubectl apply -f xxx.yaml
 5 # 應用資源,該目錄下的全部 .yaml, .yml, 或 .json 文件都會被使用
 6 kubectl apply -f <directory>
 7 # 建立test名稱空間
 8 kubectl create namespace test
 9 
10 # 刪除資源
11 kubectl delete -f xxx.yaml
12 kubectl delete -f <directory>
13 # 刪除指定的pod
14 kubectl delete pod podName
15 # 刪除指定名稱空間的指定pod
16 kubectl delete pod -n test podName
17 # 刪除其餘資源
18 kubectl delete svc svcName
19 kubectl delete deploy deployName
20 kubectl delete ns nsName
21 # 強制刪除
22 kubectl delete pod podName -n nsName --grace-period=0 --force
23 kubectl delete pod podName -n nsName --grace-period=1
24 kubectl delete pod podName -n nsName --now
25 
26 # 編輯資源
27 kubectl edit pod podName

 

進階命令操做

 1 # kubectl exec:進入pod啓動的容器
 2 kubectl exec -it podName -n nsName /bin/sh    #進入容器
 3 kubectl exec -it podName -n nsName /bin/bash  #進入容器
 4 
 5 # kubectl label:添加label值
 6 kubectl label nodes k8s-node01 zone=north  #爲指定節點添加標籤 
 7 kubectl label nodes k8s-node01 zone-       #爲指定節點刪除標籤
 8 kubectl label pod podName -n nsName role-name=test    #爲指定pod添加標籤
 9 kubectl label pod podName -n nsName role-name=dev --overwrite  #修改lable標籤值
10 kubectl label pod podName -n nsName role-name-        #刪除lable標籤
11 
12 # kubectl滾動升級; 經過 kubectl apply -f myapp-deployment-v1.yaml 啓動deploy
13 kubectl apply -f myapp-deployment-v2.yaml     #經過配置文件滾動升級
14 kubectl set image deploy/myapp-deployment myapp="registry.cn-beijing.aliyuncs.com/google_registry/myapp:v3"   #經過命令滾動升級
15 kubectl rollout undo deploy/myapp-deployment 或者 kubectl rollout undo deploy myapp-deployment    #pod回滾到前一個版本
16 kubectl rollout undo deploy/myapp-deployment --to-revision=2  #回滾到指定歷史版本
17 
18 # kubectl scale:動態伸縮
19 kubectl scale deploy myapp-deployment --replicas=5  # 動態伸縮
20 kubectl scale --replicas=8 -f myapp-deployment-v2.yaml  #動態伸縮【根據資源類型和名稱伸縮,其餘配置「如:鏡像版本不一樣」不生效】

 

上面滾動更新和動態伸縮涉及的deploy的yaml文件nginx

 1 [root@k8s-master deploy]# cat myapp-deployment-v1.yaml 
 2 apiVersion: apps/v1
 3 kind: Deployment
 4 metadata:
 5   name: myapp-deployment
 6   labels:
 7     app: myapp
 8 spec:
 9   replicas: 10
10   # 重點關注該字段
11   selector:
12     matchLabels:
13       app: myapp
14   template:
15     metadata:
16       labels:
17         app: myapp
18     spec:
19       containers:
20       - name: myapp
21         image: registry.cn-beijing.aliyuncs.com/google_registry/myapp:v1
22         ports:
23         - containerPort: 80
24 
25 [root@k8s-master deploy]# 
26 [root@k8s-master deploy]# cat myapp-deployment-v2.yaml 
27 apiVersion: apps/v1
28 kind: Deployment
29 metadata:
30   name: myapp-deployment
31   labels:
32     app: myapp
33 spec:
34   replicas: 10
35   # 重點關注該字段
36   selector:
37     matchLabels:
38       app: myapp
39   template:
40     metadata:
41       labels:
42         app: myapp
43     spec:
44       containers:
45       - name: myapp
46         image: registry.cn-beijing.aliyuncs.com/google_registry/myapp:v2
47         ports:
48         - containerPort: 80

 

kubectl語法

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

  

官網地址:https://kubernetes.io/docs/reference/kubectl/overview/ 
kubectl flags:https://kubernetes.io/docs/reference/kubectl/kubectl/

 

說明:

一、command:指定在一個或多個資源上要執行的操做。例如:create、get、describe、delete、apply等web

二、TYPE:指定資源類型(如:pod、node、services、deployments等)。資源類型大小寫敏感,能夠指定單數、複數或縮寫形式。例如,如下命令生成相同的輸出:json

1 kubectl get pod  -n kubernetes-dashboard
2 kubectl get pods -n kubernetes-dashboard
3 kubectl get po   -n kubernetes-dashboard

 

三、NAME:指定資源的名稱。名稱大小寫敏感。若是省略名稱空間,則顯示默認名稱空間資源的詳細信息或者提示:No resources found in default namespace.。api

 1 # 示例:
 2 [root@k8s-master ~]# kubectl get pods
 3 No resources found in default namespace.
 4 [root@k8s-master ~]# kubectl get pods --all-namespaces  # 或者 kubectl get pods --A
 5 NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
 6 kube-system            coredns-6955765f44-c9zfh                     1/1     Running   8          6d7h
 7 kube-system            coredns-6955765f44-lrz5q                     1/1     Running   8          6d7h
 8 kube-system            etcd-k8s-master                              1/1     Running   9          6d7h
 9 kube-system            kube-apiserver-k8s-master                    1/1     Running   9          6d7h
10 kube-system            kube-controller-manager-k8s-master           1/1     Running   8          6d7h
11 kube-system            kube-flannel-ds-amd64-dngrk                  1/1     Running   13         6d7h
12 kube-system            kube-flannel-ds-amd64-h4sn6                  1/1     Running   13         6d6h
13 kube-system            kube-flannel-ds-amd64-m92wp                  1/1     Running   11         6d6h
14 kube-system            kube-proxy-28dwj                             1/1     Running   9          6d6h
15 kube-system            kube-proxy-c875m                             1/1     Running   8          6d7h
16 kube-system            kube-proxy-stg6w                             1/1     Running   10         6d6h
17 kube-system            kube-scheduler-k8s-master                    1/1     Running   9          6d7h
18 kubernetes-dashboard   dashboard-metrics-scraper-7b8b58dc8b-nr5fz   1/1     Running   7          6d1h
19 kubernetes-dashboard   kubernetes-dashboard-755dcb9575-9kg7p        1/1     Running   9          6d1h
20 [root@k8s-master ~]# kubectl get service --all-namespaces  # 或者 kubectl get service -A
21 NAMESPACE              NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
22 default                kubernetes                  ClusterIP   10.96.0.1       <none>        443/TCP                  6d7h
23 kube-system            kube-dns                    ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   6d7h
24 kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.104.12.221   <none>        8000/TCP                 6d1h
25 kubernetes-dashboard   kubernetes-dashboard        NodePort    10.110.157.29   <none>        443:30001/TCP            6d1h

 

三、flags:指定可選的標記。例如,可使用 -s 或 --server標識來指定Kubernetes API服務器的地址和端口;-n指定名稱空間;等等。bash

注意:你從命令行指定的flags將覆蓋默認值和任何相應的環境變量。優先級最高。服務器

四、在多個資源上執行操做時,能夠經過類型 [TYPE] 和名稱 [NAME] 指定每一個資源,也能夠指定一個或多個文件。app

按類型和名稱指定資源:ide

 1 # 查看一個資源類型中的多個資源
 2 [root@k8s-master ~]# kubectl get pod -n kube-system coredns-6955765f44-c9zfh kube-proxy-28dwj
 3 NAME                       READY   STATUS    RESTARTS   AGE
 4 coredns-6955765f44-c9zfh   1/1     Running   8          6d7h
 5 kube-proxy-28dwj           1/1     Running   9          6d6h
 6 [root@k8s-master ~]# 
 7 # 查看多個資源類型
 8 [root@k8s-master ~]# kubectl get svc,node
 9 NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
10 service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   45h
11 
12 NAME              STATUS   ROLES    AGE   VERSION
13 node/k8s-master   Ready    master   45h   v1.17.4
14 node/k8s-node01   Ready    <none>   45h   v1.17.4
15 node/k8s-node02   Ready    <none>   45h   v1.17.4

 

使用一個或多個文件指定資源:-f file1 -f file2 -f file<#>工具

1 # 使用YAML而不是JSON,由於YAML更容易使用,特別是對於配置文件。
2 kubectl get pod -f pod.yaml

 

kubectl語法中的command操做

下表包括常見kubectl操做的簡短描述和通用語法:

也可在命令行可經過kubectl -h 命令獲取部分信息
或者經過如下地址查看更多詳情:

1 https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
2 https://kubernetes.io/docs/reference/kubectl/overview/#operations

 

Operation Syntax Description
create kubectl create -f FILENAME [flags] 從文件或標準輸入建立一個或多個資源★★★
expose kubectl expose (-f FILENAME TYPE NAME
run kubectl run NAME –image=image [–env=」key=value」] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags] 在集羣上運行指定的鏡像★★★
explain kubectl explain [–recursive=false] [flags] 獲取各類資源的文檔。例如pods、nodes、services等。★★★★★
get kubectl get (-f FILENAME TYPE [NAME
edit kubectl edit (-f FILENAME TYPE NAME
delete kubectl delete (-f FILENAME TYPE [NAME
rollout kubectl rollout SUBCOMMAND [options] 對資源進行管理。有效的資源類型包括:deployments,daemonsets 和statefulsets
scale kubectl scale (-f FILENAME TYPE NAME
autoscale kubectl autoscale (-f FILENAME TYPE NAME
cluster-info kubectl cluster-info [flags] 顯示集羣信息,顯示關於集羣中的主機和服務的端點信息。★★★
top kubectl top node、kubectl top pod 須要heapster 或metrics-server支持 顯示資源(CPU/內存/存儲)使用狀況★★★
cordon kubectl cordon NODE [options] 將node標記爲不可調度
uncordon kubectl uncordon NODE [options] 將node標記爲可調度
drain kubectl drain NODE [options] 排除指定node節點,爲維護作準備
taint kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 … KEY_N=VAL_N:TAINT_EFFECT_N [options] 更新一個或多個節點上的污點★★★
describe kubectl describe (-f FILENAME TYPE [NAME_PREFIX
logs kubectl logs POD [-c CONTAINER] [–follow] [flags] 打印pod中一個容器的日誌★★★★★
exec kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [– COMMAND [args…]] 對pod中的容器執行命令或進入Pod容器★★★★★
proxy kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags] 運行Kubernetes API服務的代理
cp kubectl cp [options] 從宿主機複製文件和目錄到一個容器;或則從容器中複製文件和目錄到宿主機★★★
auth kubectl auth [flags] [options] 檢查受權
apply kubectl apply -f FILENAME [flags] 經過文件名中的內容或stdin將配置應用於資源★★★★★
patch kubectl patch (-f FILENAME TYPE NAME
replace kubectl replace -f FILENAME 經過文件或stdin替換資源
rolling-update kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE -f NEW_CONTROLLER_SPEC) [flags]
label kubectl label (-f FILENAME TYPE NAME
annotate kubectl annotate (-f FILENAME TYPE NAME
api-resources kubectl api-resources [flags] [options] 打印支持的API資源★★★
api-versions kubectl api-versions [flags] 列出可用的API版本★★★
config kubectl config SUBCOMMAND [flags] 修改kubeconfig文件。有關詳細信息,請參見各個子命令
plugin kubectl plugin [flags] [options] 提供與插件交互的實用工具
version kubectl version [–client] [flags] 顯示在客戶端和服務器上運行的Kubernetes版本★★★

 

kubectl語法中的TYPE資源

下表包含經常使用的資源類型及其縮寫別名的列表。

也能夠在命令行經過kubectl api-resources獲得。

Resource Name Short Names Namespaced Resource Kind
bindings   TRUE Binding
componentstatuses cs FALSE ComponentStatus
configmaps cm TRUE ConfigMap
endpoints ep TRUE Endpoints
events ev TRUE Event
limitranges limits TRUE LimitRange
namespaces ns FALSE Namespace
nodes no FALSE Node
persistentvolumeclaims pvc TRUE PersistentVolumeClaim
persistentvolumes pv FALSE PersistentVolume
pods po TRUE Pod
podtemplates   TRUE PodTemplate
replicationcontrollers rc TRUE ReplicationController
resourcequotas quota TRUE ResourceQuota
secrets   TRUE Secret
serviceaccounts sa TRUE ServiceAccount
services svc TRUE Service
mutatingwebhookconfigurations   FALSE MutatingWebhookConfiguration
validatingwebhookconfigurations   FALSE ValidatingWebhookConfiguration
customresourcedefinitions crd, crds FALSE CustomResourceDefinition
apiservices   FALSE APIService
controllerrevisions   TRUE ControllerRevision
daemonsets ds TRUE DaemonSet
deployments deploy TRUE Deployment
replicasets rs TRUE ReplicaSet
statefulsets sts TRUE StatefulSet
tokenreviews   FALSE TokenReview
localsubjectaccessreviews   TRUE LocalSubjectAccessReview
selfsubjectaccessreviews   FALSE SelfSubjectAccessReview
selfsubjectrulesreviews   FALSE SelfSubjectRulesReview
subjectaccessreviews   FALSE SubjectAccessReview
horizontalpodautoscalers hpa TRUE HorizontalPodAutoscaler
cronjobs cj TRUE CronJob
jobs   TRUE Job
certificatesigningrequests csr FALSE CertificateSigningRequest
leases   TRUE Lease
endpointslices   TRUE EndpointSlice
events ev TRUE Event
ingresses ing TRUE Ingress
networkpolicies netpol TRUE NetworkPolicy
runtimeclasses   FALSE RuntimeClass
poddisruptionbudgets pdb TRUE PodDisruptionBudget
podsecuritypolicies psp FALSE PodSecurityPolicy
clusterrolebindings   FALSE ClusterRoleBinding
clusterroles   FALSE ClusterRole
rolebindings   TRUE RoleBinding
roles   TRUE Role
priorityclasses pc FALSE PriorityClass
csidrivers   FALSE CSIDriver
csinodes   FALSE CSINode
storageclasses sc FALSE StorageClass
volumeattachments   FALSE VolumeAttachment

 

kubectl 輸出選項

格式化輸出

全部kubectl命令的默認輸出格式是人類可讀的純文本格式。

要將詳細信息以特定的格式輸出到終端窗口,能夠將 -o 或 --output標識添加到受支持的kubectl命令中。

 

語法

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

根據kubectl操做,支持如下輸出格式:

Output format Description
-o custom-columns= 使用逗號分隔的自定義列列表打印表
-o custom-columns-file= 使用文件中的自定義列模板打印表
-o json 輸出一個JSON格式的API對象
-o jsonpath= 打印jsonpath表達式中定義的字段
-o jsonpath-file= 經過文件打印jsonpath表達式定義的字段
-o name 只打印資源名,不打印其餘任何內容
-o wide 以純文本格式輸出,包含附加信息。對於pods,包含節點名
-o yaml 輸出一個YAML格式的API對象

 

示例

wide示例

1 [root@k8s-master ~]# kubectl get pod 
2 NAME         READY   STATUS    RESTARTS   AGE
3 nginx-demo   1/1     Running   1          28h
4 [root@k8s-master ~]# 
5 [root@k8s-master ~]# kubectl get pod -o wide
6 NAME         READY   STATUS    RESTARTS   AGE   IP           NODE         NOMINATED NODE   READINESS GATES
7 nginx-demo   1/1     Running   1          28h   10.244.3.9   k8s-node01   <none>           <none>

 

yaml示例

 1 [root@k8s-master ~]# kubectl get pod 
 2 NAME         READY   STATUS    RESTARTS   AGE
 3 nginx-demo   1/1     Running   1          28h
 4 [root@k8s-master ~]# 
 5 [root@k8s-master ~]# kubectl get pod -o yaml
 6 apiVersion: v1
 7 items:
 8 - apiVersion: v1
 9   kind: Pod
10   metadata:
11     annotations:
12 ………………

 

json示例

 1 [root@k8s-master ~]# kubectl get pod 
 2 NAME         READY   STATUS    RESTARTS   AGE
 3 nginx-demo   1/1     Running   1          28h
 4 [root@k8s-master ~]# 
 5 [root@k8s-master ~]# kubectl get pod -o json
 6 {
 7     "apiVersion": "v1",
 8     "items": [
 9         {
10             "apiVersion": "v1",
11             "kind": "Pod",
12             "metadata": {
13                 "annotations": {
14 ………………

 

name示例

1 [root@k8s-master ~]# kubectl get pod 
2 NAME         READY   STATUS    RESTARTS   AGE
3 nginx-demo   1/1     Running   1          28h
4 [root@k8s-master ~]# 
5 [root@k8s-master ~]# kubectl get pod -o name
6 pod/nginx-demo

 

custom-columns示例

1 [root@k8s-master ~]# kubectl get pod
2 NAME         READY   STATUS    RESTARTS   AGE
3 nginx-demo   1/1     Running   1          29h
4 [root@k8s-master ~]# 
5 [root@k8s-master ~]# kubectl get pods -o custom-columns=NAME:.metadata.name,UID:.metadata.uid,imageName:.spec.containers[0].image
6 NAME         UID                                    imageName
7 nginx-demo   08121fc6-969b-4b4e-9aa4-b990a5d02148   registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17

說明:custom-columns=key:value;其中key表示列明;value表示要顯示信息,這個value信息能夠經過-o json或-o yaml獲取。

 

custom-columns-file示例

 1 [root@k8s-master test]# kubectl get pod 
 2 NAME         READY   STATUS    RESTARTS   AGE
 3 nginx-demo   1/1     Running   0          80s
 4 [root@k8s-master test]# 
 5 # 要顯示的列明和數據來源
 6 [root@k8s-master test]# cat custom-col.conf 
 7 NAME          UID          imageName                containerPort
 8 metadata.name metadata.uid spec.containers[0].image spec.containers[0].ports[0].containerPort
 9 [root@k8s-master test]# 
10 [root@k8s-master test]# kubectl get pod -o custom-columns-file=custom-col.conf
11 NAME         UID                                    imageName                                                     containerPort
12 nginx-demo   769dc3f4-2ffc-407c-a351-56b74ddaba4c   registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17   80

 

jsonpath示例

1 [root@k8s-master test]# kubectl get pods
2 NAME         READY   STATUS    RESTARTS   AGE
3 nginx-demo   1/1     Running   0          13m
4 [root@k8s-master test]# 
5 [root@k8s-master test]# kubectl get pods -o jsonpath='{.items[0].metadata.name},{.items[0].spec.containers[0].image}'
6 nginx-demo,registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17

 

jsonpath-file示例

 1 [root@k8s-master test]# kubectl get pod 
 2 NAME         READY   STATUS    RESTARTS   AGE
 3 nginx-demo   1/1     Running   0          16m
 4 [root@k8s-master test]# 
 5 # 要顯示的數據來源
 6 [root@k8s-master test]# cat custom-json.conf
 7 {.items[0].metadata.name},{.items[0].spec.containers[0].image},{.items[0].spec.containers[0].ports[0].containerPort}
 8 [root@k8s-master test]# 
 9 [root@k8s-master test]# kubectl get pod -o jsonpath-file=custom-json.conf
10 nginx-demo,registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17,80

 

相關閱讀

一、官網kubectl概述

二、官網kubectl [flags]

三、官網kubectl-commands詳情

 

完畢!

 


———END———
若是以爲不錯就關注下唄 (-^O^-) !

相關文章
相關標籤/搜索