【k8s】基础概念 + 工作原理
工作原理:
原理图

工作原理描述:
1>用户通过kubectl或者API server的REST API接口,提交需要运行的docker容器(创建pod请求);
2>api server将创建pod的相关请求数据存储到etcd(存储中心)中;
3>scheduler监听API server,查询还未分配的Node的Pod,然后根据调度策略为这些Pod分配节点;
4>kube-let则负责在所在的Node节点上接收主节点发来的指令,管理Pod以及Pod中的容器,并定时向master主节点汇报节点资源的使用情况以及容器的情况;
5>controller-manager 则通过api-service监控整个集群的状态,并确保集群处于预期的工作状态
6>
基础概念:
将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。
K8S,就是基于容器的集群管理平台,它的全称,是kubernetes。
一个K8S系统,通常称为一个K8S集群(Cluster)。
这个集群主要包括两个部分:
一个Master节点(主节点)
一群Node节点(计算节点)
Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。
Master节点包括API Server、Scheduler、Controller manager、etcd。
API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。
Scheduler负责对集群内部的资源进行调度,相当于“调度室”。
Controller manager负责管理控制器,相当于“大总管”。
Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod。 Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。
除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。 Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。 Kube-proxy,主要负责为Pod对象提供代理。 Fluentd,主要负责日志收集、存储与查询。
.ETCD[主节点安装]
etcd服务是数据中心。用于持久化存储信息。要求高可用和数据一致性。即多部署几个master节点
存储哪些信息:k8s有本身的节点信息、组件信息、运行的pod、service都需要做持久化 .kube-api-server[主节点安装]
api-server提供集群管理的API接口,包括认证授权、数据校验、集群状态变更、其他模块之间的数据交互和通信
其他模块,都是通过api-server查询操作数据,也就是说只有api-server才能直接操作etcd .controllerManager[主节点安装]
controllerManager是kubernetes的大脑,它通过api-service监控整个集群的状态,并确保集群处于预期的工作状态
组成:controller-manager是由 kube-controller-manager 和 cloud-controller-manager组成
kube-controller-manager是由 一系列控制器组成,Replication Controller控制副本、Node Controller节点控制、Deployment Controller管理deployment等等
cloud-controller-manager是在k8s启用Cloud provider的时候,需要用来配合云服务提供商的控制 .Scheduler[主节点安装]
kube-scheduler负责实现调度策略,分配调度Pod到集群内的节点上,它监听api-server,查询还未分配的Node的Pod,然后根据调度策略为这些Pod分配节点 .Calico[所有节点安装]
Calico实现了CNI接口,是kubernetes网络方案的一种选择。
Calico在每一个计算节点利用Linux Kernel实现了一个高效的vRouter来负责数据转发,
而每个vRouter通过BGP协议负责把自己上运行的workload的路由信息像整个Calico网络内传播——小规模部署可以直接互联,大规模下可通过指定的BGP route reflector来完成。 这样保证最终所有的workload之间的数据流量都是通过IP路由的方式完成互联的。 .flannel[所有节点安装]
kubernetes网络方案的另一种选择 .kube-ctl[任意节点安装]
kubectl是Kubernetes的命令行工具,是Kubernetes用户和管理员必备的管理工具。
kubectl提供了大量的子命令,方便管理Kubernetes集群中的各种功能。 .kube-let[工作节点安装]
kube-let就是会在每个工作节点上都运行一个kubelet服务进程,默认监听10250端口。
kube-let负责接收并执行master发来的指令,管理Pod以及Pod中的容器。
每个kubelet进程会在API Server上注册节点自身信息,定期向master节点汇报节点的资源使用情况,并通过cAdvisor监控节点和容器的资源。 .kube-proxy[工作节点安装][对外]
kube-proxy保证集群内的服务,可以被集群外访问到。
每台工作节点上都应该运行一个kube-proxy服务,它监听API server中service和endpoint的变化情况,并通过iptables等来为服务配置负载均衡,是让我们的服务在集群外可以被访问到的重要方式。 .kube-dns[独立服务][对内]
kube-dns保证集群内的服务,可以被集群内的pod互相访问到。
kube-dns为Kubernetes集群提供命名服务,主要用来解析集群服务名和Pod的hostname。目的是让pod可以通过名字访问到集群内服务。它通过添加A记录的方式实现名字和service的解析。普通的service会解析到service-ip。headless service会解析到pod列表。

