国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何建立Kubernetes平臺的?

GKwL_infoqchina ? 來源:InfoQ ? 2019-12-12 14:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

可能國內讀者不太熟悉 Pinterest,但它在美國,可是坐擁 3 億用戶的美版“小紅書”,媲美社媒巨頭!如果你熟悉“小紅書”,那么你就很容易理解 Pinterest 的定位了。在如此龐大體量的 Pinterest,是如何建立 Kubernetes 平臺的? 1 為什么選擇 Kubernetes?

在過去的幾年里,有 3 億多 Pinner 在 Pinterest 上保存了超過 2000 億次 Pin,覆蓋了超過 40 億個 Board。為了服務于這個龐大的用戶群和內容池,我們開發了數以千計的服務,從少數幾個 CPU 的微服務到占用整個虛擬機群的巨大整體服務。還有來自各種不同框架的批處理作業,它們可以是 CPU、內存或 I/O 密集型。

譯注:要理解這段話,譯者有必要在這里簡單介紹一下 Pinterest 及其基本元素。Pinterest 是一個圖片社交平臺,堪稱圖片版的 Twitter,用戶可以發表自己的 Pin,也可以轉發自己喜歡的圖片。Pinterest 采用的是瀑布流的形式展現圖片內容,無需用戶翻頁,新的圖片不斷自動加載在頁面底端,讓用戶不斷的發現新的圖片。Pinterest 里面有一些基本元素。如 Pin。Pin 即你在 Pinterest 上發表的帖子,發布 Pin 的人統稱被稱為 Pinner。一個 Pin 通常是由一張圖片,一個到外部網頁的鏈接和幾句簡短的描述組成,并且發布的時候需要將其歸類到它所屬的 Board 里。

為了支持這些不同的工作負載,Pinterest 的基礎架構團隊面臨著多種挑戰:

工程師在啟動工作負載時并沒有統一的體驗。無狀態服務、有狀態服務和批處理作業由完全不同的技術棧部署和管理。如此一來,給工程師們帶來了陡峭的學習曲線,同時也給基礎架構團隊帶來巨大的維護和客戶支持負擔。

管理自己的虛擬機群的工程師給 infra 團隊帶來了巨大的維護負擔。操作系統或 AMI 升級等簡單的操作可能需要耗時數周到數月的時間才能完成。生產工作負載在這些過程中也會遇到干擾,而這些過程本應對生產工作負載是透明的。

很難在獨立的管理系統之上構建基礎架構治理工具。對我們來說,更難確定哪些機器的歸屬,以及它們是否可以安全回收。

容器編排系統提供了統一工作負載管理的方法。它們還為更快的開發速度和更容易的基礎架構治理鋪平了道路,因為所有運行的資源都由集中式系統管理。

圖 1:基礎架構優先級(服務可靠性、開發人員生產力和基礎架構效率)

Pinterest 的云管理平臺團隊早在 2017 年就開始了在 Kubernetes 的旅程。到 2017 年上半年,我們將大部分生產工作負載進行了容器化(包括核心 API 和 Web 服務器集群)。然后,通過構建產品集群并在其上運行實際工作負載,來對不同的容器編排系統進行廣泛的評估。到 2017 年底,我們決定沿著 Kubernetes 的道路走下去,因為它具有靈活性,而且還有廣泛的社區支持。

到目前為止,我們已經基于 Kops 構建了自己的集群引導工具,并將現有的基礎架構組件集成到 Kubernetes 集群中,如網絡、安全性、指標、日志記錄、身份管理和流量等。我們還引入了 Pinterest 特定的自定義資源來模擬我們的獨特工作負載,同時對開發人員隱藏運行時的復雜性。我們現在工作的重點是集群穩定性、可擴展性和客戶支持。

2 Kubernetes:Pinterest 選擇的路

運行 Kubernetes 來支持 Pinterest 這樣規模的工作負載,同時又要讓它成為我們工程師喜愛的平臺,真的是一個很大的挑戰。

作為一個大型組織,我們在基礎架構工具上投入了大量資金,例如處理證書和密鑰分發的安全工具、支持服務注冊和發現的流量組件,以及提供日志和指標的可見性組件。這些組件都是基于艱難的經驗教訓上構建的,因此我們希望將它們整合到 Kubernetes 內,而不是“重新發明輪子”。這一做法也使得遷移變得更加容易,因為我們的內部應用已經獲得了所需的支持。

另一方面,Kubernetes 本機工作負載模型(如部署、作業和守護進程集)并不足以為我們自己的工作負載進行建模。可用性問題是采用 Kubernetes 的巨大障礙。例如,我們曾經聽到服務開發人員抱怨丟失或錯誤配置的原因“擾亂”了他們的終端。我們還看到批處理作業用戶使用模板工具生成數百個同一作業規范的副本,最終導致了調試噩夢。

