亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

k8s :kube-apiserver RESTful API 實(shí)現(xiàn) - Storage

ChristmasBoy / 1165人閱讀

摘要:前言了解的同學(xué)都知道,對(duì)外提供接口提供查詢,監(jiān)聽集群資源狀態(tài)的服務(wù),主要就做一件事,就是如何將接口調(diào)用映射到對(duì)后端存儲(chǔ)比如的增刪改查訪問,在設(shè)計(jì)的時(shí)候考慮到是個(gè)快速迭代的開源項(xiàng)目,很多接口版本可能在未來版本發(fā)生變化,因此如何設(shè)計(jì)一個(gè)擴(kuò)展

前言

了解 k8s 的同學(xué)都知道,kube-apiserver 對(duì)外提供 RESTful API 接口提供 查詢,監(jiān)聽集群(資源)狀態(tài)的服務(wù),kube-apiserver 主要就做一件事,就是如何將 RESTful API (CREATE, DELETE, UPDATE, GET .etc)接口調(diào)用映射到對(duì)后端存儲(chǔ)(比如 etcd)的(增刪改查)訪問,在設(shè)計(jì)的時(shí)候考慮到 k8s 是個(gè)快速迭代的開源項(xiàng)目,很多 API 接口(版本)可能在未來版本發(fā)生變化,因此如何設(shè)計(jì)一個(gè)擴(kuò)展性強(qiáng),耦合度低的架構(gòu)應(yīng)該是 Google 那幫貨當(dāng)初主要考慮的問題,所以才導(dǎo)致 kube-apiserver 本來相比 kube-scheduler 和 kube-controller-manager 應(yīng)該簡單的代碼設(shè)計(jì)的巨復(fù)雜(個(gè)人觀點(diǎn))~

從 kube-apiserver 收到 RESTful API 請求到從 后端存儲(chǔ)中獲取(更新 .etc)到數(shù)據(jù)大概需要經(jīng)過一下幾層(非官方命名),各層之間通過 《接口》 交互(解偶)

RESTful API
||

||
Storage
||

||
Sotrage Backend(etcd2,etcd3)

比如 Storage 和 Storage Backend 之間通過 Storage Backend Interface(參考k8s :kube-apiserver 訪問 etcd 后端存儲(chǔ) )交互,Storage 和 RESTful API 之間通過 REST Operation Interface(增刪改查 方法的封裝)交互

Storage

Storage is a generic interface for RESTful storage services.
Resources which are exported to the RESTful API of apiserver need to implement this interface(原文注釋,下同)
It is expected that objects may implement any of the below interfaces
所有想通過 RESTful API 暴露出去的資源都必須實(shí)現(xiàn) Storage 接口,Storage 接口是個(gè)最小接口(單一職責(zé)),資源類可以根據(jù)自身情況實(shí)現(xiàn)其它各種接口

// kubernetes/staging/src/k8s.io/apiserver/pkg/registry/rest/rest.go
type Storage interface {
    New() runtime.Object
}
REST Operation Interface

StandardStorage is an interface covering the common verbs. Provided for testing whether a resource satisfies the normal storage methods.
Use Storage when passing opaque storage objects
StandardStorage

type StandardStorage interface {
    Getter
    Lister
    GreaterUpdater
    GracefulDeleter
    CollectionDeleter
    Watcher
}

StandardStorage 聚合了可以對(duì) Storage 施加的操作(或者叫 Verb,動(dòng)作),RESTful API根據(jù)該(子)接口測試 Storage 是否支持相關(guān)操作,然后注冊相應(yīng)的 API 接口,比如如果 Storage 支持 Delete 接口,就注冊一個(gè) HTTP method 為 DELETE 的方法到相應(yīng)的資源路徑

Storage 實(shí)現(xiàn)類

kubernetes/pkg/registry/core 目錄下包含了各種 Storage 實(shí)現(xiàn)類,比如大家耳熟能詳?shù)?pod, service, endpoint, configmap, node 等等,各個(gè)資源的目錄結(jié)構(gòu)很相似,以 pod 為例

kubernetes/pkg/registry/core/pod
    rest
    storage
        storage.go <- Storage 實(shí)現(xiàn)
    doc.go
    strategy.go
    strategy_test.go
PodStorage

我們以 pod storage 為例來分析 storage 創(chuàng)建,首先是 pod storage 定義

type PodStorage struct {
    Pod *REST
    Binding *BindingREST
    Eviction *EvictionREST
    Status *StatusREST
    Log *podrest.LogREST
    Proxy *podrest.ProxyREST
    Exec *podrest.ExecREST
    Attach *podrest.AttachREST
    PortForward *podrest.PortForwardREST
}

這里又冒出一些新的類型 REST,BindingREST .etc,這些 XXXREST 才是"真正"的 Storage,對(duì)應(yīng)具體的 RESTful endpoint

// REST implements a RESTStorage for pods
type REST struct {
    *genericregistry.Store
    proxyTransport http.RoundTripper
}

// BindingREST implements the REST endpoint for binding pods to nodes when etcd is in use
type BindingREST struct {
    store *genericregistry.Store
}

