简介
什么是 kubectl?
kubectl
是 Kubernetes 官方提供的命令行工具,用于与 Kubernetes 集群交互。它支持对集群、节点、Pod、服务等资源的创建、查询、更新和删除(CRUD)操作,是管理 Kubernetes 的核心工具。- 支持声明式和命令式两种资源管理方式:
- 声明式:通过定义资源清单(YAML/JSON)描述期望状态,由 Kubernetes 自动调整。
- 命令式:直接通过命令操作资源(如增删改查)。
kubectl 的核心功能
- 查看资源状态(
get
, describe
)。 - 创建、更新、删除资源(
create
, apply
, delete
)。 - 管理部署与滚动更新(
rollout
)。 - 调试与日志查看(
logs
, exec
)。 - 配置多集群访问与上下文切换。
基础命令
命令结构
1
| kubectl [command] [TYPE] [NAME] [flags]
|
- command:指定要对资源执行的操作,例如
get
, describe
, create
, delete
, apply
等。 - TYPE:资源类型(如
pod
, deployment
, service
)。 - NAME:资源名称(可选,留空则列出所有资源)。
- flags:指定可选的参数。例如,可用-s或者–server参数指定Kubernetes API server 的地址和端口。
集群管理
1 2 3 4 5 6 7 8
| kubectl cluster-info
kubectl get nodes
kubectl get componentstatuses
|
查看资源
1 2 3 4 5 6 7 8
| kubectl get pods --all-namespaces
kubectl get pods -n default
kubectl describe pod <pod-name>
|
创建资源
1 2 3 4 5
| kubectl create -f ./my-deployment.yaml
kubectl create deployment my-nginx --image=nginx
|
删除资源
1 2
| kubectl delete pod <pod-name> -n <namespace> kubectl delete -f ./my-deployment.yaml
|
查看日志
1 2 3 4 5
| kubectl logs <pod-name> -c <container-name>
kubectl logs -f <pod-name>
|
调试与日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| kubectl logs <pod-name> -c <container-name> --tail=100
kubectl logs -f <pod-name>
kubectl exec -it <pod-name> -- /bin/sh
kubectl port-forward <pod-name> 8080:80
kubectl debug -it <pod-name> --image=busybox --target=<container-name>
|
资源管理
资源 | 作用 | 存储类型 | 使用场景 |
---|
Pod | 运行容器的最小单元 | 无 | 部署单个或多个容器 |
Deployment | 管理 Pod 副本,实现自动扩缩容和更新 | 无 | 部署无状态应用 |
Service | 提供稳定网络访问,负载均衡和发现 | 无 | 内部服务通信或对外暴露服务 |
Secret | 存储敏感信息(加密) | 敏感数据 | 存储密码、密钥、证书 |
ConfigMap | 存储非敏感配置信息 | 非敏感数据 | 管理应用配置文件、环境变量 |
资源类型与操作
Pod
1 2 3 4 5
| kubectl get pods
kubectl describe pod <pod-name>
|
Deployment
1 2 3 4 5 6 7 8 9 10 11
| kubectl create deployment my-app --image=my-image:v1
kubectl set image deployment/my-app my-app=my-image:v2
kubectl rollout status deployment/my-app
kubectl rollout undo deployment/my-app
|
Service
1 2 3 4 5
| kubectl expose deployment my-app --port=80 --type=NodePort
kubectl get services
|
Secret
1 2 3 4 5 6 7 8 9 10 11 12
| echo -n 'my-password' | base64 > password.txt kubectl create secret generic db-secret --from-file=password.txt
apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque data: username: dXNlcm5hbWU=
|
ConfigMap
1 2 3 4 5
| kubectl create configmap app-config --from-file=config.properties
kubectl apply -f configmap-pod.yaml
|
高级功能
自动补全
1 2 3 4 5
| source <(kubectl completion bash)
source <(kubectl completion zsh)
|
多文件操作
1 2
| kubectl apply -f ./k8s-manifests/
|
滚动更新与回滚
1 2 3 4 5
| kubectl set image deployment/my-app my-app=my-image:v2
kubectl rollout undo deployment/my-app --to-revision=2
|
环境变量与 Secret
1 2 3 4 5 6 7
| env: - name: DB_PASSWORD valueFrom: secretKeyRef: name: db-secret key: password
|
故障排除
常见问题诊断
检查节点状态
1 2
| kubectl get nodes kubectl describe node <node-name>
|
检查 Pod 异常
1 2
| kubectl get pods --all-namespaces kubectl describe pod <pod-name>
|
查看集群事件
1
| kubectl get events --sort-by=.metadata.creationTimestamp
|
调试网络问题
1 2 3 4 5
| kubectl get endpoints <service-name>
kubectl get ingress
|
最佳实践
- 声明式配置:优先使用
kubectl apply -f
而非 create
或 replace
。 - 命名空间隔离:避免使用
default
命名空间,按业务划分。 - 资源限制:为 Pod 设置
requests
和 limits
。 - 标签管理:使用有意义的标签(如
app: frontend
)。 - 生产安全:禁用
default Service Account
的自动挂载。
附录:常用命令速查表
基础命令 | 描述 | 命令示例 |
---|
create | 通过文件名或标准输入创建资源 | kubectl create -f <file-name>.yaml |
expose | 将一个资源公开为一个新的Service | kubectl expose deployment <deployment-name> --port=<port> --type=NodePort |
run | 在集群中运行一个特定的镜像 | kubectl run <pod-name> --image=<image-name> |
set | 在对象上设置特定的功能 | kubectl set image deployment/<deployment-name> <container-name>=<new-image> |
get | 显示一个或多个资源 | kubectl get pods |
get | 导出资源配置 | kubectl get deploy/<name> -o yaml > deploy.yaml |
get | 资源排序 | kubectl get pods --sort-by=.metadata.creationTimestamp |
explain | 文档参考资料 | kubectl explain pod |
edit | 使用默认的编辑器编辑一个资源 | kubectl edit deployment/<deployment-name> |
delete | 通过文件名、标准输入、资源名称或标签选择器来删除资源 | kubectl delete pod <pod-name> |
部署命令 | 描述 | 命令示例 |
---|
rollout | 管理资源的发布 | kubectl rollout status deployment/<deployment-name> |
rolling-update | 对给定的复制控制器滚动更新 | kubectl rolling-update <rc-name> --image=<new-image> |
scale | 扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job | kubectl scale deployment <deployment-name> --replicas=<number> |
autoscale | 创建一个自动选择扩容或缩容并设置Pod数量 | kubectl autoscale deployment <deployment-name> --min=<min> --max=<max> --cpu-percent=<percent> |
集群管理命令 | 描述 | 命令示例 |
---|
certificate | 修改证书资源 | kubectl certificate approve <certificate-name> |
cluster-info | 显示集群信息 | kubectl cluster-info |
top | 显示资源(CPU/Memory/Storage)使用。需要Heapster运行 | kubectl top nodes |
cordon | 标记节点不可调度 | kubectl cordon <node-name> |
uncordon | 标记节点可调度 | kubectl uncordon <node-name> |
drain | 驱逐节点上的应用,准备下线维护 | kubectl drain <node-name> --ignore-daemonsets |
taint | 修改节点taint标志 | kubectl taint nodes <node-name> key=value:NoSchedule |
故障诊断和调试命令 | 描述 | 命令示例 |
---|
describe | 显示特定资源或资源组的详细信息 | kubectl describe pod <pod-name> |
logs | 在一个Pod中打印一个容器日志。如果Pod只有一个容器,容器名称是可选的 | kubectl logs <pod-name> |
attach | 附加到一个运行的容器 | kubectl attach <pod-name> -c <container-name> |
exec | 执行命令到容器 | kubectl exec -it <pod-name> -- /bin/sh |
port-forward | 转发一个或多个本地端口到一个pod | kubectl port-forward <pod-name> <local-port>:<pod-port> |
proxy | 运行一个proxy到Kubernetes API server | kubectl proxy |
cp | 拷贝文件或目录到容器中 | kubectl cp <local-file-path> <namespace>/<pod-name>:<container-path> |
auth | 检查授权 | kubectl auth can-i <verb> <resource> |
高级命令 | 描述 | 命令示例 |
---|
apply | 通过文件名或标准输入对资源应用配置 | kubectl apply -f <file-name>.yaml |
patch | 使用补丁修改、更新资源的字段 | kubectl patch deployment/<deployment-name> -p '{"spec": {"replicas": <new-replicas>}}' |
replace | 通过文件名或标准输入替换一个资源 | kubectl replace -f <file-name>.yaml |
convert | 不同的API版本之间转换配置文件 | kubectl convert -f <file-name>.yaml --output-version=<api-version> |
设置命令 | 描述 | 命令示例 |
---|
label | 更新资源上的标签 | kubectl label pod <pod-name> <label-key>=<label-value> |
annotate | 更新资源上的注释 | kubectl annotate pod <pod-name> <annotation-key>=<annotation-value> |
completion | 用于实现kubectl工具自动补全 | source <(kubectl completion bash) |
其他命令 | 描述 | 命令示例 |
---|
api-versions | 打印受支持的API版本 | kubectl api-versions |
config | 修改kubeconfig文件(用于访问API,比如配置认证信息) | kubectl config view |
help | 所有命令帮助 | kubectl help |
plugin | 运行一个命令行插件 | kubectl plugin list |
version | 打印客户端和服务端版本信息 | kubectl version |
备注:更多命令可通过 kubectl --help
或官方文档 kubernetes.io/docs/reference/kubectl/ 查询。