目录
- K8s和Docker的关系
- [K8s 到底怎么用?](#K8s 到底怎么用?)
-
- 常用可视化平台
-
- [1. Rancher(国内最常见)](#1. Rancher(国内最常见))
- [2. KubeSphere](#2. KubeSphere)
- [3. 公司自研平台(大厂标配)](#3. 公司自研平台(大厂标配))
- [4. 偶尔会见到的](#4. 偶尔会见到的)
- 开发中使用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 到底怎么用?
绝大多数公司的流程是这样的:
-
开发阶段:基本不碰 K8s
- 你写 Java 代码、打包成 jar/war
- 本地用 Docker 跑个 MySQL、Redis、Nacos 等中间件
- K8s 跟你没关系
-
构建 & 发布:CI/CD 流水线自动上 K8s
- 代码提交 Git → Jenkins/GitLab CI 触发
- 编译、打包镜像(Dockerfile + JDK 基础镜像)
- 自动部署到 K8s 集群
- 发布完成,你能看到:服务在线、日志、监控
你只需要:
- 点一下「发布」
- 或者合并代码就自动发
不需要你手动敲 kubectl 命令
-
运行时:Java 服务以 Pod 形式跑在 K8s
一个微服务 = 多个 Pod 副本
K8s 帮你干这些脏活:
- 自动重启挂掉的 Java 进程(自愈)
- 扩缩容:高峰期多起几个 Pod
- 滚动更新:发版不停服
- 服务发现、负载均衡
- 日志统一收集(ELK/Loki)
- 监控告警(Prometheus + Grafana)
-
日常排查:你会间接用到 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遇到的问题
-
什么是K8s?主要用来做什么?
K8s全称Kubernetes,是开源的容器编排平台,用来管理容器,实现自动部署、故障自愈、扩缩容、负载均衡等。
-
K8s和Docker的区别与关系?
Docker是容器运行时,负责打包、运行单个容器;
K8s是容器编排工具,管理大量容器;
二者不是替代关系,通常配合使用。
-
K8s中Pod是什么?
Pod是K8s最小调度单位,一个Pod可以包含一个或多个容器,共享网络和存储,Java服务一般一个Pod跑一个应用容器。
-
说几个K8s常用核心资源对象
常用:Pod、Deployment、Service、ConfigMap、Secret、Ingress。
-
Deployment的作用是什么?
用来部署无状态应用,管理Pod副本数,支持滚动更新、回滚、故障自愈。
-
为什么需要Service?
Pod IP不固定,Service提供固定访问地址,实现服务发现和负载均衡,屏蔽后端Pod变化。
-
ConfigMap和Secret是干嘛的?
ConfigMap存普通配置信息;
Secret存密码、密钥等敏感信息。
-
K8s怎么实现服务高可用/自愈?
Pod异常或节点挂掉时,控制器会自动重建、迁移Pod,保证服务正常运行。
-
什么是滚动更新?
发布新版本时,逐步替换旧Pod,不停止服务,保证业务不间断。
-
Java项目部署到K8s的大致流程
代码打包Jar → 构建Docker镜像 → 推镜像仓库 → 编写K8s配置 → 部署到K8s集群运行。