kakakakakku blog

Weekly Tech Blog: Keep on Learning!

git worktree コマンドを使って複数ブランチを並行して操作する

個人で使っている Git リポジトリ(GitHub リポジトリ)の中に「複数ブランチを並行して操作する頻度が高いリポジトリ」がある.例えば,以下のように「4個」のブランチがあり,どれも操作する可能性がある場合など.今までは頻繁にコミット(git commit コマンド)をしてからブランチを切り替えたり,一時的に退避(git stash コマンド)をしていたけど,頻度が高くなると少し面倒だった.

  • master or main ブランチ
  • branch-a ブランチ
  • branch-b ブランチ
  • branch-c ブランチ

git-worktree(git worktree コマンド)

操作を改善するために調べたところ「git-worktree」という機能があった.今まで知らなかった!そして Git 2.5(2015年7月リリース)から使える機能だった📣「git-worktree(git worktree コマンド)」は,複数ブランチを並行して操作するための機能で,ドキュメントには Manage multiple working trees と書いてある.より正確に表現するなら,指定したブランチを指定したディレクトリ(基本的にどこでも!)にチェックアウトできる.最近使っていて本当に便利なので紹介する💡

git-scm.com

git-worktree : 基本操作(list / add / remove

さっそく基本操作から試していく!今回は検証用の Git リポジトリ sandbox-git-worktree を使う.まず git worktree list コマンドを実行すると「作業ツリー」の一覧を確認できる.最初は master 1個となる.

$ git worktree list
/Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-git-worktree  670f24f [master]

次に git worktree add コマンドを実行して「作業ツリー」を追加する.今回は dummy という名前にする.すると,自動的に dummy ディレクトリが作られる.そして dummy ディレクトリに移動すると master ブランチから dummy ブランチに切り替わっている.

$ git branch --show-current
master

$ git worktree add dummy
Preparing worktree (new branch 'dummy')
HEAD is now at 670f24f Initial commit

$ git worktree list
/Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-git-worktree        670f24f [master]
/Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-git-worktree/dummy  670f24f [dummy]

$ tree ../sandbox-git-worktree
../sandbox-git-worktree
├── README.md
└── dummy
    └── README.md

1 directory, 2 files

$ cd dummy

$ git branch --show-current
dummy

不要になったら git worktree remove コマンドを実行して「作業ツリー」を削除できる.

$ cd ../

$ git worktree remove dummy

$ git worktree list
/Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-git-worktree  670f24f [master]

git-worktree : 既存ブランチを使う

git worktree add コマンドは git worktree add <path> <branch> という構文をサポートしているため,既存ブランチを使うこともできる.例えば branch-abranch-bbranch-c が存在する場合,以下のように「作業ツリー」を追加できる.

$ git worktree add wt-branch-a branch-a
$ git worktree add wt-branch-b branch-b
$ git worktree add wt-branch-c branch-c

$ tree ../sandbox-git-worktree
../sandbox-git-worktree
├── README.md
├── wt-branch-a
│   └── README.md
├── wt-branch-b
│   └── README.md
└── wt-branch-c
    └── README.md

3 directories, 4 files

$ git worktree list
/Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-git-worktree              670f24f [master]
/Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-git-worktree/wt-branch-a  670f24f [branch-a]
/Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-git-worktree/wt-branch-b  670f24f [branch-b]
/Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-git-worktree/wt-branch-c  670f24f [branch-c]

git-worktree : .gitignore と組み合わせる運用案

今の例では <path> として指定したディレクトリ名に wt-branch-a のようにプレフィックス wt- を付けていた.なぜ付けたのかと言うと,master ブランチでは以下のように branch-a などのディレクトリが Untracked files として認識されてしまうからで,誤ってコミットしてしまう懸念があった😇

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    wt-branch-a/
    wt-branch-b/
    wt-branch-c/

nothing added to commit but untracked files present (use "git add" to track)

そこで .gitignore ファイルに wt-*/ と指定することにより「作業ツリー」を除外している.git worktree add コマンドでは <path> として Git リポジトリ以外のディレクトリを指定することもできるけど,個人的には使いにくく,今回紹介した構成で運用していて便利に使えている.

まとめ

「git-worktree(git worktree コマンド)」を使うと,Git リポジトリで複数ブランチを並行して操作できる.Git 2.5(2015年7月リリース)から使える機能だったけど,今まで知らなかった!運用として複数ブランチを並行して操作する頻度が高いなら便利だと思う!最高👌

Pandas を基礎から学ぶために「Kaggle Courses」の学習コンテンツを受講した

機械学習コンペティションを開催する Kaggle のサイトを見ていたら「Kaggle Courses」という「学習コンテンツ」が公開されていて,Python や SQL や 機械学習など様々なトピックを学べるようになっていた.なんと無料💰現時点でコースは「計17種類」もある.今回は今まで何となく使っていた「Pandas」を学ぶコースを受講してみた.Pandas 未経験者や Pandas の基本的な機能を一通り学びたい人におすすめ👌

www.kaggle.com

アジェンダ 📊

Pandas コースは「計6個」のレッスンから構成されていて,Pandas の基礎(DataFrameSeries)から,Pandas でのデータ取得や欠損値の取り扱いまで幅広く学べる.そして,一歩一歩「歩幅を小さく」学べるため,理解できずに挫折することなく進められる点も素晴らしい!

  1. Creating, Reading and Writing
  2. Indexing, Selecting & Assigning
  3. Summary Functions and Maps
  4. Grouping and Sorting
  5. Data Types and Missing Values
  6. Renaming and Combining

「Kaggle Courses」のレッスンには大きく「2種類」の学習コンテンツがある.まずは「Tutorial」Notebook を読みながら機能を学べる(座学的な).次に「Exercise」Notebook に実際にコードを実装しながら学ぶ(演習的な).特に「Exercise」ではすぐにコードを実装できるわけではなく,ドキュメントを調べたりもするため,理解を深められる仕組みになっていると思う.また以下のような便利機能も組み込まれているため,答え合わせをしたり,ヒントを確認できたりもする.便利!

q1.check()
q1.hint()
q1.solution()

f:id:kakku22:20210410124713p:plain
Exercise 画面サンプル

1. Creating, Reading and Writing 📊

最初は Pandas の代表的なオブジェクトとして DataFrameSeries の操作から学ぶ.それぞれのコンストラクタに Python の dict を指定してオブジェクトを作ったり,index パラメータを指定したりする.コンストラクタ経由でオブジェクトを作れるのはサクッと試すには便利だけど,実用的ではなく,多くの場面ではデータファイルを扱うため,次のトピックに繋がる.

pd.DataFrame({'Yes': [50, 21], 'No': [131, 2]})
pd.DataFrame({'Bob': ['I liked it.', 'It was awful.'], 'Sue': ['Pretty good.', 'Bland.']})
pd.DataFrame({'Bob': ['I liked it.', 'It was awful.'], 'Sue': ['Pretty good.', 'Bland.']}, index=['Product A', 'Product B'])

次に read_csv() 関数を使ってデータファイルを読み込む.read_csv() 関数には多くのパラメータが実装されているけど,今回は index_col パラメータを使って DataFrame の行ラベルを指定している.また読み込んだデータを head() 関数で表示したり,to_csv() 関数でエクスポートしたりする.

reviews = pd.read_csv('../input/wine-reviews/winemag-data_first150k.csv', index_col=0)

animals = pd.DataFrame({'Cows': [12, 20], 'Goats': [22, 19]}, index=['Year 1', 'Year 2'])
animals.to_csv('cows_and_goats.csv')

2. Indexing, Selecting & Assigning 📊

次に Pandas でデータを取得するテクニックを学ぶ.Pandas では Python の構文と同じようにデータを取得することができるため,簡単ではあるけど,Pandas では iloc() 関数(行と列をインデックスで指定する)や loc() 関数(行と列をラベルで指定する)を使う.例えば loc() 関数を条件を組み合わせるとデータに対して AND (&)OR (|) を使うこともできる.他にも isin() 関数を条件に使った例なども学べる.便利!

reviews.iloc[0]
reviews.iloc[:, 0]
reviews.iloc[1:3, 0]

reviews.loc[0, 'country']
reviews.loc[:, ['taster_name', 'taster_twitter_handle', 'points']]

reviews.loc[reviews.country == 'Italy']
reviews.loc[(reviews.country == 'Italy') & (reviews.points >= 90)]
reviews.loc[(reviews.country == 'Italy') | (reviews.points >= 90)]
reviews.loc[reviews.country.isin(['Italy', 'France'])]

3. Summary Functions and Maps 📊

実際に Pandas でデータを扱う場合,単に取得するだけではなく,サマリを取得したり値を変換したりする場面もある.今度はサマリ関数を学ぶ.例えば describe() 関数を使って最小値や最大値やパーセンタイルをまとめて取得したり,min() 関数や max() 関数を使って個別に取得することもできる.他にも平均値や中央値や標準偏差なども取得できる.SQL のイメージと似ている.

reviews.describe()
#               points          price
# count  129971.000000  120975.000000
# mean       88.447138      35.363389
# std         3.039730      41.022218
# min        80.000000       4.000000
# 25%        86.000000      17.000000
# 50%        88.000000      25.000000
# 75%        91.000000      42.000000
# max       100.000000    3300.000000

reviews.price.describe()
# count    120975.000000
# mean         35.363389
# std          41.022218
# min           4.000000
# 25%          17.000000
# 50%          25.000000
# 75%          42.000000
# max        3300.000000
# Name: price, dtype: float64

後半では map() 関数と apply() 関数を使ってデータを変換する.map() 関数は,Series から取得した単一の値を変換する場合などに使って,apply() 関数は,より広範囲に DataFrame 全体の値を変換する場合などに使う.ここまで学ぶと,データをうまく扱えているような気分になってくる!

reviews.points.map(lambda p: p - review_points_mean)
reviews.apply(remean_points, axis='columns')

4. Grouping and Sorting 📊

今度は groupby() 関数を使って値をグループ化して集計する.以下のように「ポイント値」ごとにカウントしたり,「ポイント値」ごとに「値段」の最小値を取得したりできる.また agg() 関数と組み合わせてデータセットのサマリ情報を取得することもできる.

reviews.groupby('points').points.count()
# points
# 80     397
# 81     692
#       ... 
# 99      33
# 100     19
# Name: points, Length: 21, dtype: int64

reviews.groupby('points').price.min()

reviews.groupby(['country']).price.agg([len, min, max])

同じく SQL のイメージと似ていて,データをソートすることもできる.DataFrameSeries に対して sort_values() 関数を使う.

countries_reviewed.sort_values(by='len')
countries_reviewed.sort_values(by='len', ascending=False)

5. Data Types and Missing Values 📊

今度は Pandas で扱う DataFrameSeries「データ型」を学ぶ.Pandas では dtype プロパティで Pandas が解釈をした「型」を取得できる.以下は DataFrame のカラムごとに型を取得している.

reviews.points.dtype
# int64

reviews.country.dtype
# object

また astype() 関数を使うと,型を変換できる.以下は「ポイント値」int64 から float64 に型変換している.

reviews.points
# 0         87
# 1         87
# 2         87
# 3         87
# 4         87
#           ..
# 129966    90
# 129967    90
# 129968    90
# 129969    90
# 129970    90
# Name: points, Length: 129971, dtype: int64

reviews.points.astype('float64')
# 0         87.0
# 1         87.0
# 2         87.0
# 3         87.0
# 4         87.0
#           ... 
# 129966    90.0
# 129967    90.0
# 129968    90.0
# 129969    90.0
# 129970    90.0
# Name: points, Length: 129971, dtype: float64

後半では「欠損値 (Missing data) : NaN」の取り扱いを学ぶ.データセットはキレイに揃ったデータばかりではないため,Pandas では NaN を取り扱う関数が多く用意されている.例えば isnull()notnull()isna()notna()fillna() など.

reviews.region_2.fillna("Unknown")

6. Renaming and Combining 📊

最後はデータセットの名前を変更したり,複数の DataFrame を結合したり,現場で使えそうなテクニックを学ぶ.まず,DataFrame に対して rename() 関数を使ってカラム名やインデックス名を変更する.ただし,インデックス名を変更する場面は少ないとも書いてあった.

reviews.rename(columns={'points': 'score'})
reviews.rename(index={0: 'firstEntry', 1: 'secondEntry'})

そして,複数の DataFrame を結合するために concat() 関数(データセットをシンプルに結合)と join() 関数(rightinner など軸を指定して結合)と merge() 関数(rightinner など軸を指定して結合)を学ぶ.なお,1番複雑な merge() 関数で実行できることはほとんど join() 関数で実行できるため,Pandas コースでは merge() 関数は割愛されていた.それぞれに細かくプロパティがあるため,あくまで基本的な操作を試すところまでを学べる.

canadian_youtube = pd.read_csv("../input/youtube-new/CAvideos.csv")
british_youtube = pd.read_csv("../input/youtube-new/GBvideos.csv")

pd.concat([canadian_youtube, british_youtube])

left = canadian_youtube.set_index(['title', 'trending_date'])
right = british_youtube.set_index(['title', 'trending_date'])

left.join(right, lsuffix='_CAN', rsuffix='_UK')

まとめ 📊

「Kaggle Courses」Pandas コースを受講してみた.わかりやすく歩幅も小さく学べて素晴らしい学習体験だった.さすが Kaggle👏 Pandas の基本的な機能を一通り学べるため,未経験者にもおすすめできる.なお,最後までレッスンを受講すると証明書も取得できるため,モチベーションを刺激する仕組みになっていた!

f:id:kakku22:20210410124743p:plain

最近は Pandas の機能をより深く学ぶため,並行して「Pandas ライブラリ活用入門」を読んでいる.読み終わったら書評記事を書く予定.今回紹介した Pandas コースよりも詳しくまとまっているため,興味があれば読んでみると良いかと📖

Artifact Hub で Helm chart のテンプレートを検索できる新機能「Helm charts templates explorer」

Helm chart を検索するときなどに使う Artifact Hub で,2021年3月頃から新機能「Helm charts templates explorer」を使える.Twitter @cncfartifacthub では 3/5 にアナウンスされていた📣また GitHub Releases を見ると,3/16 にリリースされた v0.17.0 の Change Logs に含まれていた📣しかし Artifact Hub Blog にはまだ紹介記事は出ていなかった!

Helm charts templates explorer を試す

さっそく「Helm charts templates explorer」を試してできることを確認した.今まで Helm chart のマニフェスト(テンプレート)を確認するときは GitHub リポジトリを直接見ていたけど,Artifact Hub でサクッと確認できるのはとても便利💡

  • マニフェスト(テンプレート)一覧を確認できる
  • マニフェスト(テンプレート)をファイル名 or kind(podrole など)で検索できる
  • values.yaml に設定されたデフォルト値を直接確認できる(マウスホバー)
  • Helm chartBuilt-in Objects を確認できる({{ .Release.Name }}{{ .Release.Service }} など)
  • マニフェスト(テンプレート)をクリップボードにコピー / ダウンロードできる

Jenkins Helm chart サンプル

Jenkins Helm chart をサンプルにキャプチャを貼っておく!今後は積極的に「Helm charts templates explorer」を使っていくぞー!

f:id:kakku22:20210401170232p:plain
右側にある TEMPLATES ボタンを押す

f:id:kakku22:20210401170249p:plain
マニフェスト(テンプレート)一覧を確認する

f:id:kakku22:20210401172655p:plain
マニフェスト(テンプレート)を service で検索しデフォルト値を確認する

Mac で「スクリーンショット設定」を変更する(サムネイル / 影 / 保存場所)

最近 MacBook Pro を新しく移行をしたときに,個人的に必須な「スクリーンショット」関連の設定をした.頻度は低くても毎回調べていたので,今さらながらまとめておく.大きく3点ある!

f:id:kakku22:20210327154317p:plain

1. 画面右下に表示されるサムネイルを無効化する

デフォルト設定だと「スクリーンショット」を取得すると画面右下に数秒サムネイルが表示される.とても邪魔なので無効化する.なお「スクリーンショット」アプリケーションから設定する場合は「オプション」「フローティングサムネールを表示」OFF にすれば OK!

$ defaults write com.apple.screencapture show-thumbnail -bool FALSE

2. 影を無効化する

デフォルト設定だと「スクリーンショット」に影が付いてしまう.ブログに画像を添付するときに邪魔だし,画像サイズ(縦横)も微妙に増えてしまうため,無効化する.

$ defaults write com.apple.screencapture disable-shadow -bool true

3. 保存場所を変更する

デフォルト設定だと「デスクトップ」に全ての「スクリーンショット」が保存される.個人的に「デスクトップ」にファイルを置きたくなく,ブログ用素材として数日残しておくことも多いため,保存場所を変更する(僕は ~/Downloads/screenshots にしている).なお「スクリーンショット」アプリケーションから設定する場合は「オプション」「その他の場所」を設定すれば OK!

$ mkdir ~/Downloads/screenshots
$ defaults write com.apple.screencapture location ~/Downloads/screenshots

2021年2-3月に CKAD と CKA を受験した / 受験 Tips と 勉強方法をまとめる

2021年2-3月に Kubernetes の資格 CKAD (Certified Kubernetes Application Developer)CKA (Certified Kubernetes Administrator) を受験した.3年後に更新をするであろう自分のためにも勉強方法をまとめておく.当たり前だけど,出題に関する内容は書かず,受験 Tips と勉強方法にフォーカスする.なお,試験情報は以下に載っている.一言でまとめると「勉強過程も試験本番もとにかく楽しかったー🙌」かな!

www.cncf.io

www.cncf.io

カリキュラム(出題範囲)は GitHub に PDF として公開されている.

  • CKAD (Certified Kubernetes Application Developer)
    • 13% - Core Concepts
    • 10% - Multi-Container Pods
    • 20% - Pod Design
    • 8% - State Persistence
    • 18% - Configuration
    • 18% - Observability
    • 13% - Services & Networking
  • CKA (Certified Kubernetes Administrator)
    • 25% - Cluster Architecture, Installation & Configuration
    • 15% - Workloads & Scheduling
    • 20% - Services & Networking
    • 10% - Storage
    • 30% - Troubleshooting

github.com

1. 前提と結果 🐳

僕自身,試験を受験をする前から「Kubernetes チョットワカル」レベルだったと思う.具体的には技術講師として,研修で Kubernetes を教える機会もある.ただし,プロダクションワークロードでの大規模な運用経験はないし,Amazon EKS など,フルマネージド EKS クラスターを使うことも多く,知識に偏りはある.例えば,コントロールプレーン関連は詳しくなかったり.よって,操作に慣れている CKAD はほとんど勉強せずに受験したけど,CKA は苦手分野を重点的に勉強してから受験した.結果は以下の通り.

受験日 試験名 得点 結果 バージョン
2021/02/23 CKAD (Certified Kubernetes Application Developer) 93 点 合格 Kubernetes v1.20
2021/03/07 CKA (Certified Kubernetes Administrator) 88 点 合格 Kubernetes v1.20

2. 試験種別 : CKAD-JP や CKA-JP とは 🐳

試験を調べると「CKAD と CKAD-JP」「CKA と CKA-JP」など,日本語に対応した試験が出てくるため,気になる人もいると思う.あくまで「試験当日に試験監督員とのチャットコミュニケーションが日本語でできるかどうか」であり,試験自体の言語設定は試験種別に関係なく自由に変えられるし,合格後に発行される証明書も -JP になるわけではなく,個人的には些細な差だと思う.とは言え,不安があれば -JP で申し込んでおけば良いかと!最初よく理解していなかったこともあり,何も考えずに -JP を申し込んだ.

なお,CKA を受験したときは,日本語ではあるけど,用意されたテキストを一方的にペーストされ続けたり,機械翻訳だと推測できる意味不明な日本語が送られてきたりして,受験するモチベーションが下がるほどに対応が悪かった.別途フィードバックを送る予定.

3. 受験環境 🐳

リモート受験なので整理整頓されている部屋であることは大前提として,以下の環境で受験した.簡単にまとめておく!

最近は AWS 認定試験もリモート受験できるし,また僕自身が実際に経験したわけではないけど,Mac で Karabiner-Elements を使っているとリモート受験に悪影響を及ぼすという情報もあったりするため,基本的に Chrome をインストールする以外はデフォルト設定のままにした MacBook Pro をリモート受験専用に準備してある.また macOS は Big Sur でも問題なく受験できた.

  • MacBook Pro(リモート受験専用)
    • Big Sur
  • HHKB Professional Type-S
  • Magic Trackpad 2
  • サブディスプレイ(Kubernetes ドキュメント参照用)

なお,試験画面 (Exam User Interface) のイメージはドキュメントに載っている.引用して載せておく.基本的にストレスなく使えるけど,残り数分で焦っているときに高速で vim 操作をしていたりすると「遅い!遅いぞ!」と感じる場面はあった.

Exam User Interface - T&C DOCS (Candidate Facing Resources) より引用

4. 個人的な CKAD / CKA 受験 Tips 🐳

4-1. alias k=kubectl

僕自身はもう kubectl ではなく,無意識に k と入力してしまう体になっているため,試験開始と同時に「エイリアス」「コマンド補完」を設定した.コマンドを覚えておく必要はなく,kubectl Cheat Sheet のコマンドをそのままコピペすれば OK!

kubernetes.io

4-2. ブックマーク

ドキュメント「Important Instructions: CKA and CKAD」に書いてある通り,試験画面とは別に「1タブ」を開くことができる.基本的には Kubernetes ドキュメントを開くと思うけど,正式に許可されているドメインは3種類ある.日本語に翻訳された https://kubernetes.io/ja/docs/ も問題なく見れる.ただし,Community Forums https://discuss.kubernetes.io/ は禁止されていて,ドキュメント検索結果には出てくるため,闇雲に検索していると,禁止サイトを開いてしまう危険性もある.だからこそ,確認する可能性のあるドキュメントはブックマークに入れておく.

  • https://kubernetes.io/docs/
  • https://github.com/kubernetes/
  • https://kubernetes.io/blog/

use their Chrome or Chromium browser to open one additional tab in order to access assets at: https://kubernetes.io/docs/, https://github.com/kubernetes/, https://kubernetes.io/blog/ and their subdomains. This includes all available language translations of these pages (e.g. https://kubernetes.io/zh/docs/) No other tabs may be opened and no other sites may be navigated to (including https://discuss.kubernetes.io/).

また,ドキュメントの中に上記ドメイン以外の外部リンクも含まれているため,気を付ける必要がある.全ては受験者の責任となる旨もドキュメントに明記されている.

The allowed sites above may contain links that point to external sites. It is the responsibility of the candidate not to click on any links that cause them to navigate to a domain that is not allowed.

docs.linuxfoundation.org

4-3. Chrome プロファイル

個人的に使っている Google アカウントは,多くの拡張機能やブックマークを設定しているため,試験で使う不安もあり,専用の Chrome プロファイルを用意した.上記のブックマークだけを設定しておけば良くて便利だと思う!

4-4. kubectl -h | grep kubectl

kubectl コマンドのオプションを kubectl -h で確認しながらコマンドを作っていくと,予想以上に時間を浪費してしまう.そこで,以下のように kubectl -h の結果から「コマンド例」を雛形として取得して,ここから修正をしていくと,効率的に進められる.特に時間的に追い込まれる CKAD で使える Tips だと思う.

$ kubectl run -h | grep kubectl
$ kubectl create deployment -h | grep kubectl
$ kubectl create configmap -h | grep kubectl
$ kubectl expose -h | grep kubectl
$ kubectl scale -h | grep kubectl

「コマンド例」は,kubectl Command Reference の右側にも載っているため,ドキュメントから取得する場合は以下をブックマークしておくこともできる.個人的にはスピード重視で kubectl -h | grep kubectl を使ったけど!

kubernetes.io

5. CKAD 勉強方法 🐳

5-1. GitHub : dgkanatsios/CKAD-exercises

受験体験記事を読んでいると,必ずと言っても良いほどに紹介されている「dgkanatsios/CKAD-exercises」リポジトリを2回試した.CKAD を受験しないとしても,kubectl コマンドの操作に慣れるためのコンテンツとして有用だと思う.少し気になった点はプルリクエストを送って,貢献することができた.

なお,Issue なども出ているけど,回答例に多く載っている --restart=Never の必要性に関しては,現状の Kubernetes v1.20 で受験するなら,基本的には不要と言える.kubectl run --restart の値によって PodDeployment を作ることができたため,意図的に Pod を作る目的だけど,Kubernetes v1.18 から考慮する必要がなくなった(正確には generators 関連).

github.com

5-2. Katacoda : CKAD Practice Challenge

無料で試せる Katacoda「CKAD Practice Challenge」も1回試した.サンプル回答も載っているし,Kubernetes クラスターを構築する必要もないし,気軽に試せる点にメリットを感じる.

www.katacoda.com

5-3. A Cloud Guru : Certified Kubernetes Application Developer (CKAD)

最後は A Cloud Guru「Certified Kubernetes Application Developer (CKAD)」も少し試した.講義ビデオはほとんど見てなく,復習をしておきたかった部分だけ「HANDS-ON LAB」という演習機能を使った.

acloud.guru

6. CKA 勉強方法 🐳

6-1. Udemy : Certified Kubernetes Administrator (CKA) with Practice Tests

受験体験記事を読んでいると,よく紹介されている Udemy「Certified Kubernetes Administrator (CKA) with Practice Tests」を購入した.苦手分野の講義ビデオを見たり,「Practice Test」「Mock Exams」という演習機能を使った.定価だと購入するのを躊躇するレベルではあるけど,定期的にセールをしているし,調べればクーポンコードも発行されているため,1500円程度なら良いかなと!

www.udemy.com

6-2. A Cloud Guru : Certified Kubernetes Administrator (CKA)

CKAD と同じく,A Cloud Guru「Certified Kubernetes Administrator (CKA)」も試した.苦手分野の講義ビデオを見つつ,ほとんどは「HANDS-ON LAB」という演習機能を使った.座学的な部分はドキュメントもあるし,書籍もあるし,無理に講義ビデオを見る必要はないと思う.やはり,手軽に試せる Kubernetes クラスターがあることに安心感がある.

acloud.guru

6-3 : GitHub : Kubernetes Network Policy Recipes

個人的に Network Policy に苦手意識があったため,GitHub に公開されている「Kubernetes Network Policy Recipes」を参考にした.詳しくは紹介ブログを書いてある.

kakakakakku.hatenablog.com

6-4 : GitHub : David-VTUK/CKA-StudyGuide

「David-VTUK/CKA-StudyGuide」 リポジトリには,CKA のカリキュラム(出題範囲)をより具体的にリストアップした「RevisionTopics」というコンテンツがあり,全体像と自分自身の知識を比較しながら「どこから勉強すれば良いか?」を確認できて良かった.例えば,CoreDNSCNI だったり,トラブルシューティング時に使えるコマンド例も整理できる.

github.com

6-5 : CKA Self-Study Course

RX-M という企業のサイトに載っている「CKA Self-Study Course」も,CKA のカリキュラム(出題範囲)をより具体的に整理するために便利だった.「David-VTUK/CKA-StudyGuide」 リポジトリよりも「操作」を重視している印象もあり,特に RBAC 関連のコマンド例を整理できた.また最後には「Practice Drill」というクイズも載っているため,理解度確認にも使える.少し誤植もあり,修正したかったけど,GitHub リポジトリなどは見つけられなかった.

rx-m.com

まとめ 🐳

2021年2-3月に Kubernetes の資格 CKAD (Certified Kubernetes Application Developer)CKA (Certified Kubernetes Administrator) を受験した.勉強過程も試験本番もとにかく楽しかったー🙌

残るは CKS (Certified Kubernetes Security Specialist) を受験するぞー!試験問題の日本語化を待ちたい気持ちもあるけど...!

参考記事 🐳

試験を受験することを考える前から読んでいたため,試験前にパラパラと見返す程度ではあったけど「Kubernetes 完全ガイド 第2版」も読んでおくべし!とは言え,情報量は多くなるため,逆引きリファレンス的に活用すると良いと思う.またカリキュラム(出題範囲)にも入っている Multi-Container Pods の理解を深めるなら「分散システムデザインパターン」も参考になる.

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

そして,勉強する Kubernetes クラスターをお手軽に構築するなら kind も使える.合わせて読んでもらえると!

kakakakakku.hatenablog.com

追記

2022年4月に CKS (Certified Kubernetes Security Specialist) にも合格した!詳しくは以下の記事にまとめたー🎉

kakakakakku.hatenablog.com