成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

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

frank_fun / 1600人閱讀

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

前言

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

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

RESTful API
||

||
Storage
||

||
Sotrage Backend(etcd2,etcd3)

比如 Storage 和 Storage Backend 之間通過(guò) Storage Backend Interface(參考k8s :kube-apiserver 訪問(wèn) etcd 后端存儲(chǔ) )交互,Storage 和 RESTful API 之間通過(guò) 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(原文注釋?zhuān)峦?br>It is expected that objects may implement any of the below interfaces
所有想通過(guò) RESTful API 暴露出去的資源都必須實(shí)現(xiàn) Storage 接口,Storage 接口是個(gè)最小接口(單一職責(zé)),資源類(lèi)可以根據(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ù)該(子)接口測(cè)試 Storage 是否支持相關(guān)操作,然后注冊(cè)相應(yīng)的 API 接口,比如如果 Storage 支持 Delete 接口,就注冊(cè)一個(gè) HTTP method 為 DELETE 的方法到相應(yīng)的資源路徑

Storage 實(shí)現(xiàn)類(lèi)

kubernetes/pkg/registry/core 目錄下包含了各種 Storage 實(shí)現(xiàn)類(lèi),比如大家耳熟能詳?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 為例來(lái)分析 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
}

這里又冒出一些新的類(lèi)型 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 類(lèi)類(lèi)包含一個(gè) genericregistry.Store 類(lèi)型的字段,我們?cè)趉8s :kube-apiserver 訪問(wèn) etcd 后端存儲(chǔ)中分析過(guò),它用于訪問(wèn)后端存儲(chǔ)

PodStorage 通過(guò) 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 注冊(cè)

Storage 是如何"綁定"到 api 接口呢?這中間還涉及到一些數(shù)據(jù)結(jié)構(gòu)(類(lèi)),這里先列出綁定相關(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/33049.html

相關(guān)文章

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

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

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

    摘要:?jiǎn)?dòng)時(shí)報(bào)錯(cuò),錯(cuò)誤信息如下此時(shí)查看,也沒(méi)有。經(jīng)過(guò)一些參數(shù)的研究,最后發(fā)現(xiàn)是版本的問(wè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 訪問(wèn) etcd 后端存儲(chǔ)

    摘要:前言本文介紹是如何訪問(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....

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

    摘要:前言本文介紹是如何訪問(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....

    zhjx922 評(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-...

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

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

0條評(píng)論

閱讀需要支付1元查看
<