איך להתקין k3s יחד עם ה Dashboard על multipass

20/06/2023

מולטיפאס הוא כלי להרצת מכונות לינוקס וירטואליות קטנות במהירות על מכונות Mac ו Windows. בין השאר אפשר להיעזר בו כדי לשחק עם קלאסטרים, כי קלאסטרים צריכים הרבה מכונות ועם מולטיפאס מאוד קל ליצור מכונות חדשות. בואו נלך להתקין קלאסטר של שלוש מכונות, מנוהל על ידי k3s (שהוא סוג של קוברנטיס פחות שמן), נתקין עליו את לוח הבקרה של Kubernetes וניגש לממשק הניהול מהמחשב המארח.

1. התקנת k3s על multipass

אני מתחיל עם המדריך כאן: https://andreipope.github.io/tutorials/create-a-cluster-with-multipass-and-k3s.html.

רק שבמקום להתקין את גירסה 18.04 אני מתקין את 22.04. כלומר נפעיל:

for f in {1..3}; do
    multipass launch -c 1 -m 1G -d 4G -n k3s-$f 22.04
done

לאחר מכן מתקין מכונה ראשית על המכונה הראשונה שנוצרה:

multipass exec k3s-1 -- bash -c "curl -sfL https://get.k3s.io | sh -"

מושך את הטוקן וכתובת ה IP ומחבר אליו את שתי המכונות האחרות:

IP=$(multipass info k3s-1 | grep IPv4 | awk '{print $2}')
TOKEN=$(multipass exec k3s-1 sudo cat /var/lib/rancher/k3s/server/node-token)

for f in {2..3}; do
     multipass exec k3s-$f -- bash -c "curl -sfL https://get.k3s.io | K3S_URL=\"https://$IP:6443\" K3S_TOKEN=\"$TOKEN\" sh -"
done

נוודא שהכל עובד:

$ multipass exec k3s-1 sudo kubectl get nodes
NAME    STATUS   ROLES                  AGE     VERSION
k3s-1   Ready    control-plane,master   2m48s   v1.26.5+k3s1
k3s-2   Ready    <none>                 56s     v1.26.5+k3s1
k3s-3   Ready    <none>                 46s     v1.26.5+k3s1

2. התקנת לוח הבקרה

השלב הבא הוא התקנת ה Kubernetes Dashboard על הקלאסטר החדש שלנו. אני הולך לפי המדריך כאן: https://gist.github.com/jannegpriv/06427e4ecc2a17f317a4bebc32b6445c

קודם כל נכנס למכונה הראשונה:

multipass shell k3s-1

בתוך המכונה מריץ את הפקודות:

mkdir ~/k3s-dashboard
cd ~/k3s-dashboard
GITHUB_URL=https://github.com/kubernetes/dashboard/releases
VERSION_KUBE_DASHBOARD=$(curl -w '%{url_effective}' -I -L -s -S ${GITHUB_URL}/latest -o /dev/null | sed -e 's|.*/||')
sudo k3s kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/${VERSION_KUBE_DASHBOARD}/aio/deploy/recommended.yaml

ממשיך ליצירת שני קבצי ה yaml מתוך אותו מדריך:

# service-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
# cluster-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

ובסוף נתקין את שני הקבצים:

sudo k3s kubectl apply -f service-account.yaml
sudo k3s kubectl apply -f cluster-role.yaml

הדרכים המרכזיות לחשוף את ממשק הניהול החוצה למחשב המארח הן שימוש ב Proxy, שימוש ב Port Forwarding והתקנת Ingress Controller. אנחנו נשתמש ב Port Forwarding כי זה הכי פשוט.

נפעיל עדיין מתוך המכונה הוירטואלית:

sudo k3s kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8443:443 --address 0.0.0.0

ולאחר מכן נוכל מתוך המחשב המארח לגלוש לכתובת ה IP של המכונה הוירטואלית בפורט 8443 כדי להגיע לממשק הניהול. שימו לב שהדפדפן יתלונן על Certificate לא תקין (כי זה Self Signed של הקלאסטר). פשוט נדלג על האזהרה.

אחרי שיש לנו גישה נשאר לעבור את מסך החיבור. בשביל זה צריך לייצר טוקן עם הפקודה:

sudo k3s kubectl -n kubernetes-dashboard create token admin-user

מעתיקים את מה שהודפס למקום בטוח ומשתמשים בו כדי להתחבר לממשק הניהול.