Minikube + ASP.NET Core でHello Worldする
概要
- Minikubeを使ってLocalで ASP.NET Core 2.1のコンテナを動かす
- Kubernetesのコマンドに色々触れる
- AKSがGAしたので、AKSを使ってもいいが、最初はローカルで
( kubectl
は「きゅーぶこんとろーる」と読んでいる人が多いのでminikube
も個人的には「みにきゅーぶ」と読んでいる(「くーべ」と言っている人を否定しているわけではない)
使用環境
- Ubuntu 16.04LTS
- Docker(Install済み)
- dotnet core SDK(Install済み)
環境準備
1. Minikubeをインストール
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
VirtualBoxが入っていない場合は入れておく。
下記のコマンドでminikubeを起動する。
minikubeのデフォルトのハイパーバイザーはVirtualBoxなので、下記のコマンドでは勝手にVirtualBox上にminikubeが起動する。もし宗教上の理由などでO社製品が使えないといったタブーがある場合はKVMを使って起動のオプションを変えてやるといいかもしれない。
minikube start
2. Minikubeを起動させる
kubectlはこの記事を試す前に全然別のタイミングで入れたので、kubectlが入っていない場合はここを参考に入れておく。
ちなみにkubectlはクラウドネイティブ世代のSSHと言われている。
我々がSSHでリモートのLinuxサーバや仮想マシンにアクセスしてきたように、
クラウド上にあるkubernetesにアクセスして管理するためにkubectlを使うとのこと。
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
kubectl expose deployment hello-minikube --type=NodePort
kubectl get pod
> NAME READY STATUS RESTARTS AGE
> hello-minikube-6c47c66d8-2dldq 1/1 Running 1 1m
PodというのはKubernetesを扱う上ではよく出てくる言葉で概念は知っておいたほうがいい。
どのレイヤーを抽象化しているのかこちらの図が非常にわかりやすい。
アプリを作って動かす
1. dotnetのアプリのコンテナ作成する
newしてbuildしてrun出来るアプリを作る。手元に何も無ければ以下を実行。
dotnet new sampleapp
cd sampleapp
dotnet build
dotnet run
これで普通のASPのhello worldページが表示されるはず。
Dockerfileを作る。
FROM microsoft/dotnet:2.1-sdk-alpine AS build
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM microsoft/dotnet:2.1-aspnetcore-runtime-alpine AS runtime
WORKDIR /app
COPY --from=build /app/out .
ENTRYPOINT ["dotnet", "aspsample.dll"]
Dockerのコンテナイメージをminikube上からpull出来るようにdockerの環境変数を変更。
eval $(minikube docker-env)
普通にbuildしてrun
docker build -t aspsample:v1 .
docker run -d -p 8080:80 --name aspapp aspsample
2. アプリをデプロイする
Deploymentはこちらに詳しい。
kubectl run aspdeployment --image=aspapp:v1 --port=8080
kubectl get deployments
> NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
> aspdeployment 1 1 1 1 1m
ポートを開けてサービスを起動する。
kubectl expose deployment aspdeployment --type=LoadBalancer --port=80
minikube service aspdeployment
ブラウザが開きhello worldページがみれるはず。
最後に
- .NET系の開発者がメインで使っているであろうWindows環境でこれらを色々試そうとすると、3時間ドハマりして出来なかったことが、Ubuntu上で色々やると10秒で出来て捗る
- Visual StudioにもKubernetesのプラグインがそのうち追加されそうだけど、(現在はプレビュー)ある程度枯れるまでは全然期待してない。(プラグインが良くても他がよくならないと意味ない)
- なので、今後時代はkubernetesだー!と思っている.NETエンジニアは最初からMacやLinuxを使えばいいと思う。