Nhảy tới nội dung

Một bài viết được gắn thẻ "cluster"

Xem tất cả Thẻ

· Một phút để đọc
ManhPT

TL;DR

Nội dung bài viết dành cho elasticsearch và kibana 7.x.

Vấn đề là...

Ở công ty mình vừa có mấy task devops liên quan đến scaling, clustering Elasticsearch nên viết lại đề phòng sau này cần dùng. Có một task là chuyển dữ liệu từ single-node Elasticsearch cũ lên cluster mới. Single-node Elasticsearch cũ nằm trên một máy chủ ảo (VM) riêng và deploy bằng docker-compose. Cluster Elasticsearch mới thì được deploy với Helm trong Kubernetes và trên một cụm VM khác.

Có một cách tương đối đơn giản để thực hiện việc này đó là tạo snapshot backup trên single-node cũ và restore snapshot đó trên cluster mới. Sau một hồi google thì mình cũng đã chốt lại được các bước cơ bản sử dụng Kibana:

  1. Cài đặt plugin repository-s3
  2. Cấu hình AWS S3 credentials cho Elasticsearch
  3. Register một repository với type S3 trên single-node Elasticsearch cũ
  4. Tạo snapshot policy để tự động hóa việc chụp snapshot và đẩy lên S3 bucket từ Elasticsearch cũ
  5. Register một repository tương tự trên cluster Elasticsearch mới và restore snapshot

Sau đây chúng ta đi vào chi tiết.

1. Cài đặt plugin repository-s3 cho Elasticsearch

1.1. Rebuild Elasticsearch docker image

Việc cài đặt và kích hoạt plugin đòi hỏi phải khởi động lại cluster Elasticsearch. Do đó, ta không thể cài đặt trực tiếp mà cần phải chỉnh sửa Elasticsearch image. Cụ thể là cần viết một Dockerfile mới để build một image mới từ image elasticsearch mặc định:

Dockerfile
ARG version=latest
FROM docker.elastic.co/elasticsearch/elasticsearch:${version}
RUN bin/elasticsearch-plugin install --batch repository-s3

Gõ lệnh build image như sau:

# latest version
docker build --tag yourname/elasticsearch .
# specific version
docker build --build-arg version=7.10.1 --tag your-name/elasticsearch:7.10.1 .
# more fancy specific version command
export VERSION=7.10.1 && docker build --build-arg version=$VERSION --tag yourname/elasticsearch:$VERSION -f elasticsearch.dockerfile .

Nếu quá trình build image diễn ra tốt đẹp thì ta có thể thấy output như sau:

...
-> Installing repository-s3
-> Downloading repository-s3 from elastic
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessDeclaredMembers
* java.lang.RuntimePermission getClassLoader
* java.lang.reflect.ReflectPermission suppressAccessChecks
* java.net.SocketPermission * connect,resolve
* java.util.PropertyPermission es.allow_insecure_settings read,write
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
-> Installed repository-s3
...

Sau khi build image thành công thì push image đó lên đâu đó mà Kubernetes cluster của bạn có thể kéo về được, VD: docker hub, AWS ECR... Nếu bạn đẩy image lên một private registry thì cần chú ý cấu hình imagePullSecrets.

1.2. Deploy lại single-node Elasticsearch cũ với image vừa tạo

Thường thì Elasticsearch cũ sẽ khởi chạy lại thành công, nếu phát sinh lỗi gì thì xem log rồi cố gắng google xem vì sao... lol... 😂

  1. Cấu hình AWS S3 credentials

Để thực hiện bước này thì cần phải docker exec (chui) vào trong container của Elasticsearch cũ và gõ:

elasticsearch-keystore add s3.client.default.access_key
elasticsearch-keystore add s3.client.default.secret_key

2 lệnh trên sẽ yêu cầu bạn nhập (prompt) thông tin nhưng khi nhập sẽ không nhìn thấy gì đâu, cứ copy paste rồi enter. Đại loại bạn sẽ nhìn thấy màn hình hiển thị như sau:

[[email protected] bin]# elasticsearch-keystore add s3.client.default.access_key
Enter value for s3.client.default.access_key:
[[email protected] bin]# elasticsearch-keystore add s3.client.default.secret_key
Enter value for s3.client.default.secret_key:

Để có access_keysecret_key từ một IAM user có quyền đọc ghi S3 bucket, truy cập AWS IAM Users > chọn user có quyền trên dịch vụ S3 > Security credentials > Create access key.

