OpenShift 向け GitOps の玹介

本日は、GitOpsの原則ずモデル、そしおこれらのモデルがOpenShiftプラットフォヌム䞊でどのように実装されおいるかに぀いお解説したす。このトピックに関するむンタラクティブガむドはこちらをご芧ください。 リンク.

OpenShift 向け GitOps の玹介

簡単に蚀うず、GitOpsずは、Gitプルリク゚ストを甚いおむンフラストラクチャずアプリケヌションの構成を管理するための䞀連のプラクティスです。GitOpsは、Gitリポゞトリをシステムの状態に関する単䞀の情報源ずしお扱い、その状態ぞのあらゆる倉曎を完党に远跡・監査可胜にしたす。

GitOpsにおける倉曎远跡の考え方は新しいものではなく、アプリケヌションの゜ヌスコヌドを扱う際に、このアプロヌチは長幎にわたりほが普遍的に䜿甚されおきたした。GitOpsは、むンフラストラクチャずアプリケヌションの構成を管理する際に、゜ヌスコヌド管理ず同様の機胜レビュヌチェック、プルリク゚スト、タグなどを実装するだけで、゜ヌスコヌド管理ず同様のメリットを提䟛したす。

GitOps には孊術的な定矩やルヌルセットはなく、実践を導く䞀連の原則のみがありたす。

  • システムの宣蚀的な説明は Git リポゞトリ (構成、監芖など) に保存されたす。
  • 状態の倉曎はプル リク゚ストを通じお行われたす。
  • 実行䞭のシステムの状態は、Git プッシュ リク゚ストを䜿甚しおリポゞトリ内のデヌタず䞀臎されたす。

GitOpsの原則

  • システム定矩は゜ヌスコヌドずしお蚘述されたす。

システム構成はコヌドずしお扱われるため、Gitリポゞトリに保存され、自動的にバヌゞョン管理されたす。Gitリポゞトリは、信頌できる唯䞀の情報源ずしお機胜したす。このアプロヌチにより、システムぞの倉曎のロヌルアりトずロヌルバックが容易になりたす。

  • システムの望たしい状態ず構成はGitで定矩され、バヌゞョン管理されたす。

システムの望たしい状態をGitに保存し、バヌゞョン管理するこずで、システムやアプリケヌションぞの倉曎を簡単にロヌルバックしたりロヌルバックしたりできたす。たた、Gitのセキュリティメカニズムを䜿甚しお、コヌドの所有暩を管理し、その信頌性を怜蚌するこずもできたす。

  • プルリク゚ストを䜿甚しお構成の倉曎を自動的に適甚できたす

Gitのプルリク゚ストを䜿甚するず、リポゞトリ内の蚭定ぞの倉曎の適甚方法を簡単に制埡できたす。䟋えば、他のチヌムメンバヌによるレビュヌやCIテストの実行などが可胜です。

管理者暩限をあれこれず䞎える必芁もありたせん。蚭定の倉曎をコミットするには、蚭定が保存されおいるGitリポゞトリに察する適切な暩限があれば十分です。

  • 制埡䞍胜な構成ドリフトの問題を修正

システムの望たしい状態がGitリポゞトリに保存されたら、あずはシステムの珟圚の状態が望たしい状態ず䞀臎しおいるかどうかを監芖する゜フトりェアを芋぀けるだけです。もし䞀臎しおいない堎合、この゜フトりェアは蚭定に応じお、矛盟を自動的に修正するか、構成のずれに぀いお通知するはずです。

OpenShift 向け GitOps モデル

クラスタ内リ゜ヌス調敎ツヌル

このモデルでは、クラスタにはGitリポゞトリ内のKubernetesリ゜ヌスYAMLファむルず実際のクラスタリ゜ヌスを比范するコントロヌラが存圚したす。䞍䞀臎が怜出されるず、コントロヌラは通知を送信し、堎合によっおは䞍䞀臎を解決するためのアクションを実行したす。このGitOpsモデルは、Anthos Config ManagementずWeaveworks Fluxで䜿甚されおいたす。

OpenShift 向け GitOps の玹介

倖郚リ゜ヌスリコンサむラプッシュ

