Chuyển tới nội dung chính

ETCD

1. etcd là gì?​

Key – value store​

etcd lưu dữ liệu theo cặp khóa – giá trị. Biết key là lấy ra được value.

name      → John
location → New York
age → 45

Value có thể là cả một tài liệu:

key:   /users/john
value: { "name": "John", "age": 45, "location": "New York" }

Distributed & Reliable​

  • Distributed (phân tán): etcd có thể chạy trên nhiều máy, cùng giữ dữ liệu.

  • Reliable (đáng tin cậy): các thành viên phối hợp để thống nhất dữ liệu, nên hệ thống chịu được một số sự cố.

  • Cổng mặc định cho client là 2379. Các thành viên etcd nói chuyện với nhau qua cổng 2380.

2. etcd trong Kubernetes​

etcd lưu toàn bộ trạng thái cluster: nodes, pods, configs, secrets, accounts, roles, role bindings…

💡 Ghi nhớ

kube-apiserver là thành phần DUY NHẤT nói chuyện trực tiếp với etcd. Trong cấu hình apiserver có dòng:

--etcd-servers=https://127.0.0.1:2379

Install​

Cách dựng clusteretcd chạy dưới dạngXem cấu hình ở đâu
kubeadmStatic pod etcd-<tên-master> trong kube-system/etc/kubernetes/manifests/etcd.yaml
Hard waysystemd service/etc/systemd/system/etcd.service

Ví dụ service file (hard way):

ExecStart=/usr/local/bin/etcd \
--name controller-0 \
--cert-file=/etc/etcd/kubernetes.pem \ # certificate
--key-file=/etc/etcd/kubernetes-key.pem \ # certificate
--trusted-ca-file=/etc/etcd/ca.pem \ # certificate
--advertise-client-urls https://10.0.0.11:2379 \ # ⭐ CẦN NHỚ: địa chỉ client gọi tới
--initial-cluster controller-0=https://10.0.0.11:2380,controller-1=https://10.0.0.12:2380 \ # HA
--data-dir=/var/lib/etcd
OptionÝ nghĩa
--advertise-client-urlsĐịa chỉ etcd lắng nghe client. apiserver phải trỏ --etcd-servers tới đây
--initial-clusterDanh sách các thành viên etcd khi chạy HA (nhiều master)
--data-dirNơi lưu dữ liệu trên đĩa – quan trọng khi backup/restore

Data Structures​

Thư mục gốc là /registry, key được đặt như đường dẫn:

/registry/minions/k8s-worker1          # node (minion là tên cũ của node)
/registry/pods/default/nginx # pod "nginx" trong namespace "default"
/registry/deployments/kube-system/coredns
/registry/secrets/default/my-secret

Quy tắc chung: /registry/<resource_type>/<namespace>/<name>.

Kết quả thật trên cluster lab khi liệt kê toàn bộ key (lệnh ở mục 3): mọi key đều bắt đầu bằng /registry. Những dòng đầu là các CRD mà Calico cài vào cluster (*.crd.projectcalico.org).

Liệt kê toàn bộ key trong etcd trên k8s-master

3. etcdctl​

etcd là server (nơi lưu dữ liệu), etcdctl là client gửi lệnh tới server – giống cặp MySQL server và lệnh mysql.

API v2 và v3​

API v2 (cũ)API v3 (dùng hiện nay)
Ghietcdctl set key valueetcdctl put key value
Đọcetcdctl get keyetcdctl get key
Backupetcdctl backupetcdctl snapshot save
  • Đặt biến môi trường ETCDCTL_API=3 để chắc chắn dùng v3 (bản mới đã mặc định là v3).

Liệt kê mọi key Kubernetes đang lưu​

Vì etcd bật TLS, mọi lệnh phải kèm 3 file chứng chỉ:

kubectl exec etcd-k8s-master -n kube-system -- sh -c "ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
get / --prefix --keys-only --limit=10"

Kết quả trên cluster lab: --limit=10 chỉ in 10 key đầu tiên, dễ đọc hơn khi chỉ muốn kiểm tra etcd có trả lời hay không.

etcdctl get với --limit=10 trên k8s-master

FlagÝ nghĩa
--cacertCA để xác minh server etcd
--cert / --keyChứng chỉ của client (chính mình)
--prefix --keys-onlyLấy mọi key bắt đầu bằng /, chỉ in tên key