HelloCoder HelloCoder
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
  • 《可观测和监控》
随笔
关于作者
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
  • 《可观测和监控》
随笔
关于作者
  • 《LearnJavaToFindAJob》

    • 导读

    • 【初级】6~12k档

    • 【中级】12k-26k档

    • 【高级】26k+档

      • K8s与容器

        • k8s知识点
      • 如何实现一个延时队列
      • 高级技术面试
    • 大厂面试题

    • 求职建议

    • 面经

  • LearnJavaToFindAJob
  • 【高级】26k+档
  • K8s与容器
#ks #知识点
HaC
2026-06-08
目录

k8s知识点

# 1、Kubernetes是什么?

Kubernetes 就是容器化应用的操作系统,是容器编排平台,用于自动部署、扩展和管理容器化应用程序。

类比传统操作系统:

  • 传统 OS:管理 CPU、内存、硬盘、网络 → 运行进程

  • Kubernetes:管理服务器、存储、网络、容器 → 运行容器

主要功能包括:

  • 容器编排:自动部署、扩展和管理容器
  • 服务发现和负载均衡:通过 DNS 或 IP 地址自动发现容器,并在容器之间分配流量
  • 存储编排:自动挂载存储系统
  • 自动扩展:根据资源使用情况自动调整容器数量
  • 自我修复:自动重启失败的容器,替换和重新调度节点上的容器
  • 配置管理:集中管理配置信息,无需重建镜像

# 2、Kubernetes和Docker有什么区别?

简单一句话:Docker 造容器,K8s 管容器。

维度 Docker Kubernetes
定位 容器运行时 容器编排平台
职责 打包、运行单个容器 管理成百上千个容器的部署、扩缩、自愈
类比 集装箱(单个) 港口吊机+调度系统
范围 单机 集群(多台机器)

# 部署相关

功能 Docker Kubernetes
跨机器部署 ❌ 需要手动 SSH 到每台机器 ✅ 自动调度到合适节点
批量部署 ❌ 需要写脚本循环执行 ✅ 声明 replicas,一键部署
服务发现 ❌ 需要手动配置或额外组件 ✅ 内置 DNS,自动分配服务名
负载均衡 ❌ 需要额外配置 Nginx/HAProxy ✅ 内置 Service 自动负载均衡

# 运维相关

功能 Docker Kubernetes
故障自愈 ❌ 容器挂了需要人工重启 ✅ 自动重启故障容器,自动迁移
自动扩缩容 ❌ 流量来了需要手动扩容 ✅ 基于 CPU/内存自动增减副本
滚动更新 ❌ 需要自己写脚本实现 ✅ 原生支持,零停机更新
一键回滚 ❌ 需要手动停止、启动旧版本 ✅ kubectl rollout undo 一键回滚
健康检查 ❌ 需要自己实现探针 ✅ 内置 liveness/readiness 探针

# 资源管理

功能 Docker Kubernetes
资源限制 ✅ --memory --cpus 可限制单容器 ✅ 更精细的 request/limit 机制
多租户隔离 ❌ 只有基础命名空间隔离 ✅ Namespace + RBAC + 网络策略
资源利用率 ⚠️ 单机静态分配 ✅ 集群级动态调度,利用率更高

# 3、Kubernetes 的核心组件有哪些?

层级 组件 一句话职责
Master API Server 所有操作的入口,认证授权
etcd 存储集群全部配置和状态
Scheduler 决定新 Pod 放在哪个 Node
Cloud Controller 对接云厂商(LB/存储)
Worker kubelet 节点管家,管理 Pod 生命周期
kube-proxy 网络代理,负载均衡
容器运行时 实际拉镜像、启停容器
Addons CoreDNS 服务发现,域名解析
Ingress 七层路由,域名转发
Dashboard Web UI 管理界面
Metrics Server 采集 CPU/内存指标

# 4、什么是pod?有什么特点

Pod 是 Kubernetes 中一组紧密协作的容器的集合,它们是调度的最小单位,共享网络、存储和生命周期。

一个pod可以包含多个容器,共享网络、存储、命名空间,同生共死(唇寒齿亡)

特点 说明 为什么重要
最小调度单元 不能单独调度容器 统一管理,简化调度逻辑
共享网络 共享 IP 和 localhost 高效进程间通信
共享存储 多个容器共用 Volume 数据交换、日志收集
共享命名空间 可选 PID、IPC、UTS 紧密协作的进程
同生共死 生命周期一致 简化运维,统一管理
原子调度 要么全在一个节点,要么都不在 保证协作容器不分离

