SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
Rook 基礎・バージョンアップ
@rev4t
Takashi Sogabe
2020年03月27日
今回お話しすること
•Rookの基本的な使い方
•Ceph の利用を想定
•バージョンアップ方法
•Rook Operator
•Ceph
発表者紹介
•Takashi Sogabe
• @rev4t
•OpenStack や Ceph の運用をやっています
•発表内容の元ネタ
• https://bit.ly/2QPeNPf
Rook Basics
k8s で Storage を使うときの課題
•外部ストレージが必要
•EBS等の、クラウドサービスを使う
• k8s node 障害時、 failover に時間を要する
•自前でアプライアンスを用意する
• ストレージシステムを別途運用するコストが大きい
•ベンダ・ロックイン
• ブラックボックスが相手だと、何かあっても自分たちで解決
することはできない
Rook で解決できること
•k8s 上で Storage Operation を実現
•Day1, Day2 Operation の自動化
• Bootstrap
• Deploy
• Configure
• Upgrade
•Storage Provisioning
• PVC
Rook とは?
•Open Source (Apache 2.0)
•CNCF のプロジェクト
•Operator + Custom Resource にて k8s の機能を拡張
•沢山の Storage システムに対応したフレームワーク
Storage Providers
Project Status
Ceph Stable
EdgeFS Stable
CockroachDB Alpha
Cassandra Alpha
NFS Alpha
YugabyteDB Alpha
Minio Alpha
2020年3月現在 (Rook v1.3)
Rook Architecture
•Rook Operator
•人間のオペレータに代わって、Ceph 等のデータを
持った分散システムのデプロイ・管理を実施する
•Rook Discover
•ストレージノード (k8s worker node)で動作し、ス
トレージを自動検出する
Version Up: Overview
Rook Version Up
•Version Up の対象は、2つあります
•Rook
•Ex) rook v1.1 -> v1.2
•Storage Backend
• Ex) Ceph 14.0.4 -> 14.0.5
Version Up Strategy (1)
• Rook Control Plane
• Release Note 等を確認した上で、修正するべき不具合等があれば、
Version Up を実施します
• Major Version Up
• ドキュメントに従い Version Up すれば、大きな問題はおこらないはずですが、
必ず事前検証をしておきましょう
• Version Up 中、一時的にストレージが利用できない状態になるのでご注意
ください
• ceph-mon, ceph-osd の container restart が発生します
• Minor Version Up
• Minor version up (v1.2.x -> v1.2.y) であれば、ceph-mon /ceph-osd の
container restart が発生しないパターンもあるため、影響は軽微になります
Version Up Strategy (2)
•Ceph
•事前テスト等を実施した上で本番環境に Roll Out
しましょう
•過去に、最新版 Ceph に Version Up することでサー
ビス影響が出そうな不具合がしばしば発生しています
•ceph-mon, ceph-osd の再起動が one-by-one で実
施されるため、I/O の一時的な性能低下・遅延が発
生します
• 一時的なパフォーマンス低下に耐えられる時間帯等で実
施しましょう
Version Up: Rook Control Plane
•Rook の公式ドキュメントに従って作業を実施
します
• https://rook.io/docs/rook/v1.2/ceph-upgrade.html
• 公式リリースバージョンの使用が前提です
• master ブランチからの Version Up については unsupported になります
Rook Version Up (v1.1 -> v1.2)
Step 0-1: Ceph Health Verification
export ROOK_NAMESPACE=rook-ceph
kubectl -n $ROOK_NAMESPACE get pods
TOOLS_POD=$(kubectl -n $ROOK_NAMESPACE get pod -l "app=rook-ceph-tools" -o
jsonpath='{.items[0].metadata.name}')
kubectl -n $ROOK_NAMESPACE exec -it $TOOLS_POD -- ceph status
• Version Up 前に、Ceph がクラスタとして正常に稼働していることを確
認しておきます
Step 0-2: Ceph Health Verification
kubectl -n $ROOK_NAMESPACE exec -it $TOOLS_POD -- ceph status
cluster:
id: 3cce2f74-a60c-4420-b88e-61b2b3f143ae
health: HEALTH_OK
services:
mon: 3 daemons, quorum a,b,c (age 43m)
mgr: a(active, since 42m)
osd: 9 osds: 9 up (since 39m), 9 in (since 39m)
data:
pools: 1 pools, 128 pgs
objects: 14 objects, 7.0 MiB
usage: 9.0 GiB used, 162 GiB / 171 GiB avail
pgs: 19.531% pgs unknown
3.906% pgs not active
98 active+clean
25 unknown
5 peering
Step 0-3: k8s Health Verification
POD_NAME=$(kubectl -n $ROOK_NAMESPACE get pod -o custom-columns=name:.metadata.name --no-
headers | grep rook-ceph-mon-b)
# Container の version を確認
kubectl -n $ROOK_NAMESPACE get pod ${POD_NAME} -o jsonpath='{.spec.containers[0].image}‘
ceph/ceph:v14.2.4-20190917
kubectl -n $ROOK_NAMESPACE get deployments -o jsonpath='{range .items[*]}{.metadata.name}{"
¥treq/upd/avl: "}{.spec.replicas}{"/"}{.status.updatedReplicas}{"/"}{.status.readyReplicas}{"
¥trook-version="}{.metadata.labels.rook-version}{"¥n"}{end}‘
kubectl -n $ROOK_NAMESPACE get jobs -o jsonpath='{range .items[*]}{.metadata.name}{"
¥tsucceeded: "}{.status.succeeded}{" ¥trook-version="}{.metadata.labels.rook-
version}{"¥n"}{end}'
• Version Up 前に、Rook の Control plane が正常に稼働していることを
確認します
Step 0-4: k8s Health Verification
kubectl -n $ROOK_NAMESPACE get deployments -o jsonpath='{range .items[*]}{.metadata.name}{" ¥treq/upd/avl:
"}{.spec.replicas}{"/"}{.status.updatedReplicas}{"/"}{.status.readyReplicas}{" ¥trook-
version="}{.metadata.labels.rook-version}{"¥n"}{end}'
csi-cephfsplugin-provisioner req/upd/avl: 2/2/2 rook-version=
csi-rbdplugin-provisioner req/upd/avl: 2/2/2 rook-version=
rook-ceph-mgr-a req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-mon-a req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-mon-b req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-mon-c req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-operator req/upd/avl: 1/1/1 rook-version=
rook-ceph-osd-0 req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-osd-1 req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-osd-2 req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-osd-3 req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-osd-4 req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-osd-5 req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-osd-6 req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-osd-7 req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-osd-8 req/upd/avl: 1/1/1 rook-version=v1.1.9
rook-ceph-tools req/upd/avl: 1/1/1 rook-version=
Step 0-5: k8s Health Verification
kubectl -n $ROOK_NAMESPACE get jobs -o jsonpath='{range .items[*]}{.metadata.name}{" ¥tsucceeded:
"}{.status.succeeded}{" ¥trook-version="}{.metadata.labels.rook-version}{"¥n"}{end}'
rook-ceph-osd-prepare-k8s-node1 succeeded: 1 rook-version=v1.1.9
rook-ceph-osd-prepare-k8s-node2 succeeded: 1 rook-version=v1.1.9
rook-ceph-osd-prepare-k8s-node3 succeeded: 1 rook-version=v1.1.9
Step 1: Update the RBAC and CRDs
kubectl apply -f upgrade-from-v1.1-apply.yaml
• Operator の Upgrade に必要な、Custom Resource Definition 及び
RBAC の更新を実施します
Step 2: CSI upgrade pre-requisites
kubectl -n $ROOK_SYSTEM_NAMESPACE edit deploy rook-ceph-operator
• fuse または rbd-nbd を使っている場合は、CSI driver 再起動時に
Pod の mount が外れてしまいます
• Cephfs plugin 及び rbd plugin の update strategy を OnDelete に変
更することで、問題を回避します
Step 3: Update the Rook Operator
kubectl -n $ROOK_SYSTEM_NAMESPACE set image deploy/rook-ceph-operator rook-ceph-
operator=rook/ceph:v1.2.5
• Rook ceph operator の container image version を v1.1.9 -> v1.2.5
に変更します
Step 4-1: Wait for the upgrade to complete
watch --exec kubectl -n $ROOK_NAMESPACE get deployments -l
rook_cluster=$ROOK_NAMESPACE -o jsonpath='{range .items[*]}{.metadata.name}{"
¥treq/upd/avl:
"}{.spec.replicas}{"/"}{.status.updatedReplicas}{"/"}{.status.readyReplicas}{"
¥trook-version="}{.metadata.labels.rook-version}{"¥n"}{end}'
• Rook ceph operator の container image version を v1.1.9 -> v1.2.5
に変更します
Step 4-2: Wait for the upgrade to complete
rook-ceph-mgr-a req/upd/avl: 1/1/1 rook-version=v1.2.5
rook-ceph-mon-a req/upd/avl: 1/1/1 rook-version=v1.2.5
rook-ceph-mon-b req/upd/avl: 1/1/1 rook-version=v1.2.5
rook-ceph-mon-c req/upd/avl: 1/1/1 rook-version=v1.2.5
rook-ceph-osd-0 req/upd/avl: 1/1/1 rook-version=v1.2.5
rook-ceph-osd-1 req/upd/avl: 1/1/1 rook-version=v1.2.5
rook-ceph-osd-2 req/upd/avl: 1/1/1 rook-version=v1.2.5
rook-ceph-osd-3 req/upd/avl: 1/1/1 rook-version=v1.2.5
rook-ceph-osd-4 req/upd/avl: 1/1/1 rook-version=v1.2.5
rook-ceph-osd-5 req/upd/avl: 1/1/1 rook-version=v1.2.5
rook-ceph-osd-6 req/upd/avl: 1/1/1 rook-version=v1.2.5
rook-ceph-osd-7 req/upd/avl: 1/1/1 rook-version=v1.2.5
rook-ceph-osd-8 req/upd/avl: 1/1/1 rook-version=v1.2.5
Step 5: Verify the updated cluster
kubectl -n $ROOK_SYSTEM_NAMESPACE get pod -o
jsonpath='{range .items[*]}{.metadata.name}{"¥n¥t"}{.status.phase}{"¥t¥t"}{.spec.containers[0].image}{"¥t"}{.spec.initContaine
rs[0]}{"¥n"}{end}' && ¥kubectl -n $ROOK_NAMESPACE get pod -o
jsonpath='{range .items[*]}{.metadata.name}{"¥n¥t"}{.status.phase}{"¥t¥t"}{.spec.containers[0].image}{"¥t"}{.spec.initContaine
rs[0].image}{"¥n"}{end}‘
…
rook-ceph-operator-6b8474c69c-qt9tl
Running rook/ceph:v1.2.5
rook-ceph-osd-prepare-k8s-node1-x6tpr
Succeeded ceph/ceph:v14.2.4-20190917 rook/ceph:v1.2.5
rook-ceph-osd-prepare-k8s-node2-72h27
Succeeded ceph/ceph:v14.2.4-20190917 rook/ceph:v1.2.5
rook-ceph-osd-prepare-k8s-node3-rql6v
Succeeded ceph/ceph:v14.2.4-20190917 rook/ceph:v1.2.5
rook-discover-j4pn7
Running rook/ceph:v1.2.5
rook-discover-j4xgj
Running rook/ceph:v1.2.5
rook-discover-k8cc7
Running rook/ceph:v1.2.5
• Rook の control plane が v1.2.5 になっていることを確認します
Step 6: CSI Manual Update (optional)
•CSI driver 再起動時に mount が外れる問題
に該当する場合は、CSI driver の手動 version
up を実施します
• Application Pods の drain を各 worker node にて実施
• CSI driver pod の delete を実施
• Delete 後に作成される新しい Pod は、version up されています
Step 7: Update Rook-Ceph custom resource
definitions
kubectl apply -f upgrade-from-v1.1-crds.yaml
• Version up 全ての Step 完了後に、Custom Resource Definition を
更新します
Rook Version Up (v1.2.x -> v1.2.y)
Step 1: Patch Release Upgrades
kubectl -n rook-ceph set image deploy/rook-ceph-operator rook-ceph-
operator=rook/ceph:v1.2.5
• Ceph operator の Custom Resource について、image のバージョンを
変更します
• 移行先の Version 番号によって、影響を受ける Pod が異なります
• 事前に、実際に使用する from, to の version を用いたテストを実
施しておくことをお勧めします
Affected components (v1.2.x -> v1.2.y)
From -> To CSI Driver ceph-mon ceph-osd ceph-mgr
V1.2.x -> v1.2.0 Affected - Affected -
v1.2.0 -> v1.2.1 - - Affected -
v1.2.1 -> v1.2.2 Affected - Affected -
v1.2.2 -> v1.2.3 Affected - - -
v1.2.3 -> v1.2.4 - - - -
v1.2.4 -> v1.2.5 Affected - - -
• 対象Deployment / DaemonSet の PodTemplate が変更されると、当
該Pod の delete / create が発生します
Ceph Version Up (v14.2.4 -> v14.2.7)
Step 1: Update the main Ceph daemons
ROOK_NAMESPACE=rook-ceph
NEW_CEPH_IMAGE=ceph/ceph:v14.2.7
CLUSTER_NAME=$ROOK_NAMESPACE
kubectl -n $ROOK_NAMESPACE patch CephCluster $CLUSTER_NAME --type=merge -p
"{¥"spec¥": {¥"cephVersion¥": {¥"image¥": ¥"$NEW_CEPH_IMAGE¥"}}}"
• Ceph cluster の Custom Resource について、image のバージョンを変
更します
• Update に必要な実際の処理については、Rook operator が自動的
に実施します
Step 2-1: Wait for the daemon pod updates to complete
# 各Podの update 状況を確認します
watch --exec kubectl -n $ROOK_NAMESPACE get deployments -l rook_cluster=$ROOK_NAMESPACE -o
jsonpath='{range .items[*]}{.metadata.name}{" ¥treq/upd/avl:
"}{.spec.replicas}{"/"}{.status.updatedReplicas}{"/"}{.status.readyReplicas}{" ¥tceph-
version="}{.metadata.labels.ceph-version}{"¥n"}{end}‘
# 全ての Pod について、update が完了したことを確認します
kubectl -n $ROOK_NAMESPACE get deployment -l rook_cluster=$ROOK_NAMESPACE -o
jsonpath='{range .items[*]}{"ceph-version="}{.metadata.labels.ceph-
version}{"¥n"}{end}' | sort | uniq
• Update 処理が完了するのを待ちます
• 上記コマンドを実行することで、現在の status を確認できます
Step 2-2: Wait for the daemon pod updates to
complete
# Rook operator 側の稼働状況をリアルタイムに確認します
ROOK_OPERATOR_POD=$(kubectl -n rook-ceph get pod -l "app=rook-ceph-operator" -o
jsonpath='{.items[0].metadata.name}')
kubectl -n rook-ceph logs -f $ROOK_OPERATOR_POD
• Rook operator の稼働状況をリアルタイムに確認することで、進捗状
況を詳細に把握することができます
Step 3: Verify the updated cluster
TOOLS_POD=$(kubectl -n $ROOK_NAMESPACE get pod -l "app=rook-ceph-tools" -o
jsonpath='{.items[0].metadata.name}')kubectl -n $ROOK_NAMESPACE exec -it $TOOLS_POD
-- ceph status
cluster:
id: 3cce2f74-a60c-4420-b88e-61b2b3f143ae
health: HEALTH_OK
…
• Ceph cluster が正常に稼働していることを確認します
External Cluster
Rook Ceph with External Cluster (1)
• 既存の Ceph Cluster に対して、Rook を用いた k8s との連携ができます
• メリット
• CSI Driver の運用管理のみを k8s で実施する形になるため、k8s 側の運用コス
トを下げつつ責任分界点をキッチリと分けられます
• Rook Version Up の際に Ceph Cluster に与えるサービス影響を完全に排除で
きます
• k8s networking による性能低下の影響を受けません
• デメリット
• Rook のほかに Ceph のデプロイツールを導入する必要があります
• ただし、Ceph 自体が強力な自律システムであるため、オペレータが障害時に介入する
必要はありません
• ceph-mon のノード数が障害等の影響で減少した際は、別途デプロイツールを走らせ
る必要があります
Rook Ceph with External Cluster (2)
•Rook + ceph-ansible (container deployment)
• Ceph のデプロイについては、ceph-ansible を用います
• ceph-mon, ceph-osd の配置を自由に決められます
• k8s worker node 上に配置
• k8s クラスタとは独立したノードに配置
• crush mapping や block device mapping に k8s を介在させる必要がないため、運用がシンプ
ルになります
• ceph-ansible 自体が agent 不要でシンプルなため、agent 起因で Ceph クラスタに
影響を与える可能性がありません
Summary
Summary: Rook Version Up (1)
•長期的な運用の観点では、対象の Storage
Backend だけでなく、Rook Operator 自体の
Version Up が必要になる
•Minor Version Up は作業コスト・リスクは低いものの、
Major Version Up についてはサービスへの影響を伴う
作業が発生する
Summary: Rook Version Up (2)
•Ceph の Version Up については、煩雑な作業
を Rook Operator が引き受けてくれるため、と
ても便利
• ただし、リリース直後の Ceph には致命的な Known Issues が
含まれている可能性もあるため、十分な事前検証が必要
Summary: Rook Version Up (3)
•K8s 側の運用をシンプルにしたい場合は..
•ceph-ansible + Rook external cluster
• Ceph クラスタの管理については ceph-ansible を用いる
• Rook は external cluster の形でCeph を使用する
• メリット
• Rook Operator の Version Up に伴う Ceph クラスタへのサービス影響を排除で
きる
• デメリット
• 2つのデプロイシステムを管理する必要がある
• ceph-mon が worker ノード障害等で減少した際は、手動で ceph-ansible コ
マンドを実行してノード数を維持させる必要がある

