Azure Kubernetes Service (AKS) に Spring Boot Webサービスをデプロイする (Docker Hub カスタムコンテナイメージ)
Azure Kubernetes Service (AKS) に Spring Boot Webサービスをデプロイする (Docker Hub カスタムコンテナイメージ)
为了什么?
我将在 Windows 11 上使用 Linux 进行云开发。
您可以从这里查看文章列表。
实现
在 Microsoft Azure Kubernetes Service (AKS) 上部署自定义的 Spring Boot Web 应用容器镜像。
此外,Azure还提供了完全托管的注册表服务,即Azure Container Registry。我们还可以使用Azure CLI来操作,我希望在另一个机会上进行介绍。
技术主题
微软Azure Kubernetes服务(AKS)是什么?
内容
可扩展性
AKS可以根据需求变化进行应用程序的扩展和缩减。利用Kubernetes的标准功能,通过调整Pod的数量,可以优化整个集群的资源利用率。
自动化
AKS可以自动化与集群部署、升级、监控、扩展和管理相关的任务。这样,用户可以简化与Kubernetes相关的复杂任务。
安全性
AKS有助于用户安全地配置Kubernetes集群。AKS支持可配置的网络策略、预配置的登录和基于角色的访问控制(RBAC)等功能。
可移植性
AKS使用开源的Kubernetes,以使云原生应用程序能够在任何地方运行。AKS可以部署到Azure的其他服务、本地环境和其他云提供商。
生产就绪
AKS专注于高可用性、监控、可扩展性和安全性,提供可用于生产环境的Kubernetes集群。AKS提供99.95%的可用性SLA。
开发环境 fā
- Windows 11 Home 22H2 を使用しています。
> wsl –version
WSL 版本: 1.0.3.0
内核版本: 5.15.79.1
WSLg 版本: 1.0.47Ubuntu ※ 您可以从相关文章中确认安装方法
$ lsb_release -a
没有可用的 LSB 模块。
发行版 ID: Ubuntu
描述: Ubuntu 22.04.1 LTS
发布: 22.04
Java JDK ※ 您可以从相关文章中确认安装方法
$ java -version
openjdk version “11.0.18” 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
Maven ※ 您可以从相关文章中确认安装方法
$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.18, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Docker ※ 您可以从相关文章中确认安装方法
$ docker –version
Docker version 23.0.1, build a5ee5b1
显示“Hello World”的步骤
创建Spring Boot Web服务
这篇文章是从这篇相关文章的续篇开始,其中解释了一些步骤。
进入 Spring Boot 应用的项目文件夹
我們移動到專案資料夾。
※ 我們假設專案資料夾是 ~/tmp/hello-spring-boot。
$ cd ~/tmp/hello-spring-boot
确认容器镜像
下面是从这篇相关文章中继续解释步骤的文章。
启动Docker守护程序。
$ sudo service docker start
* Starting Docker: docker [ OK ]
我将检查容器镜像。
$ docker images | grep app-hello-spring-boot
app-hello-spring-boot latest 39115028afa6 12 seconds ago 390MB
将容器映像注册到Docker Hub。
创建一个Docker Hub账号。
登录Docker Hub。
$ docker login
Login Succeeded
给容器镜像打上标签。
※ 请将 “$USER” 部分替换为您自己的容器存储库。
$ docker tag app-hello-spring-boot $USER/app-hello-spring-boot:latest
この例では、app-hello-spring-boot という名前のコンテナイメージに、user/app-hello-spring-boot:latest というタグを付けています。ここで user は、Docker Hub 上のユーザー名を表します。タグには、コロン : 以降にバージョンなどの情報を含めることができますが、ここでは latest を指定しているため、最新バージョンを表しています。
Docker Hub にコンテナイメージをプュシュします。
$ docker push $USER/app-hello-spring-boot:latest
これにより、Docker Hub 上に user というユーザー名のリポジトリが作成され、その中に app-hello-spring-boot という名前のコンテナイメージがアップロードされます。
ここまでで、Docker Hub に $USER/app-hello-spring-boot:latest としてカスタムコンテナイメージが公開出来ました。
登录到Azure环境
こちらの関連記事の続きから手順を説明する記事となります。
Azure CLI でログインします。
$ az login
蔚藍環境
资源组
创建资源组。
$ az group create \
--name rg-hello \
--location japaneast
コマンド
内容
az group create
Azure のリソースグループを作成するためのコマンドです。
オプション
値
内容
–name
rg-hello
リソースグループの名前を指定します。
–location
japaneast
リソースグループを作成する場所を japaneast に指定しています。 japaneast は Azure の日本東部地域を指します。
AKS环境 – Azure Kubernetes Service环境
AKS を作成すると、Kubernetes クラスター用の多数のリソースが自動的に作成されます。これらのリソースは、Azure Portal 上で確認することができます。ただし、AKS のリソースを削除すると自動的に関連リソースも削除されますが、共有している Azure サブスクリプションで検証される場合など、ご注意ください。
$ az aks create \
--resource-group rg-hello \
--name aks-hello \
--node-count 1 \
--generate-ssh-keys
コマンド
内容
az aks create
Azure 上に、Kubernetes クラスターを作成するコマンドです。
オプション
値
内容
–resource-group
rg-hello
Kubernetes クラスターを作成するリソースグループの名前です。
–name
aks-hello
作成する Kubernetes クラスターの名前です。
–node-count
1
Kubernetes クラスターにデプロイするノードの数を指定します。
–generate-ssh-keys
—
Kubernetes クラスターに SSH キーを自動生成するかどうかを指定します。このオプションを指定することで、ユーザーが手動で SSH キーを生成する必要がなくなります。
让我们查看 AKS 集群的列表。
$ az aks list
$ az aks delete -n <aks-name> -g <group>
只需一个选项:
修改配置文件的权限。
※ 仅在第一次需要。
$ chmod 600 /home/$USER/.kube/config
AKS クラスターと接続します。
※ 既存設定の上書きを許可する為、yes を選択します。
$ az aks get-credentials \
--resource-group rg-hello \
--name aks-hello
コマンド
内容
az aks get-credentials
Azure 上の、Kubernetes クラスターに接続するための認証情報を取得します。
オプション
値
内容
–resource-group
rg-hello
Kubernetes クラスターが作成されたリソースグループ名を指定します。
–name
aks-hello
作成する Kubernetes クラスターの名前を指定します。
このコマンドを実行すると、指定されたリソースグループと Kubernetes クラスターの認証情報がローカルに保存され、kubectl コマンドで Kubernetes クラスターに接続するために使用されます。これにより、Kubernetes クラスターに対してコマンドを発行する際に、手動で認証情報を指定する必要がなくなります。
接続設定が成功した場合の出力は、以下のようになります。
Merged "aks-hello" as current context in /home/$USER/.kube/config
操作Kubernetes集群(AKS)
AKS にデプロイするために、Minikube を経由して kubectl を使用する代わりに、Azure CLI で kubectl を直接インストールする手順を紹介しています。
Kubernetes コマンドライン ツール、kubectl をインストールします。
$ sudo az aks install-cli
Minikube で使用したシンボリックリンクを削除します。
$ unalias kubectl
确认 kubectl 的版本。
$ kubectl version --short
Client Version: v1.26.2
Kustomize Version: v4.5.7
Server Version: v1.24.9
我要确认当前的连接目标。
$ kubectl config current-context
aks-hello
创建Kubernetes清单文件
こちらの関連記事の続きから手順を説明する記事となります。
修改Kubernetes的清单文件。
※ 请将$USER部分更改为您自己的容器存储库。
$ vim kube-all-in-one.yaml
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
app: app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 1
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: $USER/app-hello-spring-boot:latest
ports:
- containerPort: 8080
将其部署到Kubernetes集群中。
$ kubectl apply -f kube-all-in-one.yaml
service/app-service created
deployment.apps/app-deployment created
检查Kubernetes集群的状态。
$ kubectl get pods,services,deployments
NAME READY STATUS RESTARTS AGE
pod/app-b876686f6-87kjn 1/1 Running 0 3m42s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/app-service LoadBalancer 10.0.52.170 xx.xx.xx.xx 80:30634/TCP 3m42s
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 52m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/app-deployment 1/1 1 1 3m42s
确认容器操作
服务/应用服务的EXTERNAL-IP xx.xx.xx.xx 可以从外部访问。
请在网页浏览器中确认
※ 请根据环境更改URL。
http://xx.xx.xx.xx/api/data
在WEB浏览器上显示{“message”:”你好世界!”},并成功获取了JSON数据。
別ターミナルから curl コマンドで確認します。
$ curl -v https://xx.xx.xx.xx/api/data
* Trying xx.xx.xx.xx:80...
* Connected to xx.xx.xx.xx (xx.xx.xx.xx) port 80 (#0)
> GET /api/data HTTP/1.1
> Host: xx.xx.xx.xx
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200
< Content-Type: application/json
< Transfer-Encoding: chunked
< Date: Sat, 11 Mar 2023 07:47:53 GMT
<
* Connection #0 to host xx.xx.xx.xx left intact
{"message":"Hello World!"}
ターミナルに {“message”:”Hello World!”} と表示され、JSON データを取得することが出来ました。
连接到容器
我将尝试连接到Spring Boot自定义容器的另一个终端。
$ kubectl exec -it app-b876686f6-87kjn -- /bin/bash
在连接到容器之后,请确保确认目录。
※ 当需要退出容器时,请按下ctrl + D。
# pwd
/app
# ls -la
total 17248
drwxr-xr-x 1 root root 4096 Mar 10 13:00 .
drwxr-xr-x 1 root root 4096 Mar 11 07:42 ..
-rw-r--r-- 1 root root 17650415 Mar 10 12:59 app.jar
我尝试显示容器的信息。
# cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.5 LTS"
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.5 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
このコンテナは Ubuntu をベースに作成されています。つまり、Ubuntu と同じように扱うことができます。
まとめ
Azure Kubernetes Service (AKS) 環境で、kube-all-in-one.yaml という YAML 形式のマニュフェストファイルを用いて、Spring Boot Web サービスのカスタムコンテナイメージをデプロイすることができました。
Maven、Docker、Azure CLI、kubectl を使って、Spring Boot アプリの開発からコンテナイメージの作成、Azure 環境へのデプロイまで、すべてをターミナルから行うことができます。このように、クラウドでのシステム開発に必要なスキルや理解を深めることができます。初めての人でも簡単に手順を追うことができるので、ぜひ挑戦してみてください。
你觉得怎么样?您可以尝试在WSL Ubuntu上,使用Spring Boot Web应用程序在Azure Kubernetes Service(AKS)环境中轻松地启动为容器,以便进行验证。请务必试试看。未来我们还会介绍更多Azure的开发环境等内容,请拭目以待。