Kubernetes学习笔记之CSI External Provisioner源码解析

2021-02-17
阅读 12 分钟
4.9k
最近在部署K8s持久化存储插件时,需要按照CSI官网说明部署一个Deployment pod,由于我们的自研存储类型是文件存储不是块存储,所以部署pod不需要包含容器 external-attacher ,只需要包含 external-provisioner sidecar container和我们自研的csi-plugin容器就行,部署yaml类似如下:

Kubernetes学习笔记之CSI Plugin注册机制源码解析

2021-02-17
阅读 16 分钟
5.1k
最近在维护组内K8s CSI plugin代码时,一直对其内部原理好奇,故趁机深入学习熟悉K8s CSI相关原理。部署K8s持久化存储插件时,需要按照CSI官网说明,部署一个daemonset pod实现插件注册,该pod内容器包含 node-driver-registrar ,部署yaml类似如下:
封面图

Kubernetes学习笔记之Calico CNI Plugin源码解析(二)

2021-01-11
阅读 14 分钟
2.8k
calico插件代码仓库在 projectcalico/cni-plugin ,并且会编译两个二进制文件:calico和calico-ipam,其中calico会为sandbox container创建route和虚拟网卡virtual interface,以及veth pair等网络资源,并且会把相关数据写入calico datastore数据库里;calico-ipam会为当前pod从当前节点的pod网段内分配ip地址,当然当...

Kubernetes学习笔记之Calico CNI Plugin源码解析(一)

2021-01-11
阅读 8 分钟
3.2k
之前在 Kubernetes学习笔记之kube-proxy service实现原理 学习到calico会在worker节点上为pod创建路由route和虚拟网卡virtual interface,并为pod分配pod ip,以及为worker节点分配pod cidr网段。

Kubernetes学习笔记之kube-proxy service实现原理

2021-01-04
阅读 6 分钟
5.9k
我们生产k8s对外暴露服务有多种方式,其中一种使用 external-ips clusterip service ClusterIP Service方式对外暴露服务,kube-proxy使用iptables mode。这样external ips可以指定固定几台worker节点的IP地址(worker节点服务已经被驱逐,作为流量转发节点不作为计算节点),并作为lvs vip下的rs来负载均衡。根据vip:port...

Kubernetes学习笔记之LRU算法源码解析

2020-12-28
阅读 7 分钟
1.9k
之前一篇文章学习 Kubernetes学习笔记之ServiceAccount TokensController源码解析 ,主要学习ServiceAccount有关知识,发现其中使用了LRU Cache,代码在 L106 。k8s自己封装了一个LRU cache的对象 MutationCache ,正好趁此机会复习下 LRU 算法知识。

Kubernetes学习笔记之ServiceAccount TokensController源码解析

2020-12-28
阅读 12 分钟
3.4k
在 Kubernetes学习笔记之ServiceAccount AdmissionController源码解析 文章中,知道一个ServiceAccount对象都会引用一个type="kubernetes.io/service-account-token" 的secret对象,这个secret对象内的 ca.crt 、 namespace 和 token 数据会被挂载到pod内的每一个容器,供调用api-server时认证授权使用。

Kubernetes学习笔记之ServiceAccount AdmissionController源码解析

2020-12-28
阅读 6 分钟
1.9k
本文章基于k8s release-1.17分支代码,代码位于 plugin/pkg/admission/serviceaccount 目录,代码:admission.go 。

Kubernetes学习笔记之Calico Startup源码解析

2020-12-27
阅读 10 分钟
3.2k
我们目前生产k8s和calico使用ansible二进制部署在私有机房,没有使用官方的calico/node容器部署,并且因为没有使用network policy只部署了confd/bird进程服务,没有部署felix。采用BGP(Border Gateway Protocol)方式来部署网络,并且采用 Peered with TOR (Top of Rack) routers 方式部署,每一个worker node和其置顶交...

[笔记]iptables 学习记录

2020-05-03
阅读 4 分钟
3.9k
iptables 是基于内核态的 netfilter 框架,用来过滤 ip 数据包和网络地址转换 NAT 的一个工具,一般用作防火墙功能,或负载均衡功能。简单点说:iptables 是用户态的命令行工具,可以操作内核态的 iptables 的几个模块(基于更底层的 netfilter 模块),然后达到过滤或网络地址转换数据包。

