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
ちなみに各カスタムリソースはソースコードだと以下の部分で登録されているため、定義を追いたい場合はこの辺からソースを追うのがおすすめです。
5/8 追記
カスタムリソースの中には動的にnamespaceを追加するものもある点にご注意ください。
例えばnodepools.management.cattle.io
などです。
この場合、kubectl
実行時に--all-namespaces
オプションを指定するなどしてください。
終わりに
ということでRancher2.0での管理データを覗く方法を紹介しました。
Rancher2.0はKubernetesのカスタムリソースを利用してそれぞれに対するコントローラーを実装することで管理機能を実現しているため、ソースを追う際はデータがどのように変化するのかを把握しておくとそれぞれのコントローラーの処理が追いやすいと思います。
Rancher2.0を調査する際は是非カスタムリソースを覗いてみてください!
以上です。