広告

kubernetes – 環境変数の利用

infrastructure as code

今回から、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リソースについて説明していきます。
ここまで読んでいただいて、お疲れ様でした。

コメント

タイトルとURLをコピーしました