(笔记)kube-proxy 源码中使用 ipvs 基本流程

2020-05-01
阅读 2 分钟
1.9k
kube-proxy 二进制文件只有 37M 左右,不是很大,没记错的话 gitlab runner 有 57M 好像(跑 gitlab ci/cd,也是 go 写的)。kube-proxy 会以DaemonSet 形式跑在每一个 Node 节点上,当然也可以只跑在一小部分 Node 节点上转发数据包,只是代理节点,而另一大部分 Node 节点跑 kubelet 进程,作为计算节点:

[译] 关于 Angular 依赖注入你需要知道的

2018-08-20
阅读 14 分钟
3.9k
如果你之前没有深入了解 Angular 依赖注入系统,那你现在可能认为 Angular 程序内的根注入器包含所有合并的服务提供商,每一个组件都有它自己的注入器,延迟加载模块有它自己的注入器。

[译] Angular 的 @Host 装饰器和元素注入器

2018-08-02
阅读 8 分钟
5.2k
我们知道,Angular 依赖注入机制包含 @Optional 和 @Self 等影响依赖解析过程的装饰器,尽管它们字面意思就直接解释了其作用,但是 @Host 却困扰了我好久。我在其源码注释中看到该装饰器的 描述:

@angular/forms 源码解析之 Validators

2018-08-02
阅读 5 分钟
3.3k
我们知道,@angular/forms 包主要用来解决表单问题的,而表单问题非常重要的一个功能就是表单校验功能。数据校验非常重要,不仅仅前端在发请求给后端前需要校验数据,后端对前端发来的数据也需要校验其有效性和逻辑性,尤其在存入数据库前还得校验数据的有效性。 @angular/forms 定义了一个 Validator 接口,并内置了 Re...

@angular/forms 源码解析之双向绑定

2018-08-02
阅读 5 分钟
2.6k
我们知道,Angular 的 @angular/forms 包提供了 NgModel 指令,来实现双向绑定,即把一个 JS 变量(假设为 name)与一个 DOM 元素(假设为 input 元素)进行绑定,这样 name 的值发生变化,input 元素 的 value 也会自动变化;input 元素的 value 发生变化,name 的值也会自动变化。如下代码,展示一个最简单的双向绑定...

@angular/router 源码分析之注册路由

2018-08-02
阅读 4 分钟
3.7k
比如,程序从路由状态 state1: /advisors/1/households/1 转变为路由状态 state2: /advisors/1/accounts/2,需要实例化的组件集合也从 components1: Advisor+Household 转变为 components2: Advisor+Account(准确的说应该是先是 Module 的实例化,然后才是组件的实例化),这个过程是如何实现的?

illuminate/routing 源码分析之注册路由

2018-08-02
阅读 3 分钟
3.1k
我们知道,在 Laravel 世界里,外界传进来一个 Request 时,会被 Kernel 处理并返回给外界一个 Response。Kernel 在处理 Request 时,会调用 illuminate/routing 包提供的路由功能,来根据当前的 Request,转发到对应的执行逻辑(执行逻辑的形式可以为 Closure 或 Controller@Action)。同时,在进入执行逻辑之前和之后...

[译] 别再对 Angular Modules 感到迷惑

2018-06-15
阅读 13 分钟
6.4k
Angular Modules 是个相当复杂的话题,甚至 Angular 开发团队在官网上写了好几篇有关 NgModule 的文章教程。这些教程清晰的阐述了 Modules 的大部分内容,但是仍欠缺一些内容,导致很多开发者被误导。我看到很多开发者由于不知道 Modules 内部是如何工作的,所以经常理解错相关概念,使用 Modules API 的姿势也不正确。

源码分析 @angular/cdk 之 Portal

2018-05-30
阅读 15 分钟
4.5k
@angular/material 是 Angular 官方根据 Material Design 设计语言提供的 UI 库,开发人员在开发 UI 库时发现很多 UI 组件有着共同的逻辑,所以他们把这些共同逻辑抽出来单独做一个包 @angular/cdk,这个包与 Material Design 设计语言无关,可以被任何人按照其他设计语言构建其他风格的 UI 库。学习 @angular/material ...

[译] 关于 Angular 动态组件你需要知道的

