Kubernetes K8S之kubectl命令详解及常用示例

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文件

复制代码

 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语法

1

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

  

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

说明:

1、command:指定在一个或多个资源上要执行的操作。例如:create、get、describe、delete、apply等

2、TYPE:指定资源类型(如:pod、node、services、deployments等)。资源类型大小写敏感,可以指定单数、复数或缩写形式。例如,以下命令生成相同的输出:

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

3、NAME:指定资源的名称。名称大小写敏感。如果省略名称空间,则显示默认名称空间资源的详细信息或者提示:No resources found in default namespace.。

复制代码

 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

复制代码

3、flags:指定可选的标记。例如,可以使用 -s 或 --server标识来指定Kubernetes API服务器的地址和端口;-n指定名称空间;等等。

注意:你从命令行指定的flags将覆盖默认值和任何相应的环境变量。优先级最高。

4、在多个资源上执行操作时,可以通过类型 [TYPE] 和名称 [NAME] 指定每个资源,也可以指定一个或多个文件。

按类型和名称指定资源:

复制代码

 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

OperationSyntaxDescription
createkubectl create -f FILENAME [flags]从文件或标准输入创建一个或多个资源★★★
exposekubectl expose (-f FILENAMETYPE NAME
runkubectl run NAME –image=image [–env=”key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags]在集群上运行指定的镜像★★★
explainkubectl explain [–recursive=false] [flags]获取各种资源的文档。例如pods、nodes、services等。★★★★★
getkubectl get (-f FILENAMETYPE [NAME
editkubectl edit (-f FILENAMETYPE NAME
deletekubectl delete (-f FILENAMETYPE [NAME
rolloutkubectl rollout SUBCOMMAND [options]对资源进行管理。有效的资源类型包括:deployments,daemonsets 和statefulsets
scalekubectl scale (-f FILENAMETYPE NAME
autoscalekubectl autoscale (-f FILENAMETYPE NAME
cluster-infokubectl cluster-info [flags]显示集群信息,显示关于集群中的主机和服务的端点信息。★★★
topkubectl top node、kubectl top pod 需要heapster 或metrics-server支持显示资源(CPU/内存/存储)使用情况★★★
cordonkubectl cordon NODE [options]将node标记为不可调度
uncordonkubectl uncordon NODE [options]将node标记为可调度
drainkubectl drain NODE [options]排除指定node节点,为维护做准备
taintkubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 … KEY_N=VAL_N:TAINT_EFFECT_N [options]更新一个或多个节点上的污点★★★
describekubectl describe (-f FILENAMETYPE [NAME_PREFIX
logskubectl logs POD [-c CONTAINER] [–follow] [flags]打印pod中一个容器的日志★★★★★
execkubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [– COMMAND [args…]]对pod中的容器执行命令或进入Pod容器★★★★★
proxykubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags]运行Kubernetes API服务的代理
cpkubectl cp [options]从宿主机复制文件和目录到一个容器;或则从容器中复制文件和目录到宿主机★★★
authkubectl auth [flags] [options]检查授权
applykubectl apply -f FILENAME [flags]通过文件名中的内容或stdin将配置应用于资源★★★★★
patchkubectl patch (-f FILENAMETYPE NAME
replacekubectl replace -f FILENAME通过文件或stdin替换资源
rolling-updatekubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE-f NEW_CONTROLLER_SPEC) [flags]
labelkubectl label (-f FILENAMETYPE NAME
annotatekubectl annotate (-f FILENAMETYPE NAME
api-resourceskubectl api-resources [flags] [options]打印支持的API资源★★★
api-versionskubectl api-versions [flags]列出可用的API版本★★★
configkubectl config SUBCOMMAND [flags]修改kubeconfig文件。有关详细信息,请参见各个子命令
pluginkubectl plugin [flags] [options]提供与插件交互的实用工具
versionkubectl version [–client] [flags]显示在客户端和服务器上运行的Kubernetes版本★★★

kubectl语法中的TYPE资源

下表包含常用的资源类型及其缩写别名的列表。

也可以在命令行通过kubectl api-resources得到。

Resource NameShort NamesNamespacedResource Kind
bindingsTRUEBinding
componentstatusescsFALSEComponentStatus
configmapscmTRUEConfigMap
endpointsepTRUEEndpoints
eventsevTRUEEvent
limitrangeslimitsTRUELimitRange
namespacesnsFALSENamespace
nodesnoFALSENode
persistentvolumeclaimspvcTRUEPersistentVolumeClaim
persistentvolumespvFALSEPersistentVolume
podspoTRUEPod
podtemplatesTRUEPodTemplate
replicationcontrollersrcTRUEReplicationController
resourcequotasquotaTRUEResourceQuota
secretsTRUESecret
serviceaccountssaTRUEServiceAccount
servicessvcTRUEService
mutatingwebhookconfigurationsFALSEMutatingWebhookConfiguration
validatingwebhookconfigurationsFALSEValidatingWebhookConfiguration
customresourcedefinitionscrd, crdsFALSECustomResourceDefinition
apiservicesFALSEAPIService
controllerrevisionsTRUEControllerRevision
daemonsetsdsTRUEDaemonSet
deploymentsdeployTRUEDeployment
replicasetsrsTRUEReplicaSet
statefulsetsstsTRUEStatefulSet
tokenreviewsFALSETokenReview
localsubjectaccessreviewsTRUELocalSubjectAccessReview
selfsubjectaccessreviewsFALSESelfSubjectAccessReview
selfsubjectrulesreviewsFALSESelfSubjectRulesReview
subjectaccessreviewsFALSESubjectAccessReview
horizontalpodautoscalershpaTRUEHorizontalPodAutoscaler
cronjobscjTRUECronJob
jobsTRUEJob
certificatesigningrequestscsrFALSECertificateSigningRequest
leasesTRUELease
endpointslicesTRUEEndpointSlice
eventsevTRUEEvent
ingressesingTRUEIngress
networkpoliciesnetpolTRUENetworkPolicy
runtimeclassesFALSERuntimeClass
poddisruptionbudgetspdbTRUEPodDisruptionBudget
podsecuritypoliciespspFALSEPodSecurityPolicy
clusterrolebindingsFALSEClusterRoleBinding
clusterrolesFALSEClusterRole
rolebindingsTRUERoleBinding
rolesTRUERole
priorityclassespcFALSEPriorityClass
csidriversFALSECSIDriver
csinodesFALSECSINode
storageclassesscFALSEStorageClass
volumeattachmentsFALSEVolumeAttachment

kubectl 输出选项

格式化输出

所有kubectl命令的默认输出格式是人类可读的纯文本格式。

要将详细信息以特定的格式输出到终端窗口,可以将 -o 或 --output标识添加到受支持的kubectl命令中。

语法

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

根据kubectl操作,支持以下输出格式:

Output formatDescription
-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
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