デプロイメントを作成する
ワークロードをダウンストリームクラスターにデプロイするには、まずGitリポジトリを作成し、次にGitRepoリソースを作成して適用します。
このチュートリアルでは、 fleet-examplesリポジトリを使用します。
|
リポジトリの構造と各バンドルのデプロイメントの設定方法の詳細については、GitRepoの内容を参照してください。 各Gitリポジトリで利用可能なオプションの詳細については、GitRepoの追加を参照してください。 |
シングルクラスターの例
すべての例は、クラスターごとのカスタマイズなしでコンテンツをクラスターにデプロイします。これは、SUSE® Rancher Prime Continuous DeliveryのためのGitリポジトリの構造を理解するための良い出発点です。
-
Helm
-
Helmマルチチャート
-
HelmとKustomize
-
Kustomize
-
マニフェスト
Helmを使用した例。私たちは、ローカルクラスタに helm exampleをデプロイしています。
リポジトリには、Helmチャートとデプロイメントを構成するためのオプションの`fleet.yaml`が含まれています。
namespace: fleet-helm-example
# Custom helm options
helm:
# The release name to use. If empty a generated release name will be used
releaseName: guestbook
# The directory of the chart in the repo. Also any valid go-getter supported
# URL can be used there is specify where to download the chart from.
# If repo below is set this value if the chart name in the repo
chart: ""
# An https to a valid Helm repository to download the chart from
repo: ""
# Used if repo is set to look up the version of the chart
version: ""
# Force recreate resource that can not be updated
force: false
# How long for helm to wait for the release to be active. If the value
# is less that or equal to zero, we will not wait in Helm
timeoutSeconds: 0
# Custom values that will be passed as values.yaml to the installation
values:
replicas: 2
単一のリポジトリから複数のチャートをデプロイする 例。これは前の例に似ていますが、サブフォルダーから3つのHelmチャートをデプロイし、それぞれが独自の`fleet.yaml`で構成されています。
kubectl apply -n fleet-local -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: helm
spec:
repo: https://github.com/rancher/fleet-examples
paths:
- single-cluster/helm-multi-chart
EOF
Kustomizeを使用してサードパーティのHelmチャートを変更する例。Kubernetesのサンプルゲストブックアプリケーションを、サードパーティのソースからダウンロードしたHelmチャートとしてパッケージ化し、Kustomizeを使用してHelmチャートを変更します。アプリは、fleet-helm-kustomize-exampleネームスペースにデプロイされます。
kubectl apply -n fleet-local -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: helm
spec:
repo: https://github.com/rancher/fleet-examples
paths:
- single-cluster/helm-kustomize
EOF
`fleet.yaml`には、必要な`kustomize:``kustomization.yaml`へのパスを指定するキーがあります:
kustomize:
# To use a kustomization.yaml different from the one in the root folder
dir: ""
kubectl apply -n fleet-local -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: helm
spec:
repo: https://github.com/rancher/fleet-examples
paths:
- single-cluster/kustomize
EOF
生のKubernetes YAMLを使用した 例です。
kubectl apply -n fleet-local -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: helm
spec:
repo: https://github.com/rancher/fleet-examples
paths:
- single-cluster/manifests
EOF
マルチクラスターの例
以下の例では、複数のクラスターに同時にマルチGitリポジトリをデプロイし、各ターゲットごとに異なる設定でアプリを構成します。
-
Helm
-
Helm外部
-
HelmとKustomize
-
Kustomize
-
マニフェスト
Helmを使用した例。 helm exampleをデプロイし、ターゲットクラスターごとにカスタマイズしています。
リポジトリには、Helmチャートとデプロイメントを構成するためのオプションの`fleet.yaml`が含まれています。`fleet.yaml`は、クラスターのラベルに応じて異なるデプロイメントオプションを構成するために使用されます:
namespace: fleet-mc-helm-example
targetCustomizations:
- name: dev
helm:
values:
replication: false
clusterSelector:
matchLabels:
env: dev
- name: test
helm:
values:
replicas: 3
clusterSelector:
matchLabels:
env: test
- name: prod
helm:
values:
serviceType: LoadBalancer
replicas: 3
clusterSelector:
matchLabels:
env: prod
デプロイメントを作成するために、カスタムリソースをアップストリームクラスターに適用します。デフォルトでは、fleet-default 名前空間にはダウンストリームクラスターリソースが含まれています。チャートは、targets: の下にある任意のエントリと一致するラベル付きクラスターリソースを持つfleet-defaultネームスペース内のすべてのクラスターにデプロイされます。
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: helm
namespace: fleet-default
spec:
repo: https://github.com/rancher/fleet-examples
paths:
- multi-cluster/helm
targets:
- name: dev
clusterSelector:
matchLabels:
env: dev
- name: test
clusterSelector:
matchLabels:
env: test
- name: prod
clusterSelector:
matchLabels:
env: prod
アップストリームクラスターにgitrepoリソースを適用することにより、fleetはリポジトリの監視を開始し、デプロイメントを作成します:
kubectl apply -n fleet-default -f gitrepo.yaml
サードパーティのソースからダウンロードされたHelmチャートを使用し、ターゲットクラスターごとにカスタマイズした 例です。カスタマイズは前の例と似ています。
デプロイメントを作成するために、カスタムリソースをアップストリームクラスターに適用します。デフォルトでは、fleet-default`ネームスペースにはダウンストリームクラスターリソースが含まれています。チャートは、`targets: の下にある任意のエントリと一致するラベル付きクラスターリソースを持つfleet-defaultネームスペース内のすべてのクラスターにデプロイされます。
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: helm-external
namespace: fleet-default
spec:
repo: https://github.com/rancher/fleet-examples
paths:
- multi-cluster/helm-external
targets:
- name: dev
clusterSelector:
matchLabels:
env: dev
- name: test
clusterSelector:
matchLabels:
env: test
- name: prod
clusterSelector:
matchLabels:
env: prod
アップストリームクラスターにgitrepoリソースを適用することにより、fleet はリポジトリ の監視を開始し、デプロイメントを作成します:
kubectl apply -n fleet-default -f gitrepo.yaml
サードパーティのHelmチャートを修正するために Kustomizeを使用した例です。Kubernetesのサンプルゲストブックアプリケーションを、サードパーティのソースからダウンロードしたHelmチャートとしてパッケージ化し、Kustomizeを使用してHelmチャートを変更します。アプリは、fleet-helm-kustomize-exampleネームスペースにデプロイされます。
アプリケーションは、環境ごとに次のようにカスタマイズされます:
-
開発クラスター:Redisリーダーのみがデプロイされ、フォロワーはデプロイされません。
-
テストクラスター:フロントデプロイメントを3にスケールします。
-
本番クラスター:フロントデプロイメントを3にスケールし、サービスの種類をLoadBalancerに設定します。
`fleet.yaml`は、クラスターのラベルに応じて使用されるオーバーレイを制御するために使用されます。
fleet.yamlnamespace: fleet-mc-kustomize-example targetCustomizations: - name: dev clusterSelector: matchLabels: env: dev kustomize: dir: overlays/dev - name: test clusterSelector: matchLabels: env: test kustomize: dir: overlays/test - name: prod clusterSelector: matchLabels: env: prod kustomize: dir: overlays/prodデプロイメントを作成するために、カスタムリソースをアップストリームクラスターに適用します。デフォルトでは、
fleet-default名前空間にはダウンストリームクラスターリソースが含まれています。チャートは、`targets:`の下にある任意のエントリと一致するラベルが付いたクラスターリソースが存在するfleet-defaultのネームスペース内のすべてのクラスターにデプロイされます。gitrepo.yamlkind: GitRepo apiVersion: fleet.cattle.io/v1alpha1 metadata: name: helm-kustomize namespace: fleet-default spec: repo: https://github.com/rancher/fleet-examples paths: - multi-cluster/helm-kustomize targets: - name: dev clusterSelector: matchLabels: env: dev - name: test clusterSelector: matchLabels: env: test - name: prod clusterSelector: matchLabels: env: prodアップストリームクラスターにgitrepoリソースを適用することにより、fleetはリポジトリの監視を開始し、デプロイメントを作成します:
kubectl apply -n fleet-default -f gitrepo.yaml
Kustomizeを使用して、ターゲットクラスターごとにカスタマイズした例です。
`fleet.yaml`のカスタマイズは、「Helm & Kustomize」の例と同じです。
デプロイメントを作成するために、カスタムリソースをアップストリームクラスターに適用します。デフォルトでは、`fleet-default`ネームスペースにはダウンストリームクラスターリソースが含まれています。チャートは、`targets:`の下にある任意のエントリと一致するラベルが付いたクラスターリソースが存在するfleet-defaultネームスペース内のすべてのクラスターにデプロイされます。
kubectl apply -n fleet-default -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: kustomize
namespace: fleet-default
spec:
repo: https://github.com/rancher/fleet-examples
paths:
- multi-cluster/kustomize
targets:
- name: dev
clusterSelector:
matchLabels:
env: dev
- name: test
clusterSelector:
matchLabels:
env: test
- name: prod
clusterSelector:
matchLabels:
env: prod
EOF
アップストリームクラスターにgitrepoリソースを適用することにより、fleetはリポジトリの監視を開始し、デプロイメントを作成します:
生のKubernetes YAMLを使用して、ターゲットクラスターごとにカスタマイズした例です。アプリケーションは、環境ごとに次のようにカスタマイズされます:
-
開発クラスター:Redisリーダーのみがデプロイされ、フォロワーはデプロイされません。
-
テストクラスター:フロントデプロイメントを3にスケールします。
-
本番クラスター:フロントデプロイメントを3にスケールし、サービスの種類をLoadBalancerに設定します。
`fleet.yaml`は、クラスターのラベルに応じて使用される’yaml’オーバーレイを制御するために使用されます。
fleet.yamlnamespace: fleet-mc-manifest-example targetCustomizations: - name: dev clusterSelector: matchLabels: env: dev yaml: overlays: # Refers to overlays/noreplication folder - noreplication - name: test clusterSelector: matchLabels: env: test yaml: overlays: # Refers to overlays/scale3 folder - scale3 - name: prod clusterSelector: matchLabels: env: prod yaml: # Refers to overlays/servicelb, scale3 folders overlays: - servicelb - scale3デプロイメントを作成するために、カスタムリソースをアップストリームクラスターに適用します。デフォルトでは、`fleet-default`ネームスペースにはダウンストリームクラスターリソースが含まれています。チャートは、`targets:`の下にある任意のエントリと一致するラベルが付いたクラスターリソースが存在するfleet-defaultのネームスペース内のすべてのクラスターにデプロイされます。
gitrepo.yamlkind: GitRepo apiVersion: fleet.cattle.io/v1alpha1 metadata: name: manifests namespace: fleet-default spec: repo: https://github.com/rancher/fleet-examples paths: - multi-cluster/manifests targets: - name: dev clusterSelector: matchLabels: env: dev - name: test clusterSelector: matchLabels: env: test - name: prod clusterSelector: matchLabels: env: prodkubectl apply -n fleet-default -f gitrepo.yaml