今回は、IISをKubenetesでロードバランスするサンプルを紹介します。
ただし、Docker Desktop for WindowsではWindowsコンテナでのKubenetes利用はできないため、.NET CoreでLinuxベースのIISを使用します。
環境は前回と同じのものを使用します。
準備
まず、タスクトレイメニューからWindowsコンテナからLinuxコンテナに動作環境を変更します。
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 212MBKubenetes
マニフェストファイル作成
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.yamlPod(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でした。
コメント