今回から、k8sのデータ保持の役割を担うリソースについて、説明していきたいと思います。
ただ、本番説明する前に、k8sにおいて、環境変数の使い方を前提知識として説明させていただきます。
k8sの環境変数の利用
OSに知識のある方がご存じの通り、OSはアプリケーションを使うなどによって、環境変数(OS内でどこでも使える変数)を設定する必要があります。
コンテナも同じく、環境変数を使う場面は少なくありません。
k8sでは、Pod(Deployment)のmanifestの設定箇所に、spec.containers[].env[]
やenvFrom
を設定することができます。
これらの設定に、以下のものを渡すことができます。
- 静的設定:直接変数名
name
と値value
を設定する - Podの情報:Pod自身の情報をそのまま環境変数に渡すことが可能
- コンテナの情報:Pod内のコンテナの情報
- Secret リソースの機密情報
- ConfigMap リソースの情報
静的設定環境変数例
# 上略
# 環境変数にタイムゾーンの設定をする
env:
- name: TZ
value: Asia/Tokyo
Pod情報環境変数例
# 上略
# PodのnodeNameを環境変数にする
env:
- name: NODE_NAME
valueFrom:
fieldRef: # Pod情報を取得するには、この引用を使う必要がある
fieldPath: spec.nodeName
コンテナ情報環境変数例
# 上略
# コンテナのrequests.cpuの設定値を環境変数にする
env:
- name: CPU_REQUEST
valueFrom:
resourceFieldRef: # コンテナ情報を取得するには、この引用を使う必要がある
containerName: nginx-container # コンテナを指定
resource: requests.cpu
※ Podやコンテナの情報を確認するにはkubectl get pods -o yaml
を使ってください。
k8s環境変数の癖
manifestで定義した環境変数をコンテナ起動のコマンドに使用する場合、$(変数名)
で使わなければなりません。
※Linuxの場合では、環境変数を使う場合、${変数名}
で使います。
すごく癖になるものですが、ぜひ覚えておいてください。
よく使うパターンとしては、コンテナの起動コマンドですね。(Docker関連知識)
以下の例を使って説明します。
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod # Pod名
labels:
app: myapp
spec:
containers: # コンテナの設定
- name: myapp-container # コンテナ名
image: busybox # コンテナを作成するためのイメージ
command: ["echo"] # コンテナ起動コマンド
args: ["$(TESTENV)"] # $()で使う
env:
- name: TESTENV
value: "hello world"
ポイント:
manifestの起動コマンドはdockerfileの起動コマンドを上書きするようになっている。
- manifestの
command
はdockerfileのENTRYPOINT
を上書きする - manifestの
args
はdockerfileのCMD
を上書きする
最後に
次回から、Config&Storageリソースについて説明していきます。
ここまで読んでいただいて、お疲れ様でした。
コメント