XXXREST 類類包含一個(gè) genericregistry.Store 類型的字段,我們在k8s :kube-apiserver 訪問 etcd 后端存儲(chǔ)中分析過,它用于訪問后端存儲(chǔ)

PodStorage 通過 NewStorage 方法創(chuàng)建,各個(gè) XXXREST 共享 Store

func NewStorage(optsGetter generic.RESTOptionsGetter, ...) {
    創(chuàng)建 genericregistry.Store
    store := &genericregistry.Store {
        ...
    }
    ...
    return PodStorage {
        Pod:      &REST{store, proxyTransport},
        Binding:  &BindingREST{store: store}
        ...
    }
}
Storage 注冊

Storage 是如何"綁定"到 api 接口呢?這中間還涉及到一些數(shù)據(jù)結(jié)構(gòu)(類),這里先列出綁定相關(guān)的代碼:

// kubernetes/pkg/registry/core/rest/storage_core.go
func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(...) {
    ...
    restStorageMap := map[string]rest.Storage {
        "pods": podStorage.Pod,
        "pods/attach": podStorage.Attach
        ...
    }
}

后續(xù)再詳細(xì)分析

總結(jié)

本文介紹了 kube-apiserver 中 Storage 相關(guān)的一些概念,希望對(duì)大家閱讀 k8s 源代碼有所幫助

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/32641.html

相關(guān)文章

  • k8skube-apiserver RESTful API 實(shí)現(xiàn) - Storage

    摘要:前言了解的同學(xué)都知道,對(duì)外提供接口提供查詢,監(jiān)聽集群資源狀態(tài)的服務(wù),主要就做一件事,就是如何將接口調(diào)用映射到對(duì)后端存儲(chǔ)比如的增刪改查訪問,在設(shè)計(jì)的時(shí)候考慮到是個(gè)快速迭代的開源項(xiàng)目,很多接口版本可能在未來版本發(fā)生變化,因此如何設(shè)計(jì)一個(gè)擴(kuò)展 前言 了解 k8s 的同學(xué)都知道,kube-apiserver 對(duì)外提供 RESTful API 接口提供 查詢,監(jiān)聽集群(資源)狀態(tài)的服務(wù),kube...

    frank_fun 評(píng)論0 收藏0
  • kube-apiserver啟動(dòng)時(shí)報(bào)錯(cuò)并且不能操作etcd

    摘要:啟動(dòng)時(shí)報(bào)錯(cuò),錯(cuò)誤信息如下此時(shí)查看,也沒有。經(jīng)過一些參數(shù)的研究,最后發(fā)現(xiàn)是版本的問題。修改參數(shù),再啟動(dòng)可以正常使用。 kube-apiserver啟動(dòng)時(shí)報(bào)錯(cuò),錯(cuò)誤信息如下: Flag --kubelet-port has been deprecated, kubelet-port is deprecated and will be removed. W0914 15:57:18.5740...

    blastz 評(píng)論0 收藏0
  • k8skube-apiserver 訪問 etcd 后端存儲(chǔ)

    摘要:前言本文介紹是如何訪問后端存儲(chǔ)相關(guān)源代碼主要在通用接口原文注釋定義了后端存儲(chǔ)的通用接口,主要是一些增刪改查方法,這種面向接口編程,將實(shí)現(xiàn)和設(shè)計(jì)分離的設(shè)計(jì)提高了軟件的可擴(kuò)展性,降低了模塊間的耦合度,比如只要我們提供的具體實(shí)現(xiàn),那么除了使用 前言 本文介紹 kube-apiserver 是如何訪問 etcd 后端存儲(chǔ) 相關(guān)源代碼主要在 kubernetes/staging/src/k8s....

    shenhualong 評(píng)論0 收藏0
  • k8skube-apiserver 訪問 etcd 后端存儲(chǔ)

    摘要:前言本文介紹是如何訪問后端存儲(chǔ)相關(guān)源代碼主要在通用接口原文注釋定義了后端存儲(chǔ)的通用接口,主要是一些增刪改查方法,這種面向接口編程,將實(shí)現(xiàn)和設(shè)計(jì)分離的設(shè)計(jì)提高了軟件的可擴(kuò)展性,降低了模塊間的耦合度,比如只要我們提供的具體實(shí)現(xiàn),那么除了使用 前言 本文介紹 kube-apiserver 是如何訪問 etcd 后端存儲(chǔ) 相關(guān)源代碼主要在 kubernetes/staging/src/k8s....

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

    摘要:前言看源代碼有一段時(shí)間,總感覺在迷宮里亂竄,有時(shí)候覺得終于找到出口了,一下子又撞墻了,總結(jié)下來還是自己的內(nèi)功不夠深厚,本文是對(duì)遺留,即將廢棄初始化流程以及數(shù)據(jù)結(jié)構(gòu)的一個(gè)梳理,算是做個(gè)路標(biāo),便于以后在迷宮中還能找到回來的路主要功能是提供接 前言 看 k8s 源代碼有一段時(shí)間,總感覺在迷宮里亂竄,有時(shí)候覺得終于找到出口了,一下子又撞墻了,總結(jié)下來還是自己的內(nèi)功不夠深厚,本文是對(duì) kube-...

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

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

0條評(píng)論

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