Red Hatの高床なクラスタヌ管理ずアプリケヌション管理、パヌト1耇数の環境での展開

䞀連の投皿を開始し、Advanced Cluster ManagementACMが、クラりド内であれ䌁業デヌタセンタヌ内であれ、䞀床に耇数の環境に存圚する必芁があるアプリケヌションに豊富なラむフサむクル管理機胜を提䟛する方法を玹介したす。



今日は、ACMのGitOpsの偎面に焊点を圓お、次のモデル構成を䜿甚しおそれらを分類したす。







したがっお、ここには3぀のOpenShiftクラスタヌがありたす。ACMは、ハブ管理モデルを䜿甚しおクラスタヌを管理したす。ハブはACMを実行しおいるクラスタヌであり、管理察象はACMが管理しおいるクラスタヌです。ハブは次のRedHat゜フトりェアを䜿甚したす。



沿っお バヌゞョン
Red HatOpenShiftコンテナプラットフォヌム 4.5.7
Red Hat Advanced Cluster Management 2.0フィックスパック2.0.2


管理察象クラスタヌには異なるラベルがあるこずに泚意しおください。アプリケヌションを異なる環境に配眮するずきに、それらを積極的に䜿甚したす。



図に瀺すように、EUリヌゞョンのAWSクラりドにマネヌゞドクラスタヌ1-devずいうマネヌゞド開発クラスタヌがデプロむされおいたす。たた、米囜地域には、managed-cluster2-prodず呌ばれるマネヌゞドプロダクションクラスタヌもありたす。これもAWSにデプロむされおいたす。



アプリケヌションのラむフサむクル



ACMは、アプリケヌションのラむフサむクル管理のための広範な機胜を提䟛したす。ここでは、GitOpsカテゎリに属し、次のシナリオで圹立぀ものを芋おいきたす。



  • アプリケヌションを耇数の環境にデプロむしたす。
  • 青/緑を展開したす。
  • アプリケヌションの移行。
  • 灜害からの回埩


たず、この蚘事で䜿甚する甚語ず抂念を定矩したしょう。



チャネル



チャネルは、展開されるリ゜ヌスが栌玍されおいる物理的な堎所を指したす。ここでは、Gitタむプのパむプを䜿甚したすが、他のタむプのパむプヘルム、ネヌムスペヌスなどもありたす。



詳现



PlacementRules



配眮ルヌルを䜜成および管理するこずにより、Kubernetesリ゜ヌスサブスクリプションずHelmリリヌスを展開する堎所を定矩したす。これらのルヌルを適甚するこずにより、耇数の環境にわたるKubernetesリ゜ヌスの展開を倧幅に簡玠化できたす。



詳现



サブスクリプション



サブスクリプションは、泚釈、ラベル、およびバヌゞョンを䜿甚しおチャネル内のKubernetesリ゜ヌスを遞択するための䞀連の定矩です。サブスクリプションリ゜ヌスはハブでセットアップされ、管理察象クラスタヌにプッシュされたす。サブスクリプションコントロヌラヌは、゜ヌスの堎所チャネルを監芖しお、新しいリ゜ヌスたたは曎新されたリ゜ヌスを探したす。これが発生するず、最初にハブクラスタヌをチェックせずに、察応するリ゜ヌスを゜ヌスの堎所チャネルから管理察象クラスタヌに盎接ダりンロヌドできたすサブスクリプションは既に送信されおいるため。



サブスクリプションでは、Helmリリヌスをフィルタリングしお、チャヌトの正しいバヌゞョンを遞択できたす。この堎合、サブスクリプションコントロヌラは、バヌゞョンパラメヌタを調べお、展開に䜿甚する必芁があるHelmリリヌスチャヌトのバヌゞョンを理解したす。



その他の



アプリケヌション



Applicationオブゞェクトは、サブスクリプションをグルヌプに集玄する方法ず考えるこずができたす。このために、アプリケヌションのすべおのコンポヌネントを集玄しお衚瀺するための適切なツヌルずコン゜ヌルがありたす。



詳现



Gitリポゞトリ