Weitere ähnliche Inhalte

Was ist angesagt?

コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)NTT DATA Technology & Innovation
 
Ceph アーキテクチャ概説
Ceph アーキテクチャ概説Ceph アーキテクチャ概説
Ceph アーキテクチャ概説Emma Haruka Iwao
 
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!Kohei Tokunaga
 
シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法Yohei Azekatsu
 
KVM環境におけるネットワーク速度ベンチマーク
KVM環境におけるネットワーク速度ベンチマークKVM環境におけるネットワーク速度ベンチマーク
KVM環境におけるネットワーク速度ベンチマークVirtualTech Japan Inc.
 
Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計Koichi Nagaoka
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
Linux KVM環境におけるGPGPU活用最新動向
Linux KVM環境におけるGPGPU活用最新動向Linux KVM環境におけるGPGPU活用最新動向
Linux KVM環境におけるGPGPU活用最新動向Taira Hajime
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説Masahiko Sawada
 
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法Takuya ASADA
 
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!Etsuji Nakai
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法Masahito Zembutsu
 
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?Masahito Zembutsu
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理Takuya ASADA
 
Weaveを試してみた
Weaveを試してみたWeaveを試してみた
Weaveを試してみたKazuto Kusama
 
Hadoopの概念と基本的知識
Hadoopの概念と基本的知識Hadoopの概念と基本的知識
Hadoopの概念と基本的知識Ken SASAKI
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春VerMasahito Zembutsu
 