對工作負載的運行時支持也在不斷發展,因此在同一個 Kubernetes 集群上支持不同版本將會變得異常困難。想象一下,如果我們需要面對許多版本的運行時,客戶支持的復雜性,以及為它們進行升級或修補 bug 該有多大的困難。

3 Pinterest 自定義資源和控制器

為了讓我們的工程師更容易地采用 Kubernetes,并使基礎架構開發更快速、更順暢,我們設計了自己的自定義資源(Custom Resource Definitions,CRD)

CRD 提供了以下功能:

將各種本機 Kubernetes 資源捆綁在一起,使它們作為單一工作負載進行工作。例如,PinterestService 資源將部署、服務、入口和應用配置管理組合在一起,因此服務開發人員無需擔心為他們的服務設置 DNS。

為應用程序注入必要的運行時支持。用戶只需關注自己業務邏輯的容器規范即可,而 CRD 控制器將必要的邊車容器(sidecar)、初始容器、環境變量和卷(volume)注入到它們的容器節點(pod)規格中。這為應用工程師帶來了開箱即用的體驗。

CRD 控制器還可以對本機資源進行生命周期管理,并處理可見性和可調試性。這包括但不限于協調所需的規格和實際規格、CRD 狀態更新和事件記錄。如果沒有 CRD 的話,應用工程師必須管理更多的資源,而且這個過程已經被證明很容易出錯。下面是 PinterestService 和由控制器轉換的本機資源的示例:

圖 2:CRD 到本機資源。左邊是用戶編寫的 Pinterest CR,右邊是控制器生成的本機資源定義。

如圖所示,為了支持用戶的容器,我們需要插入一個初始容器和幾個邊車容器,以保證安全性、可見性和網絡流量。此外,我們在批處理作業中引入了應用配置管理模板和 PVC 模板支持,以及許多環境變量來跟蹤身份、資源利用率和垃圾收集。

難以想象工程師會愿意在沒有 CRD 支持的情況下手工編寫這些配置文件,更不用說維護和調試配置了。

4 應用程序部署工作流

圖 3:Pinterest CRD 概述

圖 3 展示了如何將 Pinterest 自定義資源部署到 Kubernetes 集群:

開發人員通過命令行界面(CLI)和用戶界面(UI)與我們的 Kubernetes 集群進行交互。

CLI/UI 工具從 Artifactory 檢索工作流配置 YAML 文件和其他構件屬性(如版本 ID),并將它們發送到作業提交服務。這樣可以確保只向 Kubernetes 集群提交已審查和已登錄的工作負載。

作業提交服務是各種計算平臺(包括 Kubernetes)的“網關”。用戶身份驗證、配額強制和部分 Pinterest CRD 配置驗證都在這里進行。

一旦 CRD 通過了作業提交服務驗證,它就會被發送到 Kubernetes API。

我們的 CRD 控制器監視所有自定義資源上的事件。它將 CR 轉換為 Kubernetes 本機資源,將必要的邊車容器添加到用戶定義的容器節點中,設置適當的環境變量,并執行其他必要的內務處理工作,以確保用戶的應用程序容器具有足夠的基礎架構支持。

然后,CRD 控制器將生成的本機資源寫回 Kubernetes API 中,以便調度器(scheduler)可以提取這些資源并開始運行。

注意:這是新的基于 Kubernetes 的計算平臺的早期采用者使用的預發布部署工作流。我們正對這一體驗進行改進,使其與我們新的 CI/CD 平臺完全繼承,以避免暴露過多 Kubernetes 具體的細節。我們期待在即將發布的博文《為 Pinterest 構建 CI/CD 平臺》中分享我們的動機、進展和后續影響。

5 自定義資源類型

基于 Pinterest 的具體需求,我們設計了以下適合不同工作流的 CRD:

PinterestService是長期運行的無狀態服務。許多核心系統都基于一組此類服務。

PinterestJobSet為運行到完成的批處理作業建模。Pinterest 中一個非常常見的模式是,多個作業并行運行相同的容器,每個作業都只占用工作負載的一小部分,而不依賴于彼此。

PinterestCronJob被據用輕量級周期性工作負載的團隊廣泛采用。PinterestCronJob 是圍繞本機 cron 作業的包裝器,支持 Pinterest 特有的安全性、流量、日志和指標等。

PinterestDaemon僅限于與基礎架構相關的守護進程。隨著我們在集群上添加更多的支持,PinterestDaemon 的家族仍在增長。

