K8S 核心组件与资源概念 + 带注释命令 + 实操案例版笔记

一、K8S 整体介绍

Kubernetes 简称 k8s,是容器编排工具;集群内部默认所有资源可以互相通信;使用名称空间 namespace实现资源逻辑隔离,用来区分不同项目、环境 (测试、生产)。

1. Master 控制平面组件(控制平面,集群大脑)

表格

组件 通俗释义 核心作用
kube‑api 通信插件 集群唯一入口,所有组件交互、用户执行 kubectl 命令都要经过它,负责身份认证、权限校验;所有请求的大门。
etcd K8s 集群数据库 (数据中心) 保存集群全部数据:节点信息、Pod 配置、Service 配置;只有 etcd 存的数据才是持久化的。
kube‑controller‑manager(controlmanger) 管理控制插件 控制器,循环监测集群实际状态,对比期望状态,状态不一致就自动修复;比如 pod 挂了自动重建。
kube‑scheduler 调度插件 负责挑选合适 Node 节点,把 Pod 调度到符合资源、污点、亲和性条件的节点上。

2. Node 节点组件(工作节点,干活机器)

  1. kubelet (工作插件):运行在每个 node 节点;接收 api‑server 下达指令,管理本机 Pod:创建容器、监控 pod 状态、上报状态给 master。
  2. kube‑proxy (代理插件):运行在每个 node;维护 Service 网络规则,实现四层负载均衡,处理 pod 之间、外部访问 pod 的网络请求。
  3. node:物理层面概念,一台服务器或者虚拟机,用来运行 pod。

总结:master 负责决策,node 负责干活。


二、Pod(K8S 最小调度单元【重中之重】)

  1. pod 是 k8s 最小调度单元,K8s 所有业务全部封装在 Pod 里面
  2. 一个 Pod 里面可以运行 1 个或多个容器;
  3. 同一个 Pod 内部所有容器共享:同一个网络名称空间、存储空间 (挂载点),共享 IP 地址;不同 Pod 之间 IP 相互独立。

1.Pod 核心状态

  • Pending:Pod 处于等待创建状态。 常见原因:节点 CPU 内存资源不足、节点有污点、镜像拉取不到、调度策略限制,scheduler 找不到合适节点。

配套概念:

  • 污点 Taint:配置在 Node 节点上,节点设置污点后,普通 Pod 不会调度到此节点。
  • 容忍 Toleration:配置在 Pod 上面,如果 pod 设置对应容忍策略,就可以调度到有对应污点的节点。

三、工作负载资源(用来创建管理 Pod 的控制器)

共同点:deployment、statefulset、daemonset、Job、CronJob 本质都是管理 pod 的控制器,统称为工作负载

1. Deployment(无状态应用控制器)

  • 适用场景:部署无状态应用,例如:Nginx、tomcat;
  • 无状态含义:每个 Pod 完全一样,没有专属数据,删除重建之后功能不变;
  • 核心能力:副本扩容缩容、滚动更新、版本回滚;

yaml

复制代码
# deployment简单案例 nginx-deploy.yaml
apiVersion: apps/v1    # deployment所属api版本
kind: Deployment       # 资源类型:无状态部署控制器
metadata:
  name: nginx-demo     # deployment名称
  namespace: yunjisuan # 指定创建到yunjisuan名称空间
spec:
  replicas: 3          # 期望创建3个pod副本
  selector:
    matchLabels:
      app: nginx        # 标签匹配,控制器管理带此标签的pod
  template:
    metadata:
      labels:
        app: nginx      # pod的标签
    spec:
      containers:
      - name: nginx
        image: nginx:1.24  # 使用的镜像
        ports:
        - containerPort: 80

2. StatefulSet(有状态应用控制器)

  • 适用场景:部署有状态服务:MySQL、Redis;
  • 有状态含义:每个 pod 有独立身份标识,每个实例保存自己的数据,pod 重建之后存储数据依然保留,pod 名称固定;

3. DaemonSet

  • 特点:集群里每一个 Node 节点上面都会运行一个 Pod;新增节点自动创建 pod,删除节点对应 pod 销毁;
  • 典型案例:节点日志收集、监控组件(prometheus‑node‑exporter)。

4. Job(一次性任务控制器)

一次性任务:Pod 运行批处理脚本、数据备份;任务执行完成之后 pod 正常退出,不会重启;适合只运行一次的任务。

5. CronJob(定时任务控制器)

基于 Linux cron 表达式周期性执行任务;例如每天凌晨 2 点备份数据库。


四、网络资源(把 pod 暴露给内部或者外部访问)

1. Service:四层负载均衡(TCP/UDP),给一组 pod 统一入口

四种访问模式:

  1. ClusterIP(默认):只能集群内部 Pod 之间互相访问,外部机器访问不到。
  2. NodePort:外部客户端通过任意节点 IP + NodePort 端口访问 pod;
    • 端口固定范围:30000‑32767
  3. LoadBalancer:对接云厂商负载均衡器,公网用户访问云 LB 地址再转发到 k8s 集群;阿里云、腾讯云环境使用。
  4. ExternalName:集群内部访问集群外部第三方服务(外部数据库)。

简单 service 示例:

yaml

复制代码
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
  namespace: yunjisuan
spec:
  type: NodePort    # 访问模式
  selector:
    app: nginx      # 和pod标签对应,关联pod
  ports:
  - port: 80        # service内部端口
    targetPort: 80  # pod容器端口
    nodePort: 30080 # 对外暴露端口

