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)
3回目:Rancher Controller、Rancherの周辺レポジトリについて紹介します
- rancher/rancherレポジトリの歩き方(3/3)
- 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:レポジトリ直下にあるファイルとディレクトリ
これらを、Rancherの開発支援系ファイルとRancherのアプリケーションコードとの2つに分けて紹介します。
Rancherの開発支援系ファイル
下記に、rancher/rancherレポジトリ直下のRancherの開発支援系ファイルに分類した、ディレクトリとファイルをリストアップしました。1つずつ説明していきます。
リスト2:開発支援系に分類されるディレクトリとファイル
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ディレクトリ内のファイル
10 | ├── print-catalog-images |
15 | ├── update-vendor-conf.sh |
ビルドに関連するスクリプトが保存されています。基本的には、Dapperで構築した環境内で実行されることを想定しています。
cleanup
このディレクトリには、Shellスクリプト(user-cluster.sh)とYamlファイル(user-cluster.yml)が保存されています。user-cluster.shは、現在.kube/config内で指定されているKubernetesクラスタをRancherの管理配下から外すためのスクリプトになっており、次のように実行します。
リスト5:user-cluster.shの使い方
1 | $ user-cluster.sh rancher/agent:<Rancher Serverと同じバージョン> |
このように実行すると、.kube/config内で指定されているKubernetesクラスタにRancher Agentのコンテナイメージを用いた、Cleanup処理をするkuberneteのJobリソースを作成し、Rancherの管理リソースをすべて削除します。
package
このディレクトリには、Rancher ServerのDockerfile、Rancher AgentのDockerfileに加え、entrypoint.shなどのコンテナイメージに保存される静的ファイルを保存します。
rke-templates
リスト7:rke-templatesディレクトリ内のファイル
2 | ├── 3-node-certificate-recognizedca.yml |
3 | ├── 3-node-certificate.yml |
4 | ├── 3-node-externalssl-certificate.yml |
5 | └── 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
このディレクトリは、Rancherのインテグレーションテストのコードが保存されています。このインテグレーションテストは、Rancher Server、Rancher Agentのコンテナイメージをビルドする際に毎回実行されています(make ci)。
vendor
RancherのGolangに依存したライブラリが保存されます。
vendor.conf
Rancherお手製のGolangの依存ライブラリを管理するパッケージマネージャ(https://github.com/rancher/trash)が使用する定義ファイルです。
以上が、rancher/rancherレポジトリ直下にある開発支援系ファイルに分類したファイルとディレクトリの一覧となります。