このモデルは、GitリポゞトリずKubernetesクラスタヌのペアでリ゜ヌス同期を担圓する8぀以䞊のコントロヌラヌを持぀、前述のモデルのバリ゚ヌションず考えるこずができたす。ここでの違いは、各マネヌゞドクラスタヌが必ずしも個別のコントロヌラヌを持぀必芁がないこずです。GitずKubernetesクラスタヌのペアは、倚くの堎合CRDカスタムリ゜ヌス定矩ずしお定矩され、コントロヌラヌがどのように同期を実行するかを蚘述できたす。このモデルでは、コントロヌラヌはCRDで指定されたGitリポゞトリず、同じくCRDで指定されたKubernetesクラスタヌリ゜ヌスを比范し、比范結果に基づいお適切なアクションを実行したす。特に、このようなGitOpsモデルはArgoCDで䜿甚されおいたす。

OpenShift 向け GitOps の玹介

OpenShift プラットフォヌム䞊の GitOps

マルチクラスタKubernetesむンフラストラクチャの管理

Kubernetes の導入ずマルチクラりド戊略および゚ッゞ コンピュヌティングの人気の高たりにより、顧客あたりの OpenShift クラスタヌの平均数も増加しおいたす。

たずえば、゚ッゞ コンピュヌティングでは、単䞀の顧客が数癟たたは数千のクラスタヌを展開するこずがあり、パブリック クラりドずオンプレミス クラりド党䜓で耇数の独立した、たたは調敎された OpenShift クラスタヌを管理する必芁が生じたす。

同時に、解決しなければならない問題が数倚くありたすが、特に次のような問題です。

  • クラスタヌが同䞀の状態構成、監芖、ストレヌゞなどにあるこずを確認したす
  • 既知の状態からクラスタヌを再䜜成 (たたは埩元) したす。
  • 既知の状態に基づいお新しいクラスタヌを䜜成したす。
  • 耇数の OpenShift クラスタヌに倉曎をロヌルアりトしたす。
  • 耇数の OpenShift クラスタヌにわたっお倉曎をロヌルバックしたす。
  • テンプレヌト化された構成をさたざたな環境にリンクしたす。

アプリケヌション構成

アプリケヌションはラむフサむクルを通じお、本番環境のクラスタに到達する前に、耇数のクラスタ開発、ステヌゞングなどを通過するこずがよくありたす。さらに、可甚性ずスケヌラビリティの芁件により、お客様は耇数のオンプレミスクラスタやパブリッククラりドリヌゞョンにアプリケヌションをデプロむするこずがよくありたす。

この堎合、次のタスクを解決する必芁がありたす。

  • クラスタヌ (開発、ステヌゞなど) 間でのアプリケヌション (バむナリ、構成など) の移動を提䟛したす。
  • 耇数の OpenShift クラスタヌにわたっおアプリケヌション (バむナリ、構成など) ぞの倉曎をロヌルアりトしたす。
  • アプリケヌションの倉曎を以前の既知の状態にロヌルバックしたす。

OpenShift GitOps のナヌスケヌス

1. Gitリポゞトリからの倉曎の適甚

クラスタヌ管理者は、OpenShift クラスタヌ構成を Git リポゞトリに保存し、それを自動的に適甚しお、簡単に新しいクラスタヌを䜜成し、Git リポゞトリに保存されおいる既知の状態ず同䞀の状態にするこずができたす。

2. Secret Managerずの同期

管理者は、OpenShift シヌクレットを Vault などの適切な゜フトりェアず同期し、この目的のために特別に蚭蚈されたツヌルを䜿甚しお管理できるずいうメリットも埗られたす。

3. 構成ドリフト制埡

OpenShift GitOps 自䜓が実際の構成ずリポゞトリで指定された構成の䞍䞀臎を怜出しお譊告し、ドリフトに迅速に察応できるようにすれば、管理者は倧賛成です。

4. 構成ドリフト通知

これらは、管理者が構成ドリフトの事䟋を迅速に把握し、自䞻的に適切な察策を迅速に講じたい堎合に圹立ちたす。

5. ドリフト䞭の構成の手動同期

管理者は、構成のドリフトが発生した堎合に OpenShift クラスタヌを Git リポゞトリず同期しお、クラスタヌを以前の既知の状態に玠早く戻すこずができたす。

6.ドリフト䞭の構成の自動同期

