第三篇:《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 进行声明式管理。

相关推荐
hai3152475432 小时前
libcore_final.c —— 九章数流矩阵系统
linux·运维·网络
@Ma2 小时前
企业微信外部群的消息自动化:从协议层到工程实践
运维·自动化·企业微信
我命由我123452 小时前
Windows 操作系统 - Windows 查看防火墙是否开启、Windows 查看防火墙放行端口
java·运维·开发语言·windows·java-ee·操作系统·运维开发
snow@li2 小时前
DevOps:深入理解 DevOps(2026版)
运维·devops
Safeploy安策数据2 小时前
等保测评总卡壳?PCI加密卡如何破解政务云与金融合规难题
运维·网络·安全
Mr -老鬼2 小时前
2026移动端自动化平台横向对比指南:15+主流平台深度评测,开发者选型必备
运维·自动化·easyclick·移动测试
无限进步_2 小时前
Linux进程等待——wait、waitpid与僵尸进程
linux·运维·服务器·开发语言
2401_834636992 小时前
Linux集群技术-高可用与负载均衡实战解析
linux·运维·负载均衡
会Tk矩阵群控的小木2 小时前
小红书矩阵软件:基于Python+ADB的多设备批量管理自动化脚本实战
运维·python·adb·矩阵·自动化·新媒体运营·个人开发