Nhập credentials xong thì khởi động lại single-node Elasticsearch. Sau khi khởi động lại thành công thì mở Kibana Dev Tools để reload_secure_settings:

POST _nodes/reload_secure_settings
{}

3. Register một repository với type S3

3.1. Nhập tên và chọn kiểu là S3 --> nhấn Next

3.2. Nhập tên bucket --> nhấn Register

Bucket cần được khởi tạo trước trên AWS S3 console.

3.3. (optional) Verify repo

Sau khi register thành công, màn hình sẽ hiển thị thông tin repo vừa được tạo. Bạn sẽ nhìn thấy nút "Verify repository" ở panel chi tiết phía bên phải, sau khi nhấn nút này thì Kibana sẽ hiển thị "Verification status" là connected.

Nếu status là "Not connected" thì thông tin lỗi cũng sẽ được hiển thị trong mục Details.

4. Tạo Policy để tự động hóa tạo và xóa snapshot

Ta chỉ cần chuyển sang tab policy, nằm ngay bên cạnh repository. Nhấn "Create a policy".

Các bước tạo policy khá đơn giản và trực quan trên giao diện của Kibana. Bạn có thể tham khảo tài liệu chính hãng tại đây: https://www.elastic.co/guide/en/kibana/current/snapshot-repositories.html#kib-snapshot-policy.

Snapshot details

5. Restore snapshot trên cluster Elasticsearch mới

5.1. Lặp lại các bước từ 1.2 đến 3.3 với cluster Elasticsearch mới

Trong scope của bài viết này thì ta chỉ cần restore snapshot trên cluster mới nên không cần tạo policy để backup.

5.2. Restore snapshot

Vào tab Snapshots, chọn snapshot mới nhất và nhấn Restore.

Snapshot details

Sau khi quá trình restore bắt đầu thì bạn có thể theo dõi trạng thái tại tab "Restore Status".

Snapshot details

Thế là xong rồi. Cảm ơn bạn đã đọc đến đây! 😆

· Một phút để đọc
ManhPT

Lens là một phần mềm nguồn mở cung cấp giao diện thân thiện để làm việc với nhiều kubernetes cluster

Khi khối lượng công việc được chuyển lên môi trường container (cụ thể là docker) ngày một nhiều, việc quản lý một số lượng lớn container và kết nối giữa chúng trở lên khó khăn hơn.

Khi quy mô và độ phức tạp của môi trường container tăng lên vượt quá khả năng quản lý bởi sức người, các nền tảng quản lý cấp phát container như Kubernetes ngày càng trở nên quan trọng.

Tuy nhiên, các nền tảng như vậy cũng đi liền với những thách thức đòi hỏi các thông số, khả năng giám sát và mức độ thân thiện với người dùng để diễn tả mức độ phức tạp của chúng.

Sử dụng Lens

Lens - tự xưng Kubernetes IDE - là một công cụ khá hữu ích, hấp dẫn và open source cung cấp khả năng quản lý các kubernetes cluster. Lens có thể kết nối đến các kubernetes cluster sử dụng kubeconfig file, sau đó hiển thị các thông tin về cluster và objects bên trong.

Lens cũng có thể kết nối hoặc cài đặt Prometheus stack để cung cấp các thông số về cluster, bao gồm thông tin và tình trạng các node.

Màn hình cluster overview

Tương tự Kubernetes dashboard hoặc Openshift, Lens cung cấp các cập nhật realtime về tình trạng của cluster và thu thập thông số giám sát với Prometheus.

Cài đặt Lens

Việc cài đặt khá đơn giản và hỗ trợ 3 nền tảng chính: Windows, MacOS, Linux. Có nhiều cách đề cài đặt và đơn giản nhất là tải về và cài đặt từ https://github.com/lensapp/lens/releases/latest. Ngoài ra, cũng có thể cài đặt bằng dòng lệnh với:

Windows (Chocolatey)

choco install -y lens

Ubuntu/Linux (Snap)

  1. Tải Lens package dành cho Snap.
  2. Sau khi tải về, thực hiện lệnh cài đặt snap như sau:
sudo snap install Lens-{version}.amd64.snap --dangerous --classic

Sau đó có thể bắt đầu sử dụng lens bằng cách gõ "lens" vào terminal.

MacOS

brew install --cask lens

Lens giúp nhìn ngắm Kubernetes rõ ràng hơn

