Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Self-contained Helm-based OpenStack deployment on Kubernetes

Kyle Bai
August 31, 2017

Self-contained Helm-based OpenStack deployment on Kubernetes

Kyle Bai

August 31, 2017
Tweet

More Decks by Kyle Bai

Other Decks in Technology

Transcript

  1. Software Engineer @ inwinSTACK ☑早期在校主要撰寫 java 與 objc 程式語⾔言,並專注於 Mobile

    應⽤用程 式開發,具備四年年開發經驗。次要研讀 Hadoop 與 Spark 資料運算框 架,以及 Linux 相關技術。 ☑⼯工作期間則專注於 OpenStack、Ceph 與 Container 相關等 Cloud Native 技術與開源專案,閒暇之餘會參參與相關專案社區及貢獻,並利利 ⽤用部落落格、GitHub 與 GitBook 做筆記。 ☒現在則在利利⽤用相關技術管理理 Ethereum 礦場,以公司電費轉換提升 ⾃自我年年終獎⾦金金(誤)。 kairen([email protected]) About Me https://kairen.github.io/
  2. Kubernetes Master Kubernetes Master 包含了了四個基本組件: • Etcd: 主要為 Kubernetes 的資訊儲存

    與服務發現功能。 • API Server:以 REST APIs 介⾯面⽅方式提 供所有業務邏輯CURD操作。 • Controller Manager Server:所有其他 叢集級功能都是透過控制管理理器 (Controller Manager)來來操作。 • Scheduler:負責整個分散式系統的資源 排程。
  3. Kubernetes Node(Minion) Kubernetes Node 包含了了三個基本組件: • Kubelet:負責管理理的映像檔、容器與資 料 Volume等操作。也是連接 Master

    的橋樑。 • Proxy: 為了了解決外部網路路能夠群曲跨 機器叢集中容器提供的應⽤用服務⽽而設 計。⽀支援 TCP,UDP stream forwarding 或 round robin TCP,UDP forwarding。 • Container:基於 OCI Container Rutime 來來執⾏行行應⽤用程式容器實例例。
  4. Kubernetes Container • CRI • Docker • rkt • frakti

    • cri-containerd • cri-o • virtlet • Infranetes
  5. Kubernetes Network • Overlay / Underlay Network • CNI/CNM •

    Flannel • Calico • Weave • Kuryr • OpenContrail • OVN
  6. Kubernetes Storage • CSI • Volumes • Persistent Volumes •

    Many Volume Plugin • Storage Class • External-storage • Dynamic Provisioning
  7. Kubernetes - Pod Pod 是 K8s 中最⼩小的部署單位,可以將⼀一個或多個容器組成⼀一個 Pod,Pod 所包含的容器只會運⾏行行在同⼀一個 Host

    上,並共享 network namespaces、IP port,每個 Pod的 network mapping 都是由 container pause 所封裝處理理的。
  8. Kubernetes - Deployments Deployments(Replication C o n t r o

    l l e r s ) 是 部 署 群 組 Pods,其會確保 K8s 系統中 指定數量量副本的 Pod 存活, 也可以利利⽤用 Label 及 Rolling update 來來進⾏行行副本的擴展或 更更新。
  9. Kubernetes - Service Service 是 pod 服務的抽象層, 具有簡單負載平衡的功能,由於 pod 的數量量與IP

    不會固定,可將 ⼀一群 pod指派成 service 並給予 ⼀一個固定IP (cluster IP),service 會將請求⾄至 cluster IP 的流量量導 入其對應 pod。
  10. Helm • Helm 是 Kubernetes 的套件管理理⼯工 具。 • Helm 幫助我們定義『Helm

    chart』 來來描述 Kubernetes 應⽤用程式的安裝與 升級等功能。 • ⽬目前是 Deis(MicroSoft)、Bitnami 與 Google 等公司以及社群開發者維護。 • ⽬目前是 CNCF 專案之⼀一。 * https://github.com/kubernetes/charts * https://kubeapps.com/
  11. Helm Two parts Tiller Server:主要負責接收來來⾄至 Client 的指令,並透過 kube- apiserver 與

    Kubernetes 叢集做溝通,根據 Chart 定義的內容,來來產⽣生與 管理理各種對應 API 物件的 Kubernetes 部署檔案(⼜又稱為 Release)。 Helm Client:⼀一個安裝 Helm CLI 的機器,該機器透過 gRPC 連接 Tiller Server 來來對 Repository、Chart 與 Release 等進⾏行行管理理與操作, 如建立、刪除與升級等操作。
  12. Chart:主要定義要被執⾏行行的應⽤用程式中,所需要的⼯工具、資源與服 務等資訊,類似 Homebrew 的 Formula 或是 APT 的 dpkg 檔案。

    Release:⼀一個被執⾏行行於 Kubernetes 的 Chart 實例例,Chart 能夠在⼀一 個叢集中擁有多個 Release。 Repository:主要⽤用來來存放 Chart 的倉庫。 Template:與 GO/Sprig 板模混合的 Kubernetes 組態檔案。 Helm Dictionary
  13. Helm Hooks • 在發布⽣生命週期的特定時間執⾏行行 {operation}。 • {operation} 可以是任何 K8s 資

    源,如 Job, Secret, Pod等。
 • ⼀一個 Hook 建立的資源無法作為 發布版本的⼀一部分,來來進⾏行行追蹤 與管理理。
  14. OpenStack-Helm ⽬目標是在 Kubernetes 上透過 Helm Chart 部署 OpenStack 環境,實現鬆散耦合的 OpenStack

    服務,來來簡化部署、維護與升級流程。 • 2016 年年 11 ⽉月 17⽇日,起始於 AT&T 的專案。 • 2017 年年 4 ⽉月11 ⽇日,正式發布⾄至 OpenStack Foundation。 • 2017 年年 10 ⽉月 17 ⽇日,正式穩定版本 1.0 預計釋出⽇日期。
  15. OpenStack-Helm Chart OpenStack-Helm 利利⽤用建立不同 的 Chart 來來分別定義 OpenStack 中各種服務該如何部署與執⾏行行。 截⾄至⽬目前

    Chart 已⽀支援 14 項左 右的 OpenStack 服務。 • Keystone • Glance • Nova • Neutron • Horizon • Magnum • Ironic … etc.
  16. Image Agnostic & Managing Immutable Containers OpenStack-Helm 將容器視為 OpenStack 服務程式的簡單程式碼桶。

    • OpenStack 服務⾃自⾝身必須被安裝在容器內。 • 簡單的組態和初始化腳本是在 run-time 的上層映像檔 • 所有注入的腳本都存在⼀一些最⼩小的相依關析(e.g. bash, python)
  17. Works for Small & Extremely Large Installations • 服務實例例副本可調整。 •

    可選資源配額。 • ⽀支援 Ingress 與 NodePort 兩兩者。 • ⽀支援任何命名空間中的任何服務。 • ⽀支援 Kubernetes 內外的各種服務 (endpoints)。 • ⽀支援 Rolling-update 的服務更更新。
  18. Call to Action • 輕量量化⽅方式有助於促進更更多的貢獻。 • 需要更更多的核⼼心多樣性 (Across the community)。

    • 結合 OpenStack 與 Kubernetes 社區⼀一起進⾏行行。 • Roadmap that can be publicly shared!!! • Community IRC Meetings: [Every Tuesday @ 3PM UTC], #openstack- meeting-5 on freenode. • OpenStack Helm Doc,https://docs.openstack.org/developer/openstack-helm • Project URL in GitHub,https://github.com/openstack/openstack-helm/ • OpenStack-helm Slack,http://slack.k8s.io/,#openstack-helm • OpenStack-helm launchpad,https://launchpad.net/openstack-helm • Community Meeting Agenda,https://etherpad.openstack.org/p/openstack- helm-meeting-agenda