この連載が書籍になりました!『RancherによるKubernetes活用完全ガイド

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

2019年11月5日(火)
西脇 雄基
今回からは、紙面の都合で「RancherによるKubernetes活用完全ガイド」に掲載されなかったパートをご紹介します。

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レポジトリ直下にある開発支援系ファイルに分類したファイルとディレクトリの一覧となります。

LINE株式会社

Verda室 Verdaプラットフォーム開発室 マネージャ兼Senior Software Engineer

LINE株式会社にてOpenStackとManaged Kubernetes Clusterの開発/運営を担当しているVerdaプラットフォーム開発チームリード。大規模なクラスターの開発者およびオペレーターとして3年以上OpenStackに取り組んでいる。2018年からはRancherを利用したManaged Kubernetes Serviceの開発/運用も開始。

現在は両プロジェクトを担当し、安定したプライベートクラウドプラットフォームの提供に務める。

連載バックナンバー

クラウド技術解説
第11回

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

2020/2/19
前回に続き、紙面の都合で「RancherによるKubernetes活用完全ガイド」に掲載されなかったパートをご紹介します。
クラウド技術解説
第10回

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

2019/12/25
前回に続き、紙面の都合で「RancherによるKubernetes活用完全ガイド」に掲載されなかったパートをご紹介します。
クラウド技術解説
第9回

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

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

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています