今回は、IISをKubenetesでロードバランスするサンプルを紹介します。
ただし、Docker Desktop for WindowsではWindowsコンテナでのKubenetes利用はできないため、.NET CoreでLinuxベースのIISを使用します。
環境は前回と同じのものを使用します。
準備
まず、タスクトレイメニューからWindowsコンテナからLinuxコンテナに動作環境を変更します。
次に、Kubenetes機能を有効にする設定を行います。
Kubenetes機能有効化
Dockerイメージ作成
プロジェクトは、Linuxを選択するところ以外、前回紹介した時とほぼ同じで作成します。
Visual Studioの設定
コードの変更も同じ様に、MachineNameを一行追加しています。
index.cshtml
...
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
<p>MachineName = @Environment.MachineName</p>
</div>
Release版に変更しDockerボタンをクリックして、ソリューションを実行します。
ブラウザでマシン名が表示されていることと、Dockerイメージが作成されていることを確認します。
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
webapplication2 latest ce2fb8649a01 45 seconds ago 212MB
Kubenetes
マニフェストファイル作成
Kubenetesのサンプルとして、下記シンプルなマニフェストファイルsample.yamlを作成します。
イメージwebapplication2から2インスタンスのIISサーバーを起動し、フロントにロードバランサーを配置するものです。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: order1
spec:
replicas: 2 # create two webservers.
selector:
matchLabels:
app: sample-iis
template:
metadata:
labels:
app: sample-iis
spec:
containers:
- name: iis-containers
image: webapplication2:latest # pull image.
imagePullPolicy: Never # use local repository.
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: order2
spec:
type: LoadBalancer
ports:
- name: "http-port"
protocol: "TCP"
port: 8080
targetPort: 80
selector:
app: sample-iis
実行
それでは、下記コマンドでIISサーバーを起動してみます。
> kubectl apply -f .\sample.yaml
Pod(kubenetesで起動したIISサーバー)の状態がrunningであることを確認します。
> kubectl get pods
NAME READY STATUS RESTARTS AGE
order1-74ccdf54b6-g2dfb 1/1 Running 0 8s
order1-74ccdf54b6-z5kcn 1/1 Running 0 8s
ブラウザで、http://localhost:8080/にアクセスすると画面が表示されていることを確認できます。
ブラウザ表示
ロードバランサー機能
動作しているサーバーを不調にして、ロードバランサーが機能していることを確認します。
一旦表示された側のマシンを削除してみます。
> kubectl delete pod order1-74ccdf54b6-g2dfb
pod "order1-74ccdf54b6-g2dfb" deleted
> kubectl get pods
NAME READY STATUS RESTARTS AGE
order1-74ccdf54b6-8cqfq 1/1 Running 0 46s
order1-74ccdf54b6-z5kcn 1/1 Running 0 12m
ロードバランサー機能
他方のIISサーバーに切り替わり、サービスが停止していないことが分かります。また、削除したIISサーバーも再度起動されて、二重化システムが保たれています。
その他、コマンド
リソース全削除
今回使用したリソースは、deleteコマンドで削除することができます。
> kubectl delete -f .\sample.yaml
ステータス確認
podの詳細は、describeコマンドで確認できます。エラー時に重宝します。
> kubectl describe pod order1-b77c68665-6lp9v
Name: order1-b77c68665-6lp9v
Namespace: default
Priority: 0
Node: docker-desktop/192.168.65.3
Start Time: Sat, 07 Nov 2020 11:33:03 +0900
Labels: app=sample-iis
pod-template-hash=b77c68665
...
まとめ
今回は、Windows派には触れる機会が少ないのでは、と考えIISでのKubenetesのサンプルを紹介しました。これが、Kubenetes導入のきっかけになれば幸いです。
以上、.NET CoreのIISでKubenetesでした。
コメント