Was ist angesagt? (20)

コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
 
Ceph アーキテクチャ概説
Ceph アーキテクチャ概説Ceph アーキテクチャ概説
Ceph アーキテクチャ概説
 
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
 
シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法
 
KVM環境におけるネットワーク速度ベンチマーク
KVM環境におけるネットワーク速度ベンチマークKVM環境におけるネットワーク速度ベンチマーク
KVM環境におけるネットワーク速度ベンチマーク
 
KubeVirt 101
KubeVirt 101KubeVirt 101
KubeVirt 101
 
Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
Linux KVM環境におけるGPGPU活用最新動向
Linux KVM環境におけるGPGPU活用最新動向Linux KVM環境におけるGPGPU活用最新動向
Linux KVM環境におけるGPGPU活用最新動向
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
 
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
Weaveを試してみた
Weaveを試してみたWeaveを試してみた
Weaveを試してみた
 
Hadoopの概念と基本的知識
Hadoopの概念と基本的知識Hadoopの概念と基本的知識
Hadoopの概念と基本的知識
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
 

Ähnlich wie Rookの基礎・バージョンアップ

GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみたKatsutoshi Nagaoka
 
Kubernetes超入門 with java
Kubernetes超入門 with javaKubernetes超入門 with java
Kubernetes超入門 with javaYasunari Tanaka
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterPreferred Networks
 
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみたKubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみたAkihito Inoh
 
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50Preferred Networks
 
Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsuNanha Park
 
