k8s知识点

对于 Kubernetes(简称 k8s)新手,我会从核心认知→基础架构→核心资源→基础操作→实战案例逐步拆解,聚焦 "能上手、能理解" 的核心知识点,避免一上来就陷入复杂概念。

一、先搞懂:k8s 是什么?解决什么问题?

  • 定义 :k8s 是谷歌开源的容器编排平台,核心是 "管理一堆服务器上的所有 Docker 容器"。
  • 类比:如果说 Docker 是 "单机管理容器的工具",k8s 就是 "数据中心级的容器管家"------ 它能自动化完成容器的部署、扩缩容、故障恢复、负载均衡等工作。
  • 解决的核心问题
    1. 单机 Docker 无法应对多容器 / 多服务器的集群管理(比如容器挂了没人自动重启);
    2. 手动管理大量容器的部署、网络、存储太繁琐;
    3. 无法快速扩缩容以应对业务流量变化。

二、k8s 核心架构(先认 "组件",不深究原理)

k8s 集群分为控制平面(Master)节点(Node) 两部分,新手先记住各组件的核心作用即可:

表格

角色 核心组件 作用(通俗版)
控制平面 API Server 集群的 "入口",所有操作(比如部署容器)都通过它提交,相当于 "前台客服"
Controller Manager 集群的 "管家",监控容器 / 节点状态,比如容器挂了自动重启、节点挂了迁移容器
Scheduler 集群的 "调度员",决定哪个容器该部署到哪个 Node 节点上(比如选负载低的节点)
etcd 集群的 "数据库",存储所有集群配置、状态数据(比如有哪些容器、节点)
工作节点 Kubelet 每个 Node 上的 "代理",接收 Master 的指令,管理本机的容器(启动 / 停止 / 监控)
Kube-proxy 每个 Node 上的 "网络代理",负责容器的网络访问、负载均衡(比如把请求分发到多个容器)
容器运行时 比如 Docker、containerd,负责实际运行容器(k8s 只是指挥,真正运行容器的还是 Docker)

三、k8s 核心资源(新手必掌握,相当于 "操作对象")

k8s 不直接操作容器,而是通过 "资源对象" 来管理,核心资源按优先级掌握:

1. Pod(最基础的最小部署单元)
  • 定义 :k8s 的最小运行单元,一个 Pod 里可以包含 1 个或多个容器(通常只放 1 个,比如一个 SpringBoot 容器)。
  • 特点
    • Pod 里的容器共享网络、存储,相当于 "一个小团队";
    • Pod 是 "一次性的",挂了会被 k8s 重新创建(不能直接修改运行中的 Pod);
    • 每个 Pod 有唯一的 IP,但 Pod 重建后 IP 会变(所以不能直接用 Pod IP 访问)。
2. Deployment(最常用的控制器,管理 Pod)
  • 定义:用于管理 Pod 的 "控制器",是新手最常接触的资源(90% 的场景用它)。
  • 核心能力
    • 自动化创建 / 更新 Pod(比如部署 10 个相同的 SpringBoot Pod);
    • 故障自愈:Pod 挂了自动重启 / 重建;
    • 扩缩容:一键调整 Pod 数量(比如从 3 个扩到 10 个);
    • 版本回滚:更新镜像后出问题,可一键回滚到旧版本。
3. Service(解决 Pod IP 变动的问题,提供稳定访问)
  • 定义 :为 Pod 提供稳定的访问地址(固定 IP / 域名),相当于 "Pod 的反向代理"。
  • 核心类型(新手先掌握 2 种)
    • ClusterIP:仅集群内部可访问(比如后端服务之间调用);
    • NodePort:将 Service 映射到所有 Node 节点的固定端口(比如 30080),外部可通过节点IP:30080访问(适合测试 / 开发环境)。
4. Namespace(命名空间,资源隔离)
  • 定义 :把集群资源划分成 "不同的环境",比如dev(开发)、test(测试)、prod(生产)。
  • 作用 :不同 Namespace 的资源相互隔离(比如 dev 的 Deployment 不会和 prod 的冲突),新手可先用默认的default Namespace。

四、k8s 基础操作(命令行,新手必记)

先确保环境就绪:新手推荐用minikube(单机 k8s 集群)或k3s(轻量 k8s),安装后验证:

bash

运行

复制代码
kubectl version  # 查看k8s版本(客户端+服务端)
kubectl get nodes  # 查看集群节点(minikube只有1个node)
核心命令(按使用频率排序)

表格

命令 作用 示例
kubectl get <资源类型> 查看资源列表 kubectl get pods(查看所有 Pod)kubectl get deployments(查看所有 Deployment)kubectl get services(查看所有 Service)
kubectl create -f <yaml文件> 通过 YAML 文件创建资源 kubectl create -f demo-deploy.yaml
kubectl apply -f <yaml文件> 创建 / 更新资源(推荐,比 create 更灵活) kubectl apply -f demo-deploy.yaml
kubectl describe <资源类型>/<资源名> 查看资源详细信息(排障必备) kubectl describe pod demo-pod-xxxx
kubectl logs <pod名> 查看 Pod 日志(容器日志) kubectl logs -f demo-pod-xxxx(-f 实时查看)
kubectl exec -it <pod名> -- /bin/bash 进入 Pod 内的容器 kubectl exec -it demo-pod-xxxx -- /bin/bash
kubectl scale deployment <部署名> --replicas=<数量> 扩缩容 Deployment 的 Pod 数量 kubectl scale deployment demo-deploy --replicas=5
kubectl delete <资源类型>/<资源名> 删除资源 kubectl delete pod demo-pod-xxxx kubectl delete deployment demo-deploy

