Kubernetes(K8s)

目录

K8s和Docker的关系

K8s(Kubernetes)和 Docker 不是二选一的关系,而是通常配合使用的不同层级工具‌:Docker 负责容器的创建与运行,而 K8s 负责大规模容器的编排与管理。

  • Docker
    本质 :容器 runtime(容器运行时)
    作用 :用于将应用及其依赖打包成轻量级、可移植的容器,并在单机或开发环境中运行。
    相当于:造集装箱 + 让单个集装箱跑起来
  • K8s(Kubernetes)
    本质 :容器编排平台
    作用 :用于自动化管理成千上万个容器的部署、扩展、网络、存储和故障恢复。
    相当于:集装箱码头 + 调度中心

【注:K8s ‌可以使用 Docker 作为容器运行时‌,但自 Kubernetes 1.20 起,官方已‌弃用 Docker 作为默认运行时‌,转而推荐使用 ‌containerd‌ 或 ‌CRI-O‌(它们兼容 CRI 接口)‌,因此K8s 不依赖 Docker,但需要兼容的容器运行时‌】

K8s 到底怎么用?

绝大多数公司的流程是这样的:

  1. 开发阶段:基本不碰 K8s

    • 你写 Java 代码、打包成 jar/war
    • 本地用 Docker 跑个 MySQL、Redis、Nacos 等中间件
    • K8s 跟你没关系
  2. 构建 & 发布:CI/CD 流水线自动上 K8s

    1. 代码提交 Git → Jenkins/GitLab CI 触发
    2. 编译、打包镜像(Dockerfile + JDK 基础镜像)
    3. 自动部署到 K8s 集群
    4. 发布完成,你能看到:服务在线、日志、监控

你只需要:

  • 点一下「发布」
  • 或者合并代码就自动发
    不需要你手动敲 kubectl 命令
  1. 运行时:Java 服务以 Pod 形式跑在 K8s

    一个微服务 = 多个 Pod 副本

    K8s 帮你干这些脏活:

    • 自动重启挂掉的 Java 进程(自愈)
    • 扩缩容:高峰期多起几个 Pod
    • 滚动更新:发版不停服
    • 服务发现、负载均衡
    • 日志统一收集(ELK/Loki)
    • 监控告警(Prometheus + Grafana)
  2. 日常排查:你会间接用到 K8s

    • 看日志 → 实际上看的是 K8s Pod 日志
    • 进容器看配置、dump 线程 → kubectl exec
    • 看服务是否正常、副本数够不够
    • 重启某个异常实例

常用可视化平台

90% 公司都用可视化界面,命令行多是运维在用。

1. Rancher(国内最常见)

  • 网页界面,点几下就能:
    • 看 Pod 状态
    • 看日志
    • 进入容器终端
    • 重启、扩缩容
  • 中小公司、传统行业最爱

2. KubeSphere

  • 比 Rancher 更偏向企业级
  • 自带 DevOps、流水线、微服务治理
  • 很多中大厂在用

3. 公司自研平台(大厂标配)

阿里、腾讯、字节、京东等都有内部云平台:

  • 你看不到原生 K8s 界面
  • 只看到统一的「应用发布平台」
  • 底层全是 K8s,但对你完全透明

4. 偶尔会见到的

  • Dashboard:K8s 官方自带 UI,功能简陋
  • Argo CD:GitOps 风格,看发布状态
  • Lens:桌面端 K8s 管理工具(开发自己装)

开发中使用K8s遇到的问题

  1. 什么是K8s?主要用来做什么?

    K8s全称Kubernetes,是开源的容器编排平台,用来管理容器,实现自动部署、故障自愈、扩缩容、负载均衡等。

  2. K8s和Docker的区别与关系?

    Docker是容器运行时,负责打包、运行单个容器;

    K8s是容器编排工具,管理大量容器;

    二者不是替代关系,通常配合使用。

  3. K8s中Pod是什么?

    Pod是K8s最小调度单位,一个Pod可以包含一个或多个容器,共享网络和存储,Java服务一般一个Pod跑一个应用容器。

  4. 说几个K8s常用核心资源对象

    常用:Pod、Deployment、Service、ConfigMap、Secret、Ingress。

  5. Deployment的作用是什么?

    用来部署无状态应用,管理Pod副本数,支持滚动更新、回滚、故障自愈。

  6. 为什么需要Service?

    Pod IP不固定,Service提供固定访问地址,实现服务发现和负载均衡,屏蔽后端Pod变化。

  7. ConfigMap和Secret是干嘛的?

    ConfigMap存普通配置信息;

    Secret存密码、密钥等敏感信息。

  8. K8s怎么实现服务高可用/自愈?

    Pod异常或节点挂掉时,控制器会自动重建、迁移Pod,保证服务正常运行。

  9. 什么是滚动更新?

    发布新版本时,逐步替换旧Pod,不停止服务,保证业务不间断。

  10. Java项目部署到K8s的大致流程

    代码打包Jar → 构建Docker镜像 → 推镜像仓库 → 编写K8s配置 → 部署到K8s集群运行。

相关推荐
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS3 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
codeejun3 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
赵文宇(温玉)3 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang3 天前
上传本地镜像到harbor中
docker·容器·持续部署
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
忆~遂愿3 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器
Thneonl3 天前
你的 Pod 为什么 Pending:调度器两阶段
后端·kubernetes
不吃香菜kkk、3 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
ChaITSimpleLove3 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21