管理者は、ドリフトが怜出されたずきに OpenShift クラスタヌがリポゞトリず自動的に同期するように構成するこずもできたす。これにより、クラスタヌ構成は垞に Git の構成ず䞀臎するようになりたす。

7. 耇数のクラスタヌ – XNUMX぀のリポゞトリ

管理者は、耇数の異なる OpenShift クラスタヌの構成を単䞀の Git リポゞトリに保存し、必芁に応じお遞択的に適甚できたす。

8. クラスタ構成の階局継承

管理者はリポゞトリ内でクラスタヌ蚭定の階局ステヌゞ、本番、アプリポヌトフォリオなど、継承を含むを定矩できたす。぀たり、蚭定をどのように適甚するか1぀たたは耇数のクラスタヌを決定できたす。

たずえば、管理者が Git リポゞトリに階局を定矩した堎合、「本番クラスタヌ (prod) → システム X のクラスタヌ → システム X の本番クラスタヌ」、システム X の本番クラスタヌに察しお次の構成が結合されたす。

  • すべおの本番環境クラスタヌに共通の構成。
  • X システム クラスタヌの構成。
  • X システムの運甚クラスタヌの構成。

9. テンプレヌトずオヌバヌラむド構成

管理者は、継承された構成ずその倀のセットをオヌバヌラむドしお、たずえば、それらが適甚される特定のクラスタヌの構成を埮調敎できたす。

10. 構成、アプリケヌション構成の遞択的な包含ず陀倖

管理者は、特定の特性を持぀クラスタヌに特定の構成を適甚するか適甚しないかの条件を蚭定できたす。

11. テンプレヌトのサポヌト

開発者は、アプリケヌション リ゜ヌスの定矩方法 (Helm Chart、プレヌン Kubernetes yaml など) を遞択しお、特定のアプリケヌションごずに最も適切な圢匏を䜿甚できるずいうメリットが埗られたす。

OpenShift 䞊の GitOps ツヌル

アルゎCD

ArgoCDは倖郚リ゜ヌス調敎モデルを実装し、クラスタヌずGitリポゞトリ間の1察倚関係をオヌケストレヌションするための集䞭型UIを提䟛したす。このプログラムの欠点は、ArgoCDが動䜜しおいないずきはアプリケヌションを管理できないこずです。

公匏サむト

Flux

Flux は On-Cluster Resource Reconcile モデルを実装しおいるため、定矩リポゞトリの集䞭管理が実珟されおいたせん。これが匱点です。䞀方で、集䞭管理されおいないからこそ、1 ぀のクラスタヌに障害が発生しおもアプリケヌション管理胜力が維持されたす。

公匏サむト

OpenShiftにArgoCDをむンストヌルする

ArgoCD は優れたコマンドラむン むンタヌフェむスず Web コン゜ヌルを提䟛するため、ここでは Flux やその他の代替手段に぀いおは説明したせん。

OpenShift 4 に ArgoCD をデプロむするには、クラスタヌ管理者ずしお次の手順を実行したす。

OpenShift ぞの ArgoCD コンポヌネントのデプロむ

# Create a new namespace for ArgoCD components
oc create namespace argocd
# Apply the ArgoCD Install Manifest
oc -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.2.2/manifests/install.yaml
# Get the ArgoCD Server password
ARGOCD_SERVER_PASSWORD=$(oc -n argocd get pod -l "app.kubernetes.io/name=argocd-server" -o jsonpath='{.items[*].metadata.name}')

ArgoCD Server を OpenShift Route から参照できるように修正する

# Patch ArgoCD Server so no TLS is configured on the server (--insecure)
PATCH='{"spec":{"template":{"spec":{"$setElementOrder/containers":[{"name":"argocd-server"}],"containers":[{"command":["argocd-server","--insecure","--staticassets","/shared/app"],"name":"argocd-server"}]}}}}'
oc -n argocd patch deployment argocd-server -p $PATCH
# Expose the ArgoCD Server using an Edge OpenShift Route so TLS is used for incoming connections
oc -n argocd create route edge argocd-server --service=argocd-server --port=http --insecure-policy=Redirect

ArgoCD Cliツヌルのデプロむ

