SlideShare a Scribd company logo
1 of 23
Oracle Container Engine for Kubernetes
(OKE)
を 使ってみよう
Oracle Cloud サービスの紹介から…
Oracle Cloud Infrastructure (OCI)
• OCI : Oracle の IaaS
• VM (Compute Instance)
• VCN (Virtual Cloud Network)
• Subnet・Load Balancer
• OCIR・OKE は OCI の中の1サービス
• Compartment・Policy・Group・User…
• 総称して「リソース」
• 概念理解が大変…
Oracle Cloud Infrastructure Registry (OCIR)
• プライベート Docker レジストリ
• OCI 環境内に自作の Docker イメージを置ける
• Kubernetes クラスタにデプロイする
Docker イメージとして OCIR を参照できる
Oracle Container Engine for Kubernetes (OKE)
• Kubernetes … コンテナオーケストレーションツール
• 複数の Docker コンテナを冗長構成にしたり
• 高頻度なデプロイも簡単
• 自前で環境構築しようとすると大変
• Master Node の準備・インストール
• Worker Node となるサーバの調達・インストール
• ネットワーク整備…
• ⇒ OKE のおかげで…
• Kubernetes を使い始めるまでの障壁がなくなる
• とりあえず使い始められる
OKE を使って
Web アプリケーションを公開してみる
Kubernetes クラスタの構成
Load
Balancer
VCN (Oracle Cloud のネットワーク内)
ユーザ
Web アプリ
Virtual
Machine
≒
Virtual
Machine
≒
Virtual
Machine
≒
どのコンテナが
どのサーバで動いているかは
通常意識しない
OKE クラスタを作る
• OCI 管理画面で「Create Cluster」ボタンを押下
• VCN・Subnet など必要なリソースは自動作成
• サーバマシン (=Worker Node) も自動生成
• 「Node Pool」というグループで表現
OKE と OCI リソースの関係
• OKE クラスタは1つの仮想ネットワークを構築する
• VCN
• Worker Node となる VM を複数生成する
• Compute Instance
• Pod を外部に公開する Load Balancer Service
• OCI Load Balancer
• OKE の構成要素は OCI のリソースを流用している
• OCI 管理コンソールでも OKE が作った VM などが見える
Docker イメージを作成する
• Web アプリの実装
• 最終的に Docker イメージにできればどんな言語でも良い
• 例 : Node.js Express サーバ
EXPOSE 8080
CMD ["node", "server.js"]
• (http://localhost:8080/ でアクセスできる状態)
• docker login コマンドで OCIR に接続
• docker build で Docker イメージを作成
• docker tag で OCIR 用の名前を付ける
OCIR に Docker イメージを Push する
• docker push iad.ocir.io/tenancy/repo/app:v1
• OCIR に
Docker イメージが
Push できた
OKE クラスタに ReplicaSet を作る
• deployment.yaml (抜粋)
kind: Deployment
spec:
replicas: 3
template:
metadata:
labels:
name: my-app
spec:
containers:
- name: my-container
image: iad.ocir.io/tenancy/repo/app:v1
imagePullPolicy: Always
ports:
- containerPort: 8080
• kubectl apply –f deployment.yaml
• Pod (≒ Docker コンテナ) が3台できた
• Pod は 8080 ポートを開放して待ち受けて
いる
• このままではインターネットから Pod に
到達する経路がない
Pod を公開するため Service を作る 1
• service.yaml (抜粋)
kind: Service
spec:
type: LoadBalancer
selector:
name: my-app
ports:
- name: http
port: 80
targetPort: 8080
• 通信を転送したい Pod 群を
selector.name で指定する (「my-
app」部分)
• Load Balancer Service 自身は 80
ポートを開放する
• 80 ポートで受け取った通信を Pod
の 8080 ポートへ転送する
Pod を公開するため Service を作る 2
• kubectl apply –f service.yaml
• Kubernetes Load Balancer Service ≒ OCI Load Balancer
• パブリック IP が発行される (132.100.17.10 みたいなやつ)
• インターネットからアクセスできるようになった
Kubernetes・OKE のメリット
Kubernetes はデプロイが楽チン
• これまで面倒だったリリース作業が数コマンドに
• アプリを作ったら docker build
• イメージを OCIR に docker push
• kubectl apply –f deployment.yaml
• Pod の差し替えは自動的に行われる
• ゼロダウンタイムでリリースするのも簡単
• ブルー・グリーン・デプロイメント
• イミュータブル・デプロイメント
• デプロイ環境や設定項目が YAML ファイルに残る
• 環境全体をバージョン管理しやすい
OKE は作り捨て・スケールしやすい
• クラスタごと自動作成
• クラスタごと削除
• セットアップの手間なし
• Node の台数を増やす Node Pool 機能 ↑
• 水平スケールがボタンひとつ
Kubernetes・OKE のデメリット (注意点)
Kubernetes の「コスト」
• Kubernetes 自体の学習コストは高い
• Kubernetes が何を抽象化しているのか
• どの機能を使えばよいのか
• 疎結合ゆえの難解さ (環境変数の注入など)
• K8s を使ったシステムの運用コストは高い
• 気にしないといけないことはあまり減らない
• 監視対象は増える
• オンプレや生 K8s よりは OKE を使うのが断然楽
• クラスタごと作り捨てられる手軽さ
• 水平スケールの容易さ
ネットワーク・セキュリティは泥臭い
• ネットワーク構成の設計が大変
• VCN・Subnet・CIDR Block・Load Balancer…
• SSL 証明書設定・終端
• Security List (ファイアウォールルール) の設定が重要
• デフォルトでは全トラフィック筒抜けなので
不正アクセスや踏み台にされる危険性
• インターネットから LB
• LB と Worker Node
• Worker Node からインターネット
• OKE 固有の設定もある
まとめ
まとめ
• OKE を使えば Kubernetes 環境の導入は簡単!
• Kubernetes 自体の複雑さはあるものの
OKE がかなりお膳立てしてくれる
• 「アプリ」「インフラ」の垣根はなくなっていく
1. Oracle のドキュメントは英語だけど頑張って読む
• すみっこにも重要なことが書いてあるので…
2. Security List 設定大事
• 設定しないとセキュリティリスク
• 設定ミスると通信障害
3. OCID 重要
• 問合せ時に必ず訊かれる
おわり

More Related Content

What's hot

Cost of ovs receiving process
Cost of ovs receiving processCost of ovs receiving process
Cost of ovs receiving processTakuya ASADA
 
同じサービスを ECSとOpsWorksで 運用してみた
同じサービスをECSとOpsWorksで運用してみた同じサービスをECSとOpsWorksで運用してみた
同じサービスを ECSとOpsWorksで 運用してみたJun Ichikawa
 
OCP Meetup Tokyo #05 ECK on OCP
OCP Meetup Tokyo #05 ECK on OCPOCP Meetup Tokyo #05 ECK on OCP
OCP Meetup Tokyo #05 ECK on OCPTetsuya Sodo
 
ニワトリでもわかるECS入門
ニワトリでもわかるECS入門ニワトリでもわかるECS入門
ニワトリでもわかるECS入門Yoshiki Kobayashi
 
OpenStack Block Storage (Cinder)
OpenStack Block Storage (Cinder)OpenStack Block Storage (Cinder)
OpenStack Block Storage (Cinder)Akira Yoshiyama
 
INTEROP2013 ORC チームvyavyavya
INTEROP2013 ORC チームvyavyavyaINTEROP2013 ORC チームvyavyavya
INTEROP2013 ORC チームvyavyavyaupaa
 
Reactive Kafka with Akka Streams
Reactive Kafka with Akka StreamsReactive Kafka with Akka Streams
Reactive Kafka with Akka Streamsscalaconfjp
 
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1Hidetoshi Hirokawa
 
OSC2012 Tokyo/Spring JOSUG
OSC2012 Tokyo/Spring JOSUGOSC2012 Tokyo/Spring JOSUG
OSC2012 Tokyo/Spring JOSUGHideki Saito
 
OpenContrail Users Event at OpenStack Summit Paris 行ってきました
OpenContrail Users Event at OpenStack Summit Paris 行ってきましたOpenContrail Users Event at OpenStack Summit Paris 行ってきました
OpenContrail Users Event at OpenStack Summit Paris 行ってきましたTakashi Sogabe
 
Using ngx_lua / lua-nginx-module in pixiv
Using ngx_lua / lua-nginx-module in pixivUsing ngx_lua / lua-nginx-module in pixiv
Using ngx_lua / lua-nginx-module in pixivShunsuke Michii
 
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけねGitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけねNaoto TAKAHASHI
 
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"Masaya Aoyama
 
Knative Lambda Runtimeを試してみた
Knative Lambda Runtimeを試してみたKnative Lambda Runtimeを試してみた
Knative Lambda Runtimeを試してみたHideaki Aoyagi
 
Dockerことはじめ的なはなし
Dockerことはじめ的なはなしDockerことはじめ的なはなし
Dockerことはじめ的なはなしpinmarch_t Tada
 
Cocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurlCocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurlMasayuki Nii
 

What's hot (20)

Cost of ovs receiving process
Cost of ovs receiving processCost of ovs receiving process
Cost of ovs receiving process
 
同じサービスを ECSとOpsWorksで 運用してみた
同じサービスをECSとOpsWorksで運用してみた同じサービスをECSとOpsWorksで運用してみた
同じサービスを ECSとOpsWorksで 運用してみた
 
OCP Meetup Tokyo #05 ECK on OCP
OCP Meetup Tokyo #05 ECK on OCPOCP Meetup Tokyo #05 ECK on OCP
OCP Meetup Tokyo #05 ECK on OCP
 
ニワトリでもわかるECS入門
ニワトリでもわかるECS入門ニワトリでもわかるECS入門
ニワトリでもわかるECS入門
 
OpenStack Block Storage (Cinder)
OpenStack Block Storage (Cinder)OpenStack Block Storage (Cinder)
OpenStack Block Storage (Cinder)
 
INTEROP2013 ORC チームvyavyavya
INTEROP2013 ORC チームvyavyavyaINTEROP2013 ORC チームvyavyavya
INTEROP2013 ORC チームvyavyavya
 
ECS-CLI in Action
ECS-CLI in ActionECS-CLI in Action
ECS-CLI in Action
 
Reactive Kafka with Akka Streams
Reactive Kafka with Akka StreamsReactive Kafka with Akka Streams
Reactive Kafka with Akka Streams
 
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1
 
Kubernetes helm & helmc
Kubernetes helm & helmcKubernetes helm & helmc
Kubernetes helm & helmc
 
OSC2012 Tokyo/Spring JOSUG
OSC2012 Tokyo/Spring JOSUGOSC2012 Tokyo/Spring JOSUG
OSC2012 Tokyo/Spring JOSUG
 
OpenContrail Users Event at OpenStack Summit Paris 行ってきました
OpenContrail Users Event at OpenStack Summit Paris 行ってきましたOpenContrail Users Event at OpenStack Summit Paris 行ってきました
OpenContrail Users Event at OpenStack Summit Paris 行ってきました
 
Using ngx_lua / lua-nginx-module in pixiv
Using ngx_lua / lua-nginx-module in pixivUsing ngx_lua / lua-nginx-module in pixiv
Using ngx_lua / lua-nginx-module in pixiv
 
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけねGitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
 
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
 
Knative Lambda Runtimeを試してみた
Knative Lambda Runtimeを試してみたKnative Lambda Runtimeを試してみた
Knative Lambda Runtimeを試してみた
 
Dockerについて【勉強会資料】
Dockerについて【勉強会資料】 Dockerについて【勉強会資料】
Dockerについて【勉強会資料】
 
Dockerことはじめ的なはなし
Dockerことはじめ的なはなしDockerことはじめ的なはなし
Dockerことはじめ的なはなし
 
Cocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurlCocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurl
 
OpenStack 101
OpenStack 101OpenStack 101
OpenStack 101
 

Similar to Let's Use OKE

AKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsAKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsYoshio Terada
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
Kubernetes雑にまとめてみた 2020年8月版
Kubernetes雑にまとめてみた 2020年8月版Kubernetes雑にまとめてみた 2020年8月版
Kubernetes雑にまとめてみた 2020年8月版VirtualTech Japan Inc.
 
Kubernetes雑にまとめてみた 2019年12月版
Kubernetes雑にまとめてみた 2019年12月版Kubernetes雑にまとめてみた 2019年12月版
Kubernetes雑にまとめてみた 2019年12月版VirtualTech Japan Inc.
 
Docker, Kubernetes and OpenShift v3
Docker, Kubernetes and OpenShift v3Docker, Kubernetes and OpenShift v3
Docker, Kubernetes and OpenShift v3Emma Haruka Iwao
 
[old] Oracle Container Engine for Kubernetes (OKE) ご紹介 [2020年7月版]
[old] Oracle Container Engine for Kubernetes (OKE) ご紹介 [2020年7月版][old] Oracle Container Engine for Kubernetes (OKE) ご紹介 [2020年7月版]
[old] Oracle Container Engine for Kubernetes (OKE) ご紹介 [2020年7月版]オラクルエンジニア通信
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送
[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送
[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送Google Cloud Platform - Japan
 
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...VirtualTech Japan Inc.
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコムTomoyaTakegoshi
 
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったことOpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったことMasaya Aoyama
 
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境Katsutoshi Nagaoka
 
コンテナ on Windows
コンテナ on Windowsコンテナ on Windows
コンテナ on WindowsTsubasa Nomura
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と DockerのキホンNaoki Nagazumi
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでRyo Nakamaru
 
AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)
AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)
AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)Amazon Web Services Japan
 
