CKA, CKADを受ける人はほぼ100%使用しているんじゃないかというほど有名な教材がこちらです。
めちゃくちゃ高いですが、だいたいセールで9割引きしてるらしいので数千円で買えるんじゃないかと思います。筆者は会社から払い出されているudemyのアカウントを利用して無料で受講しています(ありがたい)。
コースの内容
コースの内容は基本的に
レクチャー → 実践問題 → 解説
という構成になっています。
CKAを受講していた時は動画すべてをチェックしていましたが、今回はCKAとかなり中身がかぶっているのと、業務でそれなりに知識がついていることから問題をひたすら解くスタイルで進めていきます。
本記事の内容
この記事では、udemy
#1 Introduction
#2 Core Consepts
#3 Configuration
を受講していた中で気になったところをメモしていきます。
勉強記
kubectl edit
podに対してkubectl editで編集する場合、編集可能な項目は以下のみ
- spec.containers[*].image
- spec.initContainers[*].image
- spec.activeDeadlineSeconds
- spec.tolerations
- spec.terminationGracePeriodSeconds
ハイライトしたimage, tolerationsが編集できる、と覚えておけばよさそう。
それ以外の箇所を編集したい場合は、
kubectl get po <pod name> -o yaml > definition.yaml
で一旦マニフェストファイルを書き起こして、マニフェストファイル自体を修正する。
kubectl applyで更新できない場合はkubectl replace –forceで強制更新する。
deploymentはどのような値であっても編集することが可能。
nodeの情報もkubectl editで編集することが可能。
docker
dockerコマンドに慣れていないので基礎的なコマンドを理解できていなかった。
使用可能なイメージを知りたいとき
docker images
名前を付けてイメージをビルドしたいとき
-t は tag かな?
docker build -t <container name> <directory>
ホストの8282ポートへのアクセスをコンテナの8080ポートに流すオプション付きでコンテナを立ち上げたいとき
-p は port
docker run -p 8282:8080 <image name>
コンテナOSのイメージを確認したいとき
docker run -it <image>:<tag> /bin/bash
でコンテナを立ち上げて
cat /etc/os-release
でOSを確認する
ENTRYPOINT/CMD
ENTRYPOINTとCMDはコンテナに関する用語。Dockerfileに記述される。
ENTRYPOINT
- コンテナが実行されるときに最初に実行されるメインプロセスを指定する
- 基本的には必ず実行するものだが、
docker run
コマンドの--entrypoint
フラグでオーバーライドすることもできる
CMD
ENTRYPOINT
が指定されていない場合に実行されるデフォルトコマンドを指定するCMD
はdocker run
コマンドの引数でオーバーライドすることができる
例
# ENTRYPOINTで指定された部分が必ず実行される
ENTRYPOINT ["python", "app.py"]
# CMDで指定された部分はデフォルトの引数
CMD ["--default-arg"]
この場合、docker run myimage
と実行すると、python app.py --default-arg
が実行される。docker run myimage --custom-arg
と実行すると、python app.py --custom-arg
が実行される。
command/args
commandとargsはPodに関する用語。マニフェストファイルに記述される。
command
- Podが起動する際に実行されるコマンドを指定する
command
はコンテナイメージのENTRYPOINT
を上書きするcommand
はKubernetesのPod定義におけるspec.containers.command
フィールドに設定する
args
command
に渡される引数を指定するargs
はコンテナイメージのCMD
を上書きするargs
はKubernetesのPod定義におけるspec.containers.args
フィールドに設定する
例
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: myimage
command: ["sleep"] # ENTRYPOINTを上書き
args: ["3600"] # CMDを上書き
secrets
kubectl create secret generic <secrets name>
で作成する。文字列を直接埋め込むときは
--from-literal=DB_Host=sql01 \
--from-literal=DB_User=root \
--from-literal=DB_Password=password123
のように--from-literal
フラッグを使用して指定する
これらの内容はBASE64でエンコードされる
security context
securityContext
セクションのcapabilities
フィールドを利用することで、プロセスに対してrootユーザーの全権を渡すことなく特定の権限を与えることができる。
→これ、コンテナ内rootとかコンテナ外rootがあってややこしい
あんまり分かってないので深追いはしない。
とりあえず、securityContext
セクションのcapabilities
フィールドを利用すればコンテナ内のユーザーの権限を追加できる、までわかればOKということにする。
ちなみに、NET_ADMINはネットワークインターフェースやルーティングテーブルに対する権限、SYS_TIMEはシステムの時刻を変更する権限。
コンテナ内に範囲を限定して権限を与えてるのか、ホスト全体に対する権限が与えられてるのかはコンテナランタイムなどの設定によるらしい。こちらも深追いはしない。
taint/tolarance
コマンドでノードに対してtaintを設定できる
kubectl taint node <node name> KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N
podに対するtolerationはコマンドでは設定できないので、マニフェストファイルを修正する。
kubectl editでもよい。
operator
のデフォルトはEqual
tolerationがtaintと合致するのは、key
とeffect
が同一であり、さらに下記の条件のいずれかを満たす場である
operator
がExists
(value
を指定すべきでない場合)operator
がEqual
であり、かつvalue
が同一である場合