# Download the argocd binary, place it under /usr/local/bin and give it execution permissions
curl -L https://github.com/argoproj/argo-cd/releases/download/v1.2.2/argocd-linux-amd64 -o /usr/local/bin/argocd
chmod +x /usr/local/bin/argocd

ArgoCDサヌバ管理者パスワヌドの倉曎

# Get ArgoCD Server Route Hostname
ARGOCD_ROUTE=$(oc -n argocd get route argocd-server -o jsonpath='{.spec.host}')
# Login with the current admin password
argocd --insecure --grpc-web login ${ARGOCD_ROUTE}:443 --username admin --password ${ARGOCD_SERVER_PASSWORD}
# Update admin's password
argocd --insecure --grpc-web --server ${ARGOCD_ROUTE}:443 account update-password --current-password ${ARGOCD_SERVER_PASSWORD} --new-password

これらの手順を完了するず、ArgoCD WebUI Web コン゜ヌルたたは ArgoCD Cli コマンドラむン ツヌルを䜿甚しお ArgoCD Server を操䜜できるようになりたす。
https://blog.openshift.com/is-it-too-late-to-integrate-gitops/

GitOps – 決しお遅すぎるこずはない

「列車が駅を出発した」ずは、䜕かを実行する機䌚を逃しおしたった時の蚀い方です。OpenShiftの堎合、このクヌルな新しいプラットフォヌムをすぐに䜿い始めたいずいう思いが、ルヌト、デプロむメント、その他のOpenShiftオブゞェクトの管理ず保守においおたさにこのような状況を生み出すこずがよくありたす。しかし、機䌚は垞に完党に逃しおしたうのでしょうか

シリヌズの続き GitOps今日は、手䜜業で䜜成したアプリケヌションずそのリ゜ヌスを、GitOps ですべお管理されるプロセスに倉換する方法をご玹介したす。そのためには、たず httpd アプリケヌションを手動でデプロむしたす。䞋のスクリヌンショットは、名前空間、デプロむメント、サヌビスを䜜成し、そのサヌビスを公開しおルヌトを䜜成する方法を瀺しおいたす。

oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/namespace.yaml
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/deployment.yaml
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/service.yaml
oc expose svc/httpd -n simple-app

さお、手䜜業で構築したアプリケヌションが完成したした。次に、可甚性を損なうこずなく、GitOps 管理に移行する必芁がありたす。簡単に蚀うず、次のような凊理です。

  • コヌド甚の Git リポゞトリを䜜成したす。
  • 珟圚のオブゞェクトを゚クスポヌトし、Git リポゞトリにアップロヌドしたす。
  • GitOps ツヌルの遞択ずデプロむ。
  • このツヌルキットにリポゞトリを远加したしょう。
  • GitOps ツヌルキットでアプリケヌションを定矩したす。
  • GitOps ツヌルキットを䜿甚しおアプリケヌションのテスト実行を実行したす。
  • GitOps ツヌルを䜿甚しおオブゞェクトを同期したす。
  • オブゞェクトのプルヌニングず自動同期を有効にしたす。

前に述べたように статьеGitOps では、Kubernetes クラスタヌ内のすべおのオブゞェクトに関する情報源は Git リポゞトリのみずなりたす。以䞋では、組織内で既に Git リポゞトリが䜿甚されおいるこずを前提ずしおいたす。リポゞトリはパブリックでもプラむベヌトでも構いたせんが、Kubernetes クラスタヌからアクセスできる必芁がありたす。アプリケヌションコヌドず同じリポゞトリでも、デプロむメント専甚に䜜成された別のリポゞトリでも構いたせん。リポゞトリにはシヌクレット、ルヌト、その他のセキュリティ䞊重芁な情報が保存されるため、厳栌な暩限蚭定を掚奚したす。

この䟋では、GitHub に新しいパブリックリポゞトリを䜜成したす。リポゞトリの名前は自由に蚭定できたすが、ここでは「blogpost」ずいう名前を䜿甚したす。

オブゞェクトYAMLファむルをロヌカルたたはGitに保存しおいない堎合は、ocたたはkubectlバむナリを䜿甚する必芁がありたす。䞋のスクリヌンショットでは、名前空間、デプロむメント、サヌビス、ルヌトのYAMLをリク゚ストしおいたす。その前に、䜜成したリポゞトリをクロヌンし、そこにcdコマンドで移動したした。

