admission机制分析-v1.5.2

什么是admission

在kube-apiserver的参数中,有如下参数:
--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota
这个参数表示的就是admission。来看下官方文档对admission的定义:”An admission control plug-in is a piece of code that intercepts requests to the Kubernetes API server prior to persistence of the object, but after the request is authenticated and authorized.”,即admission的plugin会在认证和授权后对请求进行检查。admission会使用每一个plugin对请求进行检查,一旦有一个不通过,则拒绝该请求。目前admission主要有如下plugin:

阅读全文

cache解读(四)-SharedInformer-v1.5.2

什么是SharedInformer

上次分析了controller及newInformer()和newIndexerInformer()。本次将分析SharedInformer。

阅读全文

cache解读(三)-Controller-v1.5.2

什么是Controller

之前介绍了Reflector, Store, Queue。Reflector可以ListWatcher中的数据同步到Queue中。那么Queue中的数据如何同步到Store中呢,答案就是Controller。

阅读全文

cache解读(二)-Queue-v1.5.2

什么是Queue

Queue在Store的基础上,支持Pop()操作。本次分析将分析两种Queue:FIFO和DeltaFIFO。

阅读全文

cache解读(一)-Store-v1.5.2

Store和Indexer

Store和Indexer 是Kubernetes用来存储obj的结构体,与reflector机制配合使用,可以把ETCD中的变化同步到Store和Indexer中,在代码中却可以直接从Store和Indexer获取相应的对象。所以说,Store和Indexer是ETCD中内容在内存中的一个缓存。

阅读全文

reflector机制-v1.5.2

什么是reflector机制

reflector是Kubernetes中一个相当重要的概念。reflector可以把ListWatcher中的数据不断地放入cache中,所以,reflector是ListWatcher和内存缓存cache之间的桥梁。

阅读全文

使用docker搭建Ceph环境

环境

在学习Ceph时,需要一个实验环境,可以使用Docker来搭建一个Ceph环境。本次教程就是在单虚拟机环境下搭建有3个OSD的Ceph环境,虚拟机的操作系统为Ubuntu16.04系统。虚拟机的IP为10.0.2.15。

阅读全文

storage解读(五)-etcdWatcher-v1.5.2

什么是etcdWatcher

etcdWatcher中封装了etcd的watch操作。etcdWatcher定义在/pkg/storage/etcd/etcd_watcher.go中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// etcdWatcher converts a native etcd watch to a watch.Interface.
type etcdWatcher struct {
// HighWaterMarks for performance debugging.
// Important: Since HighWaterMark is using sync/atomic, it has to be at the top of the struct due to a bug on 32-bit platforms
// See: https://golang.org/pkg/sync/atomic/ for more information
incomingHWM storage.HighWaterMark
outgoingHWM storage.HighWaterMark
encoding runtime.Codec
// Note that versioner is required for etcdWatcher to work correctly.
// There is no public constructor of it, so be careful when manipulating
// with it manually.
versioner storage.Versioner
transform TransformFunc
list bool // If we're doing a recursive watch, should be true.
quorum bool // If we enable quorum, shoule be true
include includeFunc
filter storage.FilterFunc
etcdIncoming chan *etcd.Response
etcdError chan error
ctx context.Context
cancel context.CancelFunc
etcdCallEnded chan struct{}
outgoing chan watch.Event
userStop chan struct{}
stopped bool
stopLock sync.Mutex
// wg is used to avoid calls to etcd after Stop(), and to make sure
// that the translate goroutine is not leaked.
wg sync.WaitGroup
// Injectable for testing. Send the event down the outgoing channel.
emit func(watch.Event)
cache etcdCache
}

阅读全文

storage解读(四)-etcdHelper-v1.5.2

什么是ETCD Helper

ETCD Helper是对ETCD Client的封装。目前Kubernetes有ETCD2 Helper和ETCD3 Helper,当然我们只分析ETCD2 Helper。

阅读全文

storage解读(三)-storageDecorator-v1.5.2

什么是storageDecorator

在上次分析中,NewStorage()和NewREST()中生成核心storageInterface(即ETCD Helper)的是Decorator()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//***/registry/rbac/role/etcd/etcd.go NewREST()***//
storageInterface, dFunc := opts.Decorator(
opts.StorageConfig,
cachesize.GetWatchCacheSizeByResource(cachesize.Roles),
&rbac.Role{},
prefix,
role.Strategy,
newListFunc,
storage.NoTriggerPublisher,
)
//***/pkg/registry/core/etcd/etcd.go NewStorage()***//
storageInterface, dFunc := opts.Decorator(
opts.StorageConfig,
cachesize.GetWatchCacheSizeByResource(cachesize.Nodes),
&api.Node{},
prefix,
node.Strategy,
newListFunc,
node.NodeNameTriggerFunc)

阅读全文