kube

6 阅读13分钟

第 1 阶段:架构与组件实战

1. Kubernetes 架构通俗理解

K8s 集群分为两个部分:

  • Master 节点(控制平面 Control Plane): 调度中心
  • Node 节点(工作节点 Worker Node): 业务代码

2. 核心组件介绍

为了让你真正理解,我们通过命令去“抓”出这些组件。请在终端执行以下命令:

A. 看节点node

查看有多少控制中心、工作节点

kubectl get nodes -o wide
  • 看点:
    • ROLES: 标记为 control-planemaster 的是调度中心;<none>worker 通常是干活的节点。
    • STATUS: 必须是 Ready 才是健康的。
    • VERSION: 看看你们公司用的 K8s 是什么版本(例如 v1.20+)。
[root@xos-hnbk692u ~]# kubectl get nodes -o wide
NAME             STATUS   ROLES           AGE    VERSION                      INTERNAL-IP    EXTERNAL-IP   OS-IMAGE           KERNEL-VERSION                  CONTAINER-RUNTIME
xos-00002-294e   Ready    control-plane   517d   v1.25.16-12+92530656e308a8   10.107.58.51   <none>        PlatOS 1.3 (LTS)   4.18.0-372.32.1.90.po1.x86_64   docker://20.10.24
xos-00003-3760   Ready    control-plane   517d   v1.25.16-12+92530656e308a8   10.107.58.52   <none>        PlatOS 1.3 (LTS)   4.18.0-372.32.1.90.po1.x86_64   docker://20.10.24
xos-hnbk692u     Ready    control-plane   517d   v1.25.16-12+92530656e308a8   10.107.58.50   <none>        PlatOS 1.3 (LTS)   4.18.0-372.32.1.90.po1.x86_64   docker://20.10.24

B.看组件

K8s 的神奇之处在于:它的核心组件(除了 Kubelet)通常也是以 Pod 的形式运行的。它们通常藏在 kube-system 这个命名空间里。

执行这条命令,这是了解架构最重要的一步:

kubectl get pods -n kube-system

你会看到类似下面的列表,我们来逐一对应架构知识:

1. API Server (kube-apiserver-xxx)

  • 角色: “唯一入口”
  • 知识点: 所有命令(kubectl)、所有组件之间的通信,必须经过 API Server。它是集群唯一操作 etcd(数据库)的组件。
  • 实战动作: 只要你能执行 kubectl get 命令并得到反馈,说明 API Server 是活着的。

2. Etcd (etcd-xxx)

  • 角色: “核心账本”
  • 知识点: 保存了集群所有的状态信息(有哪些 Node,跑了哪些 Pod)。如果它挂了,集群就失忆了。
  • 实战动作: 通常你不需要直接操作它,知道它是数据库即可。

3. Controller Manager (kube-controller-manager-xxx)

  • 角色: “自动化管理员”
  • 知识点: 它包含很多控制器。比如“副本控制器”发现某个应用少了一个副本,就会立刻补上。它是维持期望状态的核心。

4. Scheduler (kube-scheduler-xxx)

  • 角色: “调度员”
  • 知识点: 当你创建一个新 Pod,调度员会根据资源空闲情况、策略,决定把它放到哪个 Node 上去跑。

5. Kube-Proxy (kube-proxy-xxx)

  • 角色: “网络交警”
  • 知识点: 它是跑在每台 Node 上的。它负责维护网络规则,让你能通过 Service IP 访问到后端的 Pod。

6. CNI 插件 (例如 calico-node, flannel, cilium 等)

  • 角色: “修路队”
  • 知识点: K8s 本身不提供网络功能,需要插件。你在列表中可能会看到 calicoflannel 之类的名字,这就是负责让 Pod 之间能互相通信的组件。
