000745 k8s动作架构理解


1. master调度所有node节点,将应用放到一个合适node中的docker中执行


2.
master环境中
用户由UI界面/CLI命令行,通过
--[Kubernetes暴露的api(由kube-apiserver组件负责提供)]
--> 给master发命令 ---->根据命令调度node

master环境中除了kube-apiserver;
底层是etcd,底层是etcd,etcd会保存Kubernetes所有集群数据;
还有kube-scheduler,它监视那些新创建的未指定运行节点的pod,并选择节点让pod在上面运行,k8s主节点master所有操作必须经过kube-scheduler;
kube-controller,所有控制器都在一个进程中运行,节点控制器,副本控制器,端点控制器,服务账户和令牌控制器,云控制器。

node
kubelet 在集群中,每个节点上运行的代理,它保证容器都运行在pod中,也负责维护窗口的生命周期,也负责Volume(csi)和网络CNI
docker 容器化运行环境(替代品有 cri-o等)
kube-proxy 为service提供cluster内部的服务发现和负载均衡,相当于网卡路由器
fluentd 守护进程,收集节点的日志,汇报给master,它有助于提供集群层面的日志

3. 一些概念
Pod中有一个或多个容器(docker为载体所运行的服务),Pod中所有的容器共同使用Pod的网络
Pod中声明可访问的文件目录Volume,可以被kubelet这个代理来访问,
volume可以被挂载到当前pod中的一个或多个容器指定的路径下
Volume支持多种后端存储抽象(本地存储,分布式存储,云存储)

Controller用来部署和管理Pod
Deployment,定义一组Pod的副本数目、版本等,通过controller维持pod数目,自动恢复失败的pod,通过controller以指定的策略控制版本(滚动升级回滚等)
Service,定义一组pod的访问策略,实现对一个service中多个pod的负载均衡。
Label, kubenetes中的资源,都要指定label标签,用以这些资源的查询筛选。
Namespace, 它是集群内部的逻辑隔离机制,每个资源都属于一个namespace,同一个名称空间内,资源不能重名。

4. 操作

访问操作:[未完]

 

创建操作:

通过命令行工具kubectl
--[通过apiServer]
--> 发送一个创建新应用(pod)的命令给master

-->命令信息存储到etcd

-->Controller检验此pod是否已经创建,如果没创建,则由RC中的Pod模板定义生成一个Pod对象,再通过apiServer写入etcd
--> scheduler从ectd中监听到创建pod的命令信息,立即执行一个复杂的调度流程,为空上新的Pod对象选一个落户的节点,并把这个节点信息通过apiServer写入etcd,

-->要落户的节点node上的kubelet通过apiServer监测到了这个新生的pod,就执行创建

[然后]

我们通过kubectl提交一个新的映射创建请求,到这个新建pod所在的service

-->controller通过label标签查询到关联的pod实例,然后生成service的EndPoints信息,并通过apiserver写入etcd

-->接下来,所有node上运行的Proxy进程通过apiserver查询并监听本次操作相关的是哪一个node上的哪一个service及service的endpoints信息,然后建立一个软件方式的负载均衡来实现service访问到后端Pod的流量转发功能。

 


5. k8s中,所有的资源对象都可以采用yaml或json格式进行文件定义或描述。
apiVersion:v1
kind:pod
metadata:
name:nginx
labels:
name:nginx
spec:
containers:
- name:nginx
image:nginx镜像地址
ports:
- containerPort:80

 

posted @ 2020-07-12 14:55  站在菠萝的肩膀上  阅读(99)  评论(0)    收藏  举报