1 k8s で etcd を使用する方法
API サーバーが再起動して障害が発生したときにマニフェストが失われないように、k8s 内のすべてのオブジェクトのマニフェストをどこかに保存する必要があります。
API サーバーのみが etcd にアクセスでき、他のコンポーネントは間接的にのみ etcd にアクセスできます。
-
楽観的ロックシステムと認証システムの堅牢性を強化
-
その後のストレージ交換を容易にするには、API サーバー コンポーネントの関連インターフェイスを変更するだけで済みます。
etcd は、高速応答、分散型、一貫性のある KV ストレージであり、k8s がクラスターのステータスとメタデータを保存する唯一の場所でもあります。
2 etcdctlコマンドをより便利に使う方法
https://github.com/etcd-io/etcd/tree/main/etcdctl#readme
etcd インターフェースには V2 と V3 の 2 つのバージョンがあります。Kubernetes 1.6 以降、デフォルトの etcd バージョンは v3 です。v2 インターフェースと v3 インターフェースには互換性がないため、etcdctl を使用する際には API バージョンを確認する必要があります。
[root@k8s-master01 ~]# yum install etcd -y ##etcd サービスをインストールします。ダウンロード後、クライアント ツール etcdctl が付属します。
[root@k8s-master01 ~]# etcdctl --version
etcdctl バージョン: 3.3.11
API バージョン: 2
[root@k8s-master01 ~]# export ETCDCTL_API=3 ##API バージョンを v3 に設定
[root@k8s-master01 ~]# etcdctl version ##さまざまなインターフェイスで使用されるコマンド
etcdctl バージョン: 3.3.11
API バージョン: 3.3も異なります
さらに、etcdctl を使用して k8s で etcd に接続するには、認証用の ca 証明書が必要であり、etcd ノードの IP およびポート情報も指定する必要があるため、コマンド全体の実行が非常に面倒になります。
対応する情報を変数で定義できるため、etcdctl コマンドを実行すると、対応する変数に基づいて必要な情報を取得できます。
[root@k8s-master01 ~]# cat /etc/profile.d/etcd import ETCDCTL_API=3 import ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt import ETCDCTL_CERT=/etc/kubernetes/pki/etcd/server .crt エクスポート ETCDCTL_KEY=/etc/kubernetes/pki/etcd/server.key エクスポート ETCDCTL_ENDPOINTS=https://10.0.107.77:2379,https://10.0.113.204:2379,https://10.0.87.66:2379 [ root@k8s-master01 ~]# source /etc/profile.d/etcd [root@k8s-master01 ~]# etcdctl メンバーリスト 15c808b23512a31a、開始、k8s-master02、https://10.0.107.77:2380、https:/ /10.0.107.77:2379 5ca9692dbcd57e55、開始しました、k8s-master03、https://10.0.113.204:2380、https://10.0.113.204:2379 f8b45063ae1a7dfa、開始しました、k8s-master01、https://10.0.87.66:238 0 、https://10.0.87.66:2379
3 etcdに保存されたデータをk8sで閲覧する
リソースは /registry に保存されます
[root@k8s-master01 ~]# etcdctl get --prefix / --keys-only|head -10 ##--keys-only はキーのみを参照することを意味し、対応する --print-value-only はキーのみを参照することを意味します値を見てください
出力結果からわかるように、/registry/pods の内容を確認します。キーの命名規則は/registry/pods/namespace_name/pod_name です。
[root@k8s-master01 ~]# etcdctl get --prefix /registry/pods --keys-only|head -10
kube-system 名前空間の下のエントリを表示します。
[root@k8s-master01 ~]# etcdctl get --prefix /registry/pods/kube-system --keys-only|head -10
4 ポッドの値を表示する
k8sではpodなどのリソースの値がprotobuf形式で格納されているため、etcdctlコマンドで直接クエリすることができず、文字化けが発生します。
このために、OpenShift はコンテンツをプロト形式でデコードするためのツール etcdhelper を提供します。以下のリンクは、OpenShift の公式 go ソース コード ファイルを提供します。このファイルは、実行可能ファイルにコンパイルする必要があり、/usr/local/bin ディレクトリに配置した後、直接使用できます。
WeChat 公式アカウントのバックグラウンドでetcdに直接返信し、私がコンパイルした etcdhelper コマンド ファイルをダウンロードすることもできます。
https://github.com/openshift/origin/tree/master/tools/etcdhelper
etcdhelperのコンパイル
[root@k8s-master01 ~]# wget https://github.com/openshift/origin/archive/refs/heads/master.zip [root@k8s-master01 ~]# unzip master.zip [root@k8s-master01 ~]# cd Origin-master/tools/etcdhelper/ [root@k8s-master01 etcdhelper]# ls etcdhelper.go OWNERS README.md [root@k8s-master01 etcdhelper]# go build etcdhelper.go [root@k8s-master01 etcdhelper ]# ls etcdhelper etcdhelper.go OWNERS README.md [root@k8s-master01 etcdhelper]# cp etcdhelper /usr/local/bin/
etcdhelper の使用法は etcdctl の使用法と似ています。また、k8s の ca ファイル パスを指定する必要があります。デフォルトでは、クエリのためにマシンのポート 2789 に直接接続します。
また、特定の get query コマンドは最後に配置する必要があることに注意してください。そうしないと、コマンドが正常に実行されません。
[root@k8s-master01 ~]# etcdhelper -cacert /etc/kubernetes/pki/etcd/ca.crt -cert /etc/kubernetes/pki/etcd/server.crt -key /etc/kubernetes/pki/etcd/server .key 取得 /registry/pods/kube-system/etcd-k8s-master01
クエリ結果から、タイプ、API バージョン、名前、名前空間などの情報を含む、Pod etcd-k8s-master01 のメタデータ情報が etcd に保存されていることがわかります。