.NET CoreのIISでKubenetes

開発
buzcajunによるPixabayからの画像

※この記事にはプロモーションが含まれています。

今回は、IISをKubenetesでロードバランスするサンプルを紹介します。
ただし、Docker Desktop for WindowsではWindowsコンテナでのKubenetes利用はできないため、.NET CoreでLinuxベースのIISを使用します。
環境は前回と同じのものを使用します。

スポンサーリンク
スポンサーリンク

準備

まず、タスクトレイメニューからWindowsコンテナからLinuxコンテナに動作環境を変更します。

次に、Kubenetes機能を有効にする設定を行います。

Dockerイメージ作成

プロジェクトは、Linuxを選択するところ以外、前回紹介した時とほぼ同じで作成します。


コードの変更も同じ様に、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でした。

コメント