monomeg Lab. 第2開発室

プログラミングで学んだことの覚書やら、考察ネタやら、なんでもあり

Certified Kubernetes Administratorに合格しました

業務でKubernetesをインフラとしたアプリケーションを設計したりする機会が増えてきて、これまで騙し騙しで使ってきたKubernetesk8s)の全体像をそろそろ体系的に理解しないとマズいな…と思うようになりました。 そこで同僚からもオススメされたCertified Kubernetes Administrator(CKA: 認定Kubernetes管理者)を受験し、合格しました。そこで、学習に使った教材と申し込みの流れ、実際の試験の流れ、受験後について記しておきたいと思います。

この内容は2024年3月に受験した際の記録です。ちょくちょく試験の手順が更新されているので、最新の公式の受験者向けハンドブックを読み込むことを強く推奨します。

Certified Kubernetes Administrator(CKA)とは

Linux Foundation(LF)が試験を運営、資格の認定を行う「Kubernetes管理者の責任を遂行するスキル、知識、および能力を備えていることを保証」する資格です。

training.linuxfoundation.org

IT系の資格だと、IPAが主催する基本情報技術者などに見られるような多肢選択式か、応用情報技術者のように自由記述式のパターンが想像されます。しかし、CKAでは試験で用意されたVMのシェル上でkubectlなどのツールを操作していき、問題で指定された状態にリソースを構築するという方式です。k8sの公式ドキュメントを試験中に参照できるため、コマンドを暗記する必要はありませんが、短時間での問題解決能力が問われます。大学の授業の最終試験のような感じですね。また、自分のPCに指定されたブラウザをインストールし、オンラインで受験します。出題範囲と割合は、以下のようにk8sの全範囲です。

例えば、kubeadmを使ってクラスターを構築する、といった作業も出題範囲です。Amazon EKSといったマネージドのk8sサービスを使っていると、k8sクラスターの構築は自動で行われるため、自分でクラスターを構築するという作業はまずしません。そのため、これに限らず多くのk8sユーザーにとっては割と歯ごたえのある試験内容となっているのではないでしょうか。

ちなみに、同じLFが認定するk8s関連の資格としては以下があります。

training.linuxfoundation.org

training.linuxfoundation.org

  • Certified Kubernetes Application Developer(CKAD: 認定Kubernetesアプリケーション開発者)

training.linuxfoundation.org

training.linuxfoundation.org

training.linuxfoundation.org

training.linuxfoundation.org

CKAの方がCKADの範囲より広いため、後々CKADを取りたくなった時も簡単に取れるだろうという下心戦略で、CKAを選択しました。

使った教材

Certified Kubernetes Administrator (CKA) with Practice Tests

定番?のUdemyコースです。

www.udemy.com

講師が代表?を務めるKodeKloudというサービス上でのデモ環境が無料でついてくるので、そこで実際にクラスターを操作して演習を行うことができます。学習項目ごとに細かく演習を行うことができ、最後には模擬試験もあるためかなり理解が深まります。この教材を何度も復習するだけで十分でした。 日本語の字幕がついていますが恐らく自動翻訳なので、ところどころ翻訳が怪しいです。英語字幕の方がいいです。

ちなみに、Udemyはしょっちゅうセールを行なっており、通常価格だと¥27,800ですがセールでは¥1,800で購入できます。セール外に購入してはいけません

Killer.sh

CKAを申し込むと無料でついてくる模擬試験です。LFのMy Portalからアクセスできます。

killer.sh

リモートデスクトップのターミナル上のシェルで操作するため、実際の試験環境に限りなく近いです。そのため、操作に慣れるという意味合いで一度は使ってみることを推奨します。しかし、問題が結構難しい(注意事項にも書いてあります😅)ので、あまり解けなくても心配しなくてもよいでしょう。

受験までの流れ

大まかには以下のような流れです。

  1. LPI-JAPANのサイトで申し込み
  2. クーポンコードを取得
  3. LF IDを取得
  4. EDUCO-IDを取得
  5. LFのMy Portalで試験日と試験時刻を予約
  6. 試験開始時刻30分前になったら、My PortalからPSI Secure Browserをインストール
  7. 試験環境の確認
  8. 本人確認と周囲環境の確認
  9. 試験開始

以下、ハマりそうな注意点があったので備忘録として残しておきます。

LPI-JAPANのサイトで申し込み

同じ試験内容でも問題文が英語で書かれているCKAと、日本語で書かれているCKA-JPがあります。

training.linuxfoundation.org

CKA-JPで受験しても、合格後に取得できる証明書ではCKAとなっているので、資格の効力としてはCKAもCKA-JPも全く同一とみなして構わないでしょう。 CKAとCKA-JPのどちらを選択した場合でもLFにて申し込むことができますが、USDで受験料を支払うことになります。CKA-JPの場合、LPI-JAPANにて日本円で受験チケットを購入できるので、こちらから購入しました。

