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 命令获取部分信息
或者通过以下地址查看更多详情:

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版本★★★

1 https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

2 https://kubernetes.io/docs/reference/kubectl/overview/#operations

 

 

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

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想见感

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值