Жидкая ошибка: внутренний
Это история о поиске etcd Струй внутри кластера Куберовника без глубокого погружения в то, как работает etcd.
Etcd Является ли Kubernetes Vault. Он хранит все состояние кластера: его конфигурация, спецификации и состояния рабочих нагрузок. В этом блоге,
Что такое etcd?
Как работает etcd внутри Кубернаны?
Установка ETCD.
Скачать двоичный
curl -L [https://github.com/etcd-io/etcd/releases/download/v3.3.11/etcdv3.3.11-linux-amd64.tar.gz](https://github.com/etcd-io/etcd/releases/download/v3.3.11/etcdv3.3.11-linux-amd64.tar.gz) -o etcd-v3.3.11-linux-amd64.tar.gz
Извлекать
tar xzvf etcd-v3.3.11-linux-amd64.tar.gz
Действовать etcd
Запустить сервер
./etcd
Запустить клиент (на другом терминале)
// Set a key ./etcdctl set key1 value1 // Get a key ./etcdctl get key1
Можно также использовать etcd labs играть с развертыванием EtCD. Это похоже на Докерская площадка Отказ
Тестовый кластер Kubernetes
Я использую Minikube вместе с VirtualBoxDriver для запуска контейнера Docker, поэтому следующая задача будет настроить один кластер K8S на моем локальном компьютере, чтобы взаимодействовать с магазином EtCD.
Начать кластер
minikube start — vm-driver=virtualbox
Найти etcd POD
$ kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-5644d7b6d9-2qg54 1/1 Running 0 2d coredns-5644d7b6d9-6mbqk 1/1 Running 0 2d etcd-minikube 1/1 Running 0 2d kube-addon-manager-minikube 1/1 Running 0 2d kube-apiserver-minikube 1/1 Running 0 2d kube-controller-manager-minikube 1/1 Running 0 20s kube-proxy-kgt6n 1/1 Running 0 2d kube-scheduler-minikube 1/1 Running 0 2d storage-provisioner 1/1 Running 0 2d
Подключение к ITCD POD
kubectl exec -it etcd-minikube -n kube-system sh
После подключения к оболочке я пытался запустить etcdctl Команда, чтобы найти все ключи.
etcdctl get /
Оказывается, это было не так просто, как это. ETCD использует рекламу_URL, над которой он предоставляет процесс. Я должен был выяснить все флаги, которые использует EtCD при запуске. Я использовал следующую команду, чтобы получить все необходимые флаги.
$ echo "$(ps aux)" USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 2.9 2.3 10611260 46916 ? Ssl 10:24 7:04 etcd --advertise-client-urls=[https://192.168.99.100:2379](https://192.168.99.100:2379) --cert-file=/var/lib/minikube/certs/etcd/server.crt --client-cert-auth=true --data-dir=/var/lib/minikube/etcd --initial-advertise-peer-urls=[https://192.168.99.100:2380](https://192.168.99.100:2380) --initial-cluster=minikube=[https://192.168.99.100:2380](https://192.168.99.100:2380) --key-file=/var/lib/minikube/certs/etcd/server.key --listen-client-urls=[https://127.0.0.1:2379,https://192.168.99.100:2379](https://127.0.0.1:2379,https://192.168.99.100:2379) --listen-metrics-urls=[http://127.0.0.1:2381](http://127.0.0.1:2381) --listen-peer-urls=[https://192.168.99.100:2380](https://192.168.99.100:2380) --name=minikube --peer-cert-file=/var/lib/minikube/certs/etcd/peer.crt --peer-client-cert-auth=true --peer-key-file=/var/lib/minikube/certs/etcd/peer.key --peer-trusted-ca-file=/var/lib/minikube/certs/etcd/ca.crt --snapshot-count=10000 --trusted-ca-file=/var/lib/minikube/certs/etcd/ca.crt
Чтобы получить etcdctl поговорить с etcd Сервер, ему нужны вышеупомянутые флаги с K8s Настраивает etcd наряду с аутентификацией внутри стручка. Нам сначала нужно выяснить рекламу relove_url, которую можно найти с помощью флага Addevenise-Client-Urls.
Получить все ключи
$ ADVERTISE_URL(https://192.168.99.100:2379)" $ ETCDCTL_API=3 etcdctl --endpoints $ADVERTISE_URL \ --cacert /var/lib/minikube/certs/etcd/ca.crt \ --cert /var/lib/minikube/certs/etcd/server.crt \ --key /var/lib/minikube/certs/etcd/server.key \ get / — prefix — keys-only
Забавный вывод
/registry/apiregistration.k8s.io/apiservices/v1. /registry/apiregistration.k8s.io/apiservices/v1.admissionregistration.k8s.io /registry/apiregistration.k8s.io/apiservices/v1.apiextensions.k8s.io /registry/apiregistration.k8s.io/apiservices/v1.apps /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.coordination.k8s.io /registry/apiregistration.k8s.io/apiservices/v1.networking.k8s.io /registry/apiregistration.k8s.io/apiservices/v1.rbac.authorization.k8s.io
Давайте имеем смысл этого, хранив вывод его в файле JSON.
$ ETCDCTL_API=3 etcdctl --endpoints $ADVERTISE_URL \ --cacert /var/lib/minikube/certs/etcd/ca.crt \ --cert /var/lib/minikube/certs/etcd/server.crt \ --key /var/lib/minikube/certs/etcd/server.key \ get / — prefix — keys-only -w json > out.json
Он выводит все пары KV в формате JSON, где они кодируются.
{ "header": { "cluster_id": 12197035334886545600, "member_id": 9217530203749069991, "revision": 19300, "raft_term": 2 }, "kvs": [{ "key": "L3JlZ2lzdHJ5L2FwaXJlZ2lzdHJhdGlvbi5rOHMuaW8vYXBpc2VydmljZXMvdjEu", "create_revision": 12, "mod_revision": 12, "version": 1 }, { "key": "create_revision": 9, "mod_revision": 9, "version": 1 }, { "key": "create_revision": 10, "mod_revision": 10, "version": 1 }] }
Выход для одного ключа
$ ETCDCTL_API=3 etcdctl — endpoints $ADVERTISE_URL — cacert /var/lib/minikube/certs/etcd/ca.crt — cert /var/lib/minikube/certs/etcd/server.crt — key /var/lib/minikube/certs/etcd/server.key get /registry/apiregistration.k8s.io/apiservices/v1. { "kind": "APIService", "apiVersion": "apiregistration.k8s.io/v1beta1", "metadata": { "name": "v1.", "uid": "fd15144e-ef8c-4a02–87fc-0fc72c178118", "creationTimestamp": "2019–11–22T15:19:43Z", "labels": { "kube-aggregator.kubernetes.io/automanaged": "onstart" } }, "spec": { "service": null, "version": "v1", "groupPriorityMinimum": 18000, "versionPriority": 1 }, "status": { "conditions": [{ "type": "Available", "status": "True", "lastTransitionTime": "2019–11–22T15:19:43Z", "reason": "Local", "message": "Local APIServices are always available" }] } }
Вышеуказанные ключи являются конфигурацией и состоянием всех ресурсов в кластере, как:
Узлы
Пространства имен
Кгневерролы
КЛУСТЕРРООЛБИНГИНГИ
Configmaps.
Секреты
Рабочие нагрузки: развертывание, Daemonsets, Pods
Резюме
Это мой персональный журнал о том, как подключиться к POD ETCD внутри кластера Kubernetes для цели отладки в будущем. Интересно посмотреть, какая информация хранится кластеры K8S в EtCD при запуске. Помогает в изучении того, как проектировать сложные системы в будущем.
Пожалуйста, следуйте за Techlog для большего.
Оригинал: «https://dev.to/arriqaaq/what-s-inside-etcd-a-deep-dive-into-the-kubernetes-world-50b4»