我们知道 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,在节点上操作
实际上,只有上面一部分步骤是多出来的