SRE インターンシップ

現場からの教訓: SRE インターンシップからのインサイト

はじめに

Site Reliability Engineering(SRE)基盤チームでのインターンシップを始めたことは、私のキャリアの旅において注目すべき一章となりました。ここ数ヶ月で、非常に貴重なインサイトを得て、技術スキルを磨き、大規模システムの信頼性を維持・向上させるということが本当はどういうことかを学びました。SRE 基盤チームとのインターンシップの主な目標は、GitLab 自体をインフラ全体の管理にどのように使用しているか、Vault の管理方法、スケーラブルなインフラを構築するためのコードとしてのインフラ(IaC)のベストプラクティスをどのように採用するかを理解することでした。ここでは、私の経験・課題・学んだ教訓を共有したいと思います。

SRE とは何か?

SRE に馴染みがない方向けに説明すると、SRE はソフトウェアエンジニアリングと IT 運用の橋渡しをする分野です。SRE はソフトウェアエンジニアリングスキル・自動化・監視を組み合わせて、サービスが常に利用可能で最適なパフォーマンスで動作することを確保しながら、高信頼性・スケーラブル・効率的なシステムの構築と維持に責任を持ちます。

GitLab 内の SRE の異なるチーム

  • Delivery: Delivery グループは GitLab エンジニアリングが GitLab.com と自己管理型顧客の両方に機能を安全に・スケーラブルに・効率的に提供できるようにします。
  • OPS: Ops チームは SaaS プラットフォームの傘下にあるインフラチームで、GitLab の運用の成功に不可欠なプロセスの改善に注力しています。
  • Foundation: Foundations は GitLab SaaS プラットフォームに関連するいくつかのサービスに責任を持ちます。Foundations チームが責任を持つサービスはコアとエッジの2つの一般的なカテゴリーに分けられます。Kubernetes・設定・サービスディスカバリー・シークレット管理・CDN・DNS・ロードバランシング・ネットワークに主な責任を持ちます。
  • Scalability: Scalability はオブザーバビリティ・予測・プロジェクションシステムに注力し、開発エンジニアリングが担当領域のシステム成長を予測できるようにします。
  • Dedicated: この SRE チームのグループは、GitLab Dedicated プラットフォームを通じて提供されるシングルテナント GitLab 環境を専任で担当します。
  • DBRE: DBRE チームは Postgres データベースのインストール・アップグレード・メンテナンス等に関連するすべてに責任を持ちます(現在はプラットフォームの一部)。
  • Gitaly チーム: Gitaly チームは、GitLab インスタンス特に GitLab.com の Git データストレージ層が信頼性が高く・安全で・高速であることを確保するためのシステムの構築と維持に責任を持ちます。

SRE インターンシップへの参加プロセス

  • インターンしたいチームに連絡してください。
  • ハンドブックページに従って Issue を作成し、自分のチームマネジメントと相手のチームマネージャーの両方との間で費やす時間についての合意を得てください。

SRE チームへのオンボーディング

SRE チームへのオンボーディングプロセスは包括的かつ体系的で、新しいインターンをチームのワークフローに迅速に統合するよう設計されていました:

  1. チームとツールの紹介: チームメンバーを紹介され、SRE の実践で使用しているツールと技術の概要を教わりました。これには、監視システムのアーキテクチャ概要への習熟が含まれていました。

  2. アクセスと権限: チームは私が関連するシステムとリポジトリへのアクセス権を持つことを確認し、初日から貢献できるようにしてくれました。

  3. ドキュメントレビュー: チームのプロセス・ベストプラクティス・アーキテクチャの概要を含む重要なドキュメントが提供されました。これにより、SRE 基盤に対するチームのアプローチと私たちが管理するシステムを理解するのに役立ちました。

  4. ハンズオントレーニング: チームは Kubernetes・HashiCorp Vault・Yubikey アクセス管理などの主要な技術とプラクティスをカバーするハンズオントレーニングセッションを組織しました。

  5. メンターシッププログラム: インターンシップ全体を通じて私を指導し、質問に答え、課題を乗り越えるのを助けてくれるメンターが割り当てられました。

  6. 段階的な責任: チームは責任の割り当てに段階的なアプローチを採用し、小さなタスクから始めて、データプラットフォームのインフラを config-mgmt と helm chart リポジトリにオンボードするのを徐々に支援してくれました。

  7. 定期的なチェックイン: メンターと SRE 基盤チームマネージャーとの週次チェックインにより、私が順調に進み、必要なサポートを得られていることを確認しました。

この体系的なオンボーディングプロセスは、SRE チームへの移行を大幅に容易にし、インターンシップ経験の強固な基盤を築きました。

主な学び

インターンシップ全体を通じて、SRE プラクティスに対する私の理解を形成した多くのインサイトを得ました:

技術的な学び

  • Chef・Cloudflare・Sentry・Helm・Terraform などの新しい技術の概要を学ぶ。

  • コードとしてのインフラ(IaC)の原則がリソースの管理とプロビジョニングにどのように広範に使用されているか?

  • GitLab CI/CD パイプラインが自動デプロイとテストにどのように活用されているか。

  • Kubernetes がコンテナのオーケストレーションと管理にどのように使用されているか。

  • 高可用性と問題への迅速な対応を確保するための監視とアラートシステムが整備されていること。

  • 暗号化やアクセス制御などのセキュリティ対策がインフラ設計に組み込まれていること。

  • HashiCorp Vault がインフラ全体でシークレットを安全に管理するように設定されていること。それは以下を提供します:

    • 一元化されたシークレット管理
    • 動的なシークレット生成
    • サービスとしての暗号化
    • 監査ログ
    • アクセス制御ポリシー

    GitLab での Vault 使用の主要な利点:

    • セキュリティの強化: シークレットは保存時と転送時に暗号化される
    • きめ細かいアクセス制御: ポリシーが誰がどのシークレットにアクセスできるかを定義する
    • CI/CD との統合: GitLab CI/CD パイプラインとのシームレスな統合
    • 監査: すべてのシークレットアクセスと操作の包括的なログ

SRE チームは異なる環境(開発・ステージング・本番)の Vault クラスターを管理し、高可用性と災害復旧機能を確保しています。

  • 新しい GCP プロジェクトを最初から config-mgmt リポジトリにホストする方法を学んだ。
  • 権限とアクセス制御の観点からのクックブックのセットアップ。

プロセスの学び

  • ここでは、四半期計画・実行・振り返りに関しては、私たちのデータチームとほぼ同じでした。
  • チームが地理的に分散しているため、私たちより多少多めの定例があり、週2回の同期呼び出しがあります。
  • 本番インシデントを練習するファイアドリルの呼び出し。
  • オープンな S1 がある場合の S1 同期呼び出し。
  • MR のレビューには特定の一人に割り当てる必要がなく、人々は #s_production_engineering または #g_foundations Slack チャンネルに MR レビューリクエストを投稿します。
  • 全員がコードオーナーですが、自分の変更をマージすることはできません。また、MR に貢献した人は変更をマージまたは承認することができません。
  • チームの全員が、本番インスタンスへの接続に Yubikey を使用しており、最高のセキュリティを確保しています。

SRE 基盤とのインターンシップは Data Platform チームにどのようなメリットをもたらすか?

  • インターンシップを開始することで、Data Platform チームのすべての人に Yubikey を持ってもらい、ローカルマシンから .com Postgres インスタンスにアクセスするための明確なプロセスを確立しました。新しいオンボーディングチームメンバーのためにセルフサービスプロセスが設定されました。
  • Data Platform チーム全体を HashiCorp Vault にオンボードしました。これにより、チームが本番およびテスト名前空間で実行されている Airflow インスタンスの Kubernetes シークレットを管理するのに役立ちます。
  • Rigerta と共に、Data Platform ステージング Airflow GKE クラスターを SRE チームの config-mgmt リポジトリにオンボードしました。(これにより、Data Platform インフラが高信頼性かつ安全になり、Google からの制御されたアップグレードが可能になります)。この学びから、本番クラスターを config-mgmt にロールアウトします。
  • インフラのどのコンポーネントの管理にどのインフラチームが責任を持つかについての知識がチームに共有されました。

SRE 基盤チームインターンシップからの主要な学び

  1. オブザーバビリティの重要性: システムへの包括的な可視性を持つことが信頼性の維持に不可欠であることを学びました。適切なインスツルメンテーション・ログ・監視は問題を迅速に特定・解決するために不可欠です。

  2. 失敗を受け入れる: 失敗を責めるべき事象ではなく学習の機会として捉える SRE のマインドセットは目から鱗でした。このアプローチは継続的改善とイノベーションの文化を育みます。

  3. 自動化が鍵: 自動化が人為的なエラーを大幅に削減し、効率を高め、チームがより戦略的なイニシアティブに集中できるようにする様子を直接見ました。

  4. クロスファンクショナルなコラボレーション: SRE の作業には開発チームやその他のステークホルダーとの緊密なコラボレーションが含まれます。効果的なコミュニケーションとチームワークが成功に不可欠です。

  5. 継続的な学習: テクノロジーの急速な変化により、SRE はスキルと知識を常に更新する必要があります。この分野では好奇心を持ち適応力を維持することの重要性を学びました。

課題と成長

インターンシップは充実したものでしたが、さまざまな課題もありました:

  1. 急な学習曲線: 把握しなければならない新しい技術・ツール・概念の量は最初は圧倒的でした。しかし、この課題が私を効果的な学習戦略と時間管理スキルの開発へと駆り立てました。

  2. 曖昧さへの対応: SRE の多くの問題には明確な解決策がありません。曖昧さをナビゲートして不完全な情報で意思決定をする方法を学ぶことは、私が培った貴重なスキルです。

  3. 信頼性とイノベーションのバランス: システムの安定性を維持しながらイノベーションと改善を推進するという微妙なバランスを学びました。

インターンはどのように貢献するか?

  • SRE チームのハンドブック更新。
  • 週次同期の行い方とカバーするさまざまなトピックに関するプロセスの共有
  • インターンはドキュメントを更新してセルフサービス化するのを支援します。つまり、ランブックを作成することです。
  • 小さな変更のレビューを実施する。

将来のインターンへの主要な学び

SRE インターンシップを検討している方へ、私の経験に基づいたいくつかのヒントをご紹介します:

  • 積極的になる: 何をすべきかを誰かに言ってもらうのを待たないでください。学んで貢献する機会を自ら探してください。
  • 質問する: どんな質問も恥ずかしくありません。多く質問すればするほど、多く学べます。
  • 間違いを恐れない: 誰でも間違いを犯します。重要なのはそこから学ぶことです。
  • ネットワーキング: チームメンバーや会社の他の人たちと知り合いになってください。そのつながりがどこに導くかはわかりません。
  • 楽しんで! SRE はやりがいがありながらも非常にやりがいのある仕事です。

結論

この SRE インターンシップは、Site Reliability Engineering に対する私の理解を深め、この分野への情熱を固める非常に充実した経験でした。この期間に得たスキル・知識・インサイトは、データエンジニアとしての私の能力を大幅に向上させました。

この旅を通じて、最先端の技術に触れ・才能ある専門家と協力し・大規模システムの信頼性の維持と向上に貢献する機会を持てました。コードとしてのインフラ・Kubernetes・GitLab CI/CD・HashiCorp Vault などの分野でのハンズオン経験は非常に価値がありました。

特に、GitLab の SRE 基盤チームが育んでいるサポーティブで協力的な環境に感謝しています。彼らのメンタリング・指導・知識を共有する意欲は私の成長に不可欠でした。継続的な学習・失敗を学習の機会として受け入れる・絶え間ない改善を目指すという文化は、私に深い印象を残しました。

さらに、このインターンシップにより現代のソフトウェア開発と運用において SRE が果たす重要な役割が浮き彫りになりました。オブザーバビリティ・自動化・クロスファンクショナルなコラボレーションへの注力により、SRE プラクティスが複雑なシステムの信頼性・スケーラビリティ・効率性を大幅に向上させる方法が示されました。

SRE の分野での将来の可能性に興奮しており、データエンジニアリングのワークフローで得た知識とスキルを応用することを楽しみにしています。このインターンシップは私のプロフェッショナルな旅における重要なステッピングストーンであり、このような革新的でインパクトのあるチームの一員になれた機会に感謝しています。

謝辞

メンター・チームメンバー・そしてこの機会を提供し、インターンシップ全体を通じて変わらぬサポートをしてくれた組織に感謝します。 私の経験や SRE についてご質問があれば、ぜひ連絡してください。この刺激的な分野についてもっと共有できることをいつでも喜んでいます!

執筆者

Ved Prakash