入门k8s-Pod
- Pod 是 Kubernetes 中能够被创建和管理的最小部署单元。
- 它可以包含一个或多个容器,这些容器共享存储、网络以及如何运行的规范(如重启策略)。
- 在大多数情况下,Pod 通常只包含一个容器,但在某些场景下(如边车模式 Sidecar),Pod 可能会包含多个紧密相关的容器
创建 Pod 的步骤
- 定义 Pod 的配置:首先需要编写一个 YAML 文件来定义 Pod 的配置,包括容器镜像、端口暴露、环境变量等信息。
- 使用
kubectl
命令行工具或 Kubernetes API:通过kubectl apply -f <your-pod-definition.yaml>
命令或者直接调用 Kubernetes API 来创建 Pod。 - Kubernetes 调度器调度 Pod:Kubernetes 会根据资源可用性和其他约束条件选择合适的节点来运行这个 Pod。
- Kubelet 在选定的节点上启动 Pod:一旦 Pod 被分配给某个节点,该节点上的 Kubelet 进程就会负责启动容器并管理它们的生命周期。
示例 YAML 文件
以下是一个简单的 Pod 定义示例:
apiVersion: v1
kind: Pod
metadata:name: nginx-podlabels:app: web
spec:containers:- name: nginximage: nginx:latestports:- containerPort: 80
解释
- apiVersion: 指定使用的 Kubernetes API 版本,对于 Pod 来说,通常使用
v1
。 - kind: 表明你正在定义的对象类型,在这里是指
Pod
。 - metadata: 包含元数据如名称和标签。
- name: Pod 的名称。
- labels: 键值对形式的标签,可用于标识和选择对象。
- spec: 描述了 Pod 的期望状态。
- containers: 列表,包含 Pod 中所有容器的信息。
- name: 容器的名字。
- image: 容器镜像的名称及版本。
- ports: 容器暴露的端口列表。
- containerPort: 容器内部监听的端口号。
- containers: 列表,包含 Pod 中所有容器的信息。
使用 kubectl
创建 Pod
假设上述 YAML 文件保存为 nginx-pod.yaml
,可以通过以下命令创建 Pod:
kubectl apply -f nginx-pod.yaml
这将把 Pod 配置发送到 Kubernetes API Server,然后由 Kubernetes 系统进行处理。
Kubernetes 内部流程概览
- API Server 接收请求:当执行
kubectl apply
命令时,它会向 Kubernetes API Server 发送一个请求。 - Admission Controllers:在实际创建资源之前,可能会经过一些准入控制器(Admission Controllers),这些控制器可以修改请求内容或拒绝不符合策略的请求。
- Etcd 存储状态:一旦请求被批准,新的 Pod 对象会被存储在 etcd 中。
- Scheduler 调度:Kubernetes Scheduler 会查找未绑定到任何节点的新 Pod,并基于资源需求、亲和性规则等因素决定将其放置在哪一个节点上。
- Kubelet 执行:选定节点上的 Kubelet 收到通知后,会拉取所需的容器镜像,并启动容器。