単一クラスターへの Runtime Fabric の複数のインスタンスのインストール

複数のインスタンスの Anypoint Runtime Fabric をインストールすることで、複数の Runtime Fabrics 間で同じクラスターを共有し、効率的にリソースを使用することができます。

  • この機能を使用するには、複数のインスタンスがサポートされる 2.2.5 以上のバージョンの Runtime Fabric エージェントにアップグレードする必要があります。

  • エージェントの名前空間はアプリケーションの名前空間に 1 対 1 でマップされます。同じクラスターの複数のインスタンスの Runtime Fabric 間でアプリケーションの名前空間を共有することはできません。

  • Hazelcast クラスタリングはまだ複数のインスタンスではサポートされていません。

複数のインスタンスがある場合、最初の Runtime Fabric エージェントのインストールにより、​persistencegateways.rtf.mulesoft.com​ のカスタムリソース定義 (CRD) と優先度クラスの ​rtf-components-high-priority​ リソースが作成されます。エージェントをアンインストールしても、Runtime Fabric エージェントではこれらのリソースがクリーンアップされません。

複数のインスタンスの Runtime Fabric をインストールする

1 つの BYOK (Bring Your Own Kubernetes) クラスターに複数のインスタンスの Anypoint Runtime Fabric をインストールするには、次の手順に従ってください。

  1. Runtime Manager を使用して Runtime Fabric を作成します。

  2. 前のステップで作成した Fabric をインストールするカスタム名前空間を作成します。

    kubectl create ns <rtf_namespace>
  3. 前に作成した名前空間の Runtime Fabric コンポーネントイメージを取得するための Docker プルシークレットを作成します。

    kubectl create secret docker-registry rtf-pull-secret --namespace <rtf_namespace> --docker-server=<docker_registry_url> --docker-username=<docker_registry_username> --docker-password=<docker_ registry_password>
  4. Runtime Fabric Helm リポジトリを追加します。

    helm repo add <name> <helm_repo_url> --username <your_username> --password <your_password>
  5. 必要に応じて、共有テナントを設定できます。詳細は、​「承認済み名前空間の設定」​を参照してください。

  6. Anypoint Platform UI から ​values.yaml​ ファイルをダウンロードして設定します。

  7. values.yaml​ ファイルの​必須パラメーター​を設定します。

  8. クラスターに Runtime Fabric をインストールします。

    helm install runtime-fabric rtf/rtf-agent --version <rtf_version> -f values.yaml -n <rtf_namespace>

values.yaml ファイルの必須パラメーター

Runtime Manager で Runtime Fabric インスタンスを作成すると、次の必須パラメーターの値が設定されます。ローカルレジストリを使用していない場合は、レジストリ URL とプルシークレットのデフォルト値を使用してください。

キー

activationData

アクティベーションデータ

YW55cG9pbnQubXVsZXNvZnQuY29tOjBmODdmYzYzLTM3MWUtNDU2Yy1iODg5LTU5NTkyNjYyZjUxZQ==

rtfRegistry

レジストリ URL

US rtf-runtime-registry.kprod.msap.io

EU rtf-runtime-registry.kprod-eu.msap.io

pullSecretName

レジストリプルシークレット

rtf-pull-secret

muleLicense

アプリケーションの Mule ライセンス

Mule ライセンスキー (Base64 でエンコードされている必要があります)

values.yaml の省略可能なパラメーター

必要に応じて次の省略可能なパラメーターを設定します。

キー 説明

authorizedNamespaces

共有テナントを有効にする

authorizedNamespaces=true

crds.install

Crds と PriorityClass のインストールを有効にする

install=true

