成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

k8s :kube-apiserver 啟動(dòng)流程 - 2

xiangzhihong / 2148人閱讀

摘要:前言文章字?jǐn)?shù)一多,在線編輯不方便,本文是啟動(dòng)流程的第部分傳送門啟動(dòng)流程回顧上回講到方法目前系統(tǒng)中有以下每個(gè)都對(duì)應(yīng)一個(gè)配置的任務(wù)就是根據(jù)創(chuàng)建,然后再用創(chuàng)建,各個(gè)通過(guò)的字段組成責(zé)任鏈以創(chuàng)建為例下面將簡(jiǎn)要介紹的創(chuàng)建過(guò)程,主要分析是如

前言

文章字?jǐn)?shù)一多,在線編輯不方便,本文是 k8s:kube-apiserver 啟動(dòng)流程的第2部分
傳送門:k8s :kube-apiserver 啟動(dòng)流程 - 1

回顧

上回講到 Run 方法:

// kubernetes/cmd/kube-apiserver/app.server.go
func Run(runOptions *options.ServerRunOptions, stopCh <-chan struct{}) error {
    ...
    server, err := CreateServerChain(runOptions, stopCh)
    if err != nil {
        return err
    }
    return server.PrepareRun().Run(stopCh)
}

目前系統(tǒng)中有以下 api server:

CustomResourceDefinitions

Master

APIAggregator

每個(gè) api server 都對(duì)應(yīng)一個(gè) Config(配置)

apiextensionsapiserver.Config

master.Config

aggregatorapiserver.Config

CreateServerChain 的任務(wù)就是根據(jù) ServerRunOptions 創(chuàng)建 XXXConfig,然后再用 XXXConfig 創(chuàng)建 api server,各個(gè) api server 通過(guò) GenericAPIServer 的 delegationTarget 字段組成《責(zé)任鏈》
以 Master api server 創(chuàng)建為例:

func CreateServerChain(
    runOptions *options.ServerRunOptions, stopCh <-chan struct{})
        (*genericapiserver.GenericAPIServer, error) {
    ...
    kubeAPIServerConfig, ... := CreateKubeAPIServerConfig(...)
    ...
    kubeAPIServer, err := CreateKubeAPIServer(kubeAPIServerConfig, 
        apiExtensionsServer.GenericAPIServer, sharedInformers, versionedInformers)
    ...
} 

下面將簡(jiǎn)要介紹 Master api server 的創(chuàng)建過(guò)程,主要分析 kube-apiserver 是如何將 資源對(duì)象(Node,Pod,Service 等)綁定到具體的 RESTful API,使得客戶端可以通過(guò) RESTful API 操作資源對(duì)象

如果是你會(huì)怎么做?

在大概看了一些源代碼之后,我不禁問(wèn)自己:如果是你來(lái)設(shè)計(jì)代碼架構(gòu),你會(huì)怎么做?
例如給定一個(gè)實(shí)體 Student(Java 偽代碼,下同),持久化在 etcd 里

public class Student {

    public int id;

    public String name;

    public String phone;
}

如何提供 RESTful api 接口提供對(duì) Student 的 CRUD 操作? 設(shè)計(jì)代碼框架使之適應(yīng)所有的實(shí)體

api 接口示例:

PUT: /user?id=xxx&name=yyy&phone=zzz
DELETE: /user?id=xxx
POST: /user?id=xxx&name=yyy
GET: /user?id=xxx

我們分幾步來(lái)考慮,首先考慮持久化,為了支持不同的持久化框架,或者即時(shí)我們就使用一種持久化框架也需要考慮框架版本匹配問(wèn)題,這就需要將對(duì)持久化框架的基本操作進(jìn)行抽象,抽取出接口 Backend

public interface Backend {

    String get(String key);

    void set(String key, String value);
}

然后我們有具體的實(shí)現(xiàn)類 EtcdBackend, ConsulBackend 以及 工廠類 BackendFactory

public class EtcdBackend implements Backend {

    public String get(String key) { ... }

    public void set(String key, String value) { ... }
}

public class ConsulBackend implements Backend {

    public String get(String key) { ... }

    public void set(String key, String value) { ... }
}

public class BackendFactory {

    Backend get(String name) { ... }
}

Backend 搞定了,現(xiàn)在我們需要一個(gè) DAO(Data access object)來(lái)訪問(wèn)它

public class UserDao {

    private Backend backend;

    // CRUD 方法
    ...
}

我們注意到會(huì)有很多實(shí)體,他們都需要使用 Backend 接口訪問(wèn)后端存儲(chǔ),所以可以搞個(gè)基類 AbstractDao,將 backedn 字段移到基類里頭