五、实战:部署一个 SpringBoot 应用到 k8s(新手入门案例)

通过这个案例,把核心资源和命令串起来:

步骤 1:编写 Deployment 的 YAML 文件(demo-deploy.yaml)

yaml

复制代码
apiVersion: apps/v1  # API版本(固定)
kind: Deployment     # 资源类型:Deployment
metadata:
  name: springboot-demo  # Deployment名称
spec:
  replicas: 2  # 启动2个Pod副本(扩缩容就是改这个数)
  selector:
    matchLabels:
      app: springboot-demo  # 匹配标签为app:springboot-demo的Pod
  template:
    metadata:
      labels:
        app: springboot-demo  # Pod的标签
    spec:
      containers:
      - name: springboot-demo  # 容器名称
        image: 你的SpringBoot镜像名:标签  # 替换成你自己构建的镜像(比如本地镜像或仓库镜像)
        ports:
        - containerPort: 8080  # 容器暴露的端口
        resources:  # 资源限制(可选,避免容器占用过多资源)
          limits:
            cpu: "1"
            memory: "512Mi"
          requests:
            cpu: "0.5"
            memory: "256Mi"
步骤 2:编写 Service 的 YAML 文件(demo-svc.yaml)

yaml

复制代码
apiVersion: v1
kind: Service
metadata:
  name: springboot-demo-svc  # Service名称
spec:
  type: NodePort  # 外部可访问的类型
  selector:
    app: springboot-demo  # 匹配标签为app:springboot-demo的Pod
  ports:
  - port: 8080  # Service的端口
    targetPort: 8080  # 映射到Pod的端口
    nodePort: 30080  # 节点暴露的端口(范围30000-32767)
步骤 3:部署资源到 k8s

bash

运行

复制代码
# 创建Deployment
kubectl apply -f demo-deploy.yaml
# 创建Service
kubectl apply -f demo-svc.yaml

# 查看部署结果
kubectl get deployments  # 看Deployment是否正常
kubectl get pods         # 看2个Pod是否Running
kubectl get services     # 看Service的NodePort是否为30080
步骤 4:访问应用
  • 如果是 minikube 环境,先获取节点 IP:minikube ip
  • 浏览器访问:节点IP:30080,就能看到你的 SpringBoot 应用;
  • 验证扩缩容:kubectl scale deployment springboot-demo --replicas=3,再kubectl get pods会看到 3 个 Pod。
步骤 5:删除资源(清理环境)

bash

运行

复制代码
kubectl delete -f demo-deploy.yaml
kubectl delete -f demo-svc.yaml

六、新手避坑 & 进阶方向

  1. 避坑点
    • 不要直接操作 Pod(比如手动删除 Pod),Deployment 会自动重建,要改就改 Deployment;
    • 镜像必须是集群内所有 Node 都能访问的(本地镜像需先导入 minikube,或推送到公共 / 私有仓库);
    • NodePort 的端口范围是 30000-32767,不能自定义超出这个范围的端口。
  2. 进阶入门(掌握基础后再学)
    • ConfigMap/Secret:管理配置文件(比如 application.yml)、敏感信息(比如数据库密码);
    • PersistentVolume(PV)/PersistentVolumeClaim(PVC):容器数据持久化(比如 MySQL 的数据存储);
    • Ingress:替代 NodePort,实现域名访问、HTTPS、路径转发(生产环境常用);
    • Helm:k8s 的 "包管理器",一键部署复杂应用(比如 MySQL、Redis 集群)。

总结

  1. 核心架构:k8s 集群分控制平面(管理)和节点(运行容器),新手不用深究组件细节,重点理解 "Master 指挥,Node 执行";
  2. 核心资源:Pod(最小运行单元)、Deployment(管理 Pod)、Service(稳定访问 Pod)是新手必掌握的三大核心;
  3. 核心操作 :通过kubectl命令 + YAML 文件管理资源,先跑通 "部署 SpringBoot 应用" 的案例,再逐步学习进阶内容。
相关推荐
徒 花2 小时前
Docker在Ubuntu上的安装及配置(基于k8s基础环境配置)
ubuntu·docker·kubernetes
thanksm13 小时前
windows server 2019 部署 k8s
云原生·容器·kubernetes
Gold Steps.15 小时前
K8S结合Istio深度实操
云原生·kubernetes·istio
Benszen16 小时前
Docker容器化解决方案全解析
运维·docker·容器
badhope16 小时前
Docker从零开始安装配置全攻略
运维·人工智能·vscode·python·docker·容器·github
AI攻城狮16 小时前
lossless-claw vs mem0:别再把上下文管理和长期记忆混为一谈
人工智能·云原生·aigc
AI攻城狮17 小时前
小白如何选择LLM引擎:从架构视角看懂本地大模型的前台、后端与推理核心
人工智能·云原生·aigc
馨谙21 小时前
Kubernetes 集群组件详解
云原生·容器·kubernetes
Hi2024021721 小时前
AI编程助手Claude Code、Codex、OpenCode一站式Docker环境
docker·容器·ai编程