Kubernetes Meetup Tokyo 第25次活动总结
-
- 2019年11月13日に開催されたKubernetes Meetup Tokyo #25の発表内容をまとめたものです
- 映像はこちら
Kubernetes持久化存储卷入门
- 坂下 幸徳さん(@ysakashita3、ysakashita)、ゼットラボ株式会社
适合初学者的存储方式及相关事项
混同しやすいワード
データプレーン
格納と転送処理を担う
コントロールプレーン
管理APIなどの処理を担う
ストレージ種別
ブロックストレージ
ストレージの元祖
内蔵ドライブと同じように見える
速度は一番早い
DBやOSのブートディスクに使われる
ファイルストレージ
NAS Serverが内部にある
NAS Serverがブロックストレージに繋がっている
ネットワークドライブとして見える
ファイルの共有に使われる
オブジェクトストレージ
例:AWSのS3
中にHTTPS Server
HTTPSのURLでアクセスできる
Key-ValueストアのDBがあることが多く、メタデータが保存されており、それを基にストレージのデータにアクセスする
大量のデータが格納可能
写真や動画の格納に使われる
Kubernetes中的存储模型和运作
-
- CNCFにストレージ系のサービスは多数
-
- Kubernetesでは1.9からCSIがサポートされ、ストレージの機能は徐々に増えている
1.13でCSIがGA
CSIに新しい機能を追加してくのが最近のトレンド
ストレージのモデル
PersistentVolimeClaim
PersistentVolume
StorageClass
管理者とユーザーの役割が考慮されており、管理者はPVとSCを作成し、ユーザーがPVCを作成してそれをPodに割り当てる
対象はブロックストレージとファイルストレージがメイン
オブジェクトはHTTPSで書き込めるので対象になっていない
範囲と権限
SCとPVは全Namespaceで共通のリソース
クラスタ全体の管理権限が必要
PVCはNamespace毎のリソース
PersistentVolimeClaim
Volume要求仕様
SC名やサイズ、アクセスモードなどのスペックを示す
Kubernetesでのアクセスモードは3種類
ReadWriteOnce(RWO)
1つのNodeからRead/Writeでマウント
ReadOnlyMany(ROX)
複数のNodeからReadOnlyでマウント
ReadWriteMany(RWX)
複数のNodeからRead/Writeでマウント
PV
SC名やサイズ、アクセスモード、Reclaim policyが指定される
Reclaim Policy
PVCが削除された場合のPVの振る舞い
Retain
PVは残る
Recycle(Deperecated)
PVは残すが中のデータは削除
Delete
PVも削除
SC
ストレージプールを表す
ProvisionerがAPIを呼ぶ
Container Storage Interface(CSI)
コンテナオーケストレーション向けの標準仕様
Kuberentesを初めとした主要なコンテナオーケストレーションで採用されている
StatefulSet
PV、PVCを安全に使うリソース
Pod名に番号が付与される
Podの更新処理が番号順に行われる
Pod生成時にPVCを自動生成
削除してもStatefulSetとPodが削除されるのみ
PVとPVCの誤削除防止
PVの割り当て
Manual Provisioning
管理者がSCとPVを事前にデプロイしておき、ユーザーがPVCを使ってPVを選択
Dynamic Provisionig
管理者はSCのみを事前に準備しておき、ユーザーがPVCをデプロイするとPVが自動生成される
PodのRollingUpdate時の振る舞い(セルフヒーリングのときも同じ)
古いPodはストレージからデタッチされ、新しいPodが再度アタッチを試みる
これによりデータは消さずにアップデートが可能
マネージドストレージ
各クラウドプロバイダで提供されているストレージサービスを仕様する
GKEでの事例
デフォルトでSCがデプロイ済み
PVCでのマニフェストをデプロイ
Dynamic ProvisiongでPVができる
Podで使う場合はマウントパスとPVCの名前を記述する
常见问题和答案
-
- ストレージは何を選んだら良いか?
ポイントは
格納したいデータの価値
アプリからの利用用途
障害発生時の対応体制
Cinder(Open Stack)とA社どちらがいいか?
比較対象が違う
DBにはブロックストレージ or ファイルストレージ?
ブロックストレージがベター
ファイルストレージは非推奨(MySQLのリファレンス)
ファイルストレージのロック機能が邪魔をしてしまう
DeploymentでPVを使って良い?
StatefulSetがおすすめ
Terminating中にCreateされたPodがアタッチを試みてエラーになることがある
关于Kubernetes中的CSI
- 早川 大貴さん(@bells17_、bells17)、株式会社IDCフロンティア
Kubernetes中卷插件的发展历史
-
- v1.9でCSIがアルファリリース、1.13でGA
-
- 最終的には全てのプラグインをCSIプラグインとして外部に切り出す予定
CSI移行のモチベーション
ストレージプロバイダ視点
ストレージプロバイダはCSIプラグインを実装するだけで各コンテナオーケストレーターに対応できる
Kuberentes視点
ボリュームプラグインのソースコードをKubernetesから除外できる
各コンチロールプレーンのサイズも小さくなる
ボリュームプラグインはコンテナとして提供されるものであり、それによってマシンとの依存関係を除くことができる
犯罪现场调查
-
- コンテナオーケストレーターでストレージを利用するための共通の仕様を定義したも
-
- CSIドライバ
コンテナイメージ形式で提供される
コンテナオーケストレーターとの通信は gRPCプロトコルを使用する
提供する機能
ボリュームの作成/削除
ノードへのアタッチ/デタッチ
ボリュームのマウント/アンマウント
ボリュームのスナップショット作成/削除
gRPCのインターフェース
Controller Plugin
Master Nodeで動くgRPCサーバー
2種類のgRPCサービスが実装されている
以下の機能を提供
ボリュームの作成/削除
ノードへのボリュームのアタッチ/デタッチ
ボリュームのスナップショット作成/削除
Node Pligin
Worker Nodeで動くgRPCサーバー
2種類のgRPCサービスが実装されている
以下の機能を提供
ノードにアタッチされたボリュームのフォーマット
ボリュームのマウント/アンマウント
Kubernetes和CSI的协作方式。
-
- Controller Plugin/Node Pluginそれぞれにサイドカー形式でアプリケーションを提供する
Controller Pluginには5種類、Node Pluginには1種類のサイドカーがある
给额外的东西
- CSIドライバを自分で開発する際の便利なツールがいくつか用意されている
如何在Kubernetes上开发高可用的Redis数据库应用程序
- Ran Xuさん(@Haier0715, fengzixu)
为什么我们想要发展它?
-
- ユーザーの観点
Kubernetes上で、オンラインサービスをサポートするためのデータベースを使いたい
DBAは高給なので雇えない
Redis DBの観点
RedisをKuberentes上で動かすのには難しい
ラーニングコストが高い
我们想要什么样的能力?
-
- 必要な性質
データの信頼性
高可用性
使いやすさ
保守のしやすさ
如何实施它?
高度可靠的数据 de
-
- Redisのデータ永続化には2つの方法があり、どちらも有効化した
RDB
スナップショットをRDBファイルとして保存
AOF(Append Only File)
すべての書き込みコマンドを記録
Kubernetes上ではPersistent Volumeを使用
リモートブロックストレージとしてCeph RBDを使用
高可用服务
-
- ユーザーがアクセスするためにデータリンクを提供
-
- SLB(Super Load Balancer)を作成し、ここからRedisクラスターにアクセスする
これにより、Nodeの一部がダウンしてもRedisクラスタにアクセスできる
アーキテクチャのメリット
タスク(バックアップやヘルスチェック)の競合が防げる
オペレーターとkube api-serverとの通信が減らせる
易于使用
- Helm Chartに設定を記載し、helm installコマンドでデプロイできる
其他
- コードはOSSに公開予定
此处提供的中国语言本地化翻译选项有:
长官
为了智能地”散布”拓扑结构的限制条件
- チェシャ猫さん(@y_taka_23)
Background
-
- Podの配置を複数のNodeに分散させるだけでなく、そのNodeのトポロジー(AZなど)を考慮した配置をするべき
AZ障害が起きても問題を最小限にするため
现有的“散布”功能
-
- DaemonSet
無駄が多くなる
Pod Anti Affinity
各トポロジーに1Podしか配置できない
ローリングアップデートができない
拓扑传播限制
-
- v1.16でアルファ機能
-
- Nodeを論理的にグルーピングできる
-
- spec.topologySpreadConstraintsに記述
-
- Topology間でPodを分散させる
許容できるPod個数の差を指定
Podのラベルで指定
「強制」か「優先」が選択できる
複数の条件を指定すると条件が満たされずに配置できなくなることがあるので、Skew(個数の差)の調整や優先条件の採用をすることで回避する
介绍KubeWeekly阅读笔记。
- 稲津和磨さん(@ina_ani)、ゼットラボ株式会社
Kubeweekly – Kubernetes周刊
-
- Kubernetesの記事をまとめたニュースレターが毎週更新される
-
- メールアドレスを登録すればメールで受信できる
- 稲津さんが日本語での要約をQiitaに投稿している
使用Terraform和Helmfile部署Cluster Autoscaler,并使用Prometheus进行监控。
- int128さん(@int128)、 NTTデータ
Cluster Autoscaler是什么。
-
- Nodeのリソース(CPUやメモリ)使用状況に応じてNodeの数を増減するツール
-
- Helm Chartで簡単にデプロイできる
GKEとAKSではマネージドサービスで提供されている
AWSではCluster AutoscalerがAuto Scaling Groupを操作するためのIAM Roleが必要
kube2iamかkiamを使って付与する
Helmfile:甲板文件
helm installコマンドではなくhelmfileを使ってデプロイ
複数のHelm Releasesのセットをyamlで宣言できる
環境依存値もkustomizeのように外出しできる
管道
- Kubernetesクラスタレイヤーはhelm、クラウドレイヤーはTerraformで管理
集群自动扩展器的监控
-
- メトリクスをPrometheusで収集
ServiceMonitorを利用するとServiceとPrometheusを紐づけられる
只有Rook v1.1才能做到!基于PVC的分布式存储!
- 小林さん(@tzkb)
车
-
- v1.1が9/13にリリース
PVC-based OSDs/MONsが追加
PVC基于…
-
- Host-based
ホストのディレクトリをホストパスでみる
Nodeにディスクなどが必要
Podは移動不可
PVC-based
MONとOSDにPVC経由でストレージをアタッチ
特別なNodeが不要
Podは移動できる
基于PVC的用例
-
- KuberentesによるStorage as a Serviceの実現に近付く
NodeとVolumeが分離されているため復元力が高い
通知
Japan Rook Meetup開催予定
Kubespray支持Cinder CSI插件的讨论
- 櫛原さん
云服务供应商的外部支持
-
- In-treeのCloud Providerの問題点
remote_ipが取得できない
Openstackで非推奨
OpenstackのCloudControllerManagerが外出しされる
### Cinder CSI Plugin対応
Cinder CSI PluginはNode上で動いている
Cinder API経由でCephにストレージを洗い出す
CentOSだと動かず、CoreOSにしたら動いた
remote_ipが取得できるようになる