📚

AKSでkubevelaに入門する

2025/02/17に公開

前置き

  • どうも生き別れの兄です。生きニキって呼ばれてます。
  • 間違っていたら優しくマサカリを手渡しでください。

やってみよう

kubevelaとは

開発者がk8sの理解を深めなくとも抽象化して開発に注力してもらおうというCDツールです。
OAMというアプリケーションファーストにクラウドプロバイダに左右されない一貫したAPIを提供するというやつです。
An Abstraction to Model Application Deployment Process


Introduction

インフラの複雑化が進む中でアプリ開発者の認知負荷を下げつつ、k8sの強みを生かせるのであれば正にPlatformEngineeringじゃんってことで試してみます。
KubevelaではこのことをSeparation of Concernsと呼んでるみたいです。

入門してみる

  1. クラスターの作成、資格情報の取得をします。
    チュートリアル - Azure Kubernetes Service (AKS) クラスターの作成
  2. vela cliをインストールします。
    curl -fsSl https://kubevela.io/script/install.sh | bash
    
    Install KubeVela on Kubernetes
  3. velaをインストールします。
source ~/.bashrc
vela install
vela addon enable velaux
  1. アプリケーションをデプロイします。
vela env init prod --namespace prod
vela up -f https://kubevela.net/example/applications/first-app.yaml
vela status first-vela-app
  1. 外部公開してアクセスします。
    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
  1. 実際にアクセスしてみます。

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