Skip to main content
本文帮你建立 Kubernetes 的基础操作能力。读完之后,你能理解核心对象的作用,并用 kubectl 部署一个真实应用。

什么是 Kubernetes

Kubernetes 是一个容器编排系统。它负责把容器调度到合适的节点上运行,并维持你期望的状态。 它解决的核心问题是:当容器数量从几个增长到几百个时,手动管理不再可行。你需要一个系统来自动处理部署、扩容、故障恢复和网络配置。

声明式 API 思想回顾

Kubernetes 采用声明式 API。你提交的不是操作指令,而是期望状态的描述。 例如,你告诉系统「运行 3 个 Nginx 副本」,而不是「创建 3 个容器」。Controller 会持续对比实际状态和期望状态。一旦发现偏差,它就采取行动修复。这个过程称为调谐(Reconciliation)。
命令式告诉系统「怎么做」,声明式告诉系统「要什么」。Kubernetes 的绝大多数对象都遵循声明式模型。

核心对象速览

Pod

Pod 是 Kubernetes 最小的调度单元。一个 Pod 包含一个或多个容器,它们共享网络和存储。通常一个 Pod 只运行一个主容器。

Deployment

Deployment 管理无状态应用。它负责维持指定数量的 Pod 副本,支持滚动更新和回滚。它是日常使用最多的工作负载对象。

Service

Service 为一组 Pod 提供稳定的访问入口。Pod 的 IP 会变化,Service 的 IP 和 DNS 名称不会变,详见 Kubernetes 网络

Namespace

Namespace 用于在同一集群内做逻辑隔离。不同团队、不同环境可以放在不同的 Namespace 中,便于权限控制和资源配额管理。

Label 与 Selector

Label 是附加在对象上的键值对,例如 app: nginx。Selector 通过 Label 筛选对象。Service 靠 Selector 找到它要代理的 Pod。
给所有对象打上有意义的 Label 是好习惯。例如 appversionenv,它们会让排查问题和批量操作容易很多。

kubectl 常用命令

kubectl 是与集群交互的命令行工具。以下是最高频的命令。
kubectl get 默认只显示当前 Namespace 的资源。加 -A 参数可以查看所有 Namespace。

快速上手示例

下面是一个完整的示例:部署一个 Nginx 应用,并通过 Service 暴露它。

编写 Deployment

创建 nginx-deployment.yaml:

编写 Service

创建 nginx-service.yaml:

部署并验证

Pod 状态变为 Running 后,部署即完成。你可以在集群内通过 nginx-svc 这个 DNS 名称访问服务。

清理资源

把相关的资源定义放在同一个 YAML 文件中,用 --- 分隔,可以一次性 applydelete

常用资源缩写

kubectl 支持资源类型的缩写,能明显减少输入量。 例如,kubectl get po 等价于 kubectl get pods

延伸阅读