+9

Triển khai Kubernetes Cluster với K3s trên MacOS

Mayfest2023 ContentCreator

1. Lời mở đầu

Xin chào mọi người 👋👋👋

Tiếp tục chuỗi bài Mayfest2023 thì mình sẽ chia sẻ với mọi người một phiên bản của Kubernetes mang tên K3s. Trong quá trình cài đặt để sử dụng thì mình gặp một chút vấn đề nên tiện bài viết này thì mình cũng chia sẻ với mọi người cách xử lý luôn. Không dài dòng nữa, cùng bắt đầu thôi =))))

2. K3s là gì?

image.png

K3s là một nền tảng Kubernetes nhẹ được tối ưu hóa cho các trường hợp sử dụng có tài nguyên hạn chế như IoT, CI, hệ thống nhúng (embedded systems) hoặc các môi trường điện toán đám mây nhỏ. K3s là một sản phẩm của công ty Rancher Labs, được giới thiệu vào năm 2019.

Tính năng chính của K3s bao gồm:

  1. Nhẹ và dễ triển khai: K3s có kích thước dưới 100MB và cài đặt đơn giản hơn so với Kubernetes. Nó có thể được triển khai trên các hệ thống có tài nguyên hạn chế, chẳng hạn như Raspberry Pi hoặc VM.

  2. Cấu hình đơn giản: K3s sử dụng một tệp cấu hình YAML đơn giản để cấu hình các thành phần Kubernetes. Người dùng có thể sử dụng các tệp cấu hình YAML tương tự như trong Kubernetes để triển khai ứng dụng của họ trên K3s.

  3. Hiệu suất cao: K3s được tối ưu hóa để đạt được hiệu suất cao trên các nền tảng có tài nguyên hạn chế. Nó sử dụng các công nghệ như SQLite và Traefik để giảm độ phức tạp và tăng tốc độ xử lý.

  4. Bảo mật: K3s được thiết kế với bảo mật cao. Nó sử dụng TLS để bảo vệ các kết nối giữa các thành phần và hỗ trợ các tính năng bảo mật khác như mã hóa dữ liệu và xác thực người dùng.

  5. Hỗ trợ cộng đồng: K3s được phát triển và hỗ trợ bởi một cộng đồng lớn, với nhiều người dùng và nhà phát triển đang đóng góp vào dự án.

Thực sự K3s đáp ứng đủ tiêu chí ngon-bổ-rẻ cho việc triển khai và quản lý các ứng dụng chạy Kubernetes trên các môi trường có tài nguyên hạn chế.

Vậy để cài đặt K3s thì bạn cần làm gì nhỉ? Truy cập vào trang chủ của K3s thì bạn sẽ thấy chỉ cần chạy câu lệnh phía dưới:

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

Tuy nhiên sau khi chạy xong bạn lại gặp lỗi như này 😅

➜  ~ curl -sfL https://get.k3s.io | sh -
[ERROR]  Can not find systemd or openrc to use as a process supervisor for k3s

Lỗi Can not find systemd or openrc to use as a process supervisor for k3s xuất hiện khi cài đặt K3s trên MacOS là do hệ thống không có trình quản lý tiến trình nào được hỗ trợ bởi K3s. Trên các hệ thống Linux phổ biến, K3s sử dụng systemd hoặc OpenRC để quản lý tiến trình, tuy nhiên, trên MacOS, K3s không hỗ trợ các trình quản lý tiến trình này.

Bạn vẫn muốn cài K3s trên MacOS, okay, mình sẽ giúp bạn 😉

3. Cài đặt K3s trên MacOS

Bạn có thể tham khảo các các cách sau để cài đặt K3s trên MacOs:

3.1. Sử dụng K3d

image.png

Trước hết, K3d (K3s in Docker) là một tiện ích được thiết kế để dễ dàng chạy k3s trong Docker. K3d sử dụng Docker để tạo ra các node K3s, và có thể được sử dụng để tạo ra các cluster K3s cho mục đích phát triển hoặc kiểm thử. Cụ thể hơn về K3d thì chắc mình sẽ dành riêng một bài viết cho nó nhé 😗

Đầu tiên, bạn cần cài đặt K3d, có khá nhiều cách, ở đây mình dùng luôn homebrew để cài:

brew install k3d

Kiểm tra version xem đã cài thành công chưa nào, như bạn đã thấy thì mặc định K3d đã cài luôn K3s cho mình rồi :v

➜  ~ k3d version
k3d version v5.4.7
k3s version v1.25.6-k3s1 (default)

Với nhu cầu sử dụng K3s thôi thì bạn chỉ cần dùng K3d để tạo một cụm single node K3s đơn giản, không cần thêm tuỳ chọn gì cả:

➜  ~ k3d cluster create k3s-demo
INFO[0000] Prep: Network
INFO[0000] Created network 'k3d-k3s-demo'
INFO[0000] Created image volume k3d-k3s-demo-images
INFO[0000] Starting new tools node...
INFO[0000] Starting Node 'k3d-k3s-demo-tools'
INFO[0009] Creating node 'k3d-k3s-demo-server-0'
INFO[0011] Pulling image 'docker.io/rancher/k3s:v1.25.6-k3s1'
INFO[0368] Creating LoadBalancer 'k3d-k3s-demo-serverlb'
INFO[0370] Pulling image 'ghcr.io/k3d-io/k3d-proxy:5.4.7'
INFO[0556] Using the k3d-tools node to gather environment information
INFO[0556] Starting new tools node...
INFO[0556] Starting Node 'k3d-k3s-demo-tools'
INFO[0557] Starting cluster 'k3s-demo'
INFO[0557] Starting servers...
INFO[0557] Starting Node 'k3d-k3s-demo-server-0'
INFO[0561] All agents already running.
INFO[0561] Starting helpers...
INFO[0561] Starting Node 'k3d-k3s-demo-serverlb'
INFO[0567] Injecting records for hostAliases (incl. host.k3d.internal) and for 3 network members into CoreDNS configmap...
INFO[0569] Cluster 'k3s-demo' created successfully!
INFO[0569] You can now use it like this:
kubectl cluster-info

