7. 何が問題なのか
ポータルで作れる AKS では Linux コンテナしか走らない
AKS と以下のそれぞれ (例) との相性はいまいち
● IIS が必要な Web アプリ
● .NET Framework をターゲットにしているバイナリ
● マネージド C++ とか P/Invoke が入るコード
● Deployment が Linux と Windows の両方を使うヘテロ構成
14. デプロイ環境の作成
Azure VM 上でコンテナをビルドするには、入れ子仮想化のため v3 系のスケールが必
須。加えて次のソフトウェアを使う
● Visual Studio Code と以下の拡張機能
○ Docker
○ Kubernetes
○ Azure CLI
● Azure CLI (https://docs.microsoft.com/en-us/cli/azure/install-azure-cli)
● Docker for Windows (ダウンロードに Docker Hub アカウント必要)
● Git
● .NET Core SDK
15. Azure 上でのリソースの作成
● AKS の立ち上げ
○ Bs シリーズがおすすめ。事前にコア クオータをあげておく
○ 裏側で VM を作成するので 20 分くらいかかる
● ACR の作成
注: 今回はデモ用に専用のサブスクリプションを用意しています
認証について
Kubernetes を作成する際に、自動的に Azure AD 上にサービス プリンシパルが作成さ
れる
16. デプロイ環境での準備
ログイン
az login
az acr login --name <ACR Name>
az aks get-credentials --resource-group <RG Name> --name <AKS Name>
AKS から ACR への読み取り権限を通す
az aks show --resource-group <RG Name> --name <AKS Name>
--query "servicePrincipalProfile.clientId" --output tsv
az acr show --resource-group <RG Name> --name <ACR Name>
--query "id" --output tsv
az role assignment create --assignee <SP ID> --scope <ACR Res ID>
--role Reader
18. ステータスの表示
AKS のステータスを見る
az aks browse --resource-group <RG Name> --name <AKS Name>
VS Code からもダッシュボードを起動できる
デプロイの表示
kubectl get deploy
ノードの表示
kubectl get pods
19. Dockerfile を作成する
基本となるコンテナを指定して、その上のファイル システムを展開。バイナリをビルドし
て、最後にコマンドを実行する
FROM microsoft/dotnet:2.1.403-sdk-alpine3.7 AS build
WORKDIR /app
ADD . .
RUN dotnet restore &&
dotnet publish -c Release -o out
FROM microsoft/dotnet:2.1.5-aspnetcore-runtime-alpine3.7 AS runtime
WORKDIR /app
COPY --from=build /app/MinChain/out .
ENTRYPOINT [ "dotnet", "MinChain.dll", "run", "config2.json" ]
30. 備考
Windows Server 2016 では動作が怪しい
HSN (Host Network Service) 系の PowerShell コマンドがない
新しめの Windows 10 でも動く
Hyper-V を入れるためコマンドは以下
Enable-WindowsOptionalFeature -Online
-FeatureName Microsoft-Hyper-V
-All
31. 1. エラーがでている場合でも、先頭が E ならば致命傷ではない
気づくまでに私の 2 日分のランチ時間が蒸発しました
E1130 15:47:33.276038 4720 server.go:731] Kubelet needs to run as uid `0`.
It is being run as -1
E1130 15:47:34.384035 4720 eviction_manager.go:243] eviction manager:
failed to get get summary stats: failed to get node info: node "sv2019" not
found
E1130 15:47:34.464392 4720 kubelet.go:2236] node "sv2019" not found
E1130 15:48:15.206372 4720 perfcounter_nodestats.go:144] Unable to get cpu
perf counter data; err: unable to collect data from counter. Error code is
800007d6
奮闘記
普通、このエラーみたら、起動に失敗したんだ、と
思うじゃないですか
32. https://github.com/kubernetes/kubernetes/blob/master/cmd/kubelet/app/server.go
731 行目付近
if err := checkPermissions(); err != nil {
klog.Error(err)
}
checkPermissions の定義は 417 行目あたりに
func checkPermissions() error {
if uid := os.Getuid(); uid != 0 {
return fmt.Errorf("Kubelet needs to run as uid `0`. It is being run as
%d", uid)
}
奮闘記 (いちおう調べた)
エラー出力するだけで、落ちる様子がない? あれ?
そもそもこいつの戻り値を変えるにはどうすれば?