PinterestTrainingJob封裝了 TensorFlow 和 PyTorch 作業,提供了與所有其他 CRD 相同級別的運行時支持。由于 Pinterest 大量使用 TensorFlow 和其他機器學習框架,因此圍繞他們構建專門的 CRD 是有意義的。

我們還有正在構建的PinterestStatefulSet,將很快被用于存儲和其他有狀態系統。

6 運行時支持

當應用程序容器節點在 Kubernetes 上啟動時,它會自動獲得一個證書標識自己。此證書用于通過 mTLS 訪問機密存儲或與其他服務進行通信。同時,配置管理初始容器和守護進程將確保在應用程序容器啟動之前就下載好所有必需的依賴項。當應用程序容器準備就緒時,流量邊車容器和守護進程將會向容器節點注冊到 Zookeeper,以便讓客戶端可以發現它。甚至在容器節點啟動之前,網絡守護進程就已經為容器節點設置好了網絡。

以上就是服務工作負載的典型運行時支持的示例。其他工作負載類型可能需要稍微不同的支持,但他們都是以容器節點級邊車容器、節點級守護進程集或虛擬機級守護進程的形式出現的。我們確保所有這些應用程序都是由基礎架構團隊部署,以便它們在所有應用程序之間保持一致,從而極大減少我們的維護和客戶支持的負擔。

7 測試與質量保證

我們在本機 Kubernetes 測試基礎上構建了一個端到端的測試管道。這些測試部署到所有的集群。這個管道在到達生產集群之前就已經經歷了多次回歸。

除了測試基礎架構之外,還有監視和報警系統,這些系統持續監控系統組件的健康狀態、資源利用率和其他關鍵指標,在需要人工干預時通知我們。

8 備選方案

我們考慮了一些自定義資源的備選方案,比如變異許可控制器和模板系統。但是,所有的備選方案都存在重大問題,因此我們選擇了 CRD 的路徑。

變異許可控制器以用于注入邊車容器、環境變量和其他運行時支持。然而,它很難講資源捆綁在一起以及管理它們的生命周期,而 CRD 則需要協調、狀態更新和生命周期管理功能。

模板系統(如 Helm charts)也被廣泛用于啟動具有類似配置的應用程序。但是,我們的工作負載過于多樣化,無法通過模板進行管理。我們還需要支持持續部署,這在使用模板時很容易出錯。

9 未來的工作

目前,我們在所有的 Kubernetes 集群上運行混合工作負載。為了支持不同大小和類型的工作負載,我們正在開展一下方面的工作:

集群聯邦(Cluster Federation)將大型應用程序分布在不同的集群上,以實現可擴展性和穩定性。

集群穩定性、可擴展性和可見性,確保應用程序到達其服務級別協議。

資源和配額管理,以確保應用程序不會相互干擾,集群規模得到控制。

新的 CI/CD 平臺,支持 Kubernetes 上的應用程序部署。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    114

    文章

    17799

    瀏覽量

    193460
  • 應用程序
    +關注

    關注

    38

    文章

    3344

    瀏覽量

    60278
  • kubernetes
    +關注

    關注

    0

    文章

    263

    瀏覽量

    9494

原文標題:Pinterest 的 Kubernetes 實踐

文章出處:【微信號:infoqchina,微信公眾號:InfoQ】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Kubernetes Pod調度策略原理與落地指南

    Pod調度是Kubernetes的核心機制之一,決定了Pod最終運行在哪個節點上。默認調度器kube-scheduler通過一系列預選(Filtering)和優選(Scoring)算法完成調度決策,但默認行為在生產環境中往往不夠用。
    的頭像 發表于 02-27 11:08 ?165次閱讀

    Kubernetes存儲管理功能的落地實踐

    容器本身是無狀態的,Pod重啟后容器內的數據全部丟失。數據庫、消息隊列、文件存儲這類有狀態服務跑在K8s上,必須解決持久化存儲問題。Kubernetes通過PersistentVolume(PV)、PersistentVolumeClaim(PVC)和StorageClass三層抽象來管理存儲。
    的頭像 發表于 02-26 14:45 ?189次閱讀

    KubePi:開源Kubernetes可視化管理面板,讓集群管理如此簡單

    在界面上進行故障診斷和排查。 五、企業實戰案例:KubePi在不同場景的應用 5.1 中小企業統一管理平臺 挑戰 :中小型企業可能缺乏專業的Kubernetes運維人員,但需要高效管理其容器化
    發表于 02-11 12:53

    Kubernetes kubectl命令行工具詳解

    kubectl是Kubernetes官方提供的命令行工具,作為與Kubernetes集群交互的主要接口,它通過調用Kubernetes API Server實現對集群資源的全面管理。在生產環境中,運維工程師需要熟練掌握kubec
    的頭像 發表于 02-02 16:40 ?443次閱讀

    香港服務器支持Docker和Kubernetes嗎?

    在云原生技術成為主流的今天,Docker和Kubernetes(K8s)已成為現代化應用開發和部署的事實標準。對于選擇香港服務器的開發者與企業而言,一個核心問題是:香港服務器能否完美支持Docker
    的頭像 發表于 10-21 15:47 ?697次閱讀

    借助京東AI言犀提升Kubernetes集群巡檢的效率和準確性

    介紹 目前k8s-cluster-inspector組件可以自動化完成Kubernetes集群巡檢,并在巡檢結果中給出當前集群存在的問題,問題分級,問題類型,問題解決方法。 示例巡檢數據結構如下
    的頭像 發表于 09-15 16:56 ?559次閱讀
    借助京東AI言犀提升<b class='flag-5'>Kubernetes</b>集群巡檢的效率和準確性

    Kubernetes安全加固的核心技術

    在生產環境中,Kubernetes集群的安全性直接關系到企業數據安全和業務穩定性。本文將從實戰角度,帶你掌握K8s安全加固的核心技術。
    的頭像 發表于 08-18 11:18 ?822次閱讀

    高效管理Kubernetes集群的實用技巧

    作為一名經驗豐富的運維工程師,我深知在日常的Kubernetes集群管理中,熟練掌握kubectl命令是提升工作效率的關鍵。今天,我將分享15個經過實戰檢驗的kubectl實用技巧,幫助你像藝術家一樣優雅地管理K8s集群。
    的頭像 發表于 08-13 15:57 ?944次閱讀

    生產環境中Kubernetes容器安全的最佳實踐

    隨著容器化技術的快速發展,Kubernetes已成為企業級容器編排的首選平臺。然而,在享受Kubernetes帶來的便利性和可擴展性的同時,安全問題也日益凸顯。本文將從運維工程師的角度,深入探討生產環境中
    的頭像 發表于 07-14 11:09 ?743次閱讀

    樹莓派部署 Kubernetes:通過 UDM Pro 實現 BGP 負載均衡!

    最近,我將家庭實驗室的架構核心切換為一組樹莓派。盡管在樹莓派上運行的Kubernetes發行版眾多,但在資源受限的設備上運行Kubernetes時,控制平面的開銷是一個常見挑戰
    的頭像 發表于 06-25 18:00 ?966次閱讀
    樹莓派部署 <b class='flag-5'>Kubernetes</b>:通過 UDM Pro 實現 BGP 負載均衡!

    Kubernetes Helm入門指南

    Helm 是 Kubernetes 的包管理工具,它允許開發者和系統管理員通過定義、打包和部署應用程序來簡化 Kubernetes 應用的管理工作。Helm 的出現是為了解決在 Kubernetes
    的頭像 發表于 04-30 13:42 ?3093次閱讀
    <b class='flag-5'>Kubernetes</b> Helm入門指南

    如何在基于Arm Neoverse平臺的CPU上構建分布式Kubernetes集群

    在本文中,我們將以 X(原 Twitter)為例,演示如何在基于 Arm Neoverse 平臺的 CPU 上構建分布式 Kubernetes 集群,以根據推文實時監控情緒變化。如此一來,你可以充分利用 Arm Neoverse 平臺
    的頭像 發表于 03-25 15:58 ?843次閱讀
    如何在基于Arm Neoverse<b class='flag-5'>平臺</b>的CPU上構建分布式<b class='flag-5'>Kubernetes</b>集群

    Kubernetes負載均衡器MetalLB介紹

    Kubernetes中一個應用服務會有一個或多個實例,每個實例(Pod)的IP地址由網絡插件動態隨機分配(Pod重啟后IP地址會改變)。為屏蔽這些后端實例的動態變化和對多實例的負載均衡,引入了 Service這個資源對象。
    的頭像 發表于 03-18 16:24 ?952次閱讀
    <b class='flag-5'>Kubernetes</b>負載均衡器MetalLB介紹

    Kubernetes中部署MySQL集群

    一般情況下 Kubernetes 可以通過 ReplicaSet 以一個 Pod 模板創建多個 pod 副本,但是它們都是無狀態的,任何時候它們都可以被一個全新的 pod 替換。
    的頭像 發表于 03-18 16:22 ?792次閱讀
    <b class='flag-5'>Kubernetes</b>中部署MySQL集群

    Kubernetes包管理工具Helm的安裝和使用

    Helm 可以幫助我們管理 Kubernetes 應用程序 - Helm Charts 可以定義、安裝和升級復雜的 Kubernetes 應用程序,Charts 包很容易創建、版本管理、分享和分布。
    的頭像 發表于 03-13 16:06 ?2201次閱讀