2018-05-02
阅读 10 分钟
7.5k
如果你之前使用 AngularJS(第一代 Angular 框架)来编程,可能会使用 $compile 服务生成 HTML,并连接到数据模型从而获得双向绑定功能:

[译] Angular 属性绑定更新机制

2018-05-02
阅读 7 分钟
3.7k
所有现代前端框架都是用组件来合成 UI,这样很自然就会产生父子组件层级,这就需要框架提供父子组件通信的机制。同样,Angular 也提供了两种方式来实现父子组件通信:输入输出绑定和共享服务。对于 stateless presentational components 我更喜欢输入输出绑定方式,然而对于 stateful container components 我使用共享服...

[译] 为何 Angular 内部没有发现组件

2018-05-02
阅读 7 分钟
2.6k
从我开始使用 Angular 开始,就被组件和指令间区别的问题所困惑,尤其对那些从 Angular.js 世界来的人,因为 Angular.js 里只有指令,尽管我们也经常把它当做组件来使用。如果你在网上搜这个问题解释,很多都会这么解释(注:为清晰理解,不翻译):

[译] Angular DOM 更新机制

2018-05-02
阅读 7 分钟
4.6k
由模型变化触发的 DOM 更新是所有前端框架的重要功能(注:即保持 model 和 view 的同步),当然 Angular 也不例外。定义一个如下模板表达式:

[译] $digest 在 Angular 中重生

2018-05-02
阅读 7 分钟
2k
我使用 Angular.js 框架好些年了,尽管它饱受批评,但我依然觉得它是个不可思议的框架。我是从这本书 Building your own Angular.js 开始学习的,并且读了框架的大量源码,所以我觉得自己对 Angular.js 内部机制比较了解,并且对创建这个框架的架构思想也比较熟悉。最近我在试图掌握新版 Angular 框架内部架构思想,并与...

[译] 监听 Angular 启动过程

2018-04-02
阅读 3 分钟
2.5k
这个 _loadComponent() 函数会在初始化程序时被调用(译者注:这句可参考 application_ref.ts 中 L245,L281, L463,L492),通过观察这个函数不仅知道一个组件是如何被添加到程序里的(译者注:该方法第三行),还能知道对于每一个启动组件,Angular 都会执行使用 APP_BOOTSTRAP_LISTENER 令牌注册的监听器,并且把该...

[译] 别再对 Angular 表单的 ControlValueAccessor 感到迷惑

2018-04-02
阅读 9 分钟
8.4k
如果你正在做一个复杂项目,必然会需要自定义表单控件,这个控件主要需要实现 ControlValueAccessor 接口(译者注:该接口定义方法可参考 API 文档说明,也可参考 Angular 源码定义)。网上有大量文章描述如何实现这个接口,但很少说到它在 Angular 表单架构里扮演什么角色,如果你不仅仅想知道如何实现,还想知道为什么...

[译] 关于 `ExpressionChangedAfterItHasBeenCheckedError` 错误你所需要知道的事情

2018-03-25
阅读 7 分钟
22k
关于 ExpressionChangedAfterItHasBeenCheckedError,还可以参考这篇文章,并且文中有 youtube 视频讲解:Angular Debugging "Expression has changed after it was checked": Simple Explanation (and Fix)

[译] 你真的知道 Angular 单向数据流吗

2018-03-25
阅读 5 分钟
5.2k
关于单向数据流,还可以参考这篇文章,且文中还有 youtube 视频解析:Angular - What is Unidirectional Data Flow? Learn How the Angular Development Mode Works, why it's important to use it and how to Troubleshoot it 。单向数据流一句话解释就是:不要在 Angular 使用 Model 生成 View 这个过程中再去修改 Mod...

[译] 如何手动启动 Angular 程序

2018-03-24
阅读 5 分钟
3.1k
这行代码 platformBrowserDynamic() 是为了构造一个 platform,Angular 官方文档对 platform 的定义是(译者注:为清晰理解,platform 定义不翻译):

[译] 探索 Angular 使用 ViewContainerRef 操作 DOM

2018-03-20
阅读 8 分钟
8.4k
原文链接:Exploring Angular DOM manipulation techniques using ViewContainerRef如果想深入学习 Angular 如何使用 Renderer 和 View Containers 技术操作 DOM,可以查阅 YouTube 视频 my talk at NgVikings。