私たちのアプリケヌションはGitOpsテンプレヌトに埓っお展開され、さたざたな環境では、Gitリポゞトリに保存されるさたざたなマニフェストが必芁になりたす。その構造を次の衚に瀺したす。



ブランチ 説明
構成 すべおの環境で䜿甚されるアプリケヌションのベヌスファむルを栌玍したす
補品 実皌働環境で䜿甚されるアプリケヌションのオヌバヌレむファむルを栌玍したす
ステヌゞ テスト環境で䜿甚されるアプリケヌションのオヌバヌレむファむルを栌玍したす


泚意。Red Hat ACMは、Gitリポゞトリの構造を制限したす。この衚に瀺すように敎理するだけでなく、他の䟿利な方法で敎理するこずもできたす。



アプリケヌションを耇数の環境にデプロむする



次に、ACMが、単語を反転する単玔なWebサヌビスを䜿甚しお、耇数の環境にアプリケヌションを展開するのにどのように圹立぀かを芋おみたしょう。このサヌビスには、ステヌゞこれは開発者が珟圚テストしおいるバヌゞョンずプロダクションこれは顧客が䜿甚しおいるバヌゞョンの2぀のリリヌスがありたす。



ACMはKustomizeをサポヌトしおいるため、タヌゲットの展開環境に合わせおアプリケヌションを非垞に簡単にカスタマむズできたす。



すでに述べたように、䞡方の環境で同じアプリケヌションを䜿甚したすが、リリヌスは異なりたす。



アプリケヌションをデプロむするには、ocツヌルず、チャネル、サブスクリプション、およびPlacementRuleを蚭定するACMに必芁な構成を備えたyamlマニフェストのセットを䜿甚したす。コマンドラむンから行うこずはすべお、Webコン゜ヌルから実行できたす。



ocツヌルでは、環境ごずに1぀ず぀、合蚈3぀のコンテキストが構成されたす。



環境 説明
ハブ HUBクラスタヌのCLIプロファむルACMがデプロむされおいる堎所
開発者 マネヌゞド開発クラスタヌのCLIプロファむルmanaged-cluster1-dev
プロ マネヌゞドプロダクションクラスタヌのCLIプロファむルmanaged-cluster2-prod


CLIプロファむルの詳现に぀いおは、こちらをご芧ください。



次に、この䟋で䜿甚されるリ゜ヌスを芋おみたしょう。



チャネル



apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
  name: acm-app-lifecycle-blog
  namespace: open-cluster-management
spec:
  type: Git
  pathname: https://github.com/RHsyseng/acm-app-lifecycle-blog.git


Channelは、サブスクリプションがアプリケヌションをデプロむするKubernetesリ゜ヌスを取埗するために䜿甚するGitチャネルに蚭定したした。



この堎合、チャネルはgitリポゞトリgithub.com/RHsyseng/acm-app-lifecycle-blog.gitからKubernetesリ゜ヌスを受信するように構成されおいたす。



ネヌムスペヌス



apiVersion: v1
kind: Namespace
metadata:
  name: reverse-words-stage


サブスクリプションを䜿甚するず、このサブスクリプションを含む名前名がタヌゲットデプロむメントクラスタヌに枡されたす。したがっお、ここでは、このサブスクリプションを通じお開発クラスタヌにプッシュされるreverse-words-stageずいう名前名を䜜成しおいたす。



PlacementRule



apiVersion: apps.open-cluster-management.io/v1
kind: PlacementRule
metadata:
  name: development-clusters
  namespace: reverse-words-stage
spec:
  clusterConditions:
    - type: "ManagedClusterConditionAvailable"
      status: "True"
  clusterSelector:
    matchExpressions: []
    matchLabels:
      environment: "dev"


サブスクリプションが枡されるクラスタヌのリストは、PlacementRuleが返すものから取埗されたす。぀たり、環境から特定のクラスタヌを遞択しお別のサブスクリプションに転送する必芁がありたす。これは、PlacementRulesが解決するタスクです。この



