Minikubeで試すetcdクラスタのバックアップ

Kubernetes

はじめに

kubernetesクラスタの運用をしていく中で、避けて通れないのがetcdのバックアップです。kubectlはいっぱい打つけど、etcdctlは何もわからない人々(自分)向けに、メモを残しておきます。

やってみる

環境

今回は、minikubeを使います。Kubernetesの公式ドキュメントに沿って、簡単にインストールできるので便利ですね。

今回使うバージョンは、以下の通りです。

etcd Podの確認

Minikubeでは、コントロールプレーンのコンポーネントはPodとして動作します。名前空間はkube-systemで、下記のようにPodの一覧を取得できます。etcd-minikubeというのがetcdのPodです。

etcd-minikubePodでは、以下のようにetcdコマンドが実行されています。

etcdに対するクライアント証明書と鍵の確認

Kubernetesにおいて、etcdにアクセスするのは、Kubernetes API Serverのみです。図はWikipediaからの引用です。

先ほど一覧表示したPodに中で、Kubernetes API Serverにあたるkube-apiserver-minikubeについて、詳しく見てみます。kube-apiserverコンテナで、kube-apiserverコマンドが実行されていることがわかります。

kube-apiserverコマンドには、たくさんのオプションがついています。多すぎてよくわかりませんが、今回はetcdと付いているものに注目してみます。

オプション名の通りだと思いますが、公式ドキュメントによれば、以下のような意味があるようです。要するに、etcdと暗号化通信を行うためのCA証明書、クライアント証明書と鍵、接続先のetcdサーバーの情報が記載されています。

# option description
(1) --etcd-cafile SSL Certificate Authority file used to secure etcd communication.
(2) --etcd-certfile SSL certification file used to secure etcd communication.
(3) --etcd-keyfile SSL key file used to secure etcd communication.
(4) --etcd-servers List of etcd servers to connect with (scheme://ip:port), comma separated.

どのファイルがどこにあるか調べておくのは重要です。etcdのバックアップをとるときに使うかもしれません。



マスターノードへのログイン

Minikubeは、minikubeというノード1台の構成です。minikube sshコマンドでログインできます。

Masterノードにログインできました。次の作業は、マスターノード上で行います。

etcdctlコマンドの導入

下記の記事を参考にして、etcdctlコマンドを使用します。Docker便利ですね。

Kubernetes: Minikube で作成したクラスタの etcd にアクセスする - Qiita
はじめにetcd は Kubernetes における唯一のデータストアです。一般的な利用の中で etcd に直接アクセスしたいことはないと思いますが、Kubernetes オブジェクトのエンコード…

次の作業は、etcdctlコマンドが使えるコンテナ上で作業します。

etcdのバックアップ

公式ドキュメントにある通り、etcdctl snapshotコマンドを使います。--endpointsオプションには、kube-apiserverコマンドで--etcd-serversで指定されていた値を指定します。

エラーが出てしまいました🤔

etcdのバックアップ テイク2

「context deadline exceeded」と言われたので、次はクライアント証明書などを指定してみます。それっぽいオプションがいくつかあります。

kube-apiserverコマンドで指定されていたetcdと暗号化通信を行うためのCA証明書、クライアント証明書と鍵を使います。

ちゃんと取得できています😎



以上.

コメント