惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MongoDB | Blog
MongoDB | Blog
J
Java Code Geeks
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
DataBreaches.Net
腾讯CDC
GbyAI
GbyAI
I
InfoQ
博客园 - Franky
G
Google Developers Blog
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
Vercel News
Vercel News
博客园_首页
MyScale Blog
MyScale Blog
Martin Fowler
Martin Fowler
N
Netflix TechBlog - Medium
V
V2EX
T
The Blog of Author Tim Ferriss
M
MIT News - Artificial intelligence
雷峰网
雷峰网
H
Hackread – Cybersecurity News, Data Breaches, AI and More
大猫的无限游戏
大猫的无限游戏
The GitHub Blog
The GitHub Blog

博客园 - 野鹤闲人

ubantu 耳机调试 keepalived+nginx msg广播到同一个group中,怎么保证所有consumer都消费到,Rocketmq和rabbitmq 分别是怎么做的 mysql优化语句时,关注哪几列 extra要关注吗 CountDownLatch/CyclicBarrier 区别 机器缩容要注意哪些问题 IO模型有哪几种 ConcurrentSkipListMap 并发安全实现 TreeMap hive 小文件优化 redis缓存雪崩问题解决 CAS原理 docker的常用命令 mysql B+树 如果有3层,能保存多少数据 如何保证rabbitmq或kafka 消息不丢失,从生产到消费端全过程 java排查工具 JAVA 强软弱虚引用 git Spring 事务失效
k8s的常用组件,和命令
野鹤闲人 · 2026-01-05 · via 博客园 - 野鹤闲人

Kubernetes(k8s)的常用核心组件和高频命令,这是上手 k8s 的基础 —— 我会先清晰拆解核心组件(控制平面 + 节点组件),再按 “日常操作场景” 整理高频命令,结合使用示例,新手也能快速落地。

一、K8s 核心组件(控制平面 + 节点组件)

k8s 的组件分为控制平面(Master 节点) 和节点组件(Worker 节点),前者负责集群管理,后者负责执行具体任务,先看核心组件的作用和定位:

组件类型组件名称核心作用
控制平面 kube-apiserver 所有操作的统一入口(REST API),集群的 “网关”,所有组件都通过它交互
  etcd 集群的 “数据库”,存储所有集群状态(如 Pod、Service 配置),强一致性分布式存储
  kube-scheduler 调度器,负责把 Pod 分配到合适的 Worker 节点(按资源、亲和性等规则)
  kube-controller-manager 控制器管理器,包含多种控制器(如 Node 控制器、Pod 控制器、Service 控制器),保证集群状态符合预期
  cloud-controller-manager 对接云厂商 API(如 AWS/Aliyun),管理云资源(如负载均衡、持久化存储)
节点组件 kubelet 每个 Worker 节点的 “管家”,监听 apiserver,管理本机 Pod 的生命周期(启动 / 停止)
  kube-proxy 每个 Worker 节点的网络代理,维护节点的网络规则,实现 Service 的负载均衡
  容器运行时(Container Runtime) 运行容器的底层引擎,如 Docker、containerd、CRI-O

补充:核心插件(非内置但必须)

  • CoreDNS:提供集群内 DNS 服务,让 Pod 可以通过 Service 名称访问服务;
  • Network Plugin:网络插件,实现 Pod 间网络互通(如 Calico、Flannel、Cilium);
  • Ingress Controller:实现 HTTP/HTTPS 路由(如 Nginx Ingress)。

二、K8s 高频命令(按场景分类,附示例)

k8s 的核心命令行工具是kubectl,以下是日常开发 / 运维最常用的命令,按 “查看、操作、调试、集群管理” 分类:

1. 基础查看类(最常用)

用于查看集群资源状态,是排查问题的第一步:

# 1. 查看集群信息(节点、版本、API地址)
kubectl cluster-info

# 2. 查看节点列表(-o wide显示更多信息:IP、容器运行时)
kubectl get nodes
kubectl get nodes -o wide

# 3. 查看Pod(核心!-n 指定命名空间,-o wide显示节点、IP)
kubectl get pods  # 查看默认命名空间Pod
kubectl get pods -n kube-system  # 查看kube-system命名空间(系统组件)
kubectl get pods -o wide  # 显示Pod所在节点、IP
kubectl get pods -A  # 查看所有命名空间的Pod(-A = --all-namespaces)
kubectl get pods --watch  # 实时监控Pod状态变化

# 4. 查看Service(服务,-o yaml显示完整配置)
kubectl get svc  # 查看默认命名空间Service
kubectl get svc -n default -o yaml  # 查看某个Service的完整YAML配置

# 5. 查看其他常用资源
kubectl get deploy  # 查看Deployment(无状态应用控制器)
kubectl get rs  # 查看ReplicaSet(副本集)
kubectl get configmap  # 查看配置映射
kubectl get secret  # 查看密钥(敏感信息)
kubectl get ingress  # 查看Ingress路由规则
kubectl get pvc  # 查看持久化卷声明
kubectl get pv  # 查看持久化卷