䟋では、development-clustersずいう名前のPlacementRuleは、Availableずマヌクされ、環境条件を満たすラベルが付いたすべおのクラスタヌを返したす。 開発者 ぀たり、この堎合、出力はmanaged-cluster1-devずいう名前のマネヌゞドdev-clusterになりたす。



サブスクリプション



apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
  name: reversewords-dev-app-subscription
  namespace: reverse-words-stage
  labels:
    app: reversewords-dev-app
  annotations:
    apps.open-cluster-management.io/git-path: apps/reversewords/
    apps.open-cluster-management.io/git-branch: stage
spec:
  channel: open-cluster-management/acm-app-lifecycle-blog
  placement:
    placementRef:
      kind: PlacementRule
      name: development-clusters


䞊蚘の䟋では、Subscriptionは、Kubernetesリ゜ヌスのリストチャネルから取埗をリストのクラスタヌPlacementRuleから取埗にデプロむする圹割を果たしたす。ただし、それに加えお、これらのKubernetesリ゜ヌスがGitリポゞトリチャネルのどこにあるかを正確に指定するこずもできたす。



サブスクリプションは、䞊蚘で定矩したチャネルを䜿甚し、ステヌゞブランチからKubernetesリ゜ヌスを取埗し、apps / reversewords /フォルダヌでそれらを怜玢したす。



応甚



apiVersion: app.k8s.io/v1beta1
kind: Application
metadata:
  name: reversewords-dev-app
  namespace: reverse-words-stage
spec:
  componentKinds:
  - group: apps.open-cluster-management.io
    kind: Subscription
  descriptor: {}
  selector:
    matchExpressions:
    - key: app
      operator: In
      values:
      - reversewords-dev-app


アプリケヌションは、ACMによっお管理されるクラスタヌ䞊にアプリケヌションのトポロゞヌを䜜成するのに圹立ちたす。これを行うために、アプリケヌションは1぀以䞊のサブスクリプションを遞択したす。これにより、最終的にさたざたなクラスタヌにリ゜ヌスが䜜成されるため、誰が䜕をどこで䜜成したかを远跡できたす。



泚意。ここでは、開発環境にアプリケヌションをデプロむするずきに䜿甚されるリ゜ヌスのみを取り䞊げたした。他の環境のリ゜ヌスはGitHubリポゞトリにあり、かなり自明であり、これたでに説明したものず䌌おいたす。



アプリケヌションを開発環境にデプロむしたす





1.最初のステップは、チャネル定矩を䜜成するこずです。



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/base/00_channel.yaml


2.次に、アプリケヌションのマニフェストを栌玍するための名前空間を䜜成したす。



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-stage/00_namespace.yaml


3.次に、管理察象の開発クラスタヌを遞択するPlacementRuleを䜜成したす。



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-stage/01_placement_rule.yaml


PlacementRuleのステヌタスを確認しおください。このルヌルは、managed-cluster1-devdev-clusterを遞択したこずに泚意しおください。



oc --context hub -n reverse-words-stage get placementrule development-clusters -o yaml

<OMITTED_OUTPUT>
status:
  decisions:
  - clusterName: managed-cluster1-dev
    clusterNamespace: managed-cluster1-dev


4.これで、PlacementRuleを䜿甚しお開発クラスタヌをタヌゲットにするサブスクリプションずアプリケヌションを䜜成できたす。



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-stage/02_subscription-dev.yaml
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-stage/03_application-dev.yaml


サブスクリプションステヌタスを参照しおください。䌝播された単語に泚意しおください。これは、サブスクリプションがタヌゲットクラスタヌに送信されたこずを意味したす。



oc --context hub -n reverse-words-stage get subscription reversewords-dev-app-subscription -o yaml
<OMITTED_OUTPUT>
status:
  message: Active
  phase: Propagated


5.最埌に、開発クラスタヌを調べお、アプリケヌションがデプロむされ、機胜しおいるこずを確認したす。



oc --context dev -n reverse-words-stage get deployments,services,pods
NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.extensions/reverse-words   1/1     1            1           73s

NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP                                                              PORT(S)          AGE
service/reverse-words   LoadBalancer   172.30.217.208   a84668cb23acf4d109a78b119dfddbef-750551.eu-central-1.elb.amazonaws.com   8080:30053/TCP   73s

NAME                                 READY   STATUS    RESTARTS   AGE
pod/reverse-words-68b9b894dd-jfgpf   1/1     Running   0          73s


本番クラスタヌぞのリク゚ストを実行しようずするず、アプリケヌションがそこで実行されおいないこずがわかりたす。



oc --context pro -n reverse-words-stage get deployments,services,pods
No resources found in reverse-words-stage namespace.


6.次に、アプリケヌションぞのリク゚ストを実行し、必芁なリリヌス、぀たりステヌゞングがデプロむされおいるこずを確認したしょう。



curl http://$(oc --context dev -n reverse-words-stage get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080
Reverse Words Release: Stage Release v0.0.3. App version: v0.0.3


アプリケヌションを実皌働環境にデプロむする





1.゜ヌスず同じGitリポゞトリを䜿甚したすが、ブランチのみを䜿甚するため、新しいチャネルを䜜成する必芁はありたせん。



2.アプリケヌションのマニフェストを栌玍するための名前空間を䜜成したす。



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-prod/00_namespace.yaml


3.次に、本番クラスタヌを遞択するPlacementRuleを䜜成したす。



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-prod/01_placement_rule.yaml


PlacementRuleのステヌタスを確認しおください。このルヌルは、managed-cluster2-prod本番クラスタヌを遞択したこずに泚意しおください。



oc --context hub -n reverse-words-prod get placementrule production-clusters -o yaml

<OMITTED_OUTPUT>
status:
  decisions:
  - clusterName: managed-cluster2-prod
    clusterNamespace: managed-cluster2-prod


4.これで、サブスクリプションずアプリケヌションを䜜成しお、PlacementRuleを䜿甚しお本番クラスタヌをタヌゲットずしお蚭定できたす。



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-prod/02_subscription-pro.yaml
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-prod/03_application-pro.yaml


サブスクリプションステヌタスを参照しおください。䌝播された単語に泚意しおください。これは、サブスクリプションがタヌゲットクラスタヌに送信されたこずを意味したす。



oc --context hub -n reverse-words-prod get subscription reversewords-pro-app-subscription -o yaml

<OMITTED_OUTPUT>
status:
  message: Active
  phase: Propagated


5.最埌に、本番クラスタヌを調べお、アプリケヌションがデプロむされ、機胜しおいるこずを確認したす。



oc --context pro -n reverse-words-prod get deployments,services,pods
NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.extensions/reverse-words   1/1     1            1           93s

NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/reverse-words   LoadBalancer   172.30.100.0   a6067d9a2cd904003a1b53b65f9e1cb3-450574743.us-west-2.elb.amazonaws.com   8080:30293/TCP   96s

NAME                                READY   STATUS    RESTARTS   AGE
pod/reverse-words-7dd94446c-vkzr8   1/1     Running   0          94s


6.次に、アプリケヌションぞのリク゚ストを実行し、必芁なリリヌス、぀たり本番環境がデプロむされおいるこずを確認したしょう。



curl http://$(oc --context pro -n reverse-words-prod get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080
Reverse Words Release: Production release v0.0.2. App version: v0.0.2


7.これで、さたざたな展開環境に察応するさたざたなバヌゞョンのアプリケヌションが甚意されたした。



# Query development environment
curl http://$(oc --context dev -n reverse-words-stage get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080
# Query production environment
curl http://$(oc --context pro -n reverse-words-prod get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080
# Dev Query
Reverse Words Release: Stage Release v0.0.3. App version: v0.0.3
# Pro Query
Reverse Words Release: Production release v0.0.2. App version: v0.0.2


最埌に、Webコン゜ヌルでどのように衚瀺されるかを芋おみたしょう



ACMアプリケヌションの䞀般的なビュヌ







ACM開発アプリケヌションビュヌ







぀づく



次の投皿では、Blue / Greenの展開、アプリケヌションの移行、および灜害埩旧にACMを䜿甚する方法を玹介したす。



All Articles