摘要:前言本文介紹是如何訪問(wèn)后端存儲(chǔ)相關(guān)源代碼主要在通用接口原文注釋定義了后端存儲(chǔ)的通用接口,主要是一些增刪改查方法,這種面向接口編程,將實(shí)現(xiàn)和設(shè)計(jì)分離的設(shè)計(jì)提高了軟件的可擴(kuò)展性,降低了模塊間的耦合度,比如只要我們提供的具體實(shí)現(xiàn),那么除了使用
前言
本文介紹 kube-apiserver 是如何訪問(wèn) etcd 后端存儲(chǔ)
相關(guān)源代碼主要在 kubernetes/staging/src/k8s.io/apiserver/pkg/storage
通用接口Interface offers a common interface for object marshaling/unmarshaling operations and hides all the storage-related operations behind it(原文注釋)
// kubernetes/vendor/k8s.io/apiserver/storage/interfaces.go type Interface interface { Versioner() Versioner Create(...) Delete(...) Watch(...) WatchList(...) Get(...) GetToList(...) List(...) GuaranteedUpdate(...) }
Interface 定義了后端存儲(chǔ)的通用接口,主要是一些"增刪改查"方法,這種面向接口編程,將實(shí)現(xiàn)和設(shè)計(jì)分離的設(shè)計(jì)提高了軟件的可擴(kuò)展性,降低了模塊間的耦合度,比如只要我們提供 Interface 的具體實(shí)現(xiàn),那么除了使用 etcd 作為后端存儲(chǔ)之外,是不是也可以使用 consul/zookeeper 等分布式 kv 存儲(chǔ)?
具體實(shí)現(xiàn)Interface 接口目前有兩個(gè)具體實(shí)現(xiàn)類,分別對(duì)應(yīng) etcd v2 和 etcd v3 兩個(gè)不同的 etcd api 版本
// kubernetes/vendor/k8s.io/apiserver/pkg/storage/etcd/etcd_helper.go type etcdHelper struct { ... } // kubernetes/vender/k8s.io/apiserver/pkg/storage/etcd3/store.go type store struct { ... }
這兩個(gè)實(shí)現(xiàn)類的名字差的也太大了。。。go 語(yǔ)言使用非侵入式的接口,所以從 類(結(jié)構(gòu))名上是看不出他們兩和 storage.Interface 有半毛線關(guān)系的,但是只要它們實(shí)現(xiàn)了 storate.Interface 接口里面聲明的方法他們就 "is-a" storage.Interface
創(chuàng)建factory 包里的《工廠方法》Create 會(huì)根據(jù)配置 storagebackend.Config 創(chuàng)建相應(yīng)的 storage.Interface
func Create(c storagebackend.Config) (storage.Interface, DestroyFunc, error) { swtich c.Type { case storagebackend.StorageTypeETCD2: return newETCD2Storage(c) case storagebackend.StorageTypeUnset, storageback.StorageTypeETCD3: return newETCD3Storage(c) default: return nil, nil, fmt.Errorf("unknown storage type: %s", c.Type) } }使用
storage.Interface 被 Store 類(這又是什么東東?)用來(lái)實(shí)現(xiàn) rest.StandardStorage(RESTful 增刪改查) 接口
// kubernetes/vendor/k8s.io/apiserver/pkg/registry/generic/registry/store.go type Store struct { ... Storage storage.Interface } // Create inserts a new item according to the unique key from the object func (e *Store) Create(ctx genericapirequest.Context, obj runtime.Object, includeUninitialized bool)(runtime.Object, error) { ... key, err := e.KeyFunc(ctx, name) ... out := e.NewFunc() if err := e.Storage.Create(ctx, key, obj, out, ttl); err != nil { ... } ... }總結(jié)
本介紹了 kube-apiserver 訪問(wèn) etcd 后端存儲(chǔ)相關(guān)的類(結(jié)構(gòu))和方法,用到的設(shè)計(jì)模式以及架構(gòu)上的套路
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/33050.html
摘要:前言本文介紹是如何訪問(wèn)后端存儲(chǔ)相關(guān)源代碼主要在通用接口原文注釋定義了后端存儲(chǔ)的通用接口,主要是一些增刪改查方法,這種面向接口編程,將實(shí)現(xiàn)和設(shè)計(jì)分離的設(shè)計(jì)提高了軟件的可擴(kuò)展性,降低了模塊間的耦合度,比如只要我們提供的具體實(shí)現(xiàn),那么除了使用 前言 本文介紹 kube-apiserver 是如何訪問(wèn) etcd 后端存儲(chǔ) 相關(guān)源代碼主要在 kubernetes/staging/src/k8s....
摘要:前言看源代碼有一段時(shí)間,總感覺(jué)在迷宮里亂竄,有時(shí)候覺(jué)得終于找到出口了,一下子又撞墻了,總結(jié)下來(lái)還是自己的內(nèi)功不夠深厚,本文是對(duì)遺留,即將廢棄初始化流程以及數(shù)據(jù)結(jié)構(gòu)的一個(gè)梳理,算是做個(gè)路標(biāo),便于以后在迷宮中還能找到回來(lái)的路主要功能是提供接 前言 看 k8s 源代碼有一段時(shí)間,總感覺(jué)在迷宮里亂竄,有時(shí)候覺(jué)得終于找到出口了,一下子又撞墻了,總結(jié)下來(lái)還是自己的內(nèi)功不夠深厚,本文是對(duì) kube-...
摘要:前言看源代碼有一段時(shí)間,總感覺(jué)在迷宮里亂竄,有時(shí)候覺(jué)得終于找到出口了,一下子又撞墻了,總結(jié)下來(lái)還是自己的內(nèi)功不夠深厚,本文是對(duì)遺留,即將廢棄初始化流程以及數(shù)據(jù)結(jié)構(gòu)的一個(gè)梳理,算是做個(gè)路標(biāo),便于以后在迷宮中還能找到回來(lái)的路主要功能是提供接 前言 看 k8s 源代碼有一段時(shí)間,總感覺(jué)在迷宮里亂竄,有時(shí)候覺(jué)得終于找到出口了,一下子又撞墻了,總結(jié)下來(lái)還是自己的內(nèi)功不夠深厚,本文是對(duì) kube-...
摘要:前言了解的同學(xué)都知道,對(duì)外提供接口提供查詢,監(jiān)聽集群資源狀態(tài)的服務(wù),主要就做一件事,就是如何將接口調(diào)用映射到對(duì)后端存儲(chǔ)比如的增刪改查訪問(wèn),在設(shè)計(jì)的時(shí)候考慮到是個(gè)快速迭代的開源項(xiàng)目,很多接口版本可能在未來(lái)版本發(fā)生變化,因此如何設(shè)計(jì)一個(gè)擴(kuò)展 前言 了解 k8s 的同學(xué)都知道,kube-apiserver 對(duì)外提供 RESTful API 接口提供 查詢,監(jiān)聽集群(資源)狀態(tài)的服務(wù),kube...
摘要:前言了解的同學(xué)都知道,對(duì)外提供接口提供查詢,監(jiān)聽集群資源狀態(tài)的服務(wù),主要就做一件事,就是如何將接口調(diào)用映射到對(duì)后端存儲(chǔ)比如的增刪改查訪問(wèn),在設(shè)計(jì)的時(shí)候考慮到是個(gè)快速迭代的開源項(xiàng)目,很多接口版本可能在未來(lái)版本發(fā)生變化,因此如何設(shè)計(jì)一個(gè)擴(kuò)展 前言 了解 k8s 的同學(xué)都知道,kube-apiserver 對(duì)外提供 RESTful API 接口提供 查詢,監(jiān)聽集群(資源)狀態(tài)的服務(wù),kube...
閱讀 1369·2021-10-19 11:42
閱讀 717·2021-09-22 16:04
閱讀 1867·2021-09-10 11:23
閱讀 1838·2021-07-29 14:48
閱讀 1247·2021-07-26 23:38
閱讀 2812·2019-08-30 15:54
閱讀 1024·2019-08-30 11:25
閱讀 1693·2019-08-29 17:23