pubic class AbstractDao {

    private Backend backend;
}

public class User extends AbstractDao {

    // CRUD 方法
    ...
}

進(jìn)一步觀察,其實(shí)各個(gè) DAO 的 CRUD 方法也有很多重復(fù)的(模版)代碼,比如如果我們能夠封裝以下變化點(diǎn):

生成后端存儲(chǔ)需要的key

序列化和反序列化對(duì)象

DAO 中的 CRUD 方法可以進(jìn)一步抽取到 AbstractDao 中,那些實(shí)在需要子類特例化的方法,可以通過(guò)《模版方法》模式來(lái)實(shí)現(xiàn)

public class AbstractDao {

    private Backend backend;

    // CRUD 方法
    ...
}

public class UserDao extends AbstractDao {

    // Template 方法
    ...
}

我們現(xiàn)在離最后的完工又近了一步,還剩一個(gè)問(wèn)題,就是如何將 url 和 DAO 對(duì)應(yīng)起來(lái),這是一個(gè)映射問(wèn)題,可以使用 map 來(lái)保持 url 對(duì)應(yīng)的 DAO

map.put("/user", userDao)

以上只是一個(gè)簡(jiǎn)單的推導(dǎo),k8s 的實(shí)現(xiàn)遠(yuǎn)比這個(gè) demo 復(fù)雜的多,考慮到各種解耦和擴(kuò)展性,下回將正式介紹 k8s 的實(shí)現(xiàn)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/33051.html

相關(guān)文章

  • k8skube-apiserver 啟動(dòng)流程 - 1

    摘要:前言看源代碼有一段時(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-...

    wwolf 評(píng)論0 收藏0
  • k8skube-apiserver 啟動(dòng)流程 - 1

    摘要:前言看源代碼有一段時(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-...

    RayKr 評(píng)論0 收藏0
  • k8skube-apiserver 啟動(dòng)流程 - 2

    摘要:前言文章字?jǐn)?shù)一多,在線編輯不方便,本文是啟動(dòng)流程的第部分傳送門啟動(dòng)流程回顧上回講到方法目前系統(tǒng)中有以下每個(gè)都對(duì)應(yīng)一個(gè)配置的任務(wù)就是根據(jù)創(chuàng)建,然后再用創(chuàng)建,各個(gè)通過(guò)的字段組成責(zé)任鏈以創(chuàng)建為例下面將簡(jiǎn)要介紹的創(chuàng)建過(guò)程,主要分析是如 前言 文章字?jǐn)?shù)一多,在線編輯不方便,本文是 k8s:kube-apiserver 啟動(dòng)流程的第2部分傳送門:k8s :kube-apiserver 啟動(dòng)流程 -...

    2450184176 評(píng)論0 收藏0
  • K8S學(xué)習(xí)筆記 | 如何部署 Kubernetes master 節(jié)點(diǎn)

    摘要:年初開(kāi)始研究,至目前已發(fā)表近篇學(xué)習(xí)筆記。同時(shí),他也是中國(guó)社區(qū)的活躍者,見(jiàn)證了中國(guó)社區(qū)的一路成長(zhǎng)。經(jīng)本人授權(quán),從本周開(kāi)始,中國(guó)將轉(zhuǎn)載他的學(xué)習(xí)筆記,由淺入深地分享他在學(xué)習(xí)過(guò)程中的收獲。節(jié)點(diǎn)包含的組件目前這三個(gè)組件需要部署在同一臺(tái)機(jī)器上。 作者:宋凈超 宋凈超(Jimmy Song),TalkingData 容器技術(shù)負(fù)責(zé)人,微服務(wù)和云原生應(yīng)用布道者。2017 年初開(kāi)始研究 Kubernete...

    ernest.wang 評(píng)論0 收藏0
  • Kubernetes v1.0特性解析

    摘要:?jiǎn)栴}是不是定義的一個(gè)的容器集群是只部署在同一個(gè)主機(jī)上楊樂(lè)到目前是,同一個(gè)里的是部署在同一臺(tái)主機(jī)的。問(wèn)題這個(gè)圖里的是安裝在哪里的所有的客戶端以及會(huì)連接這個(gè)嘛楊樂(lè)可以任意地方,只要能訪問(wèn)到集群,會(huì)作為的出口。 kubernetes1.0剛剛發(fā)布,開(kāi)源社區(qū)400多位貢獻(xiàn)者一年的努力,多達(dá)14000多次的代碼提交,最終達(dá)到了之前預(yù)計(jì)的milestone, 并意味著這個(gè)開(kāi)源容器編排系統(tǒng)可以正式在...

    HackerShell 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<