概要
この記事 にある docker-compose.yml を kcompose convert することにより、Kuberbetesのマニフェストを作成し、それを元にAKSでコンテナを問題なく稼働できることを確認します。
ローカル環境
macOS Big Sur 11.3
python 3.8.3
事前準備
この記事 を参考にして、AKS と ACR を構築し、AKSクラスター上で動く Node の確認まで完了していること。
マニフェストの作成
Kompose のインストール
$ curl -L https://github.com/kubernetes/kompose/releases/download/v1.22.0/kompose-darwin-amd64 -o kompose
$ chmod +x kompose
$ sudo mv ./kompose /usr/local/bin/kompose
docker-compose.yml のコンバート
以下の docker-compose.yml を対象とします。
version: "2"
services:
redis-master:
image: k8s.gcr.io/redis:e2e
ports:
- "6379"
redis-slave:
image: gcr.io/google_samples/gb-redisslave:v3
ports:
- "6379"
environment:
- GET_HOSTS_FROM=dns
frontend:
image: gcr.io/google-samples/gb-frontend:v4
ports:
- "80:80"
environment:
- GET_HOSTS_FROM=dns
labels:
kompose.service.type: LoadBalancer
kubernetes へのコンバートの実行
$ kompose convert -f docker-compose.yml
IINFO Kubernetes file "frontend-service.yaml" created
INFO Kubernetes file "redis-master-service.yaml" created
INFO Kubernetes file "redis-slave-service.yaml" created
INFO Kubernetes file "frontend-deployment.yaml" created
INFO Kubernetes file "redis-master-deployment.yaml" created
INFO Kubernetes file "redis-slave-deployment.yaml" created
AKS 上でのPodの起動
クラスター上で動く Node の確認
$ kubectl get node
Podの作成
$ kubectl apply -f frontend-service.yaml,redis-master-service.yaml,redis-slave-service.yaml,frontend-deployment.yaml,redis-master-deployment.yaml,redis-slave-deployment.yaml
service/frontend created
service/redis-master created
service/redis-slave created
deployment.apps/frontend created
deployment.apps/redis-master created
deployment.apps/redis-slave created
Podの確認
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
frontend-6bd559fc9d-8r75p 1/1 Running 0 47s
redis-master-77b6f7887-bmjg7 1/1 Running 0 47s
redis-slave-7d89659bdc-nd7kj 1/1 Running 0 47s
アプリケーションの確認
サービスの確認
$ kubectl describe svc frontend
Name: frontend
Namespace: default
Labels: io.kompose.service=frontend
Annotations: kompose.cmd: kompose convert -f docker-compose.yml
kompose.service.type: LoadBalancer
kompose.version: 1.22.0 (955b78124)
Selector: io.kompose.service=frontend
Type: LoadBalancer
IP Families: <none>
IP: 10.0.7.99
IPs: <none>
LoadBalancer Ingress: 20.89.87.139
Port: 80 80/TCP
TargetPort: 80/TCP
NodePort: 80 31064/TCP
Endpoints: 10.244.0.7:80
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 110s service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 105s service-controller Ensured load balancer
アプリケーションへのアクセス
$ curl http://20.89.87.139
<html ng-app="redis">
<head>
<title>Guestbook</title>
:
</head>
<body ng-controller="RedisCtrl">
:
</body>
</html>
Podの削除
$ kubectl delete -f frontend-service.yaml,redis-master-service.yaml,redis-slave-service.yaml,frontend-deployment.yaml,redis-master-deployment.yaml,redis-slave-deployment.yaml
最後に
docker-compose.yml を kompose convert することにより deployment と Service のマニフェストが作成され、それらを AKS に kubectl apply することにより問題なくアプリケーションが稼働することを確認しました。