Introduction to Istio, Part 5
Installing Istio
Sau khi đã nắm được kiến trúc tổng quan của Istio, chúng ta sẽ đi vào phần cài đặt. Trong chương này, tôi sẽ hướng dẫn các cách tiếp cận khác nhau để triển khai Istio service mesh trên một cụm Kubernetes. Chúng ta sẽ tìm hiểu về Istio Operator API, các profile cài đặt của Istio, và cách sử dụng Helm.
Trong bài lab, tôi sẽ hướng dẫn cách tải xuống Istio, cài đặt nó vào cụm Kubernetes bằng công cụ CLI istioctl, cập nhật một bản cài đặt Istio hiện có, và cách gỡ cài đặt Istio khi cần thiết.
Mục Tiêu Học Tập
Sau chương này, bạn sẽ có thể:
Hiểu và thảo luận các cách khác nhau để cài đặt Istio trên Kubernetes.
Nắm được các khái niệm cơ bản về Istio Operator API.
Hiểu rõ các Helm chart được sử dụng trong quá trình cài đặt.
Phân biệt các cấu hình profile cài đặt của Istio.
Cấu Hình Profile Khi Cài Đặt
Istio service mesh cung cấp rất nhiều tùy chọn cấu hình mà quản trị viên có thể điều chỉnh trước khi cài đặt. Để nhóm các cấu hình phổ biến vào một dạng trừu tượng cấp cao hơn, Istio sử dụng khái niệm cấu hình profile.
Các profile cài đặt này chứa các thiết lập cho cả control plane và data plane của Istio. Các cấu hình này được định nghĩa thông qua Istio Operator API và tài nguyên IstioOperator.
Hiện tại, Istio cung cấp 6 profile cấu hình, được liệt kê dưới đây. Để có danh sách cấu hình mới nhất, bạn có thể chạy lệnh:
istioctl profile list
Danh Sách Profile Cấu Hình
Default Profile
Được thiết kế cho môi trường production và các cụm chính trong kịch bản đa cụm (multi-cluster).
Triển khai control plane và ingress gateway.
Demo Profile
Dành cho môi trường thử nghiệm và trình diễn.
Triển khai control plane, ingress gateway, và egress gateway.
Kích hoạt mức độ cao của tracing và logging.
Minimal Profile
Tương tự như default profile nhưng không bao gồm ingress gateway.
Triển khai control plane.
External Profile
Sử dụng để cấu hình các cụm từ xa trong kịch bản đa cụm.
Không triển khai bất kỳ thành phần nào.
Empty Profile
Dùng làm nền tảng cho các cấu hình tùy chỉnh.
Không triển khai bất kỳ thành phần nào.
Preview Profile
Chứa các tính năng thử nghiệm (experimental).
Triển khai control plane và ingress gateway.
Ambient Profile
Hỗ trợ triển khai chế độ ambient mesh.
Chế độ ambient hiện đang trong giai đoạn Alpha (tháng 4 năm 2024). Không nên sử dụng ambient mesh trong môi trường production.
Trong các bài viết tiếp theo, tôi sẽ hướng dẫn chi tiết từng bước cài đặt Istio sử dụng các công cụ như istioctl, Helm, và cách tùy chỉnh các profile để đáp ứng nhu cầu thực tế của từng hệ thống.
Để cài đặt Istio sử dụng Istio CLI, bạn có thể sử dụng cờ --set
và chỉ định profile như sau:
istioctl install --set profile=demo
Sau này, chúng ta sẽ tìm hiểu cách cài đặt và tùy chỉnh Istio bằng cách tạo tài nguyên IstioOperator và triển khai nó thông qua Istio CLI. Chúng ta cũng sẽ tìm hiểu cách sử dụng Helm và triển khai các Istio Helm charts.
Istio CLI cung cấp các lệnh tiện lợi cho phép chúng ta lấy thông tin đầy đủ về các cấu hình profile của Istio và sự khác biệt giữa các profile.
Ví dụ, để lấy cấu hình YAML đầy đủ của profile demo, chúng ta có thể chạy lệnh sau:
istioctl profile dump demo
Lệnh này sẽ xuất cấu hình YAML của tài nguyên IstioOperator ra console. Để lấy cấu hình cho một profile khác, chỉ cần thay tên profile trong lệnh trên.
Một lệnh hữu ích khác khi khám phá các profile khác nhau là lệnh diff. Lệnh diff liệt kê các sự khác biệt giữa các cấu hình profile.
Ví dụ, lệnh này so sánh profile default với profile demo:
istioctl profile diff demo default
Kết quả xuất ra theo định dạng truyền thống của lệnh diff, bao gồm các dòng được đánh dấu với + hoặc - để chỉ ra sự khác biệt giữa hai profile. Ví dụ:
Sự khác biệt giữa các profile:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
creationTimestamp: null
namespace: istio-system
spec:
components:
base:
enabled: true
cni:
enabled: false
egressGateways:
- - enabled: true
- k8s:
- resources:
- requests:
- cpu: 10m
- memory: 40Mi
+ - enabled: false
name: istio-egressgateway
ingressGateways:
- enabled: true
Kết quả trên cho thấy rằng profile default đã tắt gateway egress (enabled: false
), trong khi profile demo lại bật gateway này (enabled: true
).
Sử dụng Istio Operator API
Istio Operator API và tài nguyên IstioOperator cho phép chúng ta cài đặt và cấu hình Istio trên một cụm Kubernetes. Về cơ bản, chúng ta có thể phân tách cấu hình trong tài nguyên IstioOperator thành các phần sau:
Global
Phần global cho phép cấu hình tên profile, đường dẫn ảnh Docker gốc, các thẻ ảnh, namespace, phiên bản, và nhiều tùy chọn khác.
Cấu hình Mesh (meshConfig)
Phần meshConfig bao gồm cấu hình các thành phần của control plane. Ví dụ, trong phần này, chúng ta có thể cấu hình định dạng log truy cập, mã hóa log, cấu hình proxy mặc định, các bộ chọn discovery, các trust domain, và nhiều tùy chọn khác.
Cấu hình thành phần (components)
Phần components cho phép chúng ta bật hoặc tắt các thành phần riêng biệt, cài đặt các thành phần bổ sung (ví dụ: nhiều ingress hoặc egress gateway), và cấu hình các thiết lập tài nguyên Kubernetes cho các thành phần riêng biệt. Ví dụ, đối với mỗi thành phần (ví dụ: pilot, ingress, hoặc egress gateway), chúng ta có thể cấu hình yêu cầu và giới hạn CPU và bộ nhớ, chú thích, nhãn, số lượng replica và các thiết lập khác trong tài nguyên Kubernetes.
Trong tài nguyên IstioOperator, chúng ta chỉ định trạng thái mong muốn của các thành phần Istio. Sau đó, chúng ta có thể áp dụng hoặc triển khai tài nguyên này lên cụm Kubernetes bằng lệnh Istio CLI và lệnh install.
Khi chúng ta đã tạo tài nguyên IstioOperator, có thể cài đặt nó lên cluster bằng lệnh:
istioctl install -f my-operator-resource.yaml
Sử dụng Helm
Helm là một công cụ quản lý gói cho Kubernetes giúp cài đặt và nâng cấp các ứng dụng phức tạp trên Kubernetes. Một yếu tố cơ bản của Helm là Helm Chart, một bộ sưu tập các manifest YAML.
Khi sử dụng Helm, có ba Helm chart mà chúng ta cần biết đến, được liệt kê theo thứ tự cài đặt như sau:
1. Base Chart (istio/base)
Base chart bao gồm các tài nguyên cấp cụm như tài nguyên cấu hình webhook xác thực, tài khoản dịch vụ, các vai trò và gán vai trò cụm, và các tài nguyên khác để đảm bảo tính tương thích ngược.
2. Istiod Chart (istio/istiod)
Istiod chart chứa cài đặt control plane của Istio. Nó bao gồm triển khai và dịch vụ istiod, cấu hình webhook thay đổi (cho phép tự động chèn sidecar vào các deployment), và các tài nguyên khác cho control plane.
3. Gateway Chart (istio/gateway)
Gateway chart được sử dụng để triển khai các ingress và egress gateways cho cụm. Nó bao gồm tài nguyên dịch vụ và triển khai và các tài nguyên hỗ trợ khác.
Cài đặt Charts
Trước khi cài đặt các chart, chúng ta cần tạo thủ công namespace gốc (ví dụ: istio-system) và sử dụng lệnh helm install để cài đặt từng chart. Thông thường, chúng ta cài đặt base và istiod chart vào namespace istio-system, còn gateway chart vào các namespace riêng biệt.
Ví dụ, để cài đặt istiod chart, ta có thể sử dụng lệnh sau:
helm install istiod istio/istiod -n istio-system
Tham số đầu tiên trong lệnh trên là tên release, theo sau là tên chart.
Để kiểm tra tiến độ cài đặt, chúng ta có thể sử dụng lệnh helm status với tên release (ví dụ: istiod):
helm status istiod -n istio-system
Chúng ta có thể cung cấp các cấu hình tùy chỉnh cho từng Helm chart khi cài đặt. Để xem các cấu hình có thể cập nhật, chúng ta có thể sử dụng lệnh show values như sau:
helm show values istio/istiod
Ví dụ cấu hình có thể được cập nhật trong phần Values.pilot (dùng cho discovery và cấu hình toàn bộ mesh):
## Discovery Settings
pilot:
autoscaleEnabled: true
autoscaleMin: 1
autoscaleMax: 5
replicaCount: 1
rollingMaxSurge: 100%
rollingMaxUnavailable: 25%
hub: ""
tag: ""
# Có thể là full hub/image:tag
image: pilot
traceSampling: 1.0
# Tài nguyên cho một cài đặt pilot nhỏ
resources:
requests:
cpu: 500m
memory: 2048Mi
env: {}
cpu:
targetAverageUtilization: 80
Tương tự, chúng ta có thể lấy giá trị của các Helm charts khác. Để áp dụng các cập nhật cấu hình cho việc cài đặt chart riêng biệt, chúng ta cần tạo một tệp YAML riêng với các giá trị cấu hình muốn cập nhật. Sau đó, sử dụng lệnh install với cờ -f để cài đặt chart với các cấu hình đã cung cấp:
helm install istiod istio/istiod -n istio-system -f my-config-values.yaml