说说你对kubernetes的理解(简单)
整体概述
k8s是一个编排工具,是谷歌的程序员根据谷歌公司内部使用的borg改简单来讲就是对整个容器资源整合,将全部容器资源统一进行调度管理。Kubernetes(k8s)是自动化容器操作的开源平台。这些容器操作包括:部署,调度和节点集群间扩展。
pod工作流程
- 自主式pod:能够自我进行管理的pod,自主创建之后仍然是需要提交给APIserver,接受之后,借助于scheduler调度器调度时指定node节点,由node节点来启动此pod,如果pod中容器出现故障,需要重启容器,该操作是由kubelet来进行完成,但是如果node节点出了故障了,那么pod也就消失了,运行不了了。
- 控制器管理的pod:引用了控制器的使用,使得pod完全可以称之为有生命周期的对象,由scheduler调度器将其调度至k8s集群中的某节点,然后启动pod,任务终止之后,就将会被清除掉。但是有一些任务是作为守护进程要求随时运行在容器中,一旦出现故障,我们要及时发现,重建或者重启容器,用接口不太容易实现。但是在k8s中提供了pod控制器,这是旧的控制器,后来出了一个新版控制器deployment在其里面LPA控制器,该组件可以水平扩展pod
- service组件就是iptables端口转发,手动配置的,service1.2新版本之后又加入了ipvs调度的功能。
- k8s核心基础组件组件有pod、service、controller控制器,pod运行容器。service和controller都是通过标签和标签选择器来识别自己治理下的pod,控制器可以对pod进行,增加,删除等等操作。
- service是基于名称备客户端访问和发现,所以就需要用到DNS服务,DNS服务自身也是一个pod,所以也需要service和控制器来进行管理,这个DNS的pod是基础性系统架构级pod,k8s自身就需要用到该pod
- 监控:用的是grafana+promethos,这也是附件
k8s网络
网络模型:各个pod运行在一个网络中,在一个网络名称空间,service是一个网络但service是一个虚拟出来的ip,所在node节点是一个网络,一个有三个网络模式,分别为节点网络,集群网络,pod网络
收到请求时,由节点网络代为代理至集群网络,再有集群网络代理至pod网络
同一pod间多个容器的通信
Pod中的每个Docker容器拥有与Pod相同的IP和port地址空间,并且由于他们在同一个网络命名空间,他们之间可以通过localhost相互访问。
什么机制让同一个Pod内的多个docker容器相互通信那?其实是使用Docker的一种网络模型:–net=container各个pod之间的通信,它们之间的通信直接可达的,overlay叠加网络,但其实pod之间是不会直接通信的
pod与service之间的通信,service只是一个虚拟IP地址,每个宿主机都有相关IPtables规则,docker就是指向一个网关,指向宿主机上,而网关收到包之后,会通过iptables规则转发转发给service,而service的地址更新等操作,其它节点有时怎么知道的呢,就引出了kube-proxy,每个节点都会有这个组件,它负责随时和APIserver保持通信,service更新时所在节点会告知APIserver,然后APIserver会生产一个任务实践,告知所有的kube-proxy,这样就完成了,不需要人为参与
flannel
它是支持CNI插件比较好的一款,支持网络配置
calico:基于BGP协议,支持网络配置和网络策略
canel:集合两种各自优点,目前用的最多
网络策略,network proxy
k8s中的名称空间和docker有所不同,它是针对于整个k8s集群而言的,一个pod分配一个名称空间,而且该名称空间只是提供一个管理上的边界,对于pod和pod之间通信并不做设置, 而网络策略就是可以通过设置iptables规则定义这些名称空间之间的访问
几套证书理解
为了安全通信
- APIserver和etcd之间需要双向认证证书
- APIserver与它的客户端也需要证书
组件
master管理节点上组件
master上的组件,APIserver上有很多数据,以及配置,所有数据都不存储在本地,而是存储在共享存储etcd上,但避免单点故障,所以一般至少需要三个master节点
- APIserver:该组件是提供接口服务的是以守护进程方式运行的,用户对集群进行管理时都是通过APIserver来管理整个k8s集群。整个集群的交互都是以APIserver为核心所有查询和管理操作都需要通过API来进行,所有组件模块之间不会相互调用,是通过和APIserver打交道来完成自己那部分的工作,它所有的结果状态备持久存储于etcd中。它是整个集群的网关
- 控制器管理器(controller manager):执行整个系统的后台任务,包括节点状态状况、Pod个数、Pods和Service的关联等。
- 调度器(scheduler):用于部署和管理大规模容器应用平台,APIserver确认pod对象的创建请求之后,便需要由scheduler根据集群内各节点可用资源,以及所需的资源需求作出调度决策
- etcd:负责节点间的服务发现和配置共享。
node节点
- kubelet:作为agent,接收APIserver分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给apiserver。
- 还有容器运行时环境,负责下载镜像并运行容器,至少包括docker环境等
- kube-proxy,运行在每个计算节点上,负责Pod网络代理。定时从etcd获取到service信息来做相应的策略。
说说你对kubernetes的理解(简单)的更多相关文章
- 【K8s】Kubernetes架构理解
抽空学习了一下Kubernetes,感觉和大数据领域内集群的资源管理.任务调度等有异曲同工之处,简单总结一下备忘. [概念] Kubernetes是一个工业级的容器编排平台,单词有点长,常用K8s代称 ...
- Kubernetes — 深入理解容器镜像
而正如我前面所说的,Namespace 的作用是“隔离”,它让应用进程只能看到该 Namespace 内的“世界”:而 Cgroups 的作用是“限制”,它给这个“世界”围上了一圈看不见的墙.这么一折 ...
- Flask关于请求表单的粗浅应用及理解+简单SQL语句温习
1.请求表单 请求表单的知识点是flask数据请求中很小的一部分,首先要了解一下GET和POST请求:http://www.w3school.com.cn/tags/html_ref_httpmeth ...
- Kubernetes:理解资源的概念
不知你是否已清楚,Kubernetes 是支持 Docker 和 rkt(当前是这两种)的容器调度系统.除了下面这些优美的特性,比如简易部署,配置管理,服务发现,等等,它还允许我们以一种更高效的方式来 ...
- Kubernetes的Ingress简单入门
目录 一.什么是Ingress 二.部署Nginx Ingress Controller 三.部署一个Service将Nginx服务暴露出去 四.部署一个我们自己的服务Cafe 五.部署ingress ...
- kubernetes版本apiversion简单说明
在使用yaml文件部署Deployment项目时,出现过 error: error validating "xx-Deployment.yaml": error validatin ...
- DFS与BFS——理解简单搜索(中文伪代码+例题)
新的方法和概念,常常比解决问题本身更重要. ————华罗庚 引子 深度优先搜索(Deep First Search) 广度优先搜索(Breath First Search) 当菜鸟们(比如我)初步接触 ...
- kubernetes集群简单实例搭建
systemctl stop firewalld && systemctl disable firewalldvim /etc/selinux/configSELINUX=disabl ...
- [Kubernetes]深入理解StatefulSet
前面我写的一系列博客,如果你能够耐心看到这一篇,那你应该对一个概念就不是太陌生了:Deployment. 为什么提这个概念呢,这就要说到Deployment的一个不足了.Deployment不足以覆盖 ...
随机推荐
- iOS popToViewController具体用法
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIn ...
- ABAP函数篇1 日期函数
1. 日期格式字段检查 data:l_date type ekko-bedat. l_date = '20080901'. CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY ...
- 使用Spring Boot接受HTTP GET/POST请求的一个SQL并返回结果
这里说的意思是:我向我的Web服务器发送一个请求(因为GET请求的一些限制,所以最好使用POST请求,不过这里作为测试还是使用GET请求),请求中带一个sql参数,它对应查询的数据.然后我的Sprin ...
- js 延迟函数
1.对于 setTimeout函数 普通函数: 100ms后执行时,this指向window对象. function foo(){ setTimeout(function(){ console.log ...
- 【GStreamer开发】GStreamer基础教程06——媒体格式和pad的Capabilities
目标 Pad的Capabilities是一个GStreamer element的基础,因为framework大部分时间是自动处理的,所以我们几乎感觉不到它的存在.本教程比较偏向原理,介绍了 ...
- matlab绘制直方图的方法
直接上代码,利用hist绘制频次直方图和频率直方图... %rand Fs=1000;N=10000; t=0:1/Fs:(N-1)/Fs; X1=rand(1,length(t)); subplot ...
- Properties类使用详解
Java Properties类使用详解 概述 Properties 继承于 Hashtable.表示一个持久的属性集,属性列表以key-value的形式存在,key和value都是字符串. Pr ...
- 035 Android Volley框架进行网络请求
1.volley入门介绍 开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通 ...
- URI和URL的关系与区别
首先给大家举个例子,有一家公司的总经理,某天,给了我一张名片,上面写了他的头衔,北京XXX公司总经理 张三,还有他的办公室地址,北京市海淀区长安街35号北京XXX公司总经理办公室,那么,我以后给我的朋 ...
- oracle 常用sql 经典sql函数使用 sql语法
各种树操作, 用来查询表中带有子父节点的信息 Oracle 树操作(select-start with-connect by-prior) select m.org_id from sm_organ ...