Маємо AWS Elastic Kubernetes Service, на якому розгорнуто стек VictoriaMetrics (див. VictoriaMetrics: створення Kubernetes monitoring stack з власним Helm-чартом).
Треба перенести дані зі старого поду VMSingle на новий, на новому кластері, а для цього треба знайти ці дані на EC2.
Note: щодо міграції даних VMSingle, то для неї є утиліта vmctl, десь в чернетках лежить пост, як буду робити наступну міграцію – то допишу
Зміст
Перевірка VMSingle Kubernetes Pod
Перевіряємо дані VMSingle Kubernetes Pod – знаходимо його EC2-інстанс, відповідний Container ID та Mounts:
$ kk describe pod vmsingle-vm-k8s-stack-67d585c9cd-jt4f7 Name: vmsingle-vm-k8s-stack-67d585c9cd-jt4f7 ... Node: ip-10-0-46-247.ec2.internal/10.0.46.247 ... Containers: vmsingle: Container ID: containerd://57398c3184cd229be564b140f32a9214b38a507137522904eab6ae38b676432a ... Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-5xmmq (ro) /victoria-metrics-data from data (rw) ...
Підключаємось на сервер (див. AWS: Karpenter та SSH для Kubernetes WorkerNodes):
$ ssh -i .ssh/hOS/atlas-eks-ec2 [email protected] [ec2-user@ip-10-0-46-247 ~]$ sudo -s [root@ip-10-0-46-247 ec2-user]#
Але звичного docker
CLI тут нема, бо з версії 1.24 у вже ContainerD замість dockershim
(див. All you need to know about moving to containerd on Amazon EKS):
[root@ip-10-0-46-247 ec2-user]# docker bash: docker: command not found
Для роботи з containerd
маємо утиліту crictl
(Container Runtime Interface CTL):
[root@ip-10-0-46-247 ec2-user]# crictl NAME: crictl - client for CRI USAGE: crictl [global options] command [command options] [arguments...] COMMANDS: attach Attach to a running container create Create a new container exec Run a command in a running container version Display runtime version information images, image, img List images inspect Display the status of one or more containers inspecti Return the status of one or more images ...
Варіант 1: використання crictl inspect
та hostPath
Використовуючи Container ID із kubectl describe pod
отримаємо інформацію про цей контейнер на хості і про його mounts
:
[root@ip-10-0-46-247 ec2-user]# crictl inspect 57398c3184cd229be564b140f32a9214b38a507137522904eab6ae38b676432a ... "mounts": [ { "containerPath": "/victoria-metrics-data", "gidMappings": [], "hostPath": "/var/lib/kubelet/pods/7b2b0205-8c7e-430f-995b-a45cd79ecb9f/volumes/kubernetes.io~csi/pvc-ed3831bc-56a2-4660-9aef-b47cd252edac/mount", ...
Перевіряємо каталог з hostPath
за EC2:
[root@ip-10-0-46-247 ec2-user]# ll /var/lib/kubelet/pods/7b2b0205-8c7e-430f-995b-a45cd79ecb9f/volumes/kubernetes.io~csi/pvc-ed3831bc-56a2-4660-9aef-b47cd252edac/mount total 40 drwxr-xr-x 6 root root 4096 Oct 1 00:51 cache drwxr-xr-x 4 root root 4096 Dec 4 2023 data -rw-r--r-- 1 root root 0 Oct 1 00:52 flock.lock drwxr-xr-x 6 root root 4096 Sep 29 04:00 indexdb drwx------ 2 root root 16384 Dec 4 2023 lost+found drwxr-xr-x 2 root root 4096 Dec 4 2023 metadata drwxr-xr-x 2 root root 4096 Dec 4 2023 snapshots drwxr-xr-x 3 root root 4096 Oct 1 00:52 tmp
Варіант 2: з /proc/PID/root
Інший варіант – через PID процесу який ми теж бачили в crictl inspect
– в данному випадку це буде 57398c3184cd229be564b140f32a9214b38a507137522904eab6ae38b676432a:
... "info": { ... "pid": 6933, ... "config": { "metadata": { "name": "vmsingle" }, ...
Тоді на хості можемо перевірити /proc/<PID>/root
:
[root@ip-10-0-46-247 ec2-user]# ll /proc/6933/root/victoria-metrics-data/ total 40 drwxr-xr-x 6 root root 4096 Oct 1 00:51 cache drwxr-xr-x 4 root root 4096 Dec 4 2023 data -rw-r--r-- 1 root root 0 Oct 1 00:52 flock.lock drwxr-xr-x 6 root root 4096 Sep 29 04:00 indexdb drwx------ 2 root root 16384 Dec 4 2023 lost+found drwxr-xr-x 2 root root 4096 Dec 4 2023 metadata drwxr-xr-x 2 root root 4096 Dec 4 2023 snapshots drwxr-xr-x 3 root root 4096 Oct 1 00:52 tmp
Готово. Тепер можна зробити rsync
цього каталогу на новий Kubernetes WorkerNode.