QCon北京2015 sina jpool-微博平台自动化运维实践
QCon北京2015 sina jpool-微博平台自动化运维实践QCon北京2015 sina jpool-微博平台自动化运维实践
QCon北京2015 sina jpool-微博平台自动化运维实践Weibo Corporation
 
130329 04
130329 04130329 04
130329 04openrtm
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4openrtm
 
OpenShiftでJBoss EAP構築
OpenShiftでJBoss EAP構築OpenShiftでJBoss EAP構築
OpenShiftでJBoss EAP構築Daein Park
 
What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318Yuhki Hanada
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -Yukihiko SAWANOBORI
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみましたShuntaro Saiba
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎Daisuke Hiraoka
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システムTomohiro Ohtake
 

Ähnlich wie Rookの基礎・バージョンアップ (20)

GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみた
 
Kubernetes超入門 with java
Kubernetes超入門 with javaKubernetes超入門 with java
Kubernetes超入門 with java
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
 
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみたKubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
 
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
 
Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsu
 
QCon北京2015 sina jpool-微博平台自动化运维实践
QCon北京2015 sina jpool-微博平台自动化运维实践QCon北京2015 sina jpool-微博平台自动化运维实践
QCon北京2015 sina jpool-微博平台自动化运维实践
 
130329 04
130329 04130329 04
130329 04
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
 
