Linux アプリをデプロイする
適用対象: AKS on Azure Stack HCI 22H2、Windows Server 上の AKS
このガイドでは、Azure Arc によって有効になっている AKS の Kubernetes クラスターに、Web フロントエンドと Redis データベース インスタンスを含むマルチコンテナー アプリをデプロイする方法について説明します。また、アプリをテストしてスケーリングする方法についても説明します。
この攻略ガイドは、Kubernetes の概念についての基礎知識が前提となっています。 詳細については、「 Kubernetes の主要概念を参照してください。
開始する前に
次の前提条件を満たしていることを確認します。
- 少なくとも 1 つの Linux ワーカー ノードが稼働している AKS クラスター。
- クラスターにアクセスするための kubeconfig ファイル。
- AksHci PowerShell モジュールがインストールされます。 詳細については、 Install-AksHci を参照してください。
手順を実行する場合:
- 管理者特権で開かれた PowerShell ウィンドウでコマンドを実行します。
- OS 固有のワークロードが適切なコンテナー ホストに配置されていることを確認する。 Kubernetes クラスターに Linux と Windows ワーカー ノードが混在している場合は、ノード セレクターまたはテイントと容認を使用できます。 詳細については、ノード セレクター、テイントと容認の使用に関するページを参照してください。
Note
ネットワークを別のターゲット クラスターと共有するターゲット クラスターをデプロイすると、ロード バランサーの IP アドレスの競合が発生する可能性があります。
IP アドレスの競合は、同じ AksHciClusterNetwork
オブジェクトを共有するターゲット クラスターで異なるポートを使用する 2 つのワークロードをデプロイした場合に発生する可能性があります。 IP アドレスとポート マッピングが HA プロキシ内で割り当てられる方法により、重複する IP アドレスが割り当てられる可能性があります。 この場合、ワークロードを再デプロイするまで、一方または両方のワークロードでランダムなネットワーク接続の問題が発生する可能性があります。 ワークロードを再デプロイする場合は、同じポートを使用して各ワークロードにサービス IP アドレスを割り当てるか、異なる AksHciClusterNetwork
オブジェクトを使用するターゲット クラスターにワークロードを再デプロイできます。
アプリケーションのデプロイ
Kubernetes のマニフェスト ファイルでは、どのコンテナー イメージを実行するかなど、クラスターの望ましい状態を定義します。 このチュートリアルでは、マニフェストを使用して、 Azure 投票アプリを実行するために必要なすべてのオブジェクトを作成。 このマニフェストには、2 つの Kubernetes デプロイが含まれています。1 つはサンプルの Azure Vote Python アプリ用、もう 1 つは Redis インスタンス用です。 2 つの Kubernetes サービスも作成されます。Redis インスタンスの内部サービスと、インターネットから Azure Vote アプリにアクセスするための外部サービスです。
azure-vote.yaml という名前のファイルを作成し次の YAML 定義をコピーして貼り付けます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-back
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-back
template:
metadata:
labels:
app: azure-vote-back
spec:
nodeSelector:
"beta.kubernetes.io/os": linux
containers:
- name: azure-vote-back
image: redis
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 6379
name: redis
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-back
spec:
ports:
- port: 6379
selector:
app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-front
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-front
template:
metadata:
labels:
app: azure-vote-front
spec:
nodeSelector:
"beta.kubernetes.io/os": linux
containers:
- name: azure-vote-front
image: <path to image>/azure-vote-front:v1
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 80
env:
- name: REDIS
value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-front
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: azure-vote-front
kubectl apply
コマンドを使用してアプリをデプロイし、YAML マニフェストの名前を指定します。
kubectl apply -f azure-vote.yaml
次の出力例は、正常に作成されたデプロイとサービスを示しています。
deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created
アプリをテストする
アプリが実行されると、Kubernetes サービスによってアプリ フロントエンドがインターネットに公開されます。 このプロセスが完了するまでに数分かかることがあります。
進行状況を監視するには、--watch
引数と共に kubectl get service
コマンドを使用します。
kubectl get service azure-vote-front --watch
最初に、azure-vote-front サービスの EXTERNAL-IP は保留中として表示されます
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 22m
EXTERNAL-IP アドレスが pending から実際のパブリック IP アドレスに変更された場合は、CTRL-C を使用してkubectl
ウォッチ プロセスを停止します。 次の出力例は、サービスに割り当てられている有効なパブリック IP アドレスを示しています。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 24m
Azure Vote アプリが動作していることを確認するには、Web ブラウザーを開いてサービスの外部 IP アドレスにアクセスします。
アプリケーション ポッドをスケーリングする
Azure Voting App フロントエンドと Redis インスタンスの 1 つのレプリカを作成しました。 ご利用のクラスターに存在するポッドの数と状態を確認するには、kubectl get
コマンドを使用します。
kubectl get pods -n default
次の出力例を見ると、フロントエンド ポッドとバックエンド ポッドが 1 つずつ存在することがわかります。
NAME READY STATUS RESTARTS AGE
azure-vote-back-6bdcb87f89-g2pqg 1/1 Running 0 25m
azure-vote-front-84c8bf64fc-cdq86 1/1 Running 0 25m
azure-vote-front デプロイのポッド数を変更するには、kubectl scale
コマンドを使用します。 次の例では、フロントエンド ポッドの数を 5 に増やしています。
kubectl scale --replicas=5 deployment/azure-vote-front
kubectl get pods
をもう一度実行して、追加のポッドが作成されたことを確認します。 しばらくすると、追加したポッドがクラスターで利用できる状態になります。
kubectl get pods -n default
Name READY STATUS RESTARTS AGE
azure-vote-back-6bdcb87f89-g2pqg 1/1 Running 0 31m
azure-vote-front-84c8bf64fc-cdq86 1/1 Running 0 31m
azure-vote-front-84c8bf64fc-56h64 1/1 Running 0 80s
azure-vote-front-84c8bf64fc-djkp8 1/1 Running 0 80s
azure-vote-front-84c8bf64fc-jmmvs 1/1 Running 0 80s
azure-vote-front-84c8bf64fc-znc6z 1/1 Running 0 80s