kubernets之控制器之间的协作以及网络
一 创建一个deployment的时候整个kubernets集群的资源和事件的调用链
1.1 创建一个deployment的资源,在提交的时候,集群中的调度器,控制器以及node节点上kubelet就已经通过监听各自资源类型的变化,如图所示
- kubernets组件通过API服务器监听API对象
1.2 观察本次创建资源的事件链
当你将deployment的yaml文件通过kubectl提交给API服务器的时候,实际上kubectl会对API服务器发起一个HTTP的post请求,API服务器对请求进行鉴权,认证,准入,最终效验,最后写入etcd存储中,并且将结果返回给API服务器,整个事件链如图所示
- 当客户端kubectl向API服务器发起创建一个deployment资源的时候
- 集群里面所有监听了deployment资源的调度器会收到一个通知,其中在这里我们要说明的只是deployment同样也会收到通知
- deployment调度器收到通知之后会去根据deployment的定义向API服务器发起创建RS
- 彼时在集群中的RS控制器通过监听也收到了RS的创建,并创建了pod
- 等待pod创建完成之后,调度器就会将其分配给工作节点,相应的工作节点通过订阅得知pod被调度自己的节点上
- 于是kubelet会去拉取镜像,启动容器,并将结果反馈给API服务器
1.3 观察集群事件
控制平面以及kubelet在执行相关操作的时候都会向API服务器发送事件,发送事件是通过创建事件资源来实现的,每次使用kubectl describe来检查资源的时候就能看到相关的事件,也可以直接使用kubectl get events --watch
[root@node01 ~]# k get events --watch
NAME AGE
kubia-0.1659b586ea3d7158 0s
kubia-1.1659b586ec5d986a 0s
kubia-2.1659b586ed5fc952 0s
kubia.16591db959436c4c 0s
kubia-0.1659b58e5854386e 0s
kubia-0.1659b58e8bb8c852 0s
kubia-0.1659b58ee400e30f 0s
了解运行中的pod都是些什么
查看下pod中的容器状况
[root@node01 Chapter10]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9a96d4501bee luksa/kubia-pet "node app.js" 40 seconds ago Up 39 seconds k8s_kubia_kubia-1_default_82c80622-5566-11eb-ae9a-5254002a5691_0
1733975abffb k8s.gcr.io/pause:3.1 "/pause" 44 seconds ago Up 43 seconds k8s_POD_kubia-1_default_82c80622-5566-11eb-ae9a-5254002a5691_0
- 从这里可以看到在一个容器起来之前就已经有了/pause容器起来
- 这个容器看起来没有任何实质的作用,但是实际上还是有很大的意义的,它会将一个pod的所有容器组织在同一个命名空间里面
- 实际上,这个基础容器的生命周期基本和pod保持一致,当pod里面的容器需要重启的时候,或者删除重新拉起的时候,需要和之前的容器在同一个命名空间里面,而这个基础容器使之成为可能,如果pod被删除,kubelet会重新去创建它,并包含基础容器以及该pod内部的所有容器
1.4 了解pod中的网络
kubernetes自身并不提供任何的网络插件,而是通过集群管理员或者CNI来配置pod之间的网络,集群的要求是,所有pod都应该在一个扁平的网络环境里面互相通信,换句话就是说pod之间的通信不能够过NAT。
- pod到pod之间通信没有使用NAT网络
- 同样的pod到主机上面的网络也是没有过NAT的
- 但是pod与外部服务通信的时候,就会使用NAT地址转换,由于pod使用的是似有地址,所有会转化为主机的地址
深入了解网络工作原理
每个pod里面都会有个pause容器,每个pod里面的网络接口以及都会被存储在这个基础容器里面
同一节点上pod之间如何通信
- 每个节点上面都有都会有一个网络插件的网桥
每个pod都有一个网卡对,一端在pod内部被改名为eth0,一端以vethxxx的形式到节点上
同节点上面pod通信步骤是,podA的应用经由podA的网卡的eth0到节点端的一侧,之后到达网桥,再从网桥到达另一pod的node端,最后到另一个pod的容器的eth0进入容器应用
不同的节点上面的node通信架构如图所示
不同节点之间的pod通信需要一个三层网络,一般借助网络插件,将不同节点之间的网络打通,之后的流程就是单个节点之间的通信
kubernets之控制器之间的协作以及网络的更多相关文章
- Salesforce视图与控制器之间的交互
刚接触Salesforce,过程的确是比较艰难了,中文资料几乎没有,看英文资料学的效率却不高,不过看了一段时间的英文资料发现自己英语水平挺高不少啊,现在看都不用工具翻译,早知道就再次尝试报个6级,看下 ...
- AngularJS中控制器之间通信方法
在同个angular应用的控制器之间进行通信可以有很多种不同的方式,本文主要讲两种: 基于scope继承的方式和基于event传播的方式 基于scope继承的方式 最简单的让控制器之间进行通信的方法是 ...
- angular 控制器之间的通信
1, 利用作用域的继承方式 由于作用域的继承是基于js的原型继承方式,所以这里分为两种情况,当作用域上面的值为基本类型的时候,修改父作用域上面的值会 影响到子作用域,反之,修改子作用域只会影响子作用域 ...
- iOS开发控制器之间传值的几种小方法
在IOS开发中或面试中,经常会遇到,两个或者多个控制器之间传值的问题 ,总结的集中方法仅供参考! 问题 :将B控制器中的textField 输入内容,传到A控制器中的label上显示出来,如何传值? ...
- angular中控制器之间的通讯方式
1, 利用作用域的继承方式 由于作用域的继承是基于js的原型继承方式,所以这里分为两种情况,当作用域上面的值为基本类型的时候,修改父作用域上面的值会 影响到子作用域,反之,修改子作用域只会影响子作用域 ...
- angular控制器之间的传值
每个controller都会有自己的scope,所有的scope都是属于 $rootScope的子或者子的子... 那么问题就好解决了,通过 $rootScope.$broadcast 广播的事件每个 ...
- java多线程(七)-线程之间的 协作
对于多线程之间的共享受限资源,我们是通过锁(互斥)的方式来进行保护的,从而避免发生受限资源被多个线程同时访问的问题.那么线程之间既然有互斥,那么也会有协作.线程之间的协作也是必不可少的,比如 盖个商场 ...
- angularJS--多个控制器之间的数据共享
为了在控制器之间共享数据,需要在服务中添加一个用来储存用户名的方法.记住,服务在 应用的生命周期内是单例模式的,因此可以将用户名安全地储存在其中. <!DOCTYPE html> < ...
- angular开发控制器之间的通信
一.指令与控制器之间通信,无非是以下几种方法: 基于scope继承的方式 基于event传播的方式 service的方式(单例模式) 二.基于scope继承的方式: 最简单的让控制器之间进行通信的方法 ...
随机推荐
- centos7下安装iostat命令
[root@node01 yum.repos.d]# yum intall -y sysstat Loaded plugins: fastestmirror No such command: inta ...
- PB级大规模Elasticsearch集群运维与调优实践【>>戳文章免费体验Elasticsearch服务30天】
[活动]Elasticsearch Service免费体验馆>> Elasticsearch Service自建迁移特惠政策>>Elasticsearch Service新用户 ...
- pytorch和tensorflow的爱恨情仇之一元线性回归例子(keras插足啦)
直接看代码: 一.tensorflow #tensorflow import tensorflow as tf import random import numpy as np x_data = np ...
- css 05-CSS样式表的继承性和层叠性
05-CSS样式表的继承性和层叠性 #本文重点 CSS的继承性 CSS的层叠性 计算权重 权重问题大总结 CSS样式表的冲突的总结 权重问题深入 同一个标签,携带了多个类名 !important标记 ...
- [日常摸鱼]poj1151Atlantis-扫描线
题意:给一堆长宽平行于坐标轴的长方形求并的面积 我个沙茶快写了一晚上- 大概思想就是先根据$y$坐标排个序,把$y$坐标离散化一下,放到线段树里面维护,这里的写法是让线段树的节点储存这个点对应的整段线 ...
- 豆瓣读书top250数据爬取与可视化
爬虫–scrapy 题目:根据豆瓣读书top250,根据出版社对书籍数量分类,绘制饼图 搭建环境 import scrapy import numpy as np import pandas as p ...
- python并发编程——多线程
编程的乐趣在于让程序越来越快,这里将给大家介绍一个种加快程序运行的的编程方式--多线程 1 著名的全局解释锁(GIL) 说起python并发编程,就不得不说著名的全局解释锁(GIL)了.有兴趣的同 ...
- pixi.js 简单交互事件(点击、缩放、平移)
注意:本文代码使用的Pixi.js版本为PixiJS 5.3.3 pixi中常用的鼠标交互事件: //兼容鼠标和触摸屏的共同触发 type InteractionPointerEvents = &qu ...
- NET 5 爬虫框架/抓取数据
爬虫大家或多或少的都应该接触过的,爬虫有风险,抓数需谨慎. 爬虫有的是抓请求,有的是抓网页再解析 本着研究学习的目的,记录一下在 .NET Core 下抓取数据的实际案例.爬虫代码一般具有时效性,当 ...
- winform 跨线程 调用控件
public delegate void rtbCallBack(string txt); public void rtbAddText(string txt) { if (this.rtb.Invo ...