2023/2/28開催Shinjuku.ts#2LT資料
k8sマニフェストをTypescriptで管理したい― cdk8s+を導入してみました ―2023/2/28komago
View Slide
自己紹介・komago・2017年フォルシア入社・旅行商品のSaaS型サービス「webコネクト」のアプリ開発を担当・k8sに興味があり、SRE的なこともやっています
アジェンダ・きっかけ・cdk8s+について・cdk8s+を使ってみる・cdk8s+を導入してみてよかったこと・cdk8s+で少し気になったこと・最後に
きっかけ・フォルシアではアプリエンジニアがk8sの運用を行っている。・k8sマニフェスト(yamlの定義ファイル)を触るのは、アプリエンジニアにとって心理的負担。・設定漏れやインデントのずれでうまく反映されないこともしばしば。。・プロダクトの成長に伴い定義ファイルも増加。
きっかけk8sマニフェストの例・k8sのDeploymentリソースの最もシンプルな設定例(nginxのPodが3つ作成される)・k8sに慣れていないと、何がなんだか。見よう見まねで作ってもうまく動かない。。
Typescriptをビルドしてyamlにできれば。。・アプリ開発では主にTypescriptを利用している。・Typescriptでk8sの定義を書いて、ビルドしてyamlにできれば。。・と思ったら、願ったり叶ったりなツールがあった!
cdk8s+・AWS CDK : 使い慣れたプログラミング言語でAWSリソースを定義するためのフレームワーク。・cdk8s (CDK for Kubernetes)は、AWS CDKの考え方をk8sのリソース定義に取り入れたツール。・cdk8s+はcdk8sよりも抽象化されており、k8sの定義をよりシンプルに記述できる。(2022/10に一般利用開始)
cdk8s+・Typescriptのほか、Go、Python、Javaに対応している。・AWS CDKではAWSリソースのデプロイまでセットになっているが、cdk8sではプログラミング言語で書いたファイルをビルドして、yamlのk8sマニフェストを作成するところまで。(デプロイは行わない)・k8s環境へのデプロイは、cdk8sは使わずにこれまで通りの方法で行う。
cdk8s+を使ってみる・必要最小限の設定・型に守られている安心感・環境ごとの設定はconfigファイルに切り出せばよい
cdk8s+を使ってみる
cdk8s+を使ってみる実際のビルド成果物・設定したかった項目が設定されている。・設定していない項目もデフォルト値が設定されるので、設定すべき項目に気付ける。
cdk8s+を導入してみてよかったこと・k8sマニフェストの細かいルールを気にしなくてよい。・アプリ開発でTypescriptを使っているので、k8sの定義を触るハードルが下がる。・型に守られるので、設定ミスが起きにくい。・環境ごとの設定の違いをconfigファイルに切り出しやすい。・ビルド生成物であるyamlのk8sマニフェストもGit管理すると、スナップショットテストになる。
cdk8s+で少し気になったこと・作成済みのcdk8s+の設定変更にはk8sの知識があまり要らないが、新たにcdk8s+でk8sリソースの定義をするにはある程度のk8sの知識が必要。
最後に・中小規模のアプリでは、専任のSREではなくアプリエンジニアがk8s運用を行うというケースが少なくないはず。・全てのアプリエンジニアがk8sに詳しくなるのは現実的ではないし、他にやるべきこともたくさんある。・慣れ親しんだTypescriptでk8sリソースの定義を管理できるcdk8s+は、アプリエンジニアの心強い味方!