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
7 # 创建test名称空间
8 kubectl create namespace test
9
10 # 删除资源
11 kubectl delete -f xxx.yaml
12 kubectl delete -f
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语法
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 443/TCP 6d7h
23 kube-system kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP,9153/TCP 6d7h
24 kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.104.12.221 8000/TCP 6d1h
25 kubernetes-dashboard kubernetes-dashboard NodePort 10.110.157.29 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 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 45h v1.17.4
15 node/k8s-node02 Ready 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
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