📚
AKSでkubevelaに入門する
前置き
- どうも生き別れの兄です。生きニキって呼ばれてます。
- 間違っていたら優しくマサカリを手渡しでください。
やってみよう
kubevelaとは
開発者がk8sの理解を深めなくとも抽象化して開発に注力してもらおうというCDツールです。
OAMというアプリケーションファーストにクラウドプロバイダに左右されない一貫したAPIを提供するというやつです。
An Abstraction to Model Application Deployment Process
インフラの複雑化が進む中でアプリ開発者の認知負荷を下げつつ、k8sの強みを生かせるのであれば正にPlatformEngineeringじゃんってことで試してみます。
KubevelaではこのことをSeparation of Concernsと呼んでるみたいです。
入門してみる
- クラスターの作成、資格情報の取得をします。
チュートリアル - Azure Kubernetes Service (AKS) クラスターの作成 - vela cliをインストールします。Install KubeVela on Kubernetes
curl -fsSl https://kubevela.io/script/install.sh | bash
- velaをインストールします。
source ~/.bashrc
vela install
vela addon enable velaux
- アプリケーションをデプロイします。
vela env init prod --namespace prod
vela up -f https://kubevela.net/example/applications/first-app.yaml
vela status first-vela-app
- 外部公開してアクセスします。
Gateway APIを使ってルーティングしてみます。
vela status first-vela-app
を見る感じだとdefault
namespaceにsvcができてそうなのでそこへつなげてみましょう。
コマンド結果
$ vela status first-vela-app
About:
Name: first-vela-app
Namespace: prod
Created at: 2025-02-16 13:49:23 +0000 UTC
Status: workflowSuspending
Workflow:
mode: StepByStep-DAG
finished: false
Suspend: true
Terminated: false
Steps
- id: 3yvgp54xnw
name: deploy2default
type: deploy
phase: succeeded
- id: zof3o58td4
name: manual-approval
type: suspend
phase: suspending
message: Suspended by field suspend
Services:
- Name: express-server
Cluster: local Namespace: default
Type: webservice
Healthy Ready:1/1
Traits:
✅ scaler
$ k get svc -n default
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
express-server ClusterIP 10.0.206.120 <none> 8000/TCP 6m21s
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type external
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml
gatewayリソースを作ります。
kubectl apply -n aks-istio-ingress -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gateway
spec:
gatewayClassName: istio
addresses:
- value: aks-istio-ingressgateway-external
type: Hostname
listeners:
- name: default
hostname: "*.aks.rocks"
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: All
EOF
外部イングレス ゲートウェイを有効にする
Installing a Gateway controller
Using AKS-managed Istio External Ingress Gateway with Gateway API
HTTP Routeリソースを作ります。
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: vela-app
namespace: default
spec:
parentRefs:
- name: gateway
namespace: aks-istio-ingress
hostnames: ["app.aks.rocks"]
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: express-server
port: 8000
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: velaux
namespace: vela-system
spec:
parentRefs:
- name: gateway
namespace: aks-istio-ingress
hostnames: ["admin.aks.rocks"]
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: velaux-server
port: 8000
EOF
- 実際にアクセスしてみます。
istio ゲートウェイのIPアドレスを確認します。
kubectl get gateway gateway -n aks-istio-ingress
curlでアクセスしてみましょう。
GATEWAY_IP=$(kubectl get svc -n aks-istio-ingress aks-istio-ingressgateway-external -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
# express-serverへのアクセス確認
curl --resolve "app.aks.rocks:80:${GATEWAY_IP}" http://app.aks.rocks/
# VelaUXコンソールへのアクセス確認
curl --resolve "admin.aks.rocks:80:${GATEWAY_IP}" http://admin.aks.rocks/
VelaUXを見てみよう
velauxを有効化した人向けです。先ほどcurlで確認したのではアクセスできることしか見てないのでちゃんとブラウザで見れるようにしましょう。
windowsを筆者は使ってるのでこの辺を参考にhostsをいじりました。
# 略
xxx.xxx.xxx.xxx admin.aks.rocks
しばらくすると first-vela-app
が見れるようになるはずです。
終わりに
次はCDの機能をつかうぞ~
Discussion