lpi.or.jp

ちなみに、LPI-JAPANでは毎年2〜3月頃に認定k8s資格の受験料が半額になるキャンペーンを実施しているようです。通常価格で購入するとCKAは6万円もするので、自費での受験を考えている方はこの機会を狙うのもアリですね。

試験環境の確認

docs.linuxfoundation.org

上記、公式ハンドブックにも記載されていますが、重要そうな点をいくつか抜粋します。

使用可能なディスプレイは1枚のみ

外部モニターを使うことは可能ですが、その際内蔵ディスプレイはオフにする必要があります。この確認は、ブラウザ上で機械的に確認されます。 ちなみに、ブラウザ上で実行されるリモートデスクトップを操作するため、ディスプレイは最低14インチはないと操作がしづらいです。

マイクとWebカメラの使用を許可

後続の本人確認と周囲環境の確認、試験中の監視で使われるため、マイクとWebカメラを必ず有効化します。デスクトップPCの場合、外部マイクと外部Webカメラは必須です。ラップトップPCの場合、どちらも内蔵されているので外付けのものを用意する必要は特にないでしょう。

本人確認と周囲環境の確認

ここが一番の鬼門です。

本人確認

本人確認書類をWebカメラで直接撮影するか、モバイル端末経由で画像を送信します。本人確認書類としては運転免許証、パスポート、マイナンバーカードなどが使えるそうです。その後、Webカメラで自分の上半身を撮影します。

周囲環境の確認

ここから試験監督とのテキストでのチャットが開始されます。試験監督の指示に従って、Webカメラで自分の座っている周囲を撮影していきます。撮影といっても静止画像を撮影するのではなく、試験監督に映像が常にストリーミング配信されている状態です。そのため、指示に従って逐一、動画撮影をするような感じです。大まかに以下のポイントが確認されます。

  • 天井、壁、床に何も掲示物がないか
  • 机の上、下に物を何も置いていないか
  • 椅子の下に物を何も置いていないか
  • 携帯電話を自分から離れた場所に置いているか
  • 両腕にウェアラブル端末をつけていないか
  • 両耳にイヤホンをつけていないか
  • 飲み物がある場合、ラベルがついていない透明の水であるか

この辺りの指示はCKA-JPだろうが全て英語でなされます。ここまでで、およそ20分程度はかかります。試験監督とのチャットまでに5分くらい待機します。

ちなみに、自分の場合は荷物を片付けるのがスペース上不可能だったので個室を借りて受験しました。ラップトップPCで受験したのですが、PC全体をぐるんぐるんと回さないといけなかったので、結構面倒でした…

試験開始

無事、上記確認が完了すると、問題文とリモートデスクトップが表示され試験開始となります。

他の受験者の方のブログでは、シェルに alias k=kubectl を設定するといいというアドバイスがありましたが、既に設定されていました。また、contextの切り替えコマンドも問題文に記載してありました。

受験後

受験後は、24時間以内に結果がメールで送られてきます。CKAの場合、不合格でももう一度だけ再受験が可能です。

自分の場合、1回目の受験でテザリング接続が切れてしまい、本人確認と周囲環境の確認を再び実施するハメになってしまいました。その間も試験のタイマーは止まっていないため、結局時間が足りずに落ちてしまいました。(リモートデスクトップに再接続できれば、途中までの作業内容から試験再開は可能でした) 再受験でなんとか合格できましたが、安定したインターネット接続は必須ですね。

所感

  • 車輪の再発明とまではいかないが、やはり自分で手を動かして操作した方が理解が深まる
  • 普段はマネージドのk8sクラスターしか操作していないので、今回の資格試験学習でコントロールプレーンのetcd、kube-apiserver、kube-controller-managerやワーカーノードのkubeletの動作を体系的に理解できたのはよかった
  • コンテナの歴史を知れたのは意外な収穫だった
    • Dockerの前にrktがあったとか
  • Dockerとcontainerd、runCの関係を知れた
    • nerdctl、積極的に使っていきたい(?)

WSL1+外部ストレージ+Pipenvの組み合わせでハマった

Introduction

 Pythonの環境構築を行うツールとして,最近はAnacondaやPipenvなど収まるところに収まってきている感があります。比較的シンプルにPython仮想環境の構築を行うことができ,依存パッケージの再現やデプロイもしやすいです。
 ただ,公式ドキュメント含め多くのサイトではMacUbuntu上でPipenvのインストールを行っていることが多く,WSL上でインストールを行った際のトラブルシューティングを紹介しているサイトがあまりありません。Anacondaはロックインがこわいので,個人的にもPipenvをメインにしたのですが,当初は原因不明のエラーに悩まされました。
 最終的には何とか解決したので,ことの経過を書いてみたいと思います。