oc get namespace simple-app -o yaml --export > namespace.yaml
oc get deployment httpd -o yaml -n simple-app --export > deployment.yaml
oc get service httpd -o yaml -n simple-app --export > service.yaml
oc get route httpd -o yaml -n simple-app --export > route.yaml

ここで、deployment.yaml ファむルを線集しお、Argo CD が同期できないフィヌルドを削陀したす。

sed -i '/sgeneration: .*/d' deployment.yaml

ルヌトも倉曎する必芁がありたす。たず、耇数行倉数を蚭定し、 ingress: null をその倉数の内容に眮き換えたす。

export ROUTE="  ingress:                                                            
    - conditions:
        - status: 'True'
          type: Admitted"

sed -i "s/  ingress: null/$ROUTE/g" route.yaml

ファむルの敎理は完了したした。あずはGitリポゞトリに保存するだけです。保存埌は、このリポゞトリが唯䞀の情報源ずなり、オブゞェクトぞの手動倉曎は厳犁ずなりたす。

git commit -am ‘initial commit of objects’
git push origin master

さらに、ArgoCDがすでに導入されおいるずいう事実から進めおいきたす導入方法に぀いおは、前の 投皿する。そこで、先ほど䜜成したリポゞトリ䟋のアプリケヌションコヌドを含むをArgo CDに远加したしょう。先ほど䜜成したリポゞトリを指定するこずを忘れないでください。

argocd repo add https://github.com/cooktheryan/blogpost

次に、アプリケヌションを䜜成したす。アプリケヌションは、GitOpsツヌルが䜿甚するリポゞトリずパス、オブゞェクトの管理に必芁なOpenShift、必芁なリポゞトリブランチ、リ゜ヌスの自動同期を実行するかどうかを理解できるように倀を蚭定したす。

argocd app create --project default 
--name simple-app --repo https://github.com/cooktheryan/blogpost.git 
--path . --dest-server https://kubernetes.default.svc 
--dest-namespace simple-app --revision master --sync-policy none

アプリケヌションがArgo CDで定矩されるず、ツヌルは既にデプロむされおいるオブゞェクトをリポゞトリ内の定矩ず照合し始めたす。この䟋では、自動同期ずクリヌンアップが無効になっおいるため、芁玠はただ倉曎されおいたせん。Argo CDむンタヌフェヌスでは、ArgoCDが提䟛するラベルがないため、アプリケヌションのステヌタスは「Out of Sync同期しおいない」になりたす。
このため、埌で同期を実行しおも、オブゞェクトは再デプロむされたせん。

それでは、ファむルに゚ラヌがないこずを確認するためにテスト実行をしおみたしょう。

argocd app sync simple-app --dry-run

゚ラヌがなければ、同期に進むこずができたす。

argocd app sync simple-app

アプリケヌションで argocd get コマンドを実行するず、アプリケヌションのステヌタスが「Healthy」たたは「Synced」に倉わるはずです。これは、Gitリポゞトリ内のすべおのリ゜ヌスが、すでにデプロむされおいるリ゜ヌスず䞀臎しおいるこずを意味したす。

argocd app get simple-app
Name:               simple-app
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          simple-app
URL:                https://argocd-server-route-argocd.apps.example.com/applications/simple-app
Repo:               https://github.com/cooktheryan/blogpost.git
Target:             master
Path:               .
Sync Policy:        <none>
Sync Status:        Synced to master (60e1678)
Health Status:      Healthy
...   

自動同期ずクリヌンアップを有効にしお、手動で䜕も䜜成されず、リポゞトリ内でオブゞェクトが䜜成たたは曎新されるたびにデプロむメントが実行されるようにしたす。

argocd app set simple-app --sync-policy automated --auto-prune

぀たり、圓初 GitOps を䜿甚しおいなかったアプリケヌションを GitOps 管理に移行するこずに成功したした。

出所 habr.com

DDoS 保護機胜を備えた信頌性の高いサむト甚ホスティング、VPS VDS サヌバヌを賌入する 🔥 DDoS攻撃察策付きの信頌性の高いりェブサむトホスティング、VPS/VDSサヌバヌを賌入したしょう | ProHoster