Help us understand the problem. What is going on with this article?

Kubernetes: Minikube で作成したクラスタの etcd にアクセスする

More than 1 year has passed since last update.

はじめに

etcd は Kubernetes における唯一のデータストアです。一般的な利用の中で etcd に直接アクセスしたいことはないと思いますが、Kubernetes オブジェクトのエンコード/デコード周りの動作を確認したいときに Minikube で作成した検証用クラスタを使えると便利です。

TL;DR

$ minikube ssh
$ docker run -it --net host -e ETCDCTL_API=3 gcr.io/etcd-development/etcd /bin/sh
$ etcdctl version

Minikube で作成したクラスタの etcd にアクセスする

Minikube で作成するクラスタは、etcd も含めて Kubernetes をワンバイナリで動作させる Localkube が使われていますが、組み込まれている etcd も通常と同様に 127.0.0.1:2379 で待ち受けているので、Minikube の VM にログインして直接アクセスするだけです。

ポイントとして、etcd を操作する etcdctl をインストールするのが面倒なので etcd コンテナから操作すると便利です。その際 --net=host オプションを利用します。

$ minikube start --kubernetes-version=v1.8.0
$ minikube ssh
(minikube)  $ docker run -it --net host -e ETCDCTL_API=3 gcr.io/etcd-development/etcd /bin/sh
(container) # etcdctl version
etcdctl version: 3.3.2
API version: 3.3
(container) # etcdctl member list
8e9e05c52164694d, started, default, http://localhost:2380, http://localhost:2379

Minikube の Kubernetes 1.7 以下では etcd v2 API が使われているので、ETCDCTL_API=2 として実行させます。

(minikube)  $ docker run -it --net host -e ETCDCTL_API=2 gcr.io/etcd-development/etcd /bin/sh
(container) # etcdctl member list
fcf2ad36debdd5bb: name=kubeetcd peerURLs=http://0.0.0.0:2380 clientURLs=http://0.0.0.0:2379 isLeader=true

ここからは etcd を操作する上での便利情報です。

全てのキーをリストする

クラスタの全てのオブジェクトのキーを確認します。

(container) # etcdctl get "" --prefix --keys-only | sed '/^\s*$/d'
/registry/apiregistration.k8s.io/apiservices/v1.
/registry/apiregistration.k8s.io/apiservices/v1.authentication.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1.authorization.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1.autoscaling
/registry/apiregistration.k8s.io/apiservices/v1.batch
/registry/apiregistration.k8s.io/apiservices/v1.networking.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1.rbac.authorization.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1.storage.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1alpha1.admissionregistration.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1alpha1.rbac.authorization.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1alpha1.settings.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1beta1.apiextensions.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1beta1.apps
/registry/apiregistration.k8s.io/apiservices/v1beta1.authentication.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1beta1.authorization.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1beta1.batch
/registry/apiregistration.k8s.io/apiservices/v1beta1.certificates.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1beta1.extensions
/registry/apiregistration.k8s.io/apiservices/v1beta1.policy
/registry/apiregistration.k8s.io/apiservices/v1beta1.rbac.authorization.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1beta1.storage.k8s.io
/registry/apiregistration.k8s.io/apiservices/v1beta2.apps
/registry/apiregistration.k8s.io/apiservices/v2alpha1.batch
/registry/apiregistration.k8s.io/apiservices/v2beta1.autoscaling
/registry/configmaps/kube-system/extension-apiserver-authentication
/registry/events/default/minikube.151d300ae651407d
/registry/events/default/minikube.151d300ae6ddedb4
/registry/events/default/minikube.151d300ae6ddfb98
/registry/events/default/minikube.151d300ae6de0283
/registry/events/default/minikube.151d300ae787b8a1
/registry/events/default/minikube.151d300b07a92c64
/registry/events/default/minikube.151d300b07aa71c2
/registry/events/default/minikube.151d300bde808339
/registry/events/kube-system/kube-controller-manager.151d300a53d1a582
/registry/events/kube-system/kube-scheduler.151d300abfe55fe8
/registry/minions/minikube
/registry/namespaces/default
/registry/namespaces/kube-public
/registry/namespaces/kube-system
/registry/ranges/serviceips
/registry/ranges/servicenodeports
/registry/secrets/default/default-token-ss86j
/registry/secrets/kube-public/default-token-pc694
/registry/secrets/kube-system/default-token-g7gbj
/registry/serviceaccounts/default/default
/registry/serviceaccounts/kube-public/default
/registry/serviceaccounts/kube-system/default
/registry/services/endpoints/default/kubernetes
/registry/services/endpoints/kube-system/kube-controller-manager
/registry/services/endpoints/kube-system/kube-scheduler
/registry/services/specs/default/kubernetes
compact_rev_key

Minikube Kubernetes 1.7 以下 (ETCDCTL_API=2) ではコマンド体系が異なります。

(container) # etcdctl ls -r

特定のキーの値を取得する

Protocol Buffers としてエンコードされているため、見にくいですがなんとなく中身は分かります。

# etcdctl get /registry/namespaces/kube-system
/registry/namespaces/kube-system
k8s

v1      Namespacec
I

kube-system"*$db3b961e-2b19-11e8-bfcb-08002730655c2����z

kubernetes
Active"
superbrothers
Working at Preferred Networks, Inc / CNCF Ambassador / 『Kubernetes実践入門』『 みんなのDocker/Kubernetes』共著 / 『入門Prometheus』監訳 / Kubernetes Meetup Tokyo co-organizer / Cloud Native Deep Dive co-organizer
https://text.superbrothers.dev/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした