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
680
cdk8s(+)ではじめるKubernetes
2022/12/14に実施されたJAWS-UG CDK支部 #4の登壇資料です。
horsewin
December 14, 2022
Tweet
Share
More Decks by horsewin
See All by horsewin
コントリビューションWSが与えた 影響に思いを馳せる
horsewin
1
39
Cloud Run jobsをバッチ処理基盤として使いたい
horsewin
0
110
いまならこう作りたい AWSコンテナ[本格]入門ハンズオン 〜2024年版 ハンズオンの構想〜
horsewin
10
3k
「teachme」で作る心地よい ハンズオン体験構築のノウハウ ~ Google Cloudのハンズオンといえばコレ!~
horsewin
0
47
Console-to-Code が出たのでCDK職人を卒業しま◯◯
horsewin
0
670
GAになったGolangでCDKを触ってみよう
horsewin
2
370
Cortana Skill 触ってみた
horsewin
0
48
Alexaスキル開発〜 Node.js から Typescript へ〜
horsewin
0
40
ASK-CLI使っていますか?
horsewin
0
24
Other Decks in Technology
See All in Technology
AWSではじめる Web APIテスト実践ガイド / A practical guide to testing Web APIs on AWS
yokawasa
8
810
AIエージェント元年@日本生成AIユーザ会
shukob
1
270
Amazon Q Developerの無料利用枠を使い倒してHello worldを表示させよう!
nrinetcom
PRO
2
130
ライフステージの変化を乗り越える 探索型のキャリア選択
tenshoku_draft
2
320
自分のやることに価値を見出だせるようになり、挑戦する勇気をもらったベイトソンの考え / Scrum Fest Fukuoka 2025
bonbon0605
0
160
【Forkwell】「正しく」失敗できるチームを作る──現場のリーダーのための恐怖と不安を乗り越える技術 - FL#83 / A team that can fail correctly by forkwell
i35_267
2
150
30→150人のエンジニア組織拡大に伴うアジャイル文化を醸成する役割と取り組みの変化
nagata03
0
400
大規模アジャイルフレームワークから学ぶエンジニアマネジメントの本質
staka121
PRO
3
1.8k
データベースの負荷を紐解く/untangle-the-database-load
emiki
2
570
[OpsJAWS Meetup33 AIOps] Amazon Bedrockガードレールで守る安全なAI運用
akiratameto
1
140
Global Databaseで実現するマルチリージョン自動切替とBlue/Greenデプロイ
j2yano
0
190
Amazon Athenaから利用時のGlueのIcebergテーブルのメンテナンスについて
nayuts
0
130
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
47
7.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
YesSQL, Process and Tooling at Scale
rocio
172
14k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
390
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Six Lessons from altMBA
skipperchong
27
3.6k
Why Our Code Smells
bkeepers
PRO
336
57k
Designing for Performance
lara
605
68k
Mobile First: as difficult as doing things right
swwweet
223
9.5k
Documentation Writing (for coders)
carmenintech
69
4.6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
115
51k
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!