# 6. 查看资源详情(描述信息,排查问题核心)
kubectl describe pod <pod-name> -n <namespace>  # 查看Pod详细信息(事件、容器、挂载等)
kubectl describe node <node-name>  # 查看节点详情(资源使用、污点、标签)
kubectl describe deploy <deploy-name>  # 查看Deployment详情

2. 资源操作类(创建 / 删除 / 更新)

用于管理资源的生命周期:

# 1. 通过YAML文件创建资源(最推荐的方式)
kubectl apply -f <yaml-file>  # 创建/更新资源(幂等,重复执行不会报错)
kubectl create -f <yaml-file>  # 创建资源(非幂等,已存在会报错)

# 2. 删除资源
kubectl delete pod <pod-name> -n <namespace>  # 删除单个Pod
kubectl delete deploy <deploy-name> -n <namespace>  # 删除Deployment(会自动删除Pod)
kubectl delete -f <yaml-file>  # 通过YAML文件删除资源
kubectl delete pods --all -n <namespace>  # 删除命名空间下所有Pod

# 3. 编辑资源(实时修改配置)
kubectl edit deploy <deploy-name> -n <namespace>  # 编辑Deployment(会自动触发滚动更新)
kubectl edit svc <svc-name> -n <namespace>  # 编辑Service

# 4. 扩缩容(调整Deployment的副本数)
kubectl scale deploy <deploy-name> --replicas=3 -n <namespace>  # 缩容/扩容到3个副本

# 5. 滚动更新(更新镜像)
kubectl set image deploy <deploy-name> <container-name>=<new-image> -n <namespace>
# 示例:更新nginx-deploy的nginx容器镜像为nginx:1.25
kubectl set image deploy nginx-deploy nginx=nginx:1.25 -n default

# 6. 回滚更新(如果更新出问题)
kubectl rollout undo deploy <deploy-name> -n <namespace>  # 回滚到上一版本
kubectl rollout history deploy <deploy-name> -n <namespace>  # 查看更新历史

3. 调试排障类(定位 Pod / 容器问题)

用于排查 Pod 启动失败、运行异常等问题:

# 1. 查看Pod日志(核心!-f 实时跟踪,--tail 查看最后N行)
kubectl logs <pod-name> -n <namespace>  # 查看Pod日志(单容器)
kubectl logs <pod-name> -c <container-name> -n <namespace>  # 多容器Pod指定容器
kubectl logs <pod-name> -f -n <namespace>  # 实时跟踪日志(类似tail -f)
kubectl logs <pod-name> --tail=100 -n <namespace>  # 查看最后100行日志

# 2. 进入Pod的容器(调试)
kubectl exec -it <pod-name> -n <namespace> -- /bin/bash  # 进入容器(bash)
kubectl exec -it <pod-name> -c <container-name> -n <namespace> -- sh  # 多容器指定容器

# 3. 复制文件(Pod ↔ 本地)
kubectl cp <namespace>/<pod-name>:<pod-path> <local-path>  # Pod文件复制到本地
kubectl cp <local-path> <namespace>/<pod-name>:<pod-path>  # 本地文件复制到Pod

# 4. 查看Pod的容器状态(排查启动失败)
kubectl get pods <pod-name> -o jsonpath='{.status.containerStatuses}' -n <namespace>

# 5. 临时运行一个Pod(测试集群网络/环境)
kubectl run -it --rm debug-pod --image=busybox -- sh  # 运行busybox Pod,退出后删除

4. 集群管理类(节点 / 命名空间 / 权限)

# 1. 管理命名空间
kubectl create namespace <ns-name>  # 创建命名空间
kubectl delete namespace <ns-name>  # 删除命名空间
kubectl get namespaces  # 查看所有命名空间

# 2. 给节点打标签/污点(调度用)
kubectl label nodes <node-name> env=prod  # 给节点打标签(用于亲和性调度)
kubectl taint nodes <node-name> key=value:NoSchedule  # 给节点加污点(阻止Pod调度)

# 3. 查看组件状态(控制平面)
kubectl get componentstatuses  # 查看控制平面组件状态(kube-apiserver/etcd等)

# 4. 查看资源使用情况
kubectl top nodes  # 查看节点CPU/内存使用
kubectl top pods -n <namespace>  # 查看Pod CPU/内存使用

三、常用快捷技巧

  1. 命令别名:可以给kubectl设置别名(如alias k=kubectl),简化输入;
  2. 自动补全:执行source <(kubectl completion bash)开启 bash 自动补全(永久生效需配置到~/.bashrc);
  3. 简写资源类型:k8s 支持资源类型简写,如podpodeploydeploysvcsvcnsnamespace,示例:kubectl get po -A

总结

  1. 核心组件:控制平面的kube-apiserver/etcd/kube-scheduler是集群 “大脑”,节点组件的kubelet/kube-proxy是集群 “手脚”,缺一不可;
  2. 高频命令:
    • 查看类:kubectl get/describe是日常排查的基础;
    • 操作类:kubectl apply/delete/scale是资源管理核心;
    • 调试类:kubectl logs/exec是定位 Pod 问题的关键;
  3. 所有操作优先通过yaml文件(kubectl apply -f)执行,保证操作可追溯、可复用。