【k8s】基础概念 + 工作原理的更多相关文章
- Zookeeper与Kafka基础概念和原理
1.zookeeper概念介绍 在介绍ZooKeeper之前,先来介绍一下分布式协调技术,所谓分布式协调技术主要是用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种共享资源,防止造成 ...
- k8s 基础概念
摘录自k8s中文社区https://www.kubernetes.org.cn/course kubernetes 源自希腊文,意为舵手,k与s之间是8个字母,所以也叫k8s, docker就像一个个 ...
- PhoneGap架构基础及工作原理介绍
转自:http://mobile.51cto.com/others-308545.htm 本篇文章从PhoneGap由来.功能以及工作原理,力争由浅入深介绍PhoneGap框架. 为什么需要Pho ...
- 11.深入k8s:kubelet工作原理及源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 kubelet信息量是很大的,通过我这一篇文章肯定是讲不全的,大家可 ...
- web基础-web工作原理,http协议,浏览器缓存
1,web工作原理 2,http协议 3,浏览器缓存 4,cookie和session -------------------------------------------------------- ...
- k8s 基础概念和术语
Master k8s里的master指的是集群控制节点,每个k8s集群里需要有一个Master节点来负责整个集群的管理和控制,基本k8s所有控制命令都发给它,它负责整个具体的执行过程,后面执行操作基本 ...
- k8s 理解Service工作原理
什么是service? Service是将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法. 简单来说K8s提供了service对象来访问pod.我们在<k8s网络模型与集群通信> ...
- JNI基础概念以及原理-2016.01.11
Java到C数据类型转换 1 基础类型 Java与Jni类型对应关系 2 String到char数组 具体使用方式 JNIEXPORT jstring JNICALL Java_com_zhoulee ...
- K8S基础概念
一.核心概念 1.Node Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod.Node上运行着Kubernetes的Kubelet.kube ...
随机推荐
- WCF客户端调用服务器端错误:"服务器已拒绝客户端凭据"。
WCF客户端和服务器端不在同一台机器上时,客户端调用服务器端会报如下错误:"服务器已拒绝客户端凭据". 解决办法:在服务端配置文件与客户端配置文件中加入下面红色部分
- TinyHttpd代码解析
十一假期,闲来无事.看了几个C语言开源代码.http://www.cnblogs.com/TinyHttpd 这里本来想解析一下TinyHttpd的代码,但是在网上一搜,发现前辈们已经做的很好了.这里 ...
- ansible源码解读
Ansible源码获取 Ansible Github:https://github.com/ansible Ansible目录结构 $ tree -L 2 ansible-2.0.0.0 ansibl ...
- DDD领域模型企业级系统Unity(五)
添加程序集: 写一个接口: public interface IPlayer { void Play(); } 两个实现类: public class NewPlay : IPlayer { publ ...
- js ES6 Set和Map数据结构详解
这篇文章主要介绍了ES6学习笔记之Set和Map数据结构,结合实例形式详细分析了ECMAScript中基本数据结构Set和Map的常用属性与方法的功能.用法及相关注意事项,需要的朋友可以参考下 本 ...
- rpm包软件管理
一.rpm介绍 linux服务器中所有的软件包安装方式有两种,一种是源码安装.另一种是二进制包安装(rpm)源码包安装的好处是适合不同的发行版本的linux,缺点是在编译过程中花费的时间很长,二进制包 ...
- 【LOJ】#2111. 「JLOI2015」战争调度
题解 记录一个数组dp[i][S][k]表示第i个点,它上面所有的点的状态(参军或者后勤)可以用状态S来表示,一共有k个平民参军的最大收益,当然数组开不下,可以用vector动态开 我们对于每个平民枚 ...
- Codeforces Round #480 (Div. 2) E - The Number Games
题目大意:给你n个点的一棵树, 每个点的权值为2^i ,让你删掉k个点使得剩下的权值和最大. 思路:这题还是比较好想的, 我们反过来考虑, 剩下一个的情况肯定是选第n个点,剩下两个 我们肯定优先考虑第 ...
- Java 中的 protected 访问修饰符你真的了解吗?
protected Java 中的 protected 访问修饰符 总结 在同一个包中,类中 protected 或 default 修饰的属性或方法可以在类外被其对象 (实例) 外部访问,也可以被子 ...
- 关于spark ui中executor显示的内存量与设置的内存量不符的问题
executor显示的内存量是实际执行程序使用的内存量,也就是排除bspark.storage.memoryFraction设置的比例外,然后使用的内存量. 默认是0.6,所以executory和dr ...