Рубрики
Uncategorized

Что внутри ETCD? Глубокое погружение в мир Кубера

etcd @etcdio … Помечено с Кубернетами, дежоптом, докер, иди.

Жидкая ошибка: внутренний

Это история о поиске 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»