Kubernetes Pod 创建过程

我们知道 Kubernetes 由很多不同组件构成

第一种情况,如果直接创建pod

apiVersion: v1
kind: Pod
metadata:
  name: demo
  namespace: lizhe
spec:
  containers:
  - name: demo-ctr
    image: nginx
  • kubectl 发送创建pod的请求到 api server
  • api server 生成 pod 创建信息
  • api server 存储 创建信息 到 etcd
  • scheduler 查询 pod.spec.Node==null 确认此pod没有被分配
  • scheduler 分配node pod.spec.Node=node1,保存到etcd
  • kubelet 查询etcd,在节点上操作

第二种情况,通过deploy(replicaset)创建pod

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx


 
  • kubectl 发送创建dep的请求到 api server
  • api server 生成 dep 创建信息
  • api server 存储 创建信息 到 etcd
  • controller manager 中的 replicaset controller 从etcd中得到 replicaset 信息
  • controller manager 发送创建 3个 pod 的请求到 api server
  • api server 生成 pod 创建信息
  • api server 存储 创建信息 到 etcd
  • scheduler 查询 pod.spec.Node==null 确认此pod没有被分配
  • scheduler 分配node pod.spec.Node=node1,保存到etcd
  • kubelet 查询etcd,在节点上操作

实际上,只有上面一部分步骤是多出来的

Send a Message