OpenShiftでJBoss EAP構築
OpenShiftでJBoss EAP構築OpenShiftでJBoss EAP構築
OpenShiftでJBoss EAP構築
 
What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみました
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
 

Mehr von Takashi Sogabe

OCP Serverを用いた OpenStack Containerの検証
 OCP Serverを用いたOpenStack Containerの検証 OCP Serverを用いたOpenStack Containerの検証
OCP Serverを用いた OpenStack Containerの検証Takashi Sogabe
 
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-Takashi Sogabe
 
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
 
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-Takashi Sogabe
 
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)Takashi Sogabe
 
OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!Takashi Sogabe
 
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介Takashi Sogabe
 
Yokozuna 日本語検索機能を評価しました
Yokozuna 日本語検索機能を評価しましたYokozuna 日本語検索機能を評価しました
Yokozuna 日本語検索機能を評価しましたTakashi Sogabe
 
コモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しようコモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しようTakashi Sogabe
 
Riak / Riak-CS(Enterprise版) ベンチマークしました
 Riak / Riak-CS(Enterprise版) ベンチマークしました Riak / Riak-CS(Enterprise版) ベンチマークしました
Riak / Riak-CS(Enterprise版) ベンチマークしましたTakashi Sogabe
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Takashi Sogabe
 
Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)Takashi Sogabe
 

Mehr von Takashi Sogabe (12)

OCP Serverを用いた OpenStack Containerの検証
 OCP Serverを用いたOpenStack Containerの検証 OCP Serverを用いたOpenStack Containerの検証
OCP Serverを用いた OpenStack Containerの検証
 
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
 
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 行ってきました
 
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-
 
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
 
OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!
 
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
 
Yokozuna 日本語検索機能を評価しました
Yokozuna 日本語検索機能を評価しましたYokozuna 日本語検索機能を評価しました
Yokozuna 日本語検索機能を評価しました
 
コモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しようコモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しよう
 
Riak / Riak-CS(Enterprise版) ベンチマークしました
 Riak / Riak-CS(Enterprise版) ベンチマークしました Riak / Riak-CS(Enterprise版) ベンチマークしました
Riak / Riak-CS(Enterprise版) ベンチマークしました
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)
 

