Rancherコードリーディング入門(1/3)
![](https://thinkit.co.jp/sites/default/files/styles/main_image_730x/public/main_images/16960_main.jpg?itok=Iqnsehrb)
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
- Rancherのアプリケーションコード
3回目:Rancher Controller、Rancherの周辺レポジトリについて紹介します
- rancher/rancherレポジトリの歩き方(3/3)
- Rancherのアプリケーションコード
- pkg/controllers
- Rancherのアプリケーションコード
- 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レポジトリ直下にある開発支援系ファイルに分類したファイルとディレクトリの一覧となります。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Rancherコードリーディング入門(2/3)
- Rancherコードリーディング入門(3/3)
- Rancherを構成するソフトウェア
- RancherのCatalog機能を詳細に見てみる
- Rancherのカスタムカタログの作成
- Pulumi Kubernetes Operatorを活用してPulumiのCI/CDを実現しよう
- Oracle Cloud Hangout Cafe Season 4 #5「Kubernetesのオートスケーリング」(2021年8月4日開催)
- GitLabを用いた継続的インテグレーション
- サービスメッシュを使ってみよう
- Oracle Cloud Hangout Cafe Season5 #3「Kubernetes のセキュリティ」(2022年3月9日開催)