Kubernetesと閉域網
Kubernetesと閉域網Kubernetesと閉域網
Kubernetesと閉域網Han Li
 

Similar to Let's Use OKE (20)

AKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsAKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab Contents
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
20170413 aws–windows users meetup
20170413 aws–windows users meetup20170413 aws–windows users meetup
20170413 aws–windows users meetup
 
Kubernetes雑にまとめてみた 2020年8月版
Kubernetes雑にまとめてみた 2020年8月版Kubernetes雑にまとめてみた 2020年8月版
Kubernetes雑にまとめてみた 2020年8月版
 
Kubernetes雑にまとめてみた 2019年12月版
Kubernetes雑にまとめてみた 2019年12月版Kubernetes雑にまとめてみた 2019年12月版
Kubernetes雑にまとめてみた 2019年12月版
 
Docker, Kubernetes and OpenShift v3
Docker, Kubernetes and OpenShift v3Docker, Kubernetes and OpenShift v3
Docker, Kubernetes and OpenShift v3
 
[old] Oracle Container Engine for Kubernetes (OKE) ご紹介 [2020年7月版]
[old] Oracle Container Engine for Kubernetes (OKE) ご紹介 [2020年7月版][old] Oracle Container Engine for Kubernetes (OKE) ご紹介 [2020年7月版]
[old] Oracle Container Engine for Kubernetes (OKE) ご紹介 [2020年7月版]
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送
[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送
[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送
 
Amazon EC2 Container Service Deep dive
Amazon EC2 Container Service Deep diveAmazon EC2 Container Service Deep dive
Amazon EC2 Container Service Deep dive
 
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム
 
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったことOpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
 
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
 
コンテナ on Windows
コンテナ on Windowsコンテナ on Windows
コンテナ on Windows
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
 
AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)
AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)
AWS Blackbelt 2015シリーズ Amazon EC2 Container Service (Amazon ECS)
 