Rookの基礎・バージョンアップ

  • 3. 発表者紹介 •Takashi Sogabe • @rev4t •OpenStack や Ceph の運用をやっています •発表内容の元ネタ • https://bit.ly/2QPeNPf
  • 5. k8s で Storage を使うときの課題 •外部ストレージが必要 •EBS等の、クラウドサービスを使う • k8s node 障害時、 failover に時間を要する •自前でアプライアンスを用意する • ストレージシステムを別途運用するコストが大きい •ベンダ・ロックイン • ブラックボックスが相手だと、何かあっても自分たちで解決 することはできない
  • 6. Rook で解決できること •k8s 上で Storage Operation を実現 •Day1, Day2 Operation の自動化 • Bootstrap • Deploy • Configure • Upgrade •Storage Provisioning • PVC
  • 7. Rook とは? •Open Source (Apache 2.0) •CNCF のプロジェクト •Operator + Custom Resource にて k8s の機能を拡張 •沢山の Storage システムに対応したフレームワーク
  • 8. Storage Providers Project Status Ceph Stable EdgeFS Stable CockroachDB Alpha Cassandra Alpha NFS Alpha YugabyteDB Alpha Minio Alpha 2020年3月現在 (Rook v1.3)
  • 9. Rook Architecture •Rook Operator •人間のオペレータに代わって、Ceph 等のデータを 持った分散システムのデプロイ・管理を実施する •Rook Discover •ストレージノード (k8s worker node)で動作し、ス トレージを自動検出する
  • 11. Rook Version Up •Version Up の対象は、2つあります •Rook •Ex) rook v1.1 -> v1.2 •Storage Backend • Ex) Ceph 14.0.4 -> 14.0.5
  • 12. Version Up Strategy (1) • Rook Control Plane • Release Note 等を確認した上で、修正するべき不具合等があれば、 Version Up を実施します • Major Version Up • ドキュメントに従い Version Up すれば、大きな問題はおこらないはずですが、 必ず事前検証をしておきましょう • Version Up 中、一時的にストレージが利用できない状態になるのでご注意 ください • ceph-mon, ceph-osd の container restart が発生します • Minor Version Up • Minor version up (v1.2.x -> v1.2.y) であれば、ceph-mon /ceph-osd の container restart が発生しないパターンもあるため、影響は軽微になります
  • 13. Version Up Strategy (2) •Ceph •事前テスト等を実施した上で本番環境に Roll Out しましょう •過去に、最新版 Ceph に Version Up することでサー ビス影響が出そうな不具合がしばしば発生しています •ceph-mon, ceph-osd の再起動が one-by-one で実 施されるため、I/O の一時的な性能低下・遅延が発 生します • 一時的なパフォーマンス低下に耐えられる時間帯等で実 施しましょう
  • 14. Version Up: Rook Control Plane •Rook の公式ドキュメントに従って作業を実施 します • https://rook.io/docs/rook/v1.2/ceph-upgrade.html • 公式リリースバージョンの使用が前提です • master ブランチからの Version Up については unsupported になります
  • 15. Rook Version Up (v1.1 -> v1.2)
  • 16. Step 0-1: Ceph Health Verification export ROOK_NAMESPACE=rook-ceph kubectl -n $ROOK_NAMESPACE get pods TOOLS_POD=$(kubectl -n $ROOK_NAMESPACE get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') kubectl -n $ROOK_NAMESPACE exec -it $TOOLS_POD -- ceph status • Version Up 前に、Ceph がクラスタとして正常に稼働していることを確 認しておきます
  • 17. Step 0-2: Ceph Health Verification kubectl -n $ROOK_NAMESPACE exec -it $TOOLS_POD -- ceph status cluster: id: 3cce2f74-a60c-4420-b88e-61b2b3f143ae health: HEALTH_OK services: mon: 3 daemons, quorum a,b,c (age 43m) mgr: a(active, since 42m) osd: 9 osds: 9 up (since 39m), 9 in (since 39m) data: pools: 1 pools, 128 pgs objects: 14 objects, 7.0 MiB usage: 9.0 GiB used, 162 GiB / 171 GiB avail pgs: 19.531% pgs unknown 3.906% pgs not active 98 active+clean 25 unknown 5 peering
  • 18. Step 0-3: k8s Health Verification POD_NAME=$(kubectl -n $ROOK_NAMESPACE get pod -o custom-columns=name:.metadata.name --no- headers | grep rook-ceph-mon-b) # Container の version を確認 kubectl -n $ROOK_NAMESPACE get pod ${POD_NAME} -o jsonpath='{.spec.containers[0].image}‘ ceph/ceph:v14.2.4-20190917 kubectl -n $ROOK_NAMESPACE get deployments -o jsonpath='{range .items[*]}{.metadata.name}{" ¥treq/upd/avl: "}{.spec.replicas}{"/"}{.status.updatedReplicas}{"/"}{.status.readyReplicas}{" ¥trook-version="}{.metadata.labels.rook-version}{"¥n"}{end}‘ kubectl -n $ROOK_NAMESPACE get jobs -o jsonpath='{range .items[*]}{.metadata.name}{" ¥tsucceeded: "}{.status.succeeded}{" ¥trook-version="}{.metadata.labels.rook- version}{"¥n"}{end}' • Version Up 前に、Rook の Control plane が正常に稼働していることを 確認します
  • 19. Step 0-4: k8s Health Verification kubectl -n $ROOK_NAMESPACE get deployments -o jsonpath='{range .items[*]}{.metadata.name}{" ¥treq/upd/avl: "}{.spec.replicas}{"/"}{.status.updatedReplicas}{"/"}{.status.readyReplicas}{" ¥trook- version="}{.metadata.labels.rook-version}{"¥n"}{end}' csi-cephfsplugin-provisioner req/upd/avl: 2/2/2 rook-version= csi-rbdplugin-provisioner req/upd/avl: 2/2/2 rook-version= rook-ceph-mgr-a req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-mon-a req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-mon-b req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-mon-c req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-operator req/upd/avl: 1/1/1 rook-version= rook-ceph-osd-0 req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-osd-1 req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-osd-2 req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-osd-3 req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-osd-4 req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-osd-5 req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-osd-6 req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-osd-7 req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-osd-8 req/upd/avl: 1/1/1 rook-version=v1.1.9 rook-ceph-tools req/upd/avl: 1/1/1 rook-version=
  • 20. Step 0-5: k8s Health Verification kubectl -n $ROOK_NAMESPACE get jobs -o jsonpath='{range .items[*]}{.metadata.name}{" ¥tsucceeded: "}{.status.succeeded}{" ¥trook-version="}{.metadata.labels.rook-version}{"¥n"}{end}' rook-ceph-osd-prepare-k8s-node1 succeeded: 1 rook-version=v1.1.9 rook-ceph-osd-prepare-k8s-node2 succeeded: 1 rook-version=v1.1.9 rook-ceph-osd-prepare-k8s-node3 succeeded: 1 rook-version=v1.1.9
  • 21. Step 1: Update the RBAC and CRDs kubectl apply -f upgrade-from-v1.1-apply.yaml • Operator の Upgrade に必要な、Custom Resource Definition 及び RBAC の更新を実施します
  • 22. Step 2: CSI upgrade pre-requisites kubectl -n $ROOK_SYSTEM_NAMESPACE edit deploy rook-ceph-operator • fuse または rbd-nbd を使っている場合は、CSI driver 再起動時に Pod の mount が外れてしまいます • Cephfs plugin 及び rbd plugin の update strategy を OnDelete に変 更することで、問題を回避します
  • 23. Step 3: Update the Rook Operator kubectl -n $ROOK_SYSTEM_NAMESPACE set image deploy/rook-ceph-operator rook-ceph- operator=rook/ceph:v1.2.5 • Rook ceph operator の container image version を v1.1.9 -> v1.2.5 に変更します
  • 24. Step 4-1: Wait for the upgrade to complete watch --exec kubectl -n $ROOK_NAMESPACE get deployments -l rook_cluster=$ROOK_NAMESPACE -o jsonpath='{range .items[*]}{.metadata.name}{" ¥treq/upd/avl: "}{.spec.replicas}{"/"}{.status.updatedReplicas}{"/"}{.status.readyReplicas}{" ¥trook-version="}{.metadata.labels.rook-version}{"¥n"}{end}' • Rook ceph operator の container image version を v1.1.9 -> v1.2.5 に変更します
  • 25. Step 4-2: Wait for the upgrade to complete rook-ceph-mgr-a req/upd/avl: 1/1/1 rook-version=v1.2.5 rook-ceph-mon-a req/upd/avl: 1/1/1 rook-version=v1.2.5 rook-ceph-mon-b req/upd/avl: 1/1/1 rook-version=v1.2.5 rook-ceph-mon-c req/upd/avl: 1/1/1 rook-version=v1.2.5 rook-ceph-osd-0 req/upd/avl: 1/1/1 rook-version=v1.2.5 rook-ceph-osd-1 req/upd/avl: 1/1/1 rook-version=v1.2.5 rook-ceph-osd-2 req/upd/avl: 1/1/1 rook-version=v1.2.5 rook-ceph-osd-3 req/upd/avl: 1/1/1 rook-version=v1.2.5 rook-ceph-osd-4 req/upd/avl: 1/1/1 rook-version=v1.2.5 rook-ceph-osd-5 req/upd/avl: 1/1/1 rook-version=v1.2.5 rook-ceph-osd-6 req/upd/avl: 1/1/1 rook-version=v1.2.5 rook-ceph-osd-7 req/upd/avl: 1/1/1 rook-version=v1.2.5 rook-ceph-osd-8 req/upd/avl: 1/1/1 rook-version=v1.2.5
  • 26. Step 5: Verify the updated cluster kubectl -n $ROOK_SYSTEM_NAMESPACE get pod -o jsonpath='{range .items[*]}{.metadata.name}{"¥n¥t"}{.status.phase}{"¥t¥t"}{.spec.containers[0].image}{"¥t"}{.spec.initContaine rs[0]}{"¥n"}{end}' && ¥kubectl -n $ROOK_NAMESPACE get pod -o jsonpath='{range .items[*]}{.metadata.name}{"¥n¥t"}{.status.phase}{"¥t¥t"}{.spec.containers[0].image}{"¥t"}{.spec.initContaine rs[0].image}{"¥n"}{end}‘ … rook-ceph-operator-6b8474c69c-qt9tl Running rook/ceph:v1.2.5 rook-ceph-osd-prepare-k8s-node1-x6tpr Succeeded ceph/ceph:v14.2.4-20190917 rook/ceph:v1.2.5 rook-ceph-osd-prepare-k8s-node2-72h27 Succeeded ceph/ceph:v14.2.4-20190917 rook/ceph:v1.2.5 rook-ceph-osd-prepare-k8s-node3-rql6v Succeeded ceph/ceph:v14.2.4-20190917 rook/ceph:v1.2.5 rook-discover-j4pn7 Running rook/ceph:v1.2.5 rook-discover-j4xgj Running rook/ceph:v1.2.5 rook-discover-k8cc7 Running rook/ceph:v1.2.5 • Rook の control plane が v1.2.5 になっていることを確認します
  • 27. Step 6: CSI Manual Update (optional) •CSI driver 再起動時に mount が外れる問題 に該当する場合は、CSI driver の手動 version up を実施します • Application Pods の drain を各 worker node にて実施 • CSI driver pod の delete を実施 • Delete 後に作成される新しい Pod は、version up されています
  • 28. Step 7: Update Rook-Ceph custom resource definitions kubectl apply -f upgrade-from-v1.1-crds.yaml • Version up 全ての Step 完了後に、Custom Resource Definition を 更新します
  • 29. Rook Version Up (v1.2.x -> v1.2.y)
  • 30. Step 1: Patch Release Upgrades kubectl -n rook-ceph set image deploy/rook-ceph-operator rook-ceph- operator=rook/ceph:v1.2.5 • Ceph operator の Custom Resource について、image のバージョンを 変更します • 移行先の Version 番号によって、影響を受ける Pod が異なります • 事前に、実際に使用する from, to の version を用いたテストを実 施しておくことをお勧めします
  • 31. Affected components (v1.2.x -> v1.2.y) From -> To CSI Driver ceph-mon ceph-osd ceph-mgr V1.2.x -> v1.2.0 Affected - Affected - v1.2.0 -> v1.2.1 - - Affected - v1.2.1 -> v1.2.2 Affected - Affected - v1.2.2 -> v1.2.3 Affected - - - v1.2.3 -> v1.2.4 - - - - v1.2.4 -> v1.2.5 Affected - - - • 対象Deployment / DaemonSet の PodTemplate が変更されると、当 該Pod の delete / create が発生します
  • 32. Ceph Version Up (v14.2.4 -> v14.2.7)
  • 33. Step 1: Update the main Ceph daemons ROOK_NAMESPACE=rook-ceph NEW_CEPH_IMAGE=ceph/ceph:v14.2.7 CLUSTER_NAME=$ROOK_NAMESPACE kubectl -n $ROOK_NAMESPACE patch CephCluster $CLUSTER_NAME --type=merge -p "{¥"spec¥": {¥"cephVersion¥": {¥"image¥": ¥"$NEW_CEPH_IMAGE¥"}}}" • Ceph cluster の Custom Resource について、image のバージョンを変 更します • Update に必要な実際の処理については、Rook operator が自動的 に実施します
  • 34. Step 2-1: Wait for the daemon pod updates to complete # 各Podの update 状況を確認します watch --exec kubectl -n $ROOK_NAMESPACE get deployments -l rook_cluster=$ROOK_NAMESPACE -o jsonpath='{range .items[*]}{.metadata.name}{" ¥treq/upd/avl: "}{.spec.replicas}{"/"}{.status.updatedReplicas}{"/"}{.status.readyReplicas}{" ¥tceph- version="}{.metadata.labels.ceph-version}{"¥n"}{end}‘ # 全ての Pod について、update が完了したことを確認します kubectl -n $ROOK_NAMESPACE get deployment -l rook_cluster=$ROOK_NAMESPACE -o jsonpath='{range .items[*]}{"ceph-version="}{.metadata.labels.ceph- version}{"¥n"}{end}' | sort | uniq • Update 処理が完了するのを待ちます • 上記コマンドを実行することで、現在の status を確認できます
  • 35. Step 2-2: Wait for the daemon pod updates to complete # Rook operator 側の稼働状況をリアルタイムに確認します ROOK_OPERATOR_POD=$(kubectl -n rook-ceph get pod -l "app=rook-ceph-operator" -o jsonpath='{.items[0].metadata.name}') kubectl -n rook-ceph logs -f $ROOK_OPERATOR_POD • Rook operator の稼働状況をリアルタイムに確認することで、進捗状 況を詳細に把握することができます
  • 36. Step 3: Verify the updated cluster TOOLS_POD=$(kubectl -n $ROOK_NAMESPACE get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}')kubectl -n $ROOK_NAMESPACE exec -it $TOOLS_POD -- ceph status cluster: id: 3cce2f74-a60c-4420-b88e-61b2b3f143ae health: HEALTH_OK … • Ceph cluster が正常に稼働していることを確認します
  • 38. Rook Ceph with External Cluster (1) • 既存の Ceph Cluster に対して、Rook を用いた k8s との連携ができます • メリット • CSI Driver の運用管理のみを k8s で実施する形になるため、k8s 側の運用コス トを下げつつ責任分界点をキッチリと分けられます • Rook Version Up の際に Ceph Cluster に与えるサービス影響を完全に排除で きます • k8s networking による性能低下の影響を受けません • デメリット • Rook のほかに Ceph のデプロイツールを導入する必要があります • ただし、Ceph 自体が強力な自律システムであるため、オペレータが障害時に介入する 必要はありません • ceph-mon のノード数が障害等の影響で減少した際は、別途デプロイツールを走らせ る必要があります
  • 39. Rook Ceph with External Cluster (2) •Rook + ceph-ansible (container deployment) • Ceph のデプロイについては、ceph-ansible を用います • ceph-mon, ceph-osd の配置を自由に決められます • k8s worker node 上に配置 • k8s クラスタとは独立したノードに配置 • crush mapping や block device mapping に k8s を介在させる必要がないため、運用がシンプ ルになります • ceph-ansible 自体が agent 不要でシンプルなため、agent 起因で Ceph クラスタに 影響を与える可能性がありません
  • 41. Summary: Rook Version Up (1) •長期的な運用の観点では、対象の Storage Backend だけでなく、Rook Operator 自体の Version Up が必要になる •Minor Version Up は作業コスト・リスクは低いものの、 Major Version Up についてはサービスへの影響を伴う 作業が発生する
  • 42. Summary: Rook Version Up (2) •Ceph の Version Up については、煩雑な作業 を Rook Operator が引き受けてくれるため、と ても便利 • ただし、リリース直後の Ceph には致命的な Known Issues が 含まれている可能性もあるため、十分な事前検証が必要
  • 43. Summary: Rook Version Up (3) •K8s 側の運用をシンプルにしたい場合は.. •ceph-ansible + Rook external cluster • Ceph クラスタの管理については ceph-ansible を用いる • Rook は external cluster の形でCeph を使用する • メリット • Rook Operator の Version Up に伴う Ceph クラスタへのサービス影響を排除で きる • デメリット • 2つのデプロイシステムを管理する必要がある • ceph-mon が worker ノード障害等で減少した際は、手動で ceph-ansible コ マンドを実行してノード数を維持させる必要がある