说说你对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不足以覆盖 ...
随机推荐
- [整理]Python程序员面试前需要看的博客(持续整理)
基本素养 如何聪明的提问 面试方法 从面试官角度来告诉大家,哪些人能面试成功 如何在面试中介绍自己的项目经验 计算机系统 [面试] 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清 ...
- 123457123457#0#----com.ppGame.YinYu45--前拼后广--儿童yinyu-pp
com.ppGame.YinYu45--前拼后广--儿童yinyu-pp
- PP篇9 更改计划订单
首先看了下这个函数的版本 还挺新的 S4版本应该是有更新过,里面用了新语法 导入: PLANNEDORDER 计划订单号HEADERDATA 表头数据(来自外部系统) HEA ...
- 机器学习中的数学-线性判别分析(LDA)
前言在之前的一篇博客机器学习中的数学(7)——PCA的数学原理中深入讲解了,PCA的数学原理.谈到PCA就不得不谈LDA,他们就像是一对孪生兄弟,总是被人们放在一起学习,比较.这这篇博客中我们就来谈谈 ...
- 【Leetcode_easy】941. Valid Mountain Array
problem 941. Valid Mountain Array solution: class Solution { public: bool validMountainArray(vector& ...
- R Multiple Plots
R Multiple Plots In this article, you will learn to use par() function to put multiple graphs in a s ...
- __iter__方法demo
class Foo(object): def __init__(self,name,data_list): self.name = name self.data_list = data_list de ...
- C罗是你人生中最好的健身教练和精神导师
C罗又进球了,两场小组赛包揽全队4粒进球,一己之力帮助葡萄牙取得1胜1平,掌握出线主动权.此前三届世界杯金靴分别只有6球.5球.5球进账,C罗如果能延续火爆状态,金靴唾手可得. 之前三届世界杯,C罗7 ...
- pycharm设置开发模板/字体大小/背景颜色(3)
一.pycharm设置字体大小/风格 选择 File –> setting –> Editor –> Font ,可以看到如上界面,可以根据自己的喜好随意调整字体大小,字体风格,文字 ...
- LeetCode 515. 在每个树行中找最大值(Find Largest Value in Each Tree Row)
515. 在每个树行中找最大值 515. Find Largest Value in Each Tree Row 题目描述 You need to find the largest value in ...