proxy.http.proxy
proxy.http.no_proxy​ `

プロキシ値と no_proxy 値

- http://<user>:<pass>@<10.0.0.1>:<8080>​
- <1.1.1.1:8888,2.2.2.2:9999>

proxy.monitoring.proxy

Monitoring のプロキシ値

socks5://<user>:<pass>@<10.0.0.2>:<8080>

global.containerLogPaths

Filebeat の読み取りパス

- /var/lib/docker/
- /var/log/containers
- /var/log/pods

最初のエージェントをクラスターにインストールするには、​crds.install​ の値を ​true​ に設定します。
同じクラスターの以降のすべてのエージェントインストールでは ​crds.install​ を ​false​ に設定します。

values.yml リファレンス

次に ​values.yaml​ ファイルの例を示します。

activationData: <activation_data>
  proxy:
    http_proxy:
    http_no_proxy:
    monitoring_proxy:
custom_log4j_enabled: true
muleLicense: <mule_license_key>
global:
  crds:
    install: true
  authorizedNamespaces: false
  image:
    rtfRegistry: rtf-runtime-registry.kprod.msap.io
    pullSecretName: rtf-pull-secret
  containerLogPaths:
  - /var/lib/docker/containers
  - /var/log/containers
  - /var/log/pods

Mule アプリケーションのデプロイ

  1. Mule アプリケーションをデプロイするには、インストールするエージェントごとに ​app-namespace​ を作成します。

    apiVersion: v1
    kind: Namespace
    metadata:
      name: <app-namespace>
      labels:
        rtf.mulesoft.com/agentNamespace: <rtf_namespace>
        rtf.mulesoft.com/envId: <environment_id>
        rtf.mulesoft.com/org: <org_id>
        rtf.mulesoft.com/role: workers
  2. 新しい ​<rtf_namespace>​ でイングレスを作成します。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rtf-ingress
  namespace: <rtf_namespace>
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: rtf-nginx
  rules:
    - host: "testrtf.com"
      http:
        paths:
          - pathType: Prefix
            path: "/app-name(/|$)(.*)"
            backend:
              service:
                name: service
                port:
                  name: service-port

<rtf_namespace>​ ごとに異なるホスト名を使用してください。複数のイングレスで同じホストについて異なるパスを定義すると、イングレスコントローラーによって定義がマージされます。 結果として、同じ名前の, Mule アプリケーションにアクセスできなくなり、Runtime Fabric の問題ではなく k8s の問題が発生することになります。

(省略可能) 承認済み名前空間を設定する

必要に応じて、他のサービスと一緒に Runtime Fabric を Kubernetes クラスターにデプロイできるようにする承認済み名前空間を設定できます。

Runtime Fabric をインストールする前に Runtime Fabric 名前空間用に ​authorized-namespaces​ ConfigMap ファイルを作成する必要があります。さらに、​ConfigMap​ には ​authorized-namespaces​ という名前を付ける必要があります。​ConfigMap​ ファイルの例を示します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: authorized-namespaces
  namespace: <rtf_namespace>
data:
  APPLICATION_NAMESPACE_1: "<app_namespace_1>"
  APPLICATION_NAMESPACE_2: "<app_namespace_1>

rtf:resource-metrics-collector​ ClusterRole にはノード、ポッド、名前空間を ​get​ および ​list​ するクラスター全体の権限があり、ノードに対する ​watch​ 権限があります。ロール ClusterRole は次のように定義されます。 ClusterRole ロールの例を示します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: rtf:resource-metrics-collector
  labels:
    {{- include "labels.standard" . | nindent 4 }}
rules:
  - apiGroups: [""]
    resources: ["nodes", "pods", "namespaces"]
    verbs: ["list", "get"]
  - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["watch"]

追加の名前空間を設定する

アプリケーションデプロイメント用の追加の名前空間を作成し、必要な表示ラベルを名前空間に追加するには、次の手順に従ってください。

  1. 次のコンテンツで YAML ファイルを作成します。

    apiVersion: v1
    kind: Namespace
    metadata:
      name: <app-namespace>
      labels:
        rtf.mulesoft.com/agentNamespace: <rtf_namespace>
        rtf.mulesoft.com/envId: <environment_id>
        rtf.mulesoft.com/org: <org_id>
        rtf.mulesoft.com/role: workers
  2. 以前に作成したファイルを適用します。

    kubectl apply -f <filename>.yaml
  3. ステップ 1 と 2 を繰り返して、必要な数の名前空間を追加します。

  4. 追加の名前空間で次の設定を適用することにより、Runtime Fabric エージェント ​ServiceAccount​ が含まれる Runtime Fabric エージェント ​ClusterRole​ の ​RoleBinding​ を作成します。

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: <rb_name>
      namespace: <app_namespace>
    subjects:
      - kind: ServiceAccount
        name: rtf-agent
        namespace: <rtf_namespace>
    roleRef:
      kind: ClusterRole
      name: rtf:agent-<rtf_namespace>
      apiGroup: rbac.authorization.k8s.io