第三篇:《Kubectl 常用命令与资源管理》

kubectl 是 Kubernetes 的命令行工具,也是你与集群交互的主要方式。掌握常用命令、资源查看、对象管理、调试技巧,能让你高效地操作任何 K8s 集群。本文系统讲解 kubectl 的基本语法、常用子命令、资源类型缩写、输出格式定制,以及配置管理,并给出大量实战示例。

一、Kubectl 基本语法

bash 复制代码
kubectl [command] [TYPE] [NAME] [flags]

command:对资源执行的操作,如 get, describe, create, apply, delete, logs, exec。

TYPE:资源类型(如 pod, deployment, service, node),支持单数和复数缩写(po, deploy, svc, no)。

NAME:资源名称,省略时表示所有资源(受命名空间限制)。

flags:可选参数,如 -n namespace、-o wide、--context。

二、常用命令速查表

三、资源类型与缩写

常用资源的完整名称和缩写(kubectl api-resources 查看全部):

技巧:使用 kubectl api-resources 快速查看所有支持的资源及其短名称。

四、输出格式定制

通过 -o 或 --output 控制输出格式:

实用 jsonpath 示例:

bash 复制代码
# 获取所有 Pod 的名称
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'

# 获取特定节点的 Pod 名称
kubectl get pods -o jsonpath='{.items[?(@.spec.nodeName=="node1")].metadata.name}'

五、资源创建与更新

5.1 声明式管理(推荐)

使用 YAML 或 JSON 文件定义资源,然后执行 apply:

bash 复制代码
kubectl apply -f deployment.yaml
kubectl apply -f ./manifests/   # 应用目录下所有 YAML
kubectl apply -f https://example.com/deploy.yaml

apply 使用 last-applied-configuration 注解执行增量更新,适合长期维护。

5.2 命令式管理(临时调试用)

bash 复制代码
# 创建 Deployment
kubectl create deployment nginx --image=nginx --replicas=3

# 创建 Service
kubectl expose deployment nginx --port=80 --type=LoadBalancer

# 创建 ConfigMap 从文件
kubectl create configmap app-config --from-file=./app.conf

# 创建 Secret 从字面值
kubectl create secret generic db-secret --from-literal=password=123456

生产环境推荐使用声明式(YAML + GitOps),便于版本控制和审计。

六、查看与调试

6.1 查看资源

bash 复制代码
kubectl get pods --show-labels          # 显示标签
kubectl get pods -l app=nginx           # 按标签筛选
kubectl get pods -n kube-system         # 指定命名空间
kubectl get pods --field-selector status.phase=Running   # 按字段筛选

6.2 描述资源

describe 命令输出资源的详细状态、事件、最新变更:

bash 复制代码
kubectl describe pod my-pod
kubectl describe node node1

查看 Events 部分对排查故障非常有用(如拉取镜像失败、调度失败、探针错误)。

6.3 实时监控

bash 复制代码
kubectl get pods -w                # 持续监听变化
kubectl get events --watch         # 实时事件流
kubectl get pods -o wide --watch   # 组合使用

6.4 日志查看

bash 复制代码
kubectl logs my-pod                         # 单容器 Pod
kubectl logs my-pod -c sidecar-container    # 多容器 Pod 指定容器
kubectl logs -l app=nginx --tail=20         # 按标签筛选,最后20行
kubectl logs -f my-pod                      # 实时跟踪
kubectl logs my-pod --previous              # 查看上一个崩溃容器的日志

6.5 进入容器执行命令

bash 复制代码
kubectl exec my-pod -- ls -l /tmp
kubectl exec -it my-pod -- /bin/bash        # 交互式 Shell
kubectl exec -it my-pod -c sidecar -- sh    # 多容器时指定容器

6.6 端口转发

将本地端口转发到 Pod 或 Service 的端口,便于调试:

bash 复制代码
kubectl port-forward pod/my-pod 8080:80
kubectl port-forward service/my-service 8080:80

七、标签与选择器

标签是 Kubernetes 组织资源的核心机制。为资源添加标签:

bash 复制代码
kubectl label pods my-pod app=web version=v1
kubectl label pods my-pod version-                # 删除标签

选择器(-l)支持等值(=、==、!=)和集合(in、notin):

bash 复制代码
kubectl get pods -l 'app in (web,api),version!=v2'

八、命名空间管理

命名空间用于资源隔离(如环境、团队)。

bash 复制代码
kubectl create namespace dev
kubectl get namespaces
kubectl config set-context --current --namespace=dev   # 切换默认命名空间
kubectl run nginx --image=nginx -n dev                 # 指定命名空间
kubectl delete namespace dev                           # 删除命名空间(会删除其下所有资源)

九、常用别名与自动补全

提高效率的配置:

bash 复制代码
# 设置别名
alias k=kubectl
alias kgp='kubectl get pods'
alias kd='kubectl describe'
alias kdel='kubectl delete'
alias kexec='kubectl exec -it'
alias klogs='kubectl logs'

# Bash 自动补全(永久生效)
echo 'source <(kubectl completion bash)' >> ~/.bashrc
echo 'alias k=kubectl' >> ~/.bashrc
echo 'complete -o default -F __start_kubectl k' >> ~/.bashrc
source ~/.bashrc

十、配置管理(kubeconfig)

默认配置文件为 ~/.kube/config,支持多集群、多上下文。

bash 复制代码
kubectl config view                    # 查看当前配置
kubectl config get-contexts            # 列出所有上下文
kubectl config current-context         # 当前上下文
kubectl config use-context <name>      # 切换上下文
kubectl config set-credentials ...     # 设置用户认证
kubectl config set-cluster ...         # 设置集群

十一、常见故障排查流程

十二、小结

kubectl 是管理 K8s 集群的强大工具。掌握常用命令、输出格式、标签选择器、命名空间、调试技巧,能让你应对日常运维和开发需求。建议熟记资源缩写、善于使用 describe 和 logs 排查问题,并结合 apply -f 进行声明式管理。

相关推荐
KIDULT°5 小时前
MySQL系列 (1):数据库原理
运维·数据库·mysql·云计算
wewowilling8 小时前
认识微服务
java·运维·微服务·springcloud
玖石书8 小时前
Ubuntu 24.04 UFW 全命令攻略:从入门到端口开放实战
linux·运维·ubuntu
weifont10 小时前
自动化抓取和上架商品:能不动手,就少动手
运维·前端·自动化
拂拉氏10 小时前
【知识讲解】 Linux之动静态库的了解
linux·运维·服务器·动静态库
Mikko711 小时前
Linux 重启后日志没了?进程被 OOM 杀了去哪看?logrotate 之后日志还往旧文件写?三台真机实测日志与性能排查
linux·运维·centos
光依旧11 小时前
发版就掉请求?Spring Boot优雅停机的四步
运维·spring boot·nginx·高可用·优雅停机·mcp server
yichengerp12 小时前
电子行业常用erp系统有哪些?推荐适合中小电子厂的易呈erp软件,操作简单,易落地
大数据·运维·人工智能·云计算·制造
天国梦12 小时前
国密门禁品牌怎么选?2026年最新3个避坑要点
运维·服务器·数据库·python
信可维13 小时前
自动化操作多平台账号:登录态、双会话与 User Data 的 3 个坑
运维·自动化