# 5、什么是 Namespace?它的作用是什么?

Namespace 是 Kubernetes 中的"虚拟集群",用于将同一个物理集群划分为多个逻辑隔离的空间。

场景 没有 Namespace 有 Namespace
同名资源 ❌ 冲突,不能共存 ✅ 不同 Namespace 可共存
环境区分 需要手动加前缀(如 dev-app、prod-app) 天然隔离
资源管理 混在一起,混乱 按团队/环境清晰划分

默认的 4 个 Namespace:

Namespace 作用 能不能删
default 用户创建的默认位置 ❌ 不建议
kube-system Kubernetes 系统组件运行的地方 ❌ 绝对不能删
kube-public 集群公共信息,所有用户可读 ❌ 不建议
kube-node-lease 节点心跳信息,用于判断节点健康 ❌ 不建议

Namespace 的限制(不能做什么):

不能隔离 说明
网络 不同 namespace 的 Pod 可以互相访问(除非配置网络策略)
存储 PV 是集群级别,可以被不同 namespace 的 PVC 使用
节点 Node 是集群级别,不能被 namespace 独占
ClusterRole 集群级别的权限,不受 namespace 限制

如果要使用 Kubernetes 原生的 Namespace 进行网络隔离,普遍的做法是: 结合 CNI 网络插件,利用 NetworkPolicy(网络策略),如 Calico、Cilium、Weave 插件 来实现

# 6、什么是 Deployment?和 ReplicaSet有什么联系?

Deployment 管理 Pod 的数量和版本,确保"应该运行几个 Pod 就运行几个"

Deployment = 公司的人力资源部(管多少人、谁在岗)

Deployment功能

功能 说明
副本管理 声明 replicas: 3,K8s 会始终保持 3 个 Pod 在运行
滚动更新 从 v1 升级到 v2 时,一个接一个地替换,服务不中断
回滚 升级出问题,一键回到上一个版本
自愈 Pod 挂了,自动创建新的
暂停/恢复 更新过程中可以暂停,观察没问题再继续

ReplicaSet 是确保指定数量的 Pod 副本始终运行的控制器。你可以把它理解为**"Pod 数量的守护者"。它只保证 Pod 的数量正确**。(没有那些回滚、自愈功能,所以Deployment 功能更强大)

Deployment 管版本和更新,ReplicaSet 管数量和存活,Pod 管运行和应用。

(Deployment 是经理,ReplicaSet 是组长,Pod 是员工。)

Deployment 是 ReplicaSet 的上级,我们只用 Deployment,让它去管理 ReplicaSet。

# 7、什么是 Service?

Service 给 Pod 一个固定的访问入口,不管 Pod 怎么变,IP 怎么换,入口不变

Service = 公司的前台总机(不管员工坐哪个工位,打电话找总机就能找到)

Service 的 4 种类型:

类型 说明 访问范围 使用场景
ClusterIP 默认类型,只有集群内部可访问 集群内部 服务之间的内部调用
NodePort 在每个节点上开放一个端口 集群外部(通过 :) 开发测试、简单对外暴露
LoadBalancer 向云提供商申请负载均衡器 公网/外网 生产环境对外暴露服务
ExternalName 映射到外部域名 集群内部 调用外部服务

# 8、什么是 Ingress?它的作用是什么?

Ingress 是 Kubernetes 中用于管理外部访问的资源对象,通常用于 HTTP/HTTPS 流量。

作用:

  • 解决 Service 无法直接对外暴露的问题
  • 基于域名、路径的路由
  • 可以配置 TLS 终止 (在 Ingress 层解密 HTTPS,用 HTTP 转发给 Pod,不用操心证书和解密)
  • 负载均衡

常见的 Ingress Controller

Controller 特点
Nginx Ingress 最常用,性能好,功能丰富
Traefik 云原生,支持自动服务发现
HAProxy Ingress 性能极高,稳定性好
阅读全文
×

(为防止恶意爬虫)
扫码或搜索:HelloCoder
发送:290992
即可永久解锁本站全部文章

解锁
#ks#知识点
上次更新: 2026-06-08 17:48:15
最近更新
01
MySQL支持的锁有哪些
06-08
02
HTTP 是不保存状态的协议, 如何保存用户状态
06-08
03
WebSocket、短轮询、长轮询的区别
06-08
更多文章>
Theme by Vdoing | Copyright © 2020-2026 HaC
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式