Edited at

Rancher 2.0のデータストアを覗く方法

More than 1 year has passed since last update.

Rancher 2.0がめでたくGAとなりましたね!

Announcing Rancher 2.0 GA!

今後本格的にRancher2.0を使う場面も増えるかと思います。


そこで今回はRancher2.0をより深く知るための方法として、Rancherが扱う管理データを詳しく追う方法について紹介します。


Rancher 2.0のデータストア

Rancher1系ではデータストアとしてMySQLが利用されていましたが、Rancher2系ではetcd3が利用されるようになりました。


なので、etcdctlなどでetcdに直接接続することでデータストアの内容を確認できます。


ただしこの方法だと接続の際にCA証明書/証明書/秘密鍵が必要で結構面倒です。

そこでもっと手軽に確認できるものとしてkubectlコマンドを利用する方法があります。

Rancher2.0では管理用のデータはKubernetesのカスタムリソースとして登録されています。

なので、kubectlコマンドさえ使えれば管理用データを覗くことが可能です。


Rancher2.0でkubectlコマンドを使うには

Rancher2.0を起動する方法はいくつかありますが、今回はその中でももっとも単純な公式ドキュメントのQuick Startに記載されている方法で起動した場合について扱います。

具体的には以下のコマンドを実行してRancher2.0を起動した場合となります。

sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher

この場合はdocker psコマンドなどでコンテナIDを確認した上でdocker execを利用することでkubectlが実行できます。

# 起動したRancher2.0のコンテナIDを確認

$ docker ps
# execでコンテナ上でbash起動
$ docker exec -it <確認したコンテナID> bash


管理データを覗く

kubectlが使えるようになったら以下のコマンドでカスタムリソースの一覧を確認できます。

$ kubectl get crd


NAME AGE
apprevisions.project.cattle.io 3m
apps.project.cattle.io 3m
authconfigs.management.cattle.io 3m
catalogs.management.cattle.io 3m
clusteralerts.management.cattle.io 3m
clustercomposeconfigs.management.cattle.io 3m
clusterevents.management.cattle.io 3m
clusterloggings.management.cattle.io 3m
clusterpipelines.management.cattle.io 3m
clusterregistrationtokens.management.cattle.io 3m
clusterroletemplatebindings.management.cattle.io 3m
clusters.management.cattle.io 3m
dynamicschemas.management.cattle.io 3m
globalcomposeconfigs.management.cattle.io 3m
globalrolebindings.management.cattle.io 3m
globalroles.management.cattle.io 3m
groupmembers.management.cattle.io 3m
groups.management.cattle.io 3m
listenconfigs.management.cattle.io 3m
namespacecomposeconfigs.project.cattle.io 3m
nodedrivers.management.cattle.io 3m
nodepools.management.cattle.io 3m
nodes.management.cattle.io 3m
nodetemplates.management.cattle.io 3m
notifiers.management.cattle.io 3m
pipelineexecutionlogs.management.cattle.io 3m
pipelineexecutions.management.cattle.io 3m
pipelines.management.cattle.io 3m
podsecuritypolicytemplateprojectbindings.management.cattle.io 3m
podsecuritypolicytemplates.management.cattle.io 3m
preferences.management.cattle.io 3m
projectalerts.management.cattle.io 3m
projectloggings.management.cattle.io 3m
projectnetworkpolicies.management.cattle.io 3m
projectroletemplatebindings.management.cattle.io 3m
projects.management.cattle.io 3m
roletemplates.management.cattle.io 3m
settings.management.cattle.io 3m
sourcecodecredentials.management.cattle.io 3m
sourcecoderepositories.management.cattle.io 3m
templatecontents.management.cattle.io 3m
templates.management.cattle.io 3m
templateversions.management.cattle.io 3m
tokens.management.cattle.io 3m
users.management.cattle.io 3m

カスタムリソースの名前がわかったらkubectl getで各リソースのデータを確認できます。

$ kubectl get <カスタムリソースの名前>

例えば様々な設定値を保存するためのリソースsettings.management.cattle.ioのデータを確認するには以下のようにします。

$ kubectl get settings.management.cattle.io


NAME AGE
agent-image 3m
cacerts 3m
cli-url-darwin 3m
cli-url-linux 3m
cli-url-windows 3m
engine-install-url 3m
engine-iso-url 3m
engine-newest-version 3m
engine-supported-range 3m
first-login 3m
helm-version 3m
ingress-ip-domain 3m
install-uuid 3m
k8s-version 3m
k8s-version-to-images 3m
machine-version 3m
server-image 3m
server-url 3m
server-version 3m
system-default-registry 3m
system-namespaces 3m
telemetry-opt 3m
ui-feedback-form 3m
ui-index 3m
ui-path 3m
ui-pl 3m
whitelist-domain 3m

もう少し詳細に知りたい場合は-oオプションを指定すればOKです。

# -oオプションでyaml形式を指定

$ kubectl get settings.management.cattle.io agent-image -o yaml

apiVersion: management.cattle.io/v3
customized: false
default: rancher/rancher-agent:master
kind: Setting
metadata:
clusterName: ""
creationTimestamp: 2018-05-07T10:47:27Z
deletionGracePeriodSeconds: null
deletionTimestamp: null
initializers: null
name: agent-image
namespace: ""
resourceVersion: "286"
selfLink: /apis/management.cattle.io/v3/agent-image
uid: 08abd93e-51e4-11e8-b695-0242ac110002
value: rancher/rancher-agent:v2.0.0

もちろん--watchオプションで変更検知も可能です。

# watchオプションで変更検知

$ kubectl get settings.management.cattle.io -o yaml --watch

ちなみに各カスタムリソースはソースコードだと以下の部分で登録されているため、定義を追いたい場合はこの辺からソースを追うのがおすすめです。

https://github.com/rancher/rancher/blob/v2.0.0/pkg/api/server/managementstored/setup.go


5/8 追記

カスタムリソースの中には動的にnamespaceを追加するものもある点にご注意ください。

例えばnodepools.management.cattle.ioなどです。

この場合、kubectl実行時に--all-namespacesオプションを指定するなどしてください。


終わりに

ということでRancher2.0での管理データを覗く方法を紹介しました。


Rancher2.0はKubernetesのカスタムリソースを利用してそれぞれに対するコントローラーを実装することで管理機能を実現しているため、ソースを追う際はデータがどのように変化するのかを把握しておくとそれぞれのコントローラーの処理が追いやすいと思います。

Rancher2.0を調査する際は是非カスタムリソースを覗いてみてください!

以上です。