続きを読む

【追記あり】セリフからミリオンライブのアイドルっぽさを判定(してみたかった)

[2019/06/06 追記]

ライブラリとしてPyTorchを使ったバージョンを公開しました。結果まで含めたJupyter NotebookをGitHubに上げています。また、推定できるアイドルの人数を7人から50人に増やしました。精度は6割程度ですが…

詳細は後日公開したいと思います。

気軽に試したい方は↓へ!

twitter.com

[追記ここまで]


冬休みに実家に帰ったのですが、することもないし外は寒いし、でも時間はたくさんあるから流行りの深層学習(Deep Learning)でもやるか!と思い、近くの書店で「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」を買って、1週間で1冊終わらせることを目標にちまちまとやっていました。

次にコレを使って何か面白いことでもできないかな〜と思っていたところ、この本でも実装したCNNでテキスト分類ができることを知り、それじゃアイマスのセリフ判定でもやってみるか、と思い立ち実際にやってみました。深層学習とは書いてますが、そこまで深くないと思います。

結果から書くと、今の知識だと7人が限界でした…が、7人までなら未知のデータに対して結構な精度(val_acc: 73.6%)で判定できたので顛末を書いてみます。

続きを読む

NumPyの多次元配列でスライスする

NumPy配列を使ったPythonのコードを読んでいたら、いきなり

a[:,0]

というコードが出てきて困惑していました。(aは2次元配列)

:がスライスだということは知っていましたが、「コンマあるし…コロンしか無いし、なんだこれ…」とか思ってました。

調べていくと、どうも多次元の場合はコンマで区切って範囲指定するらしい。また、Python自体のスライス機能で、:のみは全体範囲を意味することを知りました。

インデックス0で、0次元目のスライスを指定し、インデックス1で1次元目のスライスを指定します。

インデックス1に単に0と数字を指定すると、「1次元目のインデックス0の要素」にアクセスします。その場合、スライスしたリストは別インスタンスの1次元配列となります。

>>> import numpy as np
>>> a = np.array([[1,2],[3,4]])
>>> a
array([[1, 2],
       [3, 4]])
>>> a[:]
array([[1, 2],
       [3, 4]])
>>> a[:,0]
array([1, 3])
>>> a[:,0:1]
array([[1],
       [3]])

ややこしい…

「絶対特権主張しますっ!」で学ぶメモリ保護

正確には「IA-32(x86) プロテクトモードにおけるメモリ保護」ですかね…

経緯

数あるデレマス曲の中でも「絶対特権主張しますっ!」という曲は、そのキャッチーなメロディとは対照的に、「『あの女、あの人に優しくされて調子に乗っているけど本命は私なんだからあんまり馴れ馴れしくするな。あの人に近づいて良いのは自分だけ』というようなある種のヤンデレっぽさが垣間見える」曲で知られています。

その歌詞の持つ意味自体は、おおよそ他の2次元アイドルソングでもありそうな内容ではあるのですが、「特権」や「越権」というあまり日常生活では使われない単語がとにかく連発されるため、かなり頭の中に残ります…

そんな感じに頭の中に残った状態で、コンピュータアーキテクチャについて調べていたら「もしかしたら『絶対特権主張しますっ!』でメモリ保護を説明できるんじゃね?」という発想が浮かび、その勢いで家にあった「Linuxのブートプロセスをみる」(KADOKAWA/アスキー・メディアワークス)を読んで、無理やりエントリに落とし込んでみました。

それでは、本題に入ってみます。なお、特に明記しない限り、IA-32 CPU上のLinuxについて説明します。

続きを読む

CentOS7+Phoenix Frameworkで80番ポートを使う方法

タイトルそのまま。デフォルトだと4000番ポートになってるけど、ブラウザでそのままアクセスできるように、80番(http)に変更してみる。

続きを読む

Windows 10にしたらQMediaPlayerがWMV以外再生されなくなったけどとりあえす解決した

タイトルそのまま。厳密にはちょっと違うけど…

事の詳細を記すと、以前まで使用していたノートPCがついに電源すら入らなくなり、「ついに潮時か…」ということで新しくPCを購入しました。 新しいPCでは、Windows 7 Professionalの新規インストールからのWindows 10 Proの無償クリーンインストールを行って、結果的にはWindows 10環境へ完全移行しました。

その後、Windows 10Visual Studio 2013とQt 5.6.1-1 for Windows 64-bit (VS 2013)をインストールし、前回のエントリで使用したプログラムを使って動作検証を行ったのですが、

DirectShowPlayerService::doRender: Unresolved error code 80040266

というエラーが出て動画が再生されなくなってしまいました。その時の顛末と解決法をまとめました。

続きを読む