Kubernetes rất phức tạp và nó có lý do để phải phức tạp. Lens không chỉ giúp giảm bớt rào cản đối với những người mới bắt đầu mà còn giúp những người đã có kinh nghiệm với kubernetes dễ thở hơn.

Ngoài cung cấp các thông số cơ bản về cluster, các node, lens còn có thể cung cấp thông tin chi tiết về các objects bên trong. Việc cài đặt hay hiển thị thông số giám sát từ Prometheus stack trở nên cực kỳ dễ dài chỉ với vài lần click chuột.

Ấn tượng hơn nữa, Lens có thể quản lý nhiều cluster cùng lúc và cho phép chuyển đổi giữa các cluster cực dễ dàng chỉ bằng cách nhấn nút. Bài viết có tham khảo và dịch lại từ: https://opensource.com/article/20/6/kubernetes-lens.

· Một phút để đọc
ManhPT

K3S là một phiên bản nhỏ và nhẹ của Kubernetes mà bạn có thể sử dụng trên rất nhiều môi trường thiết bị khác nhau. Bài viết này không nhằm mục đích giới thiệu K3S nên các bạn có thể tìm hiểu thêm về K3S tại đây https://k3s.io/ hoặc https://github.com/rancher/k3s/blob/master/README.md trước khi đọc tiếp.

Để có thể cài đặt và sử dụng K3S thì các bạn cũng nên tham khảo yêu cầu hệ thống của K3S trước tại: https://rancher.com/docs/k3s/latest/en/installation/installation-requirements/. Nếu bạn đã chuẩn bị đầy đủ môi trường theo đúng yêu cầu của K3S thì bắt đầu thôi.

Cài đặt K3S với tất cả cấu hình mặc định:

curl -sfL https://get.k3s.io | sh -

Sau khi chạy script cài đặt trên thì:

  • K3S sẽ được cấu hình để tự động restart sau khi node bị reboot hoặc process bị lỗi hay bị kill.
  • Vài công cụ hỗ trợ cũng sẽ được cài đặt đó là: kubectl, crictl, ctr, k3s-killall.sh, and k3s-uninstall.sh.
  • Một file chứa kubeconfig sẽ được ghi vào /etc/rancher/k3s/k3s.yamlkubectl sẽ tự đụng sử dụng file này.

Chú ý:

Cài đặt K3S với custom config

Không sử dụng Traefik Ingress

curl -sfL https://get.k3s.io | sh -s - --disable traefik

Không sử dụng cả Traefik Ingress và Local-Path Storage

curl -sfL https://get.k3s.io | sh -s - --disable traefik,local-storage

Custom range cho NodePort Service

curl -sfL https://get.k3s.io | sh -s - --kube-apiserver-arg service-node-port-range=2000-32767

Cập nhật TLS cho phép remote kubectl thông qua public IP

curl -sfL https://get.k3s.io | sh -s - --tls-san=123.123.123.123
  • 123.123.123.123 - thay bằng public IP của cluster load balancer

Cập nhật hoặc thay đổi cấu hình K3S

Kubernetes nói chung và K3S nói riêng phát triển tương đối nhanh với cộng đồng lớn. Để cập nhật phiên bản mới hay thay đổi cấu hình cluster thì bạn chỉ cần chạy lại câu lệnh cài đặt với cấu hình mong muốn. Script cài đặt sẽ chạy lại các bước giống như lúc cài đặt.

Việc cập nhật phiên bản mới không nên diễn ra thường xuyên mà nên có kế hoạch trước và cũng nên đợi phiên bản mới chứng minh được tính ổn định rồi bạn mới upgrade cũng không muộn.

Thêm node cho cluster

Để thêm 1 node mới thì câu lệnh cũng rất đơn giản:

curl -sfL https://get.k3s.io | K3S_URL=https://<myserver>:6443 K3S_TOKEN=<mynodetoken> sh -
  • <myserver> - thay bằng IP của master node (nên sử dụng IP LAN)
  • <mynodetoken> - thay bằng token của master node được ghi tại /var/lib/rancher/k3s/server/node-token

Xóa cài đặt K3S

Nếu bạn cài đặt k3s sử dụng script thì script để xóa k3s cũng sẽ được cài đặt tự động. Để xóa k3s khỏi một server node:

/usr/local/bin/k3s-uninstall.sh

Để xóa k3s khỏi một agent node:

/usr/local/bin/k3s-agent-uninstall.sh