Kubernetesと閉域網
Kubernetesと閉域網Kubernetesと閉域網
Kubernetesと閉域網
 

Let's Use OKE

  • 1. Oracle Container Engine for Kubernetes (OKE) を 使ってみよう
  • 3. Oracle Cloud Infrastructure (OCI) • OCI : Oracle の IaaS • VM (Compute Instance) • VCN (Virtual Cloud Network) • Subnet・Load Balancer • OCIR・OKE は OCI の中の1サービス • Compartment・Policy・Group・User… • 総称して「リソース」 • 概念理解が大変…
  • 4. Oracle Cloud Infrastructure Registry (OCIR) • プライベート Docker レジストリ • OCI 環境内に自作の Docker イメージを置ける • Kubernetes クラスタにデプロイする Docker イメージとして OCIR を参照できる
  • 5. Oracle Container Engine for Kubernetes (OKE) • Kubernetes … コンテナオーケストレーションツール • 複数の Docker コンテナを冗長構成にしたり • 高頻度なデプロイも簡単 • 自前で環境構築しようとすると大変 • Master Node の準備・インストール • Worker Node となるサーバの調達・インストール • ネットワーク整備… • ⇒ OKE のおかげで… • Kubernetes を使い始めるまでの障壁がなくなる • とりあえず使い始められる
  • 7. Kubernetes クラスタの構成 Load Balancer VCN (Oracle Cloud のネットワーク内) ユーザ Web アプリ Virtual Machine ≒ Virtual Machine ≒ Virtual Machine ≒ どのコンテナが どのサーバで動いているかは 通常意識しない
  • 8. OKE クラスタを作る • OCI 管理画面で「Create Cluster」ボタンを押下 • VCN・Subnet など必要なリソースは自動作成 • サーバマシン (=Worker Node) も自動生成 • 「Node Pool」というグループで表現
  • 9. OKE と OCI リソースの関係 • OKE クラスタは1つの仮想ネットワークを構築する • VCN • Worker Node となる VM を複数生成する • Compute Instance • Pod を外部に公開する Load Balancer Service • OCI Load Balancer • OKE の構成要素は OCI のリソースを流用している • OCI 管理コンソールでも OKE が作った VM などが見える
  • 10. Docker イメージを作成する • Web アプリの実装 • 最終的に Docker イメージにできればどんな言語でも良い • 例 : Node.js Express サーバ EXPOSE 8080 CMD ["node", "server.js"] • (http://localhost:8080/ でアクセスできる状態) • docker login コマンドで OCIR に接続 • docker build で Docker イメージを作成 • docker tag で OCIR 用の名前を付ける
  • 11. OCIR に Docker イメージを Push する • docker push iad.ocir.io/tenancy/repo/app:v1 • OCIR に Docker イメージが Push できた
  • 12. OKE クラスタに ReplicaSet を作る • deployment.yaml (抜粋) kind: Deployment spec: replicas: 3 template: metadata: labels: name: my-app spec: containers: - name: my-container image: iad.ocir.io/tenancy/repo/app:v1 imagePullPolicy: Always ports: - containerPort: 8080 • kubectl apply –f deployment.yaml • Pod (≒ Docker コンテナ) が3台できた • Pod は 8080 ポートを開放して待ち受けて いる • このままではインターネットから Pod に 到達する経路がない
  • 13. Pod を公開するため Service を作る 1 • service.yaml (抜粋) kind: Service spec: type: LoadBalancer selector: name: my-app ports: - name: http port: 80 targetPort: 8080 • 通信を転送したい Pod 群を selector.name で指定する (「my- app」部分) • Load Balancer Service 自身は 80 ポートを開放する • 80 ポートで受け取った通信を Pod の 8080 ポートへ転送する
  • 14. Pod を公開するため Service を作る 2 • kubectl apply –f service.yaml • Kubernetes Load Balancer Service ≒ OCI Load Balancer • パブリック IP が発行される (132.100.17.10 みたいなやつ) • インターネットからアクセスできるようになった
  • 16. Kubernetes はデプロイが楽チン • これまで面倒だったリリース作業が数コマンドに • アプリを作ったら docker build • イメージを OCIR に docker push • kubectl apply –f deployment.yaml • Pod の差し替えは自動的に行われる • ゼロダウンタイムでリリースするのも簡単 • ブルー・グリーン・デプロイメント • イミュータブル・デプロイメント • デプロイ環境や設定項目が YAML ファイルに残る • 環境全体をバージョン管理しやすい
  • 17. OKE は作り捨て・スケールしやすい • クラスタごと自動作成 • クラスタごと削除 • セットアップの手間なし • Node の台数を増やす Node Pool 機能 ↑ • 水平スケールがボタンひとつ
  • 19. Kubernetes の「コスト」 • Kubernetes 自体の学習コストは高い • Kubernetes が何を抽象化しているのか • どの機能を使えばよいのか • 疎結合ゆえの難解さ (環境変数の注入など) • K8s を使ったシステムの運用コストは高い • 気にしないといけないことはあまり減らない • 監視対象は増える • オンプレや生 K8s よりは OKE を使うのが断然楽 • クラスタごと作り捨てられる手軽さ • 水平スケールの容易さ
  • 20. ネットワーク・セキュリティは泥臭い • ネットワーク構成の設計が大変 • VCN・Subnet・CIDR Block・Load Balancer… • SSL 証明書設定・終端 • Security List (ファイアウォールルール) の設定が重要 • デフォルトでは全トラフィック筒抜けなので 不正アクセスや踏み台にされる危険性 • インターネットから LB • LB と Worker Node • Worker Node からインターネット • OKE 固有の設定もある
  • 22. まとめ • OKE を使えば Kubernetes 環境の導入は簡単! • Kubernetes 自体の複雑さはあるものの OKE がかなりお膳立てしてくれる • 「アプリ」「インフラ」の垣根はなくなっていく 1. Oracle のドキュメントは英語だけど頑張って読む • すみっこにも重要なことが書いてあるので… 2. Security List 設定大事 • 設定しないとセキュリティリスク • 設定ミスると通信障害 3. OCID 重要 • 問合せ時に必ず訊かれる