参考《每天5分钟玩转kubernetes》 ColdMan著。
一、概念
1. Cluster
cluster是计算、存储和网络资源的集合, k8s使用这些资源运行基于容器的应用
2. Master
cluster的大脑,主要职责是调度,决定将应用放在哪里运行。在linux上运行(物理机or虚拟机)。为了高可用,可运行多个master。
3. Node
职责是运行容器应用。由master管理,监控、汇报容器状态,要据master要求管理容器生命周期。运行于linux(物理机or虚拟机)
4. Pod
最小工作单元,每个pod包含1个or多个容器。作为整体被master调度到node上运行。
4.1 引入pod(比容器更高层次的抽象)的目的:
(1) 可管理性。
将需要一起工作的(紧密联系的)容器封装到同一个部署单元,以pod为最小单位进行调度、扩展、共享资源、管理生命周期。
(2) 通信和资源共享。
pod中所有容器使用同一个网络namespace(相同ip+port),可直接用localhost通信。共享存储,k8s挂载volume到pod,本质是将volume挂载到pod中的每个容器。
4.2 Pods的2种使用方式
(1) 运行单一容器
one-container-per-Pod, 只将单个容器简单封装成pod.
(2) 运行多个容器
紧密联调并需要共享资源的容器放到一个Pod中。
5. Controller
定义了pod的部署特性,比如几个副本、在什么样的node上运行。k8s(不直接创建pod)通过controller管理pod。提供Deployment, ReplicaSet, DaemonSet, StatefulSet, Job等controller来满足不同业务场景。
5.1 Deployment: 最常用,可以管理Pod的多个副本,确保pod按照期望的状态运行。
5.2 ReplicaSet: Deployment通过ReplicaSet来管理pod的多个副本,使用deployments时会自动创建replicaset(不需要直接使用ReplicaSet)。实现了pod的多副本管理。
5.3 DaemonSet: 通常用于运行daemon, 每个node最多只运行1个pod副本的场景。
5.4 StatefullSet: 保证pod的每个副本在整个生命周期中名称不变。当某个Pod发生故障需要删除并重启时,pod名称会发生变化。保证副本按照固定的顺序启动、更新或删除。
5.5 Job: 用于运行结束就删除的应用。其他Controller中的pod通常是长期持续运行。
6. Service
Pod销毁和重启后,ip可能会发生变化。deployment部署多个副本,每个pod都有自己的ip。
Service提供外界访问一组特定pod的方式。service有自己的ip和port,为pod提供负载均衡。
k8s运行pod: Controller
k8s访问pod: Service
7. Namespace
将同一个k8s cluster中多个用户或项目组的Controller和Pod等资源分开。
namespace将一个物理的cluster逻辑上划分成多个虚拟的cluster, 每个cluster就是一个namespace,不同namespace里的资源是完全隔离的。
k8s默认创建2个namespace:
default: 创建资源时如果不指定namespace,则为default。
kube-system: k8s自己创建的系统资源