kubectl用法概述
kubectl [command] [TYPE] [NAME] [flags]
其中,command、TYPE、NAME、flags的含义如下。
command:子命令,用于操作资源对象,例如create、get、describe、delete等。
TYPE:资源对象的类型,区分大小写,能以单数、复数或者简写形式表示
NAME:资源对象的名称,区分大小写。如果不指定名称,系统则将返回属于TYPE的全部对象的列表
kubectl子命令详解
kubectl的子命令非常丰富,涵盖了对Kubernetes集群的主要操作,包括资源对象的创建、删除、查看、修改、配置、运行等。
可以运行 kubectl --help命令查看支持的常见的command。全部命令可以到官网查看https://kubernetes.io/zh-cn/docs/reference/kubectl/
shirley@shirley-virtual-machine:~/Desktop$ kubectl --help
kubectl controls the Kubernetes cluster manager.
Find more information at: https://kubernetes.io/docs/reference/kubectl/
Basic Commands (Beginner):
create Create a resource from a file or from stdin
expose Take a replication controller, service, deployment or pod and expose it as a new Kubernetes service
... ...
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).
基础子命令
Basic Commands (Beginner):
create Create a resource from a file or from stdin
从文件或 stdin 创建一个或多个资源。
kubectl create -f FILENAME [flags]
expose Take a replication controller, service, deployment or pod and expose it as a new Kubernetes service
将副本控制器、deployment或 Pod 作为新的 Kubernetes 服务暴露。
kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags]
run Run a particular image on the cluster
在集群上运行指定的镜像.
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server | client | none] [--overrides=inline-json] [flags]
set Set specific features on objects
配置应用资源。
kubectl set SUBCOMMAND [options]
Basic Commands (Intermediate):
explain Get documentation for a resource
获取多种资源的文档。例如 Pod、Node、Service 等
kubectl explain [--recursive=false] [flags]
get Display one or many resources
列出一个或多个资源。
kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]
edit Edit a resource on the server
使用默认编辑器编辑和更新服务器上一个或多个资源的定义。
kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]
delete Delete resources by file names, stdin, resources and names, or by resources and label selector
基于文件、标准输入或通过指定标签选择器、名称、资源选择器或资源本身,删除资源。
kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]
部署相关命令
Deploy Commands:
rollout Manage the rollout of a resource
管理资源的上线。有效的资源类型包括:Deployment、 DaemonSet 和 StatefulSet。
kubectl rollout SUBCOMMAND [options]
scale Set a new size for a deployment, replica set, or replication controller
更新指定副本控制器的大小。
kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]
autoscale Auto-scale a deployment, replica set, stateful set, or replication controller
自动扩缩由副本控制器管理的一组 pod。
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]
集群管理命令
Cluster Management Commands:
certificate Modify certificate resources.
修改证书资源。
kubectl certificate SUBCOMMAND [options]
cluster-info Display cluster information
显示有关集群中主服务器和服务的端口信息。
kubectl cluster-info [flags]
top Display resource (CPU/memory) usage
显示资源(CPU、内存、存储)的使用情况。
kubectl top [flags] [options]
cordon Mark node as unschedulable
将节点标记为不可调度。(影响最小,只会将node调为SchedulingDisabled)
kubectl cordon NODE [options]
uncordon Mark node as schedulable
将节点标记为可调度。
kubectl uncordon NODE [options]
drain Drain node in preparation for maintenance
腾空节点以准备维护。(驱逐node上的pod,其他节点重新创建)
kubectl drain NODE [options]
taint Update the taints on one or more nodes
更新一个或多个节点上的污点。(它使节点能够排斥一类特定的 Pod)
kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]
故障处理debug相关命令
Troubleshooting and Debugging Commands:
describe Show details of a specific resource or group of resources
显示一个或多个资源的详细状态。
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]
logs Print the logs for a container in a pod
打印 Pod 中容器的日志。
kubectl logs POD [-c CONTAINER] [--follow] [flags]
attach Attach to a running container
挂接到正在运行的容器,查看输出流或与容器(stdin)交互。
kubectl attach POD -c CONTAINER [-i] [-t] [flags]
exec Execute a command in a container
对 Pod 中的容器执行命令。
kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]
port-forward Forward one or more local ports to a pod
将一个或多个本地端口转发到一个 Pod。
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]
proxy Run a proxy to the Kubernetes API server
运行访问 Kubernetes API 服务器的代理。
kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]
cp Copy files and directories to and from containers
从容器复制文件、目录或将文件、目录复制到容器。
kubectl cp <file-spec-src> <file-spec-dest> [options]
auth Inspect authorization
检查授权。
kubectl auth [flags] [options]
debug Create debugging sessions for troubleshooting workloads and nodes
events List events
列举事件
kubectl events
高级命令
Advanced Commands:
diff Diff the live version against a would-be applied version
在当前起作用的配置和文件或标准输之间作对比
kubectl diff -f FILENAME [flags]
apply Apply a configuration to a resource by file name or stdin
从文件或 stdin 对资源应用配置更改。
kubectl apply -f FILENAME [flags]
patch Update fields of a resource
使用策略合并流程更新资源的一个或多个字段。
kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]
replace Replace a resource by file name or stdin
基于文件或标准输入替换资源。
kubectl replace -f FILENAME
wait Experimental: Wait for a specific condition on one or many resources
实验特性:等待一种或多种资源的特定状况。
kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options]
kustomize Build a kustomization target from a directory or URL
列出从 kustomization.yaml 文件中的指令生成的一组 API 资源。参数必须是包含文件的目录的路径,或者是 git 存储库 URL,其路径后缀相对于存储库根目录指定了相同的路径。
kubectl kustomize DIR [flags] [options]
设置命令
Settings Commands:
label Update the labels on a resource
添加或更新一个或多个资源的标签。
kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
annotate Update the annotations on a resource
添加或更新一个或多个资源的注解。
kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
completion Output shell completion code for the specified shell (bash, zsh, fish, or powershell)
为指定的 Shell(Bash 或 Zsh)输出 Shell 补齐代码。
kubectl completion SHELL [options]
其他命令
Other Commands:
api-resources Print the supported API resources on the server
列出可用的 API 资源。
kubectl api-resources [flags]
api-versions Print the supported API versions on the server, in the form of "group/version"
列出可用的 API 版本。
kubectl api-versions [flags]
config Modify kubeconfig files
修改 kubeconfig 文件。
kubectl config SUBCOMMAND [flags]
plugin Provides utilities for interacting with plugins
提供用于与插件交互的实用程序。
kubectl plugin [flags] [options]
version Print the client and server version information
显示运行在客户端和服务器上的 Kubernetes 版本。
kubectl version [--client] [flags]
kubectl可操作对象
可以通过kubectl api-resources命令进行查看。常见的一些对象如下:
NAME SHORTNAMES APIVERSION NAMESPACED KIND
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
namespaces ns v1 false Namespace
nodes no v1 false Node
persistentvolumeclaims pvc v1 true PersistentVolumeClaim
persistentvolumes pv v1 false PersistentVolume
pods po v1 true Pod
podtemplates v1 true PodTemplate
replicationcontrollers rc v1 true ReplicationController
secrets v1 true Secret
serviceaccounts sa v1 true ServiceAccount
services svc v1 true Service
deployments deploy apps/v1 true Deployment
replicasets rs apps/v1 true ReplicaSet
statefulsets sts apps/v1 true StatefulSet
cronjobs cj batch/v1 true CronJob
jobs batch/v1 true Job
events ev events.k8s.io/v1 true Event
ingressclasses networking.k8s.io/v1 false IngressClass
ingresses ing networking.k8s.io/v1 true Ingress
storageclasses sc storage.k8s.io/v1 false StorageClass
... ...
在写对象yaml文件时,可以用这个命令查看kind,apiVersion
kubectl格式化输出
命令如下:
kubectl [command] [TYPE] [NAME] -o <output_format>
输出格式说明:
输出格式 | 描述 |
-o custom-columns= | 使用逗号分隔的自定义列列表打印表。 |
-o custom-columns-file= | 使用文件中的自定义列模板打印表。 |
-o json | 输出 JSON 格式的 API 对象 |
-o jsonpath=<template> | 打印jsonpath表达式定义的字段 |
-o jsonpath-file=<filename> | 打印<filename>文件中jsonpath表达式定义的字段。 |
-o name | 仅打印资源名称而不打印任何其他内容。 |
-o wide | 以纯文本格式输出,包含所有附加信息。对于 Pod 包含节点名。 |
-o yaml | 输出 YAML 格式的 API 对象。 |
kubectl常用操作
create
在执行命令前,准备一个资源的yaml文件,创建deployment。yaml文件如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
创建资源 kubectl create -f FILENAME [flags]
shirley@shirley-virtual-machine:~/k8s$ kubectl create -f nginx-deployment.yaml
deployment.apps/nginx-deployment created
apply
以文件或标准输入为准应用或更新资源 kubectl apply -f FILENAME [flags]
shirley@shirley-virtual-machine:~/k8s$ kubectl apply -f nginx-deployment.yaml
Warning: resource deployments/nginx-deployment is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
deployment.apps/nginx-deployment configured
get
列出一个或多个资源
kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]
kubectl get 命令通常用于检索同一资源类别的一个或多个资源。 它具有丰富的参数,允许你使用 -o 或 --output 参数自定义输出格式。 你可以指定 -w 或 --watch 参数以开始监测特定对象的更新。
查询default namespce下所有资源
shirley@shirley-virtual-machine:~/k8s$ kubectl -n default get all
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-57d84f57dc-2xsj6 1/1 Running 0 63m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d4h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 1/1 1 1 63m
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deployment-57d84f57dc 1 1 1 63m
查询 rc services
shirley@shirley-virtual-machine:~/k8s$ kubectl get rc,services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d4h
describe
显示一个或多个资源的详细状态,默认情况下包括未初始化的资源
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]
kubectl describe 命令侧重于描述指定资源的许多相关方面。它可以调用对 API 服务器的多个 API 调用来为用户构建视图。 例如,该 kubectl describe node 命令不仅检索有关节点的信息,还检索在其上运行的 Pod 的摘要,为节点生成的事件等。
shirley@shirley-virtual-machine:~/k8s$ kubectl describe deployment.apps/nginx-deployment
Name: nginx-deployment
Namespace: default
CreationTimestamp: Thu, 24 Aug 2023 14:10:31 +0800
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=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: app=nginx
Containers:
nginx:
Image: nginx:latest
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-deployment-57d84f57dc (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 6m50s deployment-controller Scaled down replica set nginx-deployment-57d84f57dc to 1 from 2
logs
打印 Pod 中容器的日志
kubectl logs POD [-c CONTAINER] [--follow] [flags]
-f表示开始流式传输日志。这类似于 'tail -f' Linux 命令。
shirley@shirley-virtual-machine:~/k8s$ kubectl logs -f nginx-deployment-57d84f57dc-2xsj6
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh