Rancherコードリーディング入門(1/3)

今回からは、紙面の都合で「RancherによるKubernetes活用完全ガイド」に掲載されなかったパートをご紹介します。

西脇 雄基

2019年11月5日 6:00

RancherによるKubernetes活用完全ガイド

市川 豊、藤原 涼馬、西脇 雄基 著
価格:4,600円+税
発売日:2019年7月23日発売
ISBN:978-4-295-00725-8
発行:インプレス

RancherによるKubernetes活用完全ガイド

この連載が書籍になりました!

本書は、インプレスの“オープンソース技術の実践活用メディア”Think ITの連載記事『 マルチクラウド時代の最強コンビ RancherによるKubernetes活用ガイド』の内容を元に、未公開原稿を大幅加筆して書籍化したものです。Kubernetesクラスタを管理するプラットフォームRancherを用いて、Kubernetesを活用する方法を紹介します。

Amazon詳細ページへImpress詳細ページへ

Rancherコードリーディング入門(1/3)

前回の記事では、Rancherのアーキテクチャの基本的なポイントを紹介しました。

Rancherのより詳細な動作/実装の仕組み、各Custom Resource Definition(以下、CRD)がどのように利用されているか、プロダクション環境で必須になるHAの仕組みなどは、2019年7月23日に発売された「RancherによるKubernetes活用完全ガイド(Think IT Books)」をぜひ確認していただければと思います。

今回から3回にわたって、Rancherをすでに利用されている方やRancherの動作原理をある程度理解されている方が、次につまずくポイントであるRancherの動作とコードのマッピング、Rancherのコードの読み方のヒントを紹介していきます。

Rancherに限らずOSSを本番環境で利用する際、何かあった時に「コードを読めるかどうか」は運用の質に強く影響を与えます。

そのため、「RancherによるKubernetes活用完全ガイド」を読まれてRancherの実装や動作をある程度理解された方は、次のステップとして学んでいただいた実装をコードと照らし合わせながら理解していくことで、より理解が深まるかと思います。

1回目:Rancher各ディレクトリ、ファイルの概要を一通り紹介します
  • rancher/rancherレポジトリの歩き方(1/3)
    • Rancherの開発支援系ファイル
    • Rancherのアプリケーションコード
      • main.go
      • app/
      • server/
      • k8s/
      • pkg/
2回目:Rancher Agent、Rancher APIを中心に紹介します
  • rancher/rancherレポジトリの歩き方(2/3)
    • Rancherのアプリケーションコード
      • pkg/agent
      • pkg/api
3回目:Rancher Controller、Rancherの周辺レポジトリについて紹介します
  • rancher/rancherレポジトリの歩き方(3/3)
    • Rancherのアプリケーションコード
      • pkg/controllers
  • rancherレポジトリ以外の重要なレポジトリについて
    • rancher/types
    • rancher/rke
    • rancher/kontainer-engine
    • rancher/norman

本連載で対象とするRancherのバージョン

本連載では、Rancherのv2.1.5を対象として執筆しています。v2.1.5である程度全体像が把握できれば、v2.2以降のコードもきちんと読めるようになっているはずです。

コードリーディング入門の1回目としてまずは、各ディレクトリ、ファイルがどのように利用され、どのようなロジックを含んでいるのかをざっくり1つずつ紹介し、全体像を把握していきます。

rancher/rancherレポジトリの歩き方(1/3)

まずは、rancherレポジトリ内のファイル/ディレクトリの役割を1つずつ紹介していきます。下記は、rancher/rancherレポジトリ直下に存在しているファイルとディレクトリの一覧になります。

リスト1:レポジトリ直下にあるファイルとディレクトリ

.
├── CONTRIBUTING.md
├── Dockerfile.dapper
├── LICENSE
├── Makefile
├── README.md
├── README_1_6.md
├── app
├── cleanup
├── code-of-conduct.md
├── k8s
├── keybase.md
├── main.go
├── package
├── pkg
├── rke-templates
├── scripts
├── server
├── tests
├── vendor
└── vendor.conf

これらを、Rancherの開発支援系ファイルとRancherのアプリケーションコードとの2つに分けて紹介します。

Rancherの開発支援系ファイル

下記に、rancher/rancherレポジトリ直下のRancherの開発支援系ファイルに分類した、ディレクトリとファイルをリストアップしました。1つずつ説明していきます。

リスト2:開発支援系に分類されるディレクトリとファイル

.
├── CONTRIBUTING.md
├── code-of-conduct.md
├── LICENSE
├── README.md
├── README_1_6.md
├── keybase.md
├── Dockerfile.dapper
├── Makefile
├── scripts
├── cleanup
├── package
├── rke-templates
├── tests
├── vendor
└── vendor.conf

CONTRIBUTING.md、code-of-conduct.md、LICENSE

このレポジトリのライセンスや行動指針が書かれています。

README.md、README_1_6.md

このレポジトリの説明が書かれています。

keybase.md

https://keybase.io を利用したGPG署名付きコミットをするために、keybase.ioによって作成を指示されているファイル。

Dockerfile.dapper

Rancherお手製のビルド環境作成ツールであるDapperのためのDockerfileです。Rancherは、このDockerfileを利用して、Rancher Server、Rancher Agentのバイナリとコンテナイメージを作成しています。

Makefile

Rancher Server、Rancher AgentをビルドするためのMakefileです。このMakefileから、Dapperを通してscriptsディレクトリ内のビルド関連スクリプトを実行します。

scripts

リスト3:scriptsディレクトリ内のファイル

scripts/
├── build
├── build-agent
├── build-server
├── ci
├── copy-hyperkube.sh
├── entry
├── etcd.sh
├── package
├── print-catalog-images
├── print-tags.sh
├── push-master.sh
├── release
├── test
├── update-vendor-conf.sh
├── validate
├── version
└── windows

ビルドに関連するスクリプトが保存されています。基本的には、Dapperで構築した環境内で実行されることを想定しています。

cleanup

リスト4:cleanupディレクトリ内のファイル

cleanup/
├── user-cluster.sh
└── user-cluster.yml

このディレクトリには、Shellスクリプト(user-cluster.sh)とYamlファイル(user-cluster.yml)が保存されています。user-cluster.shは、現在.kube/config内で指定されているKubernetesクラスタをRancherの管理配下から外すためのスクリプトになっており、次のように実行します。

リスト5:user-cluster.shの使い方

$ user-cluster.sh rancher/agent:<Rancher Serverと同じバージョン>

このように実行すると、.kube/config内で指定されているKubernetesクラスタにRancher Agentのコンテナイメージを用いた、Cleanup処理をするkuberneteのJobリソースを作成し、Rancherの管理リソースをすべて削除します。

package

リスト6:packageディレクトリ内のファイル

package/
├── Dockerfile
├── Dockerfile.agent
├── entrypoint.sh
├── kubectl-shell.sh
├── run.sh
├── share-root.sh
├── shell-setup.sh
└── windows

このディレクトリには、Rancher ServerのDockerfile、Rancher AgentのDockerfileに加え、entrypoint.shなどのコンテナイメージに保存される静的ファイルを保存します。

rke-templates

リスト7:rke-templatesディレクトリ内のファイル

rke-templates/
├── 3-node-certificate-recognizedca.yml
├── 3-node-certificate.yml
├── 3-node-externalssl-certificate.yml
└── 3-node-externalssl-recognizedca.yml

RKE Addonを利用したRancher Serverのデプロイ用のテンプレートを保存しています。https://rancher.com/docs/rancher/v2.x/en/installation/ha/rke-add-on/

ただし、このRKE Addonを利用したインストール方法は2.0.8までで、2.0.8以降ではHelm Chartを利用したデプロイが推奨されています。https://rancher.com/docs/rancher/v2.x/en/installation/ha/

tests

リスト8:testsディレクトリ内のファイル

tests/
├── README.txt
├── core
├── requirements.txt
├── setup.py
└── tox.ini

このディレクトリは、Rancherのインテグレーションテストのコードが保存されています。このインテグレーションテストは、Rancher Server、Rancher Agentのコンテナイメージをビルドする際に毎回実行されています(make ci)。

vendor

リスト9:vendorディレクトリ内のファイル

vendor/
├── bitbucket.org
...

RancherのGolangに依存したライブラリが保存されます。

vendor.conf

Rancherお手製のGolangの依存ライブラリを管理するパッケージマネージャ(https://github.com/rancher/trash)が使用する定義ファイルです。

以上が、rancher/rancherレポジトリ直下にある開発支援系ファイルに分類したファイルとディレクトリの一覧となります。

この連載が書籍になりました!『RancherによるKubernetes活用完全ガイド』
この記事のキーワード :

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30