Azure Kubernetes Service へのアプリケーションのデプロイ:パート 2 – 高度な構成
はじめに
この記事で説明する内容
- ConfigMap とは何ですか?
- ConfigMap を備えた Redis マスター
- ファイルからの ConfigMap の作成
- YAML ファイルからの ConfigMap の作成
- ConfigMap を使用して構成データを読み取る
前提条件
- AKS でのアプリケーションのデプロイ |パート – 1
AKS でのアプリケーション デプロイメント パート 1 の前回の記事では、作成した Redis マスター デプロイメントを調べました。デプロイメントと ReplicaSet の関係、および ReplicaSet と Pod の関係について説明しました。このパート 2 では、ConfigMap 経由で提供される環境固有の構成を使用して、この Redis マスターを再作成します。まず、ConfigMap とは何かを見てみましょう。
ConfigMap とは何ですか?
また、サンプル アプリケーションを編集して、ConfigMap を使用して構成の詳細を提供します。 ConfigMap は、構成の詳細を Pod に提供するために使用されるオブジェクトです。これにより、構成設定を実際のコンテナーの外部に保持できます。その後、ConfigMap をデプロイメントに接続することで、これらの構成の詳細をアプリケーションに提供できます。
ConfigMap を備えた Redis マスター
前回の展開では何も問題はありませんでした。実際の使用例では、構成設定を行わずにアプリケーションを起動することはほとんどありません。この場合、ConfigMap を使用して redis-master の構成設定を設定します。 ConfigMap は、各構成に特化したイメージを持たずにコンテナーを構成する移植可能な方法です。これには、コンテナーに設定する必要があるデータのキーと値のペアがあります。 ConfigMap は非シークレット構成に使用されます。 Kubernetes には Secret と呼ばれる別のオブジェクトがあります。シークレットは、パスワードなどの重要なデータを含む設定に使用されます。
この例では、ConfigMap を作成します。この ConfigMap では、キーとして redis-config を構成し、値は次のようになります。
maxmemory: "2mb"
maxmemory-policy: "allkeys-lru"
それでは、この ConfigMap を作成しましょう。 ConfigMap を作成するには 2 つの方法があります。
- ファイルからの ConfigMap の作成
- YAML ファイルからの ConfigMap の作成
それぞれを詳しく見ていきます。
ファイルからの ConfigMap の作成
次の手順は、ファイルから ConfigMap を作成するのに役立ちます。
ステップ 1. ターミナルに code redis-config と入力して、Azure Cloud Shell コード エディターを開きます。次の 2 行をコピーして貼り付け、redis-config として保存します。
maxmemory: "2mb"
maxmemory-policy: "allkeys-lru"
ステップ 2. これで、次のコードを使用して ConfigMap を作成できるようになります。
kubectl create configmap example-redis-config --from-file=redis-config
以下に示すような出力が得られるはずです。
configmap/example-redis-config created
ステップ 3. 同じコマンドを使用して、この ConfigMap を記述することができます。
kubectl describe configmap/example-redis-config 出力は以下のスクリーンショットのようになります。
YAML ファイルからの ConfigMap の作成
このセクションでは、YAML ファイルを使用して、前のセクションの ConfigMap を再作成します。
ステップ 1. まず、以前に作成した ConfigMap を削除します。
kubectl delete configmap/example-redis-config
ステップ 2. 次の行をコピーして、example-redis-config.yaml という名前のファイルに貼り付け、ファイルを保存します。
apiVersion: v1
data:
redis-config: |-
maxmemory 2mb
maxmemory-policy allkeys-lru
kind: ConfigMap
metadata:
name: example-redis-config
namespace: default
ステップ 3. これで、次のコマンドを使用して ConfigMap を再作成できるようになります。
kubectl create -f example-redis-config.yaml 以下に示すような出力が得られるはずです。
configmap/example-redis-config created
ステップ 5. このコマンドは、前のコマンドと同じ出力を返します。
ご覧のとおり、YAML ファイルを使用して、同じ ConfigMap を作成できました。
注意してください。 kubectl get には便利なオプション -o があり、YAML または JSON でオブジェクトの出力を取得するために使用できます。これは、システムに手動で変更を加え、その結果のオブジェクトを YAML 形式で確認したい場合に非常に便利です。次のコマンドを使用して、YAML で現在の ConfigMap を取得できます。
kubectl get -o yaml configmap/example-redis-config
ConfigMap が定義されたので、それを使用してみましょう。
ConfigMap を使用して構成データを読み取る
このセクションでは、ConfgMap から構成を読み取るように redis-master デプロイメントを再構成します。
ステップ 1. まず、次のように ConfigMap を使用するように redis-master-deployment.yaml を変更します。必要な変更については、ソース コードの後で説明します。
注意してください。 GitHub からソース コードをダウンロードした場合は、デプロイメント フォルダーに、redis-master-deployment_ Modified.yaml という名前の AKS 上のアプリケーション デプロイメント ファイルがあり、必要な変更が適用されています。
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: redis-master
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
role: master
tier: backend
replicas: 1
template:
metadata:
labels:
app: redis
role: master
tier: backend
spec:
containers:
- name: master
image: k8s.gcr.io/redis:e2e
command:
- redis-server
- "/redis-master/redis.conf"
env:
- name: MASTER
value: "true"
volumeMounts:
- mountPath: /redis-master
name: config
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 6379
volumes:
- name: config
configMap:
name: example-redis-config
items:
- key: redis-config
path: redis.conf
さまざまなセクションを理解するために、コードをさらに詳しく見てみましょう。
24 ~ 26 行目
これらの行は、Pod の起動時に実行されるコマンドを導入します。この場合、これにより、特定の構成ファイルを指す redis-server が起動されます。
command:
- redis-server
- "/redis-master/redis.conf" 27 ~ 29 行目
実行中のコンテナに構成データを渡す方法を示します。この方法では環境変数を使用します。 Docker 形式では、これは docker run -e "MASTER=true" と同等になります。 --name master -p 6379:6379 -m 100M -c 100m -d Kubernetes /redis:v1。これにより、環境変数 MASTER が true に設定されます。アプリケーションは、その構成の環境変数設定を読み取ることができます。
env:
- name: MASTER
value: "true" 30~32行目
これらの行は、実行中のコンテナーの /redis-master パスに config というボリューム (このボリュームは 39 ~ 45 行目で定義されています) をマウントします。元のコンテナの /redis-master に存在するものはすべて非表示になります。 Docker 用語では、docker run -v config:/redis-master と同等になります。 -e "MASTER=TRUE" --name master -p 6379:6379 -m 100M -c 100m -d Kubernetes / redis:v1.
volumeMounts:
- mountPath: /redis-master
name: config
40 行目
ボリュームに config という名前を付けます。この名前は、このポッドのコンテキスト内で使用されます。
name: config 41 ~ 42 行目
このボリュームを example-redis config ConfigMap からロードする必要があることを宣言します。この ConfigMap はシステムにすでに存在している必要があります。これはすでに定義済みなので、問題ありません。
configMap:
name: example-redis-config 43 ~ 45 行目
ここでは、redis-config キーの値 (2 行の maxmemory 設定) を redis.conf ファイルとしてロードしています。
items:
- key: redis-config
path: redis.conf
ステップ 2. この更新されたデプロイメントを作成しましょう。
kubectl create -f redis-master-deployment_Modified.yml
これにより、以下が出力されるはずです。
deployment.apps/redis-master created
ステップ 3. 構成が正常に適用されたことを確認しましょう。まず、ポッドの名前を取得します。
kubectl get pods
ステップ 4. 次に、ポッドを実行して、設定が適用されたことを確認します。
kubectl exec -it redis-master-<pod-id> redis-cli
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "2097152"
127.0.0.1:6379> CONFIG GET maxmemory-policy
"maxmemory-policy"
"allkeys-lru"
127.0.0.1:6379> exit
要約すると、クラウド ネイティブ アプリケーションの構成における重要かつ注意が必要な部分を実行しました。また、構成を動的に読み取るようにアプリを構成する必要があることにも気づいたでしょう。構成を使用してアプリをセットアップした後、実行中のコンテナにアクセスして、実行中の構成を確認しました。
このパート 2 では、ConfigMap から構成データをロードするように Redis Master を構成しました。次の最後のパート 3 では、エンドツーエンド アプリケーションをデプロイします。
-
Redis HGETALL –ハッシュ値に含まれるすべてのフィールド/値のペアを取得する方法
このチュートリアルでは、キーに格納されているハッシュ値に含まれるすべてのフィールドと値のペアを取得する方法について学習します。このために、Redis HGETALLを使用します コマンド。 HGETALLコマンド このコマンドは、キーに格納されているハッシュ値に含まれるすべてのフィールドとそれに関連する値を返します。キーが存在しない場合は空のリストが返され、キーは存在するがキーに格納されている値がハッシュデータ型ではない場合はエラーが返されます。 RedisHGETALLコマンドの構文は次のとおりです。- 構文:- redis host:post> HGETALL <ke
-
TODOアプリをRedisでリミックスする
この投稿では、RemixとサーバーレスRedis(Upstash)を使用して簡単なTODOアプリを作成します。 Remixはフルスタックのウェブフレームワークであり、ユーザーインターフェースに集中し、ウェブの基本をやり直して、高速で洗練された復元力のあるユーザーエクスペリエンスを提供できます。 リミックスプロジェクトを作成 次のコマンドを実行します: npx create-remix@latest プロジェクトの準備が整いました。それでは、依存関係をインストールして実行しましょう: npm install npm run dev ユーザーインターフェース 簡単なフ