[root@xos-hnbk692u ~]# kubectl get pods -n kube-system
NAME                                             READY   STATUS             RESTARTS           AGE
cadvisor-9jp79                                   1/1     Running            0                  33d
cadvisor-dgccv                                   1/1     Running            0                  33d
cadvisor-lm74p                                   1/1     Running            0                  33d
coredns-558698fb9f-6n4mq                         1/1     Running            0                  33d
coredns-558698fb9f-fw6bp                         1/1     Running            0                  33d
etcd-xos-00002-294e                              1/1     Running            8                  293d
etcd-xos-00003-3760                              1/1     Running            5                  293d
kube-apiserver-xos-00002-294e                    1/1     Running            31                 307d
kube-apiserver-xos-00003-3760                    1/1     Running            43                 307d
kube-apiserver-xos-hnbk692u                      0/1     CrashLoopBackOff   65301 (118s ago)   71d
kube-controller-manager-xos-00002-294e           1/1     Running            1202               517d
kube-controller-manager-xos-00003-3760           1/1     Running            1229               517d
kube-controller-manager-xos-hnbk692u             1/1     Running            353                517d
kube-proxy-6nkbl                                 1/1     Running            5                  286d
kube-proxy-j872x                                 1/1     Running            8                  286d
kube-proxy-qwrxf                                 1/1     Running            6                  286d
kube-scheduler-xos-00002-294e                    1/1     Running            1211               517d
kube-scheduler-xos-00003-3760                    1/1     Running            1218               517d
kube-scheduler-xos-hnbk692u                      1/1     Running            349                517d
metrics-server-7759b56654-blhq2                  1/1     Running            0                  33d
open-local-agent-5nqpw                           3/3     Running            45                 517d
open-local-agent-7xdbb                           3/3     Running            47                 517d
open-local-agent-nbp82                           3/3     Running            43                 517d
open-local-controller-6d4f6ff9d7-pxdqd           6/6     Running            0                  33d
open-local-scheduler-extender-6976f89876-cdpw9   1/1     Running            0                  33d
tigera-operator-6bbdd8d949-z4lll                 1/1     Running            1392               307d

3. 架构实战总结命令

为了巩固对架构的理解,请运行下面这条命令查看集群的“健康体检报告”:

kubectl cluster-info
[root@xos-hnbk692u ~]# kubectl cluster-info
Kubernetes control plane is running at https://k8s.sangfor.novalocal:8443
CoreDNS is running at https://k8s.sangfor.novalocal:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

然后,挑选一个 Master 节点上的组件(例如 API Server),看看它的详细信息:

# 先复制上面 get pods -n kube-system 里的一个 apiserver 的名字
# 例如: kube-apiserver-node-01
kubectl describe pod kube-apiserver-<你的节点名> -n kube-system
  • 看点: 往下翻,看到 Containers -> Command。你会看到 API Server 启动时带了巨多的参数,这展示了它是如何被配置的(比如加密配置、权限配置等)。

[root@xos-hnbk692u ~]# kubectl describe pod kube-apiserver-xos-00002-294e    -n kube-system
Name:                 kube-apiserver-xos-00002-294e
Namespace:            kube-system
Priority:             2000001000
Priority Class Name:  system-node-critical
Node:                 xos-00002-294e/10.107.58.51
Start Time:           Thu, 20 Nov 2025 11:21:30 +0800
Labels:               component=kube-apiserver
                      tier=control-plane
Annotations:          kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 10.107.58.51:6443
                      kubernetes.io/config.hash: 31b5f8acc9b8b7c6e31a37d26c5249b7
                      kubernetes.io/config.mirror: 31b5f8acc9b8b7c6e31a37d26c5249b7
                      kubernetes.io/config.seen: 2025-03-06T10:41:13.375729979+08:00
                      kubernetes.io/config.source: file
Status:               Running
IP:                   10.107.58.51
IPs:
  IP:           10.107.58.51
Controlled By:  Node/xos-00002-294e
Containers:
  kube-apiserver:
    Container ID:  docker://ad019dd68b5b26a03e60043fbbe4bea4f7197aabc63cee91bbe924549b054f83
    Image:         docker.sangfor.com/paas-docker-base/kube-apiserver:v1.25.16
    Image ID:      docker-pullable://docker.sangfor.com/paas-docker-base/kube-apiserver@sha256:eb99f1fb043d3f1d42f070bcc215897d938bbfc864dbfda1be11f05dba3e80d6
    Port:          <none>
    Host Port:     <none>
    Command:
      kube-apiserver
      --advertise-address=10.107.58.51
      --allow-privileged=true
      --anonymous-auth=true
      --audit-log-maxage=30
      --audit-log-maxbackup=10
      --audit-log-maxsize=100
      --audit-log-path=/tmp/audit.log
      --authorization-mode=Node,RBAC
      --client-ca-file=/etc/kubernetes/pki/ca.crt
      --enable-admission-plugins=DefaultStorageClass,NodeRestriction
      --enable-bootstrap-token-auth=true
      --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
      --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
      --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
      --etcd-servers=https://127.0.0.1:2379
      --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
      --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
      --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
      --max-mutating-requests-inflight=8000
      --max-requests-inflight=4000
      --profiling=false
      --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
      --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
      --requestheader-allowed-names=front-proxy-client
      --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
      --requestheader-extra-headers-prefix=X-Remote-Extra-
      --requestheader-group-headers=X-Remote-Group
      --requestheader-username-headers=X-Remote-User
      --secure-port=6443
      --service-account-issuer=https://kubernetes.default.svc.cluster.local
      --service-account-key-file=/etc/kubernetes/pki/sa.pub
      --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
      --service-cluster-ip-range=10.192.0.0/16
      --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
      --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
    State:          Running
      Started:      Thu, 20 Nov 2025 11:21:31 +0800
    Ready:          True
    Restart Count:  31
    Requests:
      cpu:        250m
    Liveness:     http-get https://10.107.58.51:6443/livez delay=10s timeout=15s period=10s #success=1 #failure=8
    Readiness:    http-get https://10.107.58.51:6443/readyz delay=0s timeout=15s period=1s #success=1 #failure=3
    Startup:      http-get https://10.107.58.51:6443/livez delay=10s timeout=15s period=10s #success=1 #failure=24
    Environment:  <none>
    Mounts:
      /etc/kubernetes/pki from k8s-certs (ro)
      /etc/localtime from localtime (ro)
      /etc/pki from etc-pki (ro)
      /etc/ssl/certs from ca-certs (ro)
      /usr/share/zoneinfo from zoneinfo (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  ca-certs:
    Type:          HostPath (bare host directory volume)
    Path:          /etc/ssl/certs
    HostPathType:  DirectoryOrCreate
  etc-pki:
    Type:          HostPath (bare host directory volume)
    Path:          /etc/pki
    HostPathType:  DirectoryOrCreate
  k8s-certs:
    Type:          HostPath (bare host directory volume)
    Path:          /etc/kubernetes/pki
    HostPathType:  DirectoryOrCreate
  localtime:
    Type:          HostPath (bare host directory volume)
    Path:          /etc/localtime
    HostPathType:  File
  zoneinfo:
    Type:          HostPath (bare host directory volume)
    Path:          /usr/share/zoneinfo
    HostPathType:  Directory
QoS Class:         Burstable
Node-Selectors:    <none>
Tolerations:       :NoExecute op=Exists
Events:
  Type     Reason     Age   From     Message
  ----     ------     ----  ----     -------
  Warning  Unhealthy  10m   kubelet  Readiness probe failed: HTTP probe failed with statuscode: 500

✅ 第 1 阶段作业

请在你的环境中执行上述命令,并确认以下几点:

  1. 你们公司集群有几个 Master,几个 Worker? 3个master 但是没有worker
  2. 你们用的网络插件(CNI)是什么?(在 kube-system 的 Pod 里找名字,通常是 Calico, Flannel 或 Cilium)。
  • 答案: 你们用的是 Calico

    • 解释: Tigera 是 Calico 背后的公司。Calico 是业界最常用的网络方案之一,性能好,支持网络策略。
  1. API Server 是高可用的吗?(看有几个 apiserver 的 pod)。 是,3个。

🧐 深度解读:你的集群现状

1. 为什么是 3 Master + 0 Worker?
  • 现象: 你有 3 个节点,全是 control-plane(Master)。
  • 结论: 这是一个**“超融合”架构。这意味着你的 Master 节点既当爹又当妈**——它们既负责发号施令(控制平面),也负责干苦力(跑业务 Pod)。
  • 注意点: 原生 K8s 默认不让 Master 跑业务(会有“污点 Taint”),但你的环境大概率已经去掉了这个限制,否则没法跑业务。
2. 网络插件(CNI)找到了!
  • 线索: tigera-operator
  • 答案: 你们用的是 Calico
    • 解释: Tigera 是 Calico 背后的公司。Calico 是业界最常用的网络方案之一,性能好,支持网络策略。
3. ⚠️ 发现故障:高可用的实地演示

你刚才提到的“controller-manager 挂了一个”其实看错了,挂的那个是更核心的组件!

请仔细看这行:

kube-apiserver-xos-hnbk692u    0/1     CrashLoopBackOff   65301 (118s ago)   71d
  • 真相: 节点 xos-hnbk692u 上的 API Server(集群入口)挂了,而且重启了 6 万多次都没成功(CrashLoopBackOff)。
  • 为什么你还能操作?
    • 这就是 Kubernetes 高可用(HA) 的魅力!虽然 hnbk692u 的入口挂了,但另外两个节点(xos-00002xos-00003)的 API Server 是好的。你的 kubectl 命令自动连接到了活着的节点。
  • 关于 Etcd 只有 2 个:
    • 通常 3 节点集群应该有 3 个 Etcd。这里 xos-hnbk692u 上的 Etcd 也没显示出来,说明这个节点 xos-hnbk692u 可能有比较严重的底层问题(可能是磁盘满了,或者静态 Pod 配置文件丢失)。
    • 风险提示: Etcd 也是集群架构,遵循“过半存活”原则。3 个死 1 个没关系,但如果再死 1 个,你的集群就会变成“只读”甚至彻底瘫痪。
  • GPA 2.95/4.00,获得三等奖学金、学科竞赛专项奖学金。

  • 获得全国大学生数字媒体科技作品及创意比赛国家三等奖,湖南省大学生计算机程序设计竞赛省级一等奖。

  • 英语四级。

  • 计算机基础 :具有良好的计算机网络基础,熟悉操作系统基础知识,熟悉常用的数据结构与算法。

  • 开发规范 :具备良好编码习惯与代码规范,熟练运用模板方法、策略、工厂、责任链、单例等设计模式降低模块耦合度;深入实践DDD领域驱动设计,熟悉充血模型、领域对象、依赖倒置等思想,曾在项目中通过DDD重构提升开发效率(如营销系统抽奖模块);熟悉CI/CD流程,熟练使用Git、Maven、Jenkins等工具实现自动化部署。

  • Java :精通Java语言及Spring全家桶(Spring、Spring Boot、Spring Cloud Alibaba),能进行二次开发与扩展;熟练掌握JUC并发工具(锁机制、线程池),能针对业务场景优化代码执行效率;深入理解Spring Cloud生态(Nacos、Ribbon、Gateway等),具备高可用微服务开发经验。

  • 数据库 :精通MySQL,熟悉InnoDB引擎原理、索引机制、事务特性与锁机制,具备SQL优化与主从同步经验;熟练掌握Redis,能灵活运用数据结构、持久化机制与集群部署,解决缓存穿透/击穿/雪崩问题,处理过双写数据一致性问题。

  • 分布式 :具备微服务项目开发经验,熟悉Spring Cloud Alibaba、Dubbo等框架,掌握服务注册发现、网关路由、熔断降级等设计;熟悉分布式事务解决方案(本地消息表、两阶段提交、事务补偿),了解分布式锁实现原理。

  • 消息中间件 :熟练使用Kafka、RabbitMQ,了解底层原理,具备顺序消息、消息积压等场景的实践经验。

  • 云原生 :熟练使用Docker、K8S进行容器化部署与运维,掌握Nginx反向代理与负载均衡配置,具备系统监控与故障排查能力。

2025年新人优秀转正员工,被评为 “团队AI先锋” ,积极推动并实践AI编程提效。

核心成果与项目贡献:

  • OA审批Mock-Server工具研发:针对内网开发环境无法访问外网OA平台的阻塞性问题,主导设计并研发了Mock-Server。成功Mock了企微、钉钉、飞书三大平台的审批、组织架构等核心接口,彻底消除了内网测试断点,显著提升OA审批功能的开发和测试效率。在接口文档不全的情况下,创新性使用AI辅助快速定位和解析接口文档,高效完成开发。
  • 数据地图功能从0到1建设:在研发周期紧、任务重的情况下,独立负责控制面12个API接口设计与业务逻辑实现。通过深度应用AI进行“并发编程”(如并行生成gRPC接口与HTTP网关代码),提升开发效率约80% ,按时完成开发并转测。高效修复40+TD,并主动识别并解决了MQ灰度消息抢占、定时器边界条件风险等深层隐患,保障功能稳定上线。目前已有超23家租户使用。
  • XDLP泄密分析页面性能优化:针对历史遗留的复杂SQL查询导致客户在大数据量下功能不可用的问题,独立完成底层架构重构。通过深入分析15个动态查询条件,设计并实施“字段冗余+查询分离”方案,将五层嵌套的复杂Join查询优化为高效分页查询。实现查询性能提升1800% ,磁盘占用从~122MB降至近乎为0,彻底解决客户端的字段缺失与查询超时问题

具备扎实Java技术栈和微服务架构经验的后端开发工程师。在深信服担任核心开发期间,不仅独立承担了从Mock工具研发、数据地图从0到1建设到重大性能优化等关键任务,展现出优秀的技术攻坚和问题解决能力;更积极拥抱新技术,是团队公认的AI应用实践者,能显著提升开发效率。我具备快速融入新团队和业务领域的能力,工作严谨,沟通主动,渴望在高速发展的技术团队中持续成长并创造价值。