Opensourcetechブログ

OpensourcetechによるNGINX/Kubernetes/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

初めてのAKS(Azure Kubernetes Service) on Microsoft Azure



LinuCエヴァンジェリストの鯨井貴博@opensourcetechです。


はじめに
今回は、Qiita Advent Calendar2022Azureの23日目として、
Microsoft Azureで初めてのAKS(Azure Kubernetes Service)を使ってみます!
https://qiita.com/advent-calendar/2022/azure



AKSとは?
Microsoft Azure上で利用できるKubernetesのマネージドサービスです。
※kubernetes環境を用意してくれるので、利用者はアプリケーションのデプロイすればいいだけというものです。
https://azure.microsoft.com/ja-jp/free/


アカウントを持っていない方は、まず登録からはじめましょう!



kubernetes環境の構築
メニューの中にKubernetesサービスとあるので、そこからまずkubernetes環境の構築をします。




作成kubernetesクラスターの作成 と進めばOKです。

ちょっとだけ補足すると、
"Azure Arcにkubernetesクラスターを追加"は、 Azure Arc(様々なkubernetesクラスターやサービスを一元的に管理できる役割)にkubernetesクラスターを追加するものです。
 https://learn.microsoft.com/ja-jp/azure/azure-arc/overview


また、Azure Arcに対応したkubernetesクラスターは、以下から確認出来ます。
https://learn.microsoft.com/ja-jp/azure/azure-arc/kubernetes/overview


・リソースグループの新規作成 ※そのままですがリソースを管理するグループです
・クラスターのプリセット構成 ※今回はとりあえず使えればいいのでDev/Testとしました
・クラスター名 ※使うことができる文字列の中ですきに付ければOkです
・kubernetesクラスターのバージョン ※今回は、既定の1.24.6としました
・ノード数の範囲:1 ※シングルノードにMasterとWorkerの機能を持たせています






その他は、基本的には変更なしです。





  ※ネットワークポリシーを、calicoに変更





そして、確認および作成とすれば、作成可能か検証が行われます。




その後、kubernetsクラスターが作成されます。
今回の場合、約5分で構築完了しました。






Kubernetesクラスターへの接続
手元のWindows PCから接続してみます。

接続にはaz-cli(azコマンド)を使うので、まずそれをインストールします。
以下からMSIファイルを取得してインストールします。

https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli-windows?tabs=azure-cli





すると、azコマンドがコマンドプロンプトから利用可能になります。


続いて、コマンドプロンプトにてaz loginとしてAzureへログインします。
※ブラウザが起動するので、そこでログインすればOKです。
そして、以下のコマンドでkubernetesクラスターに接続します。 az aks get-credentials --resource-group test_kubernetes --name MyAzureFirstCluster
※接続認証に使うファイル.configはここに置いたぞってメッセージが出ます。




kubectlコマンドを使えるようにする
続いて、kubectlコマンドを利用可能にします。
az aks install-cliと実行し、表示される内容に従って環境変数PATHにパスを追加します。




kuectlコマンドの確認
kubectlが実行できるか確認します。
・kubectl get nodes ※ノードの確認
・kubectl get deployment ※デプロイメントの確認
・kubectl get ns ※名前空間の確認
など好きなものを実行すればOKです。

C:\>kubectl get nodes
NAME                                STATUS   ROLES   AGE   VERSION
aks-agentpool-12323657-vmss000000   Ready    agent   57m   v1.24.6

C:\>kubectl get deployments --all-namespaces
NAMESPACE         NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
calico-system     calico-kube-controllers   1/1     1            1           56m
calico-system     calico-typha              1/1     1            1           56m
kube-system       coredns                   2/2     2            2           57m
kube-system       coredns-autoscaler        1/1     1            1           57m
kube-system       konnectivity-agent        2/2     2            2           57m
kube-system       metrics-server            2/2     2            2           57m
tigera-operator   tigera-operator           1/1     1            1           57m

C:\>kubectl get ns
NAME              STATUS   AGE
calico-system     Active   57m
default           Active   58m
kube-node-lease   Active   58m
kube-public       Active   58m
kube-system       Active   58m
tigera-operator   Active   57m




Webアプリケーション(nginx)のデプロイと公開
名前空間webの作成、deployment(nginx)のデプロイ、kubectl exposeを使ったサービス公開をしました。

C:\>kubectl create ns web
namespace/web created

C:\>kubectl get ns
NAME              STATUS   AGE
calico-system     Active   58m
default           Active   58m
kube-node-lease   Active   58m
kube-public       Active   58m
kube-system       Active   58m
tigera-operator   Active   58m
web               Active   2s

C:\>kubectl create deployment deploy-nginx --image=nginx:latest --replicas=2 -n web
deployment.apps/deploy-nginx created

C:\>kubectl get deploy,rs,pods -n web
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/deploy-nginx   2/2     2            2           24s

NAME                                      DESIRED   CURRENT   READY   AGE
replicaset.apps/deploy-nginx-6fc7884949   2         2         2       24s

NAME                                READY   STATUS    RESTARTS   AGE
pod/deploy-nginx-6fc7884949-s8lhl   1/1     Running   0          25s
pod/deploy-nginx-6fc7884949-wtmnn   1/1     Running   0          25s

C:\>kubectl get pods -n web -o wide
NAME                            READY   STATUS    RESTARTS   AGE     IP            NODE                                NOMINATED NODE   READINESS GATES
deploy-nginx-6fc7884949-s8lhl   1/1     Running   0          2m20s   10.244.0.14   aks-agentpool-12323657-vmss000000   <none>           <none>
deploy-nginx-6fc7884949-wtmnn   1/1     Running   0          2m20s   10.244.0.13   aks-agentpool-12323657-vmss000000   <none>           <none>

C:\>kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   62m

C:\>kubectl expose deployment deploy-nginx -n web --type=LoadBalancer --port 80
service/deploy-nginx exposed

C:\>kubectl get svc -n web
NAME           TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)        AGE
deploy-nginx   LoadBalancer   10.0.16.36   20.242.130.126   80:32100/TCP   10s


Azureの管理画面上でも同様のものを確認出来ます。




そして、サービス公開(kubectl expose)して表示されたグローバルIPアドレス(今回の場合、20.242.130.126)にアクセスすると、Webアプリ(nginx)が応答するコンテンツが表示されました。




おわりに
初めてAKS使ってみましたが、構築が簡単なのはいいですね!

なお、AKSでは簡単にkubernetesクラスターを作ることが出来ますが、
構築時の各種パラメータを設計する際にはクラスター環境の知識が必要になるので
一度OSインストールからkubernetesクラスターを作ってみて理解を深めるのがいいと感じました。

以前kubernetesクラスターを構築した記事があるので、よければどうぞ!
https://www.opensourcetech.tokyo/entry/20220215/1644853476

Opensourcetech by Takahiro Kujirai