Netflixの製品Spinnakerのマイクロサービスプラクティスを分析する

Netflixは、業界のマイクロサービスおよびDevOps組織のモデルであり、大規模な本番レベルのマイクロサービスで成功を収めています。一部の企業はNetflixよりも前にマイクロサービスを行っていますが、Netflixはおそらく大規模な実稼働レベルのマイクロサービスの中で最も優れています。

Netflixはオープンソースコミュニティに多大な貢献をしており、展開、パッケージング、その他の機能のための多くのオープンソースツールをリリースしています。Spinnakerは、ハイブリッドクラウド環境にデプロイするためのNetflixのオープンソースプロジェクトであり、クラウドプラットフォーム全体のデプロイメントタスクのオーケストレーションを実現できます。NetflixでSpinnakerを使用して、Amazonマシンに毎日4000の変更を公開します。Google CloudもデプロイにSpinnakerを使用しています。また、ビルド時にJenkinsを使用し、bakeと呼ばれるプロセスがあります。bakeはアプリケーションをミラーにパッケージ化してから、デプロイでミラーをデプロイします。NetflixのDevOpsプラクティスは注目に値するものであり、チェックする価値のある多くのプロジェクトとオープンソースツールも持っています。

この記事では主に、Spinnakerの開発モデル、継続的インテグレーション、およびデプロイメントプラクティスを分析します。

サービスアーキテクチャ

Spinnaker複数のマイクロサービスで構成されています。Deckこれは、フロントエンドのページで、ゲートウェイ、すべての呼び出し元のプログラムが通信しオーケストレーションエンジンのハンドルすべての一時的な操作とパイプライン;それは、すべてのクラウドプロバイダーへの変更の呼び出し、およびインデックス/キャッシュがデプロイされたすべてのリソースに責任がある、それがされたアプリケーションを保存するために使用しますメタデータ、プログラム、パイプライン、プロジェクト、および通知のために、様々なクラウドプロバイダーのための不変のVMイメージを生成する画像生成; 使用トリガーパイプラインにによってシステムの継続的な統合の仕事を待っているが、それが可能にステージがためにパイプラインで使用されます; メッセージ通知の責任者; ユーザー権限管理の責任者; 自動カナリア分析提供するため;これライフサイクル構成管理ツールです。GateAPISpinnaker UIapiGate与SpinnakerOrcaCloudDriverFront50RoscoIgorJenkins和Travis CIJenkins / TravisEchoFiatKayentaSpinnakerHalyardSpinnaker

Netflixの製品Spinnakerのマイクロサービスプラクティスを分析する

コードウェアハウス管理

Spinnakerのマイクロサービスは、各マイクロサービスのコードベースを作成することです。GithubのSpinnakerの倉庫にアクセスできます。各マイクロサービスには、対応する倉庫管理コードがあります。プロジェクトを入力して、ブランチ戦略、メインブランチ開発、バージョンブランチリリースを表示します。

Netflixの製品Spinnakerのマイクロサービスプラクティスを分析する

継続的インテグレーション

使用されているツールはGitHubアクションです。このciファイルbranch-buildには、主にGradleビルドを実行するジョブが1つだけあります

Netflixの製品Spinnakerのマイクロサービスプラクティスを分析する

.github/workflows/build.ymlCIファイルの内容は次のとおりですmasterブランチとversion-*tagコミットがあると自動的にトリガーされますすることでenv設定gradleのパラメータをビルドを。

name: Branch Build

on:
  push:
    branches:
    - master
    - version-*

env:
  GRADLE_OPTS: -Dorg.gradle.daemon=false -Xmx2g -Xms2g

jobs:
  branch-build:
    # Only run this on repositories in the 'spinnaker' org, not on forks.
    if: startsWith(github.repository, 'spinnaker/')
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      # Install Java 8 for cross-compilation support. Setting it up before
      # Java 11 means it comes later in $PATH (because of how setup-java works)
      - uses: actions/setup-java@v1
        with:
          java-version: 8
      - uses: actions/setup-java@v1
        with:
          java-version: 11
      - uses: actions/cache@v1
        with:
          path: ~/.gradle
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
          restore-keys: |
            ${{ runner.os }}-gradle-
      - name: Build
        run: ./gradlew -PenableCrossCompilerPlugin=true build --stacktrace

アプリケーションの配置

多くのリソースファイルを外部から取得する必要があるため、Spinnakerのインストールと展開は頭痛の種です。必要なリソースファイルを中国にインポートする場合、実際にはそれほど苦痛はありません。少なくとも今では、スピンネーカーを30分以内に展開することが非常に現実的です。(Alibaba Cloudイメージからのプル時間をカウントしない場合、スクリプトは5分以内にインスタンスをデプロイします)

Spinnaker製品のすべてのマイクロサービスバージョン情報を記録するこのバージョンファイルを見てみましょう。実際、halyardはSpinnakerをデプロイしてこのファイルを読み取り、ファイルの内容に基づいて必要なリソースを取得します。

version: 1.19.4
timestamp: '2020-04-03 08:01:05'
services:
  echo:
    version: 2.11.2-20200401121252
    commit: 5e2b673d1d658f88a3ae7741ab99cc0fd4a9df48
  clouddriver:
    version: 6.7.3-20200401190525
    commit: 77c774d185de42bb83dffde1f813f719f712994b
  deck:
    version: 3.0.2-20200324040016
    commit: 7c228ce82928f73a0f3051c4233242a6f87e0bec
  fiat:
    version: 1.10.1-20200401121252
    commit: aaebd07d8134d48630b056d6877a799a09ed282b
  front50:
    version: 0.22.1-20200401121252
    commit: ef1e7feff41797beb2d1695c1c3c0face550fe4b
  gate:
    version: 1.15.1-20200403040016
    commit: 365aa9fc5b1351207731c4445d7bbb79885d6da1
  igor:
    version: 1.9.2-20200401121252
    commit: 576235bcfce0c48bc139e9c94fe98b3467d3d170
  kayenta:
    version: 0.14.0-20200304112817
    commit: 85f590de74db46d54f016d88862418c990a17747
  orca:
    version: 2.13.2-20200401144746
    commit: 8460456e8380d370d1678b06acd015900a94f515
  rosco:
    version: 0.18.1-20200401121252
    commit: 9a20165e9c0d33e538d0038d5d02cb480e27f8c3
  defaultArtifact: {}
  monitoring-third-party:
    version: 0.16.2-20200228142642
    commit: 94c6e9cd3006347efe3101c0e6d8f98ce65f9053
  monitoring-daemon:
    version: 0.16.2-20200228142642
    commit: 94c6e9cd3006347efe3101c0e6d8f98ce65f9053
dependencies:
  redis:
    version: 2:2.8.4-2
  consul:
    version: 0.7.5
  vault:
    version: 0.7.0
artifactSources:
  debianRepository: https://dl.bintray.com/spinnaker-releases/debians
  dockerRegistry: gcr.io/spinnaker-marketplace
  googleImageProject: marketplace-spinnaker-release
  gitPrefix: https://github.com/spinnaker

これはYaml形式のファイルで、上部にversionはSpinnakerのバージョン番号servicesが表示され、下部には各サービスの情報(バージョン、送信)が含まれています。dependenciesこれは、spinnakerのデプロイに必要な依存サービスです。各サービスversionのフィールドの役割を分析しみましょう。このフィールドは非常に便利です。このフィールドを使用して、サービスブランチでDockerイメージタグと構成ファイルの取得を指定します。

echo:
    version: 2.11.2-20200401121252

Echoはメッセージの通知を担当するSpinnakerのマイクロサービスの1つです。Halyardはversion-2.11.2ラベルhalconfigのディレクトリにあるecho.yml構成ファイルを読み取りgcr.io/spinnaker-marketplace/echo:2.11.2-20200401121252ミラーダウンロードします。他のサービスは類推によって推論することができます。

最後に、hal deploy applySpinnakerをリリースするために、ワンクリックのデプロイメントを実行します。

マイクロサービスモデルプロジェクトの場合、Spinnakerのモデルから多くの詳細を学ぶことができます。たとえば、gitlabウェアハウスのバージョン番号に対応するyamlファイルを作成することもできます。このファイルには、現在のバージョンの各マイクロサービスのミラータグが含まれています。リリースの準備をするときは、Jenkinsのバージョンブランチを選択し、バージョンブランチのバージョン番号に従ってgitlabウェアハウス内の対応するバージョンのyamlファイルを読み取り、ワンクリックでデプロイします。ロールバックする必要がある場合は、以前のバージョン番号と同じプロセスを入力してロールバックします。

Spinnakerプラットフォームのベストプラクティスコースの更新について詳しく知りたい場合は、下部にあるリンクをクリックして、サポートに感謝します!

https://edu.51cto.com/sd/1546e

おすすめ

転載: blog.51cto.com/11064706/2535131