Lệnh trên đã tạo ra một cụm K3s mới với tên là k3s-demo. Bạn có thể đặt tên khác bằng cách thay k3s-demo bằng tên bạn mong muốn.

Để kết nối kubectl đến cụm K3s vừa tạo, bạn có thể sử dụng lệnh sau:

➜  ~ export KUBECONFIG="$(k3d kubeconfig write k3s-demo)"

Lệnh trên sẽ tạo một tệp cấu hình kubectl mới và lưu trữ nó trong biến môi trường KUBECONFIG.

Sau khi tạo cụm K3s, bạn có thể kiểm tra nó bằng cách sử dụng kubectl. Ví dụ, bạn có thể kiểm tra danh sách các nodes trong cụm bằng lệnh:

➜  ~ kubectl get nodes
NAME                    STATUS   ROLES                  AGE   VERSION
k3d-k3s-demo-server-0   Ready    control-plane,master   81s   v1.25.6+k3s1

Vậy là bạn đã cài đặt thành công K3s bằng K3d trên macOS và có thể sử dụng để triển khai ứng dụng trên Kubernetes.

3.2 Sử dụng Multipass

image.png

Multipass là một công cụ tạo máy ảo trên các nền tảng hỗ trợ, bao gồm MacOS. Bạn có thể tải và cài đặt Multipass từ đây hoặc sử dụng trình quản lý package như Homebrew để cài đặt:

brew install multipass

Sau khi đã cài xong multipass, bạn cần tạo một VM với multipass, chạy lệnh sau để tạo một VM với tên k3s-demo:

➜  ~ multipass launch --name k3s-demo --cpus 2 --memory 2048M --disk 10G

Launched: k3s-demo

Các thông số cho VM ở trên thì bạn có thể tùy chỉnh theo ý muốn nhé 😄, tiếp theo bạn sử dụng multipass để ssh vào VM k3s-demo vừa được tạo:

➜  ~ multipass shell k3s-demo
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-71-generic aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri May  5 18:50:02 +07 2023

  System load:             0.00439453125
  Usage of /:              14.9% of 9.52GB
  Memory usage:            9%
  Swap usage:              0%
  Processes:               93
  Users logged in:         0
  IPv4 address for enp0s1: 192.168.64.2
  IPv6 address for enp0s1: fd9b:8f3e:46d0:eb67:5054:ff:fe0c:b9b2

Và sử dụng curl trong shell để tải xuống script cài đặt K3s và chạy script đó:

ubuntu@k3s-vm:~$ curl -sfL https://get.k3s.io | sh -
[INFO]  Finding release for channel stable
[INFO]  Using v1.26.4+k3s1 as release
[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.26.4+k3s1/sha256sum-arm64.txt
[INFO]  Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.26.4+k3s1/k3s-arm64

[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Skipping installation of SELinux RPM
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s

Khi quá trình cài đặt đã hoàn tất, bạn có thể kiểm tra trạng thái của K3s:

ubuntu@k3s-demo:~$ sudo service k3s status
● k3s.service - Lightweight Kubernetes
     Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-05-05 19:19:45 +07; 5min ago
       Docs: https://k3s.io
    Process: 1864 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exited, status=0/>
    Process: 1866 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
    Process: 1867 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
   Main PID: 1868 (k3s-server)
      Tasks: 89
     Memory: 634.8M
        CPU: 38.051s
     CGroup: /system.slice/k3s.service
             ├─1868 "/usr/local/bin/k3s server"
             ├─1897 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock -->
             ├─2582 /var/lib/rancher/k3s/data/4b147cafa965066cd68e04b4e3acce221078156a3b9ba635a653517ce459aa4d/bin/containerd-shi>
             ├─2598 /var/lib/rancher/k3s/data/4b147cafa965066cd68e04b4e3acce221078156a3b9ba635a653517ce459aa4d/bin/containerd-shi>
             ├─2656 /var/lib/rancher/k3s/data/4b147cafa965066cd68e04b4e3acce221078156a3b9ba635a653517ce459aa4d/bin/containerd-shi>
             ├─2671 /var/lib/rancher/k3s/data/4b147cafa965066cd68e04b4e3acce221078156a3b9ba635a653517ce459aa4d/bin/containerd-shi>
             ├─2709 /var/lib/rancher/k3s/data/4b147cafa965066cd68e04b4e3acce221078156a3b9ba635a653517ce459aa4d/bin/containerd-shi>
             └─3000 /usr/sbin/iptables -t nat -S FLANNEL-POSTRTG 1 --wait

Vậy là bạn có thể sử dụng K3s trên MacOS bằng cách sử dụng Multipass để tạo một VM và cài đặt K3s trên đó 😗

4. Tổng kết

Vậy là qua bài viết vừa rồi, mình đã cùng mọi người xử lý vấn đề khi cài đặt K3s trên nền tảng MacOS, cá nhân mình sẽ lựa chọn cách 1 là sử dụng K3d vì nó triển khai nhanh chóng và tiện lợi cho việc xây dựng, quản lý các cụm K8s. Nếu bạn còn có cách nào hay hơn thì hãy chia sẻ phía dưới phần bình luận để mọi người cùng tham khảo nhé 😄

Cảm ơn mọi người đã dành thời gian theo dõi bài viết này! 🙇

5. Tài liệu tham khảo


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí