標準のKubernetesリソース
この例では、標準のKubernetesリソースをOAMリソースとともに使用して、アプリケーションを定義およびデプロイする方法を示します。この例では、ワークロードとトレイトの両方として、いくつかの標準のKubernetesリソースが使用されています。
- Deploymentは、Component内でワークロードとして使用されます。
- ServiceはComponent内でワークロードとして使用されます。
- Ingressは、ApplicationConfiguration内でトレイトとして使用されます。
始める前に
インストールの手順に従って、Verrazzanoをインストールします。
権限の付与
oam-kubernetes-runtimeは、この例で使用されているKubernetes Ingressリソースを作成できるようにする権限付きでインストールされません。次のステップでは、Ingressリソースの作成を許可するロールを作成し、そのロールをoam-kubernetes-runtimeサービス・アカウントにバインドします。この例が機能するには、クラスタ管理者が次のステップを実行してClusterRoleおよびClusterRoleBindingを作成する必要があります。
$ kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: oam-kubernetes-runtime-ingresses
rules:
  - apiGroups:
    - networking.k8s.io
    - extensions
    resources:
    - ingresses
    verbs:
    - create
    - delete
    - get
    - list
    - patch
    - update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: oam-kubernetes-runtime-ingresses
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: oam-kubernetes-runtime-ingresses
subjects:
  - kind: ServiceAccount
    name: oam-kubernetes-runtime
    namespace: verrazzano-system
EOF
アプリケーションのデプロイ
この例では、一般的なサンプル・アプリケーション・イメージを使用するWebアプリケーションを示します。アクセスすると、アプリケーションは構成済テキストを返します。
- 
アプリケーション・ネームスペースを作成し、ネームスペースがVerrazzanoによって管理されることを示すラベルを追加します。 $ kubectl create namespace oam-kube $ kubectl label namespace oam-kube verrazzano-managed=true istio-injection=enabled
- 
Deploymentワークロードを含むComponentを作成します。 $ kubectl apply -f - <<EOF apiVersion: core.oam.dev/v1alpha2 kind: Component metadata: name: oam-kube-dep-comp namespace: oam-kube spec: workload: kind: Deployment apiVersion: apps/v1 name: oam-kube-dep spec: replicas: 1 selector: matchLabels: app: oam-kube-app template: metadata: labels: app: oam-kube-app spec: containers: - name: oam-kube-cnt image: hashicorp/http-echo args: - "-text=hello" EOF
- 
Serviceワークロードを含むComponentを作成します。 $ kubectl apply -f - <<EOF apiVersion: core.oam.dev/v1alpha2 kind: Component metadata: name: oam-kube-svc-comp namespace: oam-kube spec: workload: kind: Service apiVersion: v1 metadata: name: oam-kube-svc spec: selector: app: oam-kube-app ports: - port: 5678 # Default port for image EOF
- 
両方のComponentを参照し、イングレス・トレイトを構成するApplicationConfigurationを作成します。 $ kubectl apply -f - <<EOF apiVersion: core.oam.dev/v1alpha2 kind: ApplicationConfiguration metadata: name: oam-kube-appconf namespace: oam-kube spec: components: - componentName: oam-kube-dep-comp - componentName: oam-kube-svc-comp traits: - trait: apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: oam-kube-ing annotations: kubernetes.io/ingress.class: istio spec: rules: - host: oam-kube-app.example.com http: paths: - path: /example backend: serviceName: oam-kube-svc servicePort: 5678 EOF
アプリケーションの探索
- アプリケーションのホスト名を取得します。
$ export HOST=$(kubectl get ingress \ -n oam-kube oam-kube-ing \ -o jsonpath='{.spec.rules[0].host}') $ echo "HOST=${HOST}"
- イングレス・ゲートウェイのロード・バランサ・アドレスを取得します。
$ export LOADBALANCER=$(kubectl get ingress \ -n oam-kube oam-kube-ing \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}') $ echo "LOADBALANCER=${LOADBALANCER}"
- アプリケーションにアクセスします。
$ curl http://${HOST}/example --resolve ${HOST}:80:${LOADBALANCER} # Expected response hello
アプリケーションのアンデプロイ
アプリケーションをアンデプロイするには、作成されたネームスペースを削除します。これにより、ネームスペース内に明示的および暗黙的に作成されたすべてのリソースが削除されます。
$ kubectl delete namespace oam-kube
必要に応じて、クラスタ管理者は、作成されたClusterRoleおよびClusterRoleBindingを削除することもできます。
$ kubectl delete ClusterRoleBinding oam-kubernetes-runtime-ingresses
$ kubectl delete ClusterRole oam-kubernetes-runtime-ingresses