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
cdk8s(+)ではじめるKubernetes
Search
horsewin
December 14, 2022
Technology
1
620
cdk8s(+)ではじめるKubernetes
2022/12/14に実施されたJAWS-UG CDK支部 #4の登壇資料です。
horsewin
December 14, 2022
Tweet
Share
More Decks by horsewin
See All by horsewin
Cloud Run jobsをバッチ処理基盤として使いたい
horsewin
0
56
いまならこう作りたい AWSコンテナ[本格]入門ハンズオン 〜2024年版 ハンズオンの構想〜
horsewin
10
2.4k
「teachme」で作る心地よい ハンズオン体験構築のノウハウ ~ Google Cloudのハンズオンといえばコレ!~
horsewin
0
32
Console-to-Code が出たのでCDK職人を卒業しま◯◯
horsewin
0
570
GAになったGolangでCDKを触ってみよう
horsewin
2
320
Cortana Skill 触ってみた
horsewin
0
20
Alexaスキル開発〜 Node.js から Typescript へ〜
horsewin
0
29
ASK-CLI使っていますか?
horsewin
0
17
VUIアプリ(Alexaスキル)の苦悩、自動テストをGoogle Homeが解決してくれる?
horsewin
0
12
Other Decks in Technology
See All in Technology
Flutterによる 効率的なAndroid・iOS・Webアプリケーション開発の事例
recruitengineers
PRO
0
120
あなたの知らない Function.prototype.toString() の世界
mizdra
PRO
1
260
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
1
120
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
310
AIチャットボット開発への生成AI活用
ryomrt
0
170
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
910
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
29
13k
20241120_JAWS_東京_ランチタイムLT#17_AWS認定全冠の先へ
tsumita
2
300
Amplify Gen2 Deep Dive / バックエンドの型をいかにしてフロントエンドへ伝えるか #TSKaigi #TSKaigiKansai #AWSAmplifyJP
tacck
PRO
0
390
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
2
460
Platform Engineering for Software Developers and Architects
syntasso
1
520
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
33
2.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Building Your Own Lightsaber
phodgson
103
6.1k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
130
Code Reviewing Like a Champion
maltzj
520
39k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Side Projects
sachag
452
42k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
A Tale of Four Properties
chriscoyier
156
23k
Transcript
cdk8s(+)ではじめる Kubernetes Atsushi Umakatsu (horsewin)
• 金融システムのエンジニア • 書籍の執筆にも積極的 • 最近興味があるのはNyantech Atsushi Umakatsu (horsewin)
Full-Stack engineer Personality
RECETTE おしながき • cdk8sとは? • cdk8s+? • cdk8s(+)でできること、できないこと • DEMO
k8s要素は 少ないよ!
cdk8sとは?
cdk8sとは?
cdk for Kubernetesとは?
cdk8sはCDKでKubernetesを実践できるOSS • beta version: 2020年5月 • 最初のタグは2020年2月 • 5月にニュースリリース(*1) •
一般公開(GA): 2021年10月(*2) • CDK用語のL1 Constructsの立ち位置 (*1): https://aws.amazon.com/about-aws/whats-new/2020/05/introducing-the-cdk-for-kubernetes-a-new-software-development-framework-and-open-source-project-for- de fi ning-kubernetes-applications-using-code/ (*2): https://aws.amazon.com/about-aws/whats-new/2021/10/cdk-kubernetes-cdk8s-available/
概念図 • App • cdk8sアプリケーションの最上位要素 • Chartとの依存関係や各Chartのパラメータを定義 • Chart •
自動生成されるYAMLの単位 • Chartの入れ子は別YAMLとして生成 • Constructs • マニフェストを構成するコンポーネント
使えるcdkコマンド • cdk8s init • cdk8s import • cdk8s synth
• cdk8sは記述したプログラムコードを元にk8sマニフェスト(YAML)を生成 • 生成したYAMLをkubectlコマンドで直接Kubernetesコントロールプレーンに反映 k8sへの適用方法
• cdk8sは記述したプログラムコードを元にk8sマニフェスト(YAML)を生成 • 生成したYAMLをkubectlコマンドで直接Kubernetesコントロールプレーンに反映 k8sへの適用方法 AWSのアイコンが出てこない?
AWSに限らずにマニフェストを展開可能
cdk8s+とは?
cdk8s+を使うとよりシンプルにk8sを記述 • beta version: 2020年11月 • 2020年11月のCDK EKS Construct Libraryニュースリリースの中で登場(*1)
• 一般公開(GA): 2022年10月(*2) • CDK用語のL2 Constructsの立ち位置 (*1): https://aws.amazon.com/about-aws/whats-new/2020/11/aws-cdk-eks-construct-library-available-developer-preview/ (*2): https://aws.amazon.com/about-aws/whats-new/2022/10/cdk-kubernetes-cdk8s-availability-manifest-validation-support/
CDKとの対比(cdk8s+ GA前) 抽象化層の不在 (注意): ベータバージョンはありましたが一般公開したもので構成するという考えで構図を書いています Helmチャート が比較的近い
CDKとの対比(cdk8s+ GA)
cdk8s vs cdk8s+ cdk8s cdk8s+
cdk8s vs cdk8s+ cdk8s cdk8s+ k8sのマニフェストを 意識したJSON構造 selectorも含める 詳細な設定記述が必要
cdk8s vs cdk8s+ cdk8s cdk8s+ k8sのマニフェストを 意識しない記述 selector定義がなくても自 動でPodを選択して起動
cdk8s vs cdk8s+ • 生成されるYAMLの違いに注目(左:cdk8s、右:cdk8s+)
cdk8s vs cdk8s+ • 生成されるYAMLの違いに注目(左:cdk8s、右:cdk8s+) cdk8s+では多くの設定がデフォルト値として 設定された状態でYAMLが生成される
cdk8s(+)で できること、できないこと
cdk8s(+)で できること、できないこと
プログラマブルなマニフェスト生成 • CDKで対応しているプログラミング言語を利用してk8sマニフェストの作成が可能 • 静的型付けがあるTypeScript、Golangなどであれば型チェックのフォローも強固 • IDEの強力な補完も利用可能 • cdk8s+ではデフォルト値をうまく活用し最小限の設定でマニフェストの作成可能 •
マニフェスト生成(cdk synth)コマンド実行時の環境変数の切り替えで環境ごとのマニ フェストの生成が可能 • kptやKustomizeで実施していたベースマニフェストと環境値の統合も可能
Helmとの連携 • Helm(*1) • k8s用に構築されたソフトウェアを検索、共有、使用するための方法 • k8sアプリケーションのコンポーネント(nginx、redisなど)を提供するツール • Helmリポジトリに公開されているHelmチャートをcdk8sから直接利用できる (*1)
https://helm.sh/ja/
CDK本線と連携 • CDKで生成したEKSから直接利用が可能 • https://docs.aws.amazon.com/cdk/api/v1/docs/aws-eks-readme.html#cdk8s- charts • cdk deployによって、クラウドリソースの更新とk8sマニフェストの適用を同時に実施 •
内部的にはLambdaでkubectlを叩いてk8sリソースを更新
cdk8s(+)で できること、できないこと
cdk8s単体ではデプロイはできない • あくまでk8sマニフェスト生成にフォーカスしている • CDKの体験の良さとしてはIDEサポート以外にもシンプルにデプロイできる、ホット リロードなどもあると考えている • CDKで生成/取込したEKSと統合しなければ cdk deployはできない
• GitOpsのようなアプローチにはマッチしている • cdk8sの責務としてk8sマニフェスト生成までという割り切りは非常に共感 • その先はk8sの世界観や開発者体験に委ねるという思想
実装と実態の剥離の検知 • CDKの実行環境となるCloudFormationには、適用したコードと実際デプロイされているリソー スの剥離を検知するDrift detection機能がある • cdk8s、cdk8s+はk8sクラスタに展開されるワークロードの内容を記述している • AWSリソースの内容を記述しているわけではないため、CloudFormationは使えない •
実際にk8sクラスタにデプロイされている内容は別の方法で確認が必要 • kubectlコマンド(kubectl get podsなど) • EKSではあればAWS マネジメントコンソール • ArgoCDのダッシュボード等
その他 • 抽象化されているため予想外のオプションが設定されることがある • 例:Pod Security ContextでPodが起動しない • CIS for
Kubernetesではルート権限によるコンテナ起動は避けるべきと推奨 • cdk8s+では意識せずともsecurityContextにrunAsNonRootが指定 • runAsUserを明示的に指定しなければAdmission Controllerで拒否されることも
DEMO
まとめ • cdk8sはCDKでKubernetesマニフェストを生成可能としたソフトウェア • CDKのコーディング体験でk8sのマニフェストの生成が可能 • L1 ConstructsとしてKubernetesコンポーネントを記述可能 • cdk8s+はcdk8sが提供しているライブラリ
• L2 Constructsとして直感的にKubernetesコンポーネントを記述可能 • CDKでEKSを扱うプロダクトでは集約した管理、デプロイも可能 • ただし責務分離を意識しデプロイはKubernetesのプラクティスを適用をオススメ
Thank you a lot!