2. Ingress:七层负载均衡(HTTP/HTTPS)

  • 基于域名区分不同业务;占用 80、443 端口对外提供访问;
  • Service 是四层,Ingress 是七层;Ingress 匹配域名,然后转发给后端不同 Service。

五、存储相关资源

  1. ConfigMap(cm):存放非敏感配置信息,比如配置文件、环境变量,明文存储;
  2. Secret:存放敏感数据:数据库账号密码、密钥,数据经过 base64 编码(注意:base64 不算加密);
  3. Volume:Pod 内部的挂载目录,可以挂载本地目录、NFS 共享存储;
  4. PV(PersistentVolume):持久化存储卷,管理员提前准备好的存储空间(NFS、云盘);
  5. PVC(PersistentVolumeClaim):存储申请;用户只需要声明需要多大空间,自动绑定合适 PV;实现存储解耦。

六、kubectl 命令(全部加上注释 + 实操示例)

1. 查看集群资源版本信息

bash

运行

复制代码
# 查看k8s所有资源类型、资源简称、api版本
kubectl api-resources
# -o wide:详细格式输出,看到简称、APIGROUP、版本
kubectl api-resources -o wide

2. 节点相关操作

bash

运行

复制代码
# 查看集群所有node节点状态
kubectl get nodes

# 给节点打污点示例(模拟污点问题)
kubectl taint nodes node01 key1=value1:NoSchedule

3. Pod 相关操作

bash

运行

复制代码
# get:查看资源;pod完整写法pods,简写po
kubectl get pod
kubectl get pods
kubectl get po

# -o wide:查看pod详细信息:所在节点、podIP
kubectl get pod -o wide

# -n 指定名称空间,查看yunjisuan名称空间下面pod
kubectl get pod -n yunjisuan

# describe:查看资源详细事件,排查pod无法启动、pending问题最常用
# 格式:kubectl describe 资源类型 资源名称 -n 命名空间
kubectl describe pod nginx-demo-7967986b8c-2xfrd -n yunjisuan

# logs:查看pod日志,排查程序报错
kubectl logs nginx-demo-7967986b8c-2xfrd -n yunjisuan

# exec -it:进入pod内部容器;--后面写linux命令
kubectl exec -it nginx-demo-7967986b8c-2xfrd -n yunjisuan -- /bin/bash

4. 工作负载控制器操作

bash

运行

复制代码
# 查看deployment资源,简写deploy
kubectl get deployment
kubectl get deploy -n yunjisuan

# 根据yaml文件创建资源
kubectl apply -f nginx-deploy.yaml -n yunjisuan
# 根据yaml创建service
kubectl apply -f service.yaml -n yunjisuan

# 删除资源:kubectl delete 资源类型 资源名字 -n 命名空间
kubectl delete pod nginx-demo-7967986b8c-2xfrd -n yunjisuan
kubectl delete deploy nginx-demo -n yunjisuan
# -f 删除yaml里定义的全部资源
kubectl delete -f nginx-deploy.yaml

5. Namespace 名称空间命令

bash

运行

复制代码
# 创建名称空间yunjisuan
kubectl create namespace yunjisuan
# 简写ns
kubectl create ns yunjisuan

# 查看集群全部名称空间
kubectl get namespace
kubectl get ns

# 删除名称空间(空间里面所有资源全部清除)
kubectl delete ns yunjisuan

补充高频命令(拓展,后期运维必备)

bash

运行

复制代码
# 查看当前集群配置
kubectl config view
# 设置默认名称空间,后续命令不用每次加 -n
kubectl config set-context --current --namespace=yunjisuan
# 查看所有资源(一键查看pod、deploy、svc)
kubectl get all -n yunjisuan

七、精简总结(背诵版)

  1. Master:kube‑api、etcd、controller‑manager、scheduler做决策;
  2. Node:kubelet、kube‑proxy负责执行;
  3. Pod 是最小调度单元;
  4. 控制器:deploy 无状态、statefulset 有状态、daemonset 每个节点运行 pod,Job 一次性、CronJob 定时;
  5. Service 四层负载均衡,Ingress 七层负载均衡;
  6. ConfigMap 普通配置,Secret 敏感配置,PV 提供存储,PVC 申请存储;
  7. namespace 实现项目资源隔离。
相关推荐
Z5998178412 小时前
c#软件开发学习笔记--分组、游标与临时表、分页
笔记·学习·c#
nece0012 小时前
Kubernetes v1.36.0 + Ubuntu24.04 + containerd 2.x WordPress 完整部署文档
云原生·容器·kubernetes
你想考研啊3 小时前
七、Docker 容器 + Docker Compose单机部署理发店系统
docker·容器·composer
He BianGu3 小时前
【笔记】WPF中 Brush 的类型、继承关系、使用方式和注意事项
笔记·wpf
阿米亚波3 小时前
【C++ STL】std::forward_list
开发语言·c++·笔记·stl·visual studio·forward_list
Z5998178414 小时前
c#软件开发学习笔记--事务、索引
笔记·学习·c#
宵时待雨4 小时前
linux笔记归纳9:进程间通信
linux·服务器·笔记
疯狂打码的少年4 小时前
【软件工程】结构化设计:结构化设计方法(SC图)
笔记·软件工程
十月的皮皮4 小时前
C语言学习笔记20260716-编译与链接
c语言·笔记·学习