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集群运行。

相关推荐
hanzhuhuaa2 小时前
golang工程部署到docker容器(三)
运维·docker·容器
s9123601012 小时前
【docker】Ubuntu22使用skopeo离线推送镜像
运维·docker·容器
迷路爸爸1803 小时前
Docker 配置镜像源后仍然 `pull` 失败:问题、原因与解决方案
docker·容器·eureka
喝醉的小喵3 小时前
iptables 规则重启机器后丢失导致k8s网络不可用
网络·后端·容器·kubernetes·虚拟化
斯普信云原生组3 小时前
Docker 开源软件应急处理方案及操作手册——日常维护与监控命令集
docker·容器·eureka
威联通网络存储3 小时前
云原生容器底座:Kubernetes 持久化存储与 CSI 架构解析
python·云原生·架构·kubernetes
迷路爸爸1803 小时前
Docker 入门学习笔记 01:它到底解决了什么问题,镜像和容器又是什么
服务器·笔记·学习·docker·容器
闻哥4 小时前
Docker Swarm 负载均衡深度解析:VIP vs DNSRR 模式详解
java·运维·jvm·docker·容器·负载均衡
正经教主17 小时前
【docker基础】第一课、从零开始理解容器技术
docker·云原生·容器·eureka