はじめに
こんにちは@sk_130と申します。
本記事は、タイトルに記載しました書籍にハンズオンが載っているのですが、そちらを実際に動かしてみてはまったところとか、ちゃんとうまくできるか、作業履歴を残したくて記事にしました。
書籍は全12章ですが、各章の単位で倣ってまとめていきます。この記事は3章までまとめていきます
以下の本です
kubernetes, AKSを学ぶ上では良書だと思っています。
AKSはAzureのkubernetesのマネージドサービスですが、この本はAzure使いの人じゃなくても役に立ちます
kubernetesがよくわからん、、って人も手を動かしながら学べるところがいいですね。
一応レビューです。よくわからん、おいて行かれる。。って人もいるみたいです。
一応、、kubernetesとは
ビギナーの人向け
今さら人に聞けない Kubernetes とは?
詳しく知りたい人向け
数時間で完全理解!わりとゴツいKubernetesハンズオン!!
1章:コンテナーとkubernetes
ここには上記の概念的なことがまとめられています。
この章でコンテナやkubernetesとはが学べますし、どういったときに役立つのかとかとかが書かれています。
2章:Kubernetesの環境構築
ここでは開発環境の準備やk8sの構築方法が書かれています
VSCodeなど、開発環境の準備のこともまとめられています。
この手順を元にPCセッティングすれば、自分のPCの開発環境が整います。
VSCodeにdockerやkubernetesの拡張機能を入れたりとかが書かれています。
ハンズオンはAzure上にVMサーバを立てて、そこにSSHして実行することにしました
後々権限やらなんやらが大変かなと思ってそうしました
ハンズオンの内容をまるまる書くのはダメそうなので、内容がばれない程度に記載します
#####まずリソースグループやACRを手順に則ってデプロイします。
その後指定されたgithubがあるので、そこからダウンロードします。これもテキスト通りに実行。
そこにDockerfileなどが入っており、これを作ったACRにイメージビルドします。
こんな感じでイメージビルドします。
az acr build --registry $ACR_NAME --image photo-view:v2.0 v2.0/
うまくいくとこんな感じになります。これもテキスト通り
$ az acr repository show-tags -n $ACR_NAME --repository photo-view
[
"v1.0",
"v2.0"
]
チュートリアルもありますので、それをやるとgithubへプッシュしたときにイメージビルドの自動化できるみたい
今回はやらないです
https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-tutorial-build-task
ACRとAKSの連携をやります
ざっくり書くと、ACRとAKS間の認証のため、サービスプリンシパルを使います。
書籍の通りに実行しき、ここまで設定できて、クラスターを作成します
書籍が古く、k8sのバージョンが古いですが、バージョン指定しないと推奨になるので
--kubernetes-version hogehoge を消せばいいかなと思います
公式だと以下になるかなと
https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-auth-service-principal
参考実行例を公式をもとに記載します
以下の実行でもクラスタが建てられると思います。10分ぐらい待ちます
$ echo $ACR_NAME
sampleACRRegistry3(ここは任意)
$ SERVICE_PRINCIPAL_NAME=acr-service-principal
$(az acr show --name $ACR_NAME --query "id" --output tsv)
$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
WARNING: いろいろでます
$ USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)
$ echo "Service principal ID: $USER_NAME"
Service principal ID: IDが表示
$ echo "Service principal password: $PASSWORD"
Service principal password: IDが表示
azureuser@test-aks:~/Understanding-K8s/chap02$ az aks create --name $AKS_CLUSTER_NAME --reso
urce-group $AKS_RES_GROUP --generate-ssh-keys --service-principal $USER_NAME --client-secre
t $PASSWORD
/ Running ..
その後、認証情報を取得します。.kubeディレクトリに認証情報を書き込みます
書籍だとadminのところ誤記になっていたので、そこは注意です
$ az aks get-credentials --admin --resource-group $AKS_RES_GROUP --name $AKS_CLUSTER_NAME
Merged "AKSCluster-admin" as current context in /home/azureuser/.kube/config
その後はkubectlのコマンドの例があります。
ここで結構学習できます。この時点での実行例は以下です。
Nodeしか建てていないので、以下のようになります
$ kubectl get pod
No resources found in default namespace.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-41065612-vmss000000 Ready agent 5m49s v1.21.7
aks-nodepool1-41065612-vmss000001 Ready agent 5m44s v1.21.7
aks-nodepool1-41065612-vmss000002 Ready agent 5m47s v1.21.7
3章:Kubernetesを動かしてみよう
ここではアプリケーションのデプロイやマニフェストファイルの作成のことが書かれています
チュートリアルから自分の作ったACRのレジストリ名に変更する必要があり
今回VMサーバから実行しているので、vimで修正して実行しました
アプリのデプロイ
うまくいくとpodが起動します
今回PodはよしなにNodeに配置されます
$ vim tutorial-deployment.yaml
コード修正
$ kubectl apply -f tutorial-deployment.yaml
deployment.apps/photoview-deployment created
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
photoview-deployment-7676d55c57-2w95g 1/1 Running 0 2m58s 10.244.2.4 aks-nodepool1-41065612-vmss000001 <none> <none>
photoview-deployment-7676d55c57-d45pf 1/1 Running 0 2m58s 10.244.0.5 aks-nodepool1-41065612-vmss000000 <none> <none>
photoview-deployment-7676d55c57-fftq4 1/1 Running 0 2m58s 10.244.0.6 aks-nodepool1-41065612-vmss000000 <none> <none>
photoview-deployment-7676d55c57-tfb95 1/1 Running 0 2m58s 10.244.1.3 aks-nodepool1-41065612-vmss000002 <none> <none>
photoview-deployment-7676d55c57-zzrb4 1/1 Running 0 2m58s 10.244.2.3 aks-nodepool1-41065612-vmss000001 <none> <none>
続いてサービスを公開します
サービスをapplyすることで、サービスが用意されます
以下のEXTERNAL-IPhogehogeのところになります。
このIPを打ち込むと画像が表示されます
azureuser@test-aks:~/Understanding-K8s/chap03$ kubectl apply -f tutorial-service.yaml
service/webserver created
azureuser@test-aks:~/Understanding-K8s/chap03$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP hogehoge <none> 443/TCP 29m
webserver LoadBalancer hogehoge hogehoge 80:32062/TCP 31s
こんな感じ、ネタバレはNGなので、ぜひハンズオンをやってみて、どんな画像が出るか見てみてください