技术博客

Kubernetes入门先理解这5个概念:Pod、Deployment、Service、ConfigMap、Ingress

为 Kubernetes 初学者解释 Pod、Deployment、Service、ConfigMap 和 Ingress 的作用,以及它们在应用发布中的关系。

KubernetesK8s云原生容器

Kubernetes 的概念很多,新手一开始容易被 API、控制器、网络和存储淹没。入门阶段不需要一次理解全部内容,先把应用发布过程中最常见的五个概念打通。

它们分别是 Pod、Deployment、Service、ConfigMap 和 Ingress。

Pod:Kubernetes 调度的最小单元

Pod 是 Kubernetes 里最小的调度单元。一个 Pod 里可以有一个或多个容器,它们共享网络和部分存储。

大多数业务场景里,一个 Pod 放一个主容器就够了。

可以把 Pod 理解为“应用实例”。如果一个 Web 服务需要运行 3 个副本,通常就是 3 个 Pod。

查看 Pod:

kubectl get pods

查看详情:

kubectl describe pod <pod-name>

Deployment:管理 Pod 副本和发布

生产环境很少直接创建 Pod,而是通过 Deployment 管理。

Deployment 负责:

查看 Deployment:

kubectl get deployments

当你修改镜像版本时,Deployment 会逐步替换旧 Pod。

Service:给 Pod 提供稳定访问入口

Pod 会创建、销毁、重建,IP 地址并不稳定。Service 的作用是给一组 Pod 提供稳定访问入口。

常见类型:

Service 通过标签选择器找到对应 Pod。

查看 Service:

kubectl get svc

ConfigMap:管理非敏感配置

应用配置不应该写死在镜像里。ConfigMap 用来保存非敏感配置,例如环境变量、配置文件内容。

例如:

kubectl create configmap app-config --from-literal=APP_ENV=production

Pod 可以把 ConfigMap 挂载成环境变量,也可以挂载成文件。

敏感信息不要放 ConfigMap,应使用 Secret。

Ingress:管理 HTTP/HTTPS 入口

Service 解决的是集群内部访问入口。Ingress 更常用于 HTTP/HTTPS 域名访问。

Ingress 可以配置:

例如 www.example.com/api 转发到 API 服务,www.example.com 转发到前端服务。

使用 Ingress 通常还需要部署 Ingress Controller,例如 Nginx Ingress Controller。

五个概念如何串起来

一个典型 Web 应用发布流程可以这样理解:

  1. Deployment 声明要运行几个应用副本。
  2. Deployment 创建和管理 Pod。
  3. Pod 运行具体容器。
  4. ConfigMap 提供应用配置。
  5. Service 给 Pod 提供稳定访问入口。
  6. Ingress 把外部域名流量转发到 Service。

这条链路打通之后,再学习存储、探针、调度、权限、监控会更容易。

总结

Kubernetes 入门不要先背概念表,而是围绕“一次应用发布”理解资源之间的关系。

先掌握 Pod、Deployment、Service、ConfigMap 和 Ingress,再通过 kubectl getdescribelogsexec 做实际排障,学习效率会高很多。