在学习和使用 Kubernetes(K8s)时,有一些关键的概念和思想需要掌握。这些概念和思想构成了 Kubernetes 的核心,并帮助你理解如何有效地使用和管理 Kubernetes 集群。
核心概念
Pod:
Pod 是 Kubernetes 中最小的部署单元,通常包含一个或多个容器,这些容器共享存储、网络和命名空间。
Pod 是短暂的,通常由控制器管理。
Node:
Node 是 Kubernetes 集群中的一个工作节点,可以是物理机或虚拟机。
每个 Node 上运行着
kubelet
、kube-proxy
和容器运行时(如 Docker)。
Cluster:
Cluster 是一组 Node 的集合,由 Kubernetes 控制平面管理。
控制平面组件包括
etcd
、kube-apiserver
、kube-controller-manager
和kube-scheduler
。
Namespace:
Namespace 是 Kubernetes 中的一个虚拟集群,用于逻辑上隔离资源。
常用于多租户环境或不同的项目环境。
Deployment:
Deployment 是一种控制器,用于声明和管理 Pod 的副本集(ReplicaSet)。
支持滚动更新和回滚。
Service:
Service 是一种抽象,定义了一组 Pod 的逻辑集合以及访问这些 Pod 的策略。
提供负载均衡和服务发现功能。
ConfigMap 和 Secret:
ConfigMap 用于存储非机密的配置信息。
Secret 用于存储敏感信息,如密码、OAuth 令牌和 SSH 密钥。
Volume:
Volume 是 Pod 中的一个目录,容器可以访问它。
支持多种存储后端,如本地存储、NFS、云存储等。
Ingress:
Ingress 是一种 API 对象,管理外部访问到集群内服务的 HTTP 和 HTTPS 路由。
提供负载均衡、SSL 终止和基于名称的虚拟主机等功能。
StatefulSet:
StatefulSet 是一种控制器,用于管理有状态应用程序。
保证 Pod 的顺序部署和唯一性。
DaemonSet:
DaemonSet 确保所有(或一些)Node 上运行一个 Pod 副本。
常用于运行集群守护进程,如日志收集器和监控代理。
Job 和 CronJob:
Job 用于一次性任务,确保任务成功完成。
CronJob 用于定时任务,类似于 Linux 的 cron。
核心思想
声明式配置:
Kubernetes 使用声明式配置来管理集群状态。你定义期望的状态,Kubernetes 控制平面负责实现和维护这个状态。
自愈能力:
Kubernetes 具有自愈能力,可以自动检测和恢复故障的 Pod 和 Node,确保应用程序的高可用性。
可扩展性:
Kubernetes 支持水平扩展和垂直扩展,可以根据负载自动调整资源。
服务发现和负载均衡:
Kubernetes 提供内置的服务发现和负载均衡功能,简化了应用程序的网络配置。
滚动更新和回滚:
Kubernetes 支持滚动更新和回滚,确保应用程序的无缝升级和降级。
资源隔离和配额:
Kubernetes 使用 Namespace 和资源配额来实现资源隔离和限制,确保多租户环境的公平资源分配。
基础设施即代码:
Kubernetes 提倡基础设施即代码(IaC),通过 YAML 或 JSON 文件定义和管理集群资源。
掌握这些概念和思想将帮助你更好地理解和使用 Kubernetes,构建和管理高效、可靠的容器化应用程序。