Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Helm を利用した Kubernetes as a Service の実現
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
O. Yuanying
April 19, 2018
Technology
6.1k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Helm を利用した Kubernetes as a Service の実現
Helm を利用して Kubernetes の上に Kubernetes のマスターコンポーネントをデプロイします。
O. Yuanying
April 19, 2018
More Decks by O. Yuanying
See All by O. Yuanying
Kubernetes CNI Migration
yuanying
0
450
k8s@home#1
yuanying
1
3.3k
kube-prometheusを気軽にKustomize
yuanying
5
3.3k
Z氏はKubernetesクラスタを手中に収めることができたのか
yuanying
5
3.4k
プライベートクラウドにおける Kubernetes デプロイパターン
yuanying
2
1.6k
Other Decks in Technology
See All in Technology
Software Supply Chain Attackからクラウド環境を守るためにできること
lhazy
2
290
作って理解するCoding Agent 〜フレームワークに頼らないピュア Python での実装〜
takapy
2
140
AI画像認識を活用したゲーム内決済処理検証の自動化
gree_tech
PRO
0
100
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.5k
私がブラウザを自作したくなった理由
supurazako
1
270
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
430
AIにブラウザを触らせて、E2EテストをPlaywrightで書く
koji_kawamura
0
210
SmartHR Engineering Team Deck
smarthr
1
3.1k
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
4
26k
AIのためのEthernet技術動向 (SerDes)
markunet
1
250
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
3
420
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
640
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
480
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
470
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
550
How to train your dragon (web standard)
notwaldorf
97
6.8k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
470
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Transcript
OTSUKA, Motohiro / Yuanying NEC Solution Innovators, Ltd Japan Container
Days v18.04 を利用した Kubernetes as a Service の実現
この資料について 掲載内容は私自身の見解であり、 必ずしも所属する企業や組織の立場、戦略、意見 を代表するものではありません。
Agenda 1. 私 2. Motivation 3. Kubernetes 4. Helm 5.
Kubernetes as a Service 6. Kubernetes as a Service 実現案 7. デモ 8. まとめ
私
Who am I ? • OTSUKA, Motohiro / Yuanying ◦
NEC ソリューションイノベータ ▪ OSS コミュニティ対応チーム所属 ◦ OpenStack コミュニティ ▪ OpenStack Magnum 元コアレビューア • (2014/12/31-2017/03/31) ◦ 言語 ▪ Ruby (2007 - ) ▪ Python (2014 - ) ▪ Go (2017 - ) ◦ 趣味 ▪ ロードバイク (2009 - ) ▪ トライアスロン (2010 - )
Currently I’m interested in... お家 Kubernetes クラスター • Master Node
◦ HW: MinnowBoard Turbot x 3 ◦ Component ▪ etcd, kube-api, kube-controller-manager, kube-scheduler • Worker / Storage Node ◦ HW: ECS Liva Z x 3 ◦ Component ▪ CoreDNS, Flannel ▪ Gluster
Motivation
なぜパブリッククラウドのそれを使わずに、 Kubernetes as a Service (KaaS) を実現する必要がある のか。 社内のプライベートクラウドで自由に Kubernetes
クラスターが欲しい、け どそれを管理したくない。 パブリッククラウドを運営してます、けどまだ KaaS はラインナップしていません。 OpenStack Magnum の開発者でした、け どうちの会社の人が使ってくれません、リベ ンジしたい。
Kubernetes
What is Kubernetes? • コンテナオーケストレーションツール ◦ Google の内部システム Borg にインスパイアされている。
◦ 2014 年にオープンソース化。 ◦ クラウドネイティブアプリケーションのための運用・管理基盤 。 ▪ アプリケーションのデプロイ、アップデート、プロセス監視、自動復旧、ロードバランシングなど の機能がデフォルトで組み込まれている。 アプリケーションのデプロイという意味で は、どちらかというと Ansible, Chef, Puppet が競合ソフトウェア?
例えば、 ロードバランシング
Services • Pod へのロードバランシング • サービスディスカバリ ◦ ex: DNS record,
frontend.svc.default.cluster.local Services selector: app: frontend Pod frontend app Pod frontend app 8080
例えば、 ローリングアップデート
Deployments • ReplicaSets の世代管理 ◦ ローリングアップデート ◦ ロールバック Deployment replicas:
2 selector: app: nginx ReplicaSet Template ReplicaSet v1 Pod nginx v1.12 Pod nginx 1.12 ReplicaSet v2 Pod nginx v1.13 Pod nginx 1.13
Manifest apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels: app:
nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 v 上記の管理リソースは全 て `manifest` によって宣 言的に定義される。
What is Kubernetes? クラウドアプリケーションを構築するための一番最適な方法!
Architecture 制御系 • etcd • kube-apiserver • kube-controller-manager • kube-scheduler
実行系 • kubelet • kube-proxy • network plugin (CNI)
None
Helm とは? Kubernetes における パッケージマネージャ apt, yum… helm!
Before Helm apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels:
app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: ... apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: ... apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: ... apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: ... gitlab manifests apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: ... apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: ... apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: ... apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: ... redmine manifests apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: ... apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: ... apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: ... apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: ... mysql manifests Write manifests... And deploy
After Helm Gitlab Chart Redmine Chart MySQL Chart helm create
<chart name>
https://kubeapps.com • drupal • etcd • gilab • grafana •
hadoop • jenkins • mariadb • mediawiki • mysql • owncloud • postgresql • redis • selenium • wordples • ...
Helm とは? Helm でパッケージ化することで、 Kubernetes に簡単にアプリケーションをデプロイ、共有することができる!
Kubernetes as a Service
What is Kubernetes as a Service? (1) • Kubernetes クラスターをクラウドのユーザ個々に提供する仕組み。
Kubernetes クラスター共有モデル Kubernetes as a Service モデル オススメ!!
どんな感じで Kubernetes クラスターはユーザに提供されるの?
Master kube-apiserver kube-cm etcd kube-scheduler Master kube-apiserver kube-cm etcd kube-scheduler
Master kube-apiserver kube-cm etcd kube-scheduler Node kubelet Node kubelet Node kubelet Node kubelet Node kubelet Node kubelet Node kubelet Node kubelet コントロールプレーン ノード
Node kubelet Node kubelet Node kubelet Node kubelet Node kubelet
Node kubelet Node kubelet Node kubelet コントロールプレーン ノード KaaS により 提供
What is Kubernetes as a Service? (2) マスタコンポーネント (コントロールプレー ン)
はクラウドが用意し、 ノード はユーザが用意する。
パブリッククラウド比較 (2018/03時点) GKE AKS EKS k8s version 1.9 1.8 (latest)
アップグレード 自動 自動 自動 可用性 Zone/Regional - Regional ワーカノードの スケーラビリティ 異種ノード混在 オートスケール 同一ノードのみ 異種ノード混在 ストレージ Block Block/Filesystem ? 追加機能 GPUサポート ネットワークポリシー GPUサポート サービスカタログ ? 価格 コントロールプレーンの管 理費は含まれない コントロールプレーンの管 理費は含まれない ?
パブリッククラウドに対抗する、 Kubernetes as a Service を実現するには? ムリ
とにかく KaaS を実現する際の課題 • コントロールプレーンのデプロイを自動化する手段が必要。 • リソース利用効率の向上が必要。 ◦ ユーザごとにコントロールプレーンを用意するにも関わらず、主要なパブリッククラウドではコントロー ルプレーンの管理費は無料。
◦ 可用性を確保するためにはコントロールプレーンは 3 冗長欲しい。 ◦ ユーザに提供するコントロールプレーン 1 系ごとに VM を用意するのは効率が悪い。 • 管理、運用の自動化が必要。 ◦ コントロールプレーンの管理はクラウドプロバイダ側でやる必要がある。 ▪ アップグレード、監視、障害復旧。
Kubernetes as a Service 実現案
とにかく KaaS を実現する際の課題 (主にコントロールプレーン) • コントロールプレーンのデプロイを自動化する手段が必要。 • リソース利用効率の向上が必要。 ◦ ユーザごとにコントロールプレーンを用意するにも関わらず、主要なパブリッククラウドではコントロー
ルプレーンの管理費は無料。 ◦ 可用性を確保するためにはコントロールプレーンは 3 冗長欲しい。 ◦ ユーザに提供するコントロールプレーン 1 系ごとに VM を用意するのは効率が悪い。 • 管理、運用の自動化が必要。 ◦ コントロールプレーンの管理はクラウドプロバイダ側でやる必要がある。 ▪ アップグレード、監視、障害復旧。 デプロイ自動化? リソース利用効率の向上、、、 コンテナ? アップグレード、監視、自動復旧、 ???
これらの機能を持つミドルウェアをどこかで見たような…。
Kubernetes で Helm を使って、 Kubernetes をデプロイすれば良いのでは?? Deploy • ローリングアップグレード、ロールバック •
スケーリング管理 • 設定管理 • ロードバランシング
etcd etcd Node kubelet Node kubelet Node kubelet Node kubelet
KaaS 用 k8s cluster namespace: tenantA kube-apiserver kube-scheduler kube-apiserver kube-cm Node kubelet Node kubelet tenant A namespace: tenantB kube-apiserver kube-scheduler kube-apiserver kube-cm Node kubelet Node kubelet tenant B フルマネージド ユーザに提供する Kubernetes のコントロールプ レーンをコンテナ化、KaaS 用 k8s cluster で管理 セルフサービス ユーザは自ら用意した VM/Node をクラウドサービス が用意したコントロールプレー ンに繋げることにより、 Kubernetes クラスターを構 成。
デモ
青い端末 テナントA 赤い端末 クラウドプロバイダ側
デモ手順 1. KaaS 用 Kubernetes 確認 2. テナント用 Kubernetesコ ントロールプレーン作成
3. テナントVMをコントロール プレーンに接続、確認 4. テナント Kubernetes に nginx をデプロイ
デモ手順 1. KaaS 用 Kubernetes 確認 2. テナント用 Kubernetesコ ントロールプレーン作成
3. テナントVMをコントロール プレーンに接続、確認 4. テナント Kubernetes に nginx をデプロイ
Node kubelet Node kubelet tenant A ユーザは kubelet / kubeadm
がインストールされた VM を起 動しているが、Kubernetes ク ラスターとしてまだ動作していな い状態。 Node kubelet Node kubelet Node kubelet Node kubelet KaaS 用 k8s cluster Node kubelet Node kubelet サービスプロバイダ用の Kubernetes はすでに構築さ れているものとする。
デモ手順 1. KaaS 用 Kubernetes 確認 2. テナント用 Kubernetesコ ントロールプレーン作成
3. テナントVMをコントロール プレーンに接続、確認 4. テナント Kubernetes に nginx をデプロイ
etcd namespace: tenantA kube-apiserver kube-scheduler kube-apiserver kube-cm Node kubelet Node
kubelet tenant A Helm によりネームスペース上 に Kubernetes コントロールプ レーンがデプロイされる。 Node kubelet Node kubelet Node kubelet Node kubelet KaaS 用 k8s cluster Node kubelet Node kubelet
デモ手順 1. KaaS 用 Kubernetes 確認 2. テナント用 Kubernetesコ ントロールプレーン作成
3. テナントVMをコントロール プレーンに接続、確認 4. テナント Kubernetes に nginx をデプロイ
etcd namespace: tenantA kube-apiserver kube-scheduler kube-apiserver kube-cm Node kubelet Node
kubelet tenant A Kubernetes クラスターを構成 するためには、ノードをコント ロールプレーンに接続する必要 がある。 Node kubelet Node kubelet Node kubelet Node kubelet KaaS 用 k8s cluster Node kubelet Node kubelet
デモ手順 1. KaaS 用 Kubernetes 確認 2. テナント用 Kubernetesコ ントロールプレーン作成
3. テナントVMをコントロール プレーンに接続、確認 4. テナント Kubernetes に nginx をデプロイ
etcd namespace: tenantA kube-apiserver kube-scheduler kube-apiserver kube-cm Node kubelet Node
kubelet tenant A nginx 提供されたコントロールプレーンの API に対してリクエス トを送ることで、ノード上にコンテナが作成することを確認 する。 Node kubelet Node kubelet Node kubelet Node kubelet KaaS 用 k8s cluster Node kubelet Node kubelet
まとめ
Kubernetes as a Service • プライベートクラウドでも KaaS を実現できます。 • ただし!
◦ このセッションでは全く課題について触れてません … 。 ◦ 興味ある方は以下に! ◦ https://github.com/yuanying/kubernetes-chart
ご静聴ありがとうございました。
おまけ
デモ手順 0. KaaS 用 Kubernetes 確認 1. テナント用ネームスペース 作成 2.
テナント用 Kubernetesコ ントロールプレーン作成 3. テナントVMをコントロール プレーンに接続、確認 4. テナント Kubernetes に nginx をデプロイ
namespace: tenantA Node kubelet Node kubelet tenant A ネームスペース作成 Node
kubelet Node kubelet Node kubelet Node kubelet KaaS 用 k8s cluster Node kubelet Node kubelet
What is Kubernetes as a Service? (2) フルマネージド 各種マスターコンポーネントはクラウドにより管理されてお り、ユーザは
kubernetes の API のみが提供される。 マスターコンポーネントが動作するマシンにはユーザは触 れることができない。 ex) マスターのアップグレードはクラウド側の責務 セルフサービス クラスタを構成するノードはユーザの管理下となる (最近 では一部例外あり)。 ユーザが自分で用意した VM をクラスタに組み込むことが 可能なサービスもある。 ex) ノードのアップグレードはユーザ側の責務、ただしクラ ウドによるサポートがある
この資料の取り扱いについては、 以下の URL を参照してください。 https://個人の見解.jp
この資料の取り扱いについては、 以下の URL を参照してください。 https://個人の見解.jp
この資料の取り扱いについては、 以下の URL を参照してください。 https://個人の見解.jp