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。
kubectl 常用命令
kubectl 是与集群交互的命令行工具。以下是最高频的命令。
快速上手示例
下面是一个完整的示例:部署一个 Nginx 应用,并通过 Service 暴露它。编写 Deployment
创建nginx-deployment.yaml:
编写 Service
创建nginx-service.yaml:
部署并验证
Running 后,部署即完成。你可以在集群内通过 nginx-svc 这个 DNS 名称访问服务。
清理资源
常用资源缩写
kubectl 支持资源类型的缩写,能明显减少输入量。
例如,
kubectl get po 等价于 kubectl get pods。
延伸阅读
- Kubernetes 架构:了解控制平面与节点组件如何协作。
- Kubernetes 工作负载:学习 Deployment、StatefulSet 等控制器。
- Kubernetes 网络:理解 Service 与集群服务发现机制。
- Kubernetes 配置与存储:管理应用配置和持久化数据。