Table of Content
การสร้าง Harbor ผ่าน Priviledge-Pod
ทดลองใช้งาน Harbor โดยการ Download Image และ Import เข้า Image Repository
ตรวจสอบการเรียกใช้งาน Service ที่สร้าง
การ Deploy SKE
Download Image : https://community.sangfor.com/plugin.php?id=service:download&action=view&fid=47#/56/all
1. เตรียม SCP และ HCI ให้เรียบร้อย โดยแนะนำให้เป็น Cluster 3 Node ขึ้นไป
2. ติดตั้ง SP Patch บน SCP ให้เรียบร้อย รวมถึง SP Patch เพื่อลง SKE
3. ไปที่ SCP > Images > Advanced Service Images > กด Upload > เลือก Sangfor Kubernetes Engine Image
- หาก import ไม่ได้ให้ตรวจสอบว่า Import ไฟล์ถูกต้องหรือไม่
และ Cluster ได้ทำการ Tag Storage แล้วหรือยัง (SCP > Cluster > Edit > Tag Storage > Performance Sensitive)
4. สร้าง Virtual Router ขึ้นมา 1 ตัวโดยให้ตั้ง IP Gateway สำหรับ Internal Communication ของ SKE ไว้
5.ไปที่ SCP > System > Services > Advanced Services > กด Enable Public Module ก่อน
6. ไปที่ SCP > Compute > Kubernetes Engine
- กด Activate Now > เลือก Resource Pool , Spec SKE, Management Interface (วง SCP,HCI), และ Internal Communication (ใช้วงที่สร้างในข้อก่อนหน้า)
* ให้ตรวจสอบว่ากรอก IP ที่ถูกต้องและสามารถเชื่อมต่อได้จริง
- รอระบบ Initialize ดู Progress ที่ SCP Task ด้านขวาล่าง
- บน HCI จะพบ VM ที่สร้างขึ้นมาใหม่สำหรับ SKE
- ตัว SKE จะสร้าง vSwitch และ vRouter มาเพิ่มเพื่อเชื่อมกับ Internal Switch/Router ที่สร้างไว้ก่อนหน้า
7. ไปที่ SCP > System > Licensing > Service License > กด New > เลือก Kubernetes Engine
- กรอก IP Management SKE และ vCPU ที่ต้องการให้
- ตรวจสอบที่ Platform License ว่ามี license SKE บน SCP แล้ว
- หากไม่สามารถ assign license ได้ให้ตรวจสอบว่า IP SKE Management เรียกได้จาก SCP แล้วหรือไม่
- ตรวจสอบที่ Platform License ว่ามี license SKE บน SCP แล้ว
การสร้าง Kubernetes Cluster
1. ไปที่ Image เพื่อ upload ไฟล์ K8s Cluster Image
- ตรวจสอบว่า Image ปกติ เป็น Normal
2. เข้าไปที่หน้า SKE > Kubernates Engine
- ไปที่ Settings > Kubernetes Packages > Upload Packages
- เลือก Package "K8S Software Package for v1.26.11. Recommended version." จาก Community เพื่อ Upload
3. ทำการสร้าง Cluster Kubernetes
- กรอกชื่อ Cluster, Kubernetes Version, Cluster VIP (ใช้วง Internal Communication)
- ระบบจะใช้ IP วง Internal นี้ใช้เรียก Service หรือ เชื่อมกับ Storage ต่อไป (ตามการตั้งค่าว่า Multiplexing หรือ Isolation)
- Business หมายถึงเชื่อมไปที่ Storage ISCSI aSAN
- สามารถเพิ่ม/ลด worker node ได้ภายหลัง
4. เตรียม Storage aSAN เพื่อใช้เป็น Storage ให้ SKE
- ไปที่ Nodes > Communication Interfaces > External Storage Network Interface > กด Add Access Interfaces > เลือก Interface ที่ต้องการใช้เพื่อให้ Worker เชื่อมมาที่ ISCSI IP ได้ เช่น ใช้ Management หรือ Edge
- ไปที่ HCI > Storage > Virtual Storage > ISCSI Services > กด New และสร้าง Interface สำหรับใช้ Share Storage จาก aSAN ขึ้นมาให้ Kubernetes ใช้งานเป็น Storage Class ใน SCP/SKE
- โดยจะต้องสร้าง IP Pool ให้เท่า หรือมากกว่า จำนวนของ HCI Node
- ตั้ง CHAP Username/Password
- สร้าง ISCSI Services
- ไปที่ SCP > System > Services > Block Storage > กด Activate Service
- ตรวจสอบที่ SCP > Networking > Shared Service Network จะพบ รายการใหม่สำหรับใช้ทำ Block Storage ให้ SKE พร้อม IP ที่ตั้งไว้
5. ทำการ Create Storage Class (SC)
- ไปที่ SKE > Storage > Storage Classes > กด New > สร้าง Storage Class และเลือก aSAN และ Storage Label (หากเลือก Storage Label ไม่ได้ให้ตรวจสอบว่าทำข้อที่ 4 แล้วหรือไม่ โดยจะsupport กรณีที่ HCI 3 Node ขึ้นไป เท่านั้น)
6. สร้าง Privileged Container
- ปรับ Policy Configuration ของ Cluster ที่สร้างให้เป็น Allow and Audit แล้ว Save
- ไปที่หน้า Cluster Management ของ Cluster > Overview > กด Create YAML
- ทำการ Copy YAML จากไฟล์ใน Attachment ล่างสุด เพื่อไว้สร้าง priviledge-pod
กรณีลบ priviledge-pod ไป สามารถสร้างใหม่ด้วยการ run YAML นี้ซ้ำได้
- ทำการ Paste ในหน้า Create YAML
- โดยด้านขวาจะมี Preset คำสั่งที่สามารถ Generate Structure เพื่อ Customize ต่อได้
- ระบบจะ create Pod ขึ้นมา
- Pod นี้จะเป็น privileged-pod สำหรับเริ่มต้นใช้งาน เพื่อรอรับคำสั่งต่อไปว่าจะไปใช้งานอะไรต่อ
โดยในตัวอย่างจะนำไปทำเป็น Harbor ไว้เก็บ Image
การสร้าง Harbor ผ่าน Priviledge-Pod
- กด Execute Command Line เลือก /bin/bash ใน priviledge-pod และกด OK
- กรอก VIP=$(grep 'k8s-apiserver.ske.local' /etc/hosts | awk '{print $1}')
- กรอก STORAGE_CLASS_NAME="sangfor-sc" เพื่อตั้งชื่อ
(แก้ชื่อให้ตรงกับ SC ที่สร้าง)
- ทำการ Create Harbor ด้วยคำสั่ง
echo "Harbor12345" | /sf/bin/harbor-install.sh --namespace harbor --ip $VIP --persistence-mode dynamic-pvc --storage-class $STORAGE_CLASS_NAME --registry-pvc-size 30Gi --chartmuseum-pvc-size 5Gi --jobservice-pvc-size 5Gi --database-pvc-size 5Gi --redis-pvc-size 5Gi --password --enable-tls
- ตรวจสอบเรียก Harbor
การสร้าง Image Registry
- ไปที่ SKE > Image Registries > Add Private Image Repository > กรอกข้อมูล Harbor
ทดลองใช้งาน Harbor โดยการ Download Image และ Import เข้า Image Repository
- ทดลอง Download ด้วยการ พิมพ์
curl -o images_and_script.tar.gz https://404name.oss-cn-shanghai.aliyuncs.com/ske/images_and_script.tar.gz
โดย Image ที่อยากจะใช้จริงอาจจะมาจากที่อื่น ในนี้จะเป็น image ทดสอบ
- กรอก VIP=$(grep 'k8s-apiserver.ske.local' /etc/hosts | awk '{print $1}')
เพื่อกำหนดค่า VIP เพื่อใช้งานต่อไป (หากหน้า priviledge-pod หายจะต้องกรอกเพื่อเซตค่าใหม่)
- ทำการแตก File และ Run Script เพื่อนำ Image เข้า Harbor
tar -zxvf images_and_script.tar.gz && bash import_and_push_images.sh $VIP:30011/library admin Harbor12345
- ตรวจสอบ Harbor > Project > library (เพราะก่อนหน้านี้โยนเข้า folder นี้) > จะพบกับ image 2 ส่วน
- ไปที่ Priviledge-Pod แล้วกำหนด VIP และ ตั้งชื่อตัวแปร Image ไว้เรียกใช้งาน
VIP=$(grep 'k8s-apiserver.ske.local' /etc/hosts | awk '{print $1}')
HELLOHTTP_IMAGE="$VIP:30011/library/404name/helloworld-http:latest"
NGINX_IMAGE="$VIP:30011/library/nginx:latest"
- รันคำสั่งเพื่อ deploy image จาก Image registry ให้เป็น 2 Workload ได้แก่ helloworld-server กับ nginx-server
และ สร้าง Services โดยการ expose network service เพื่อ map port 80 เข้ากับ workload ดังนี้
kubectl create deployment helloworld-server --image=$HELLOHTTP_IMAGE -n default --replicas=3 --port=80 --dry-run=client -o yaml | kubectl apply -f -
kubectl expose deployment helloworld-server --name=helloworld-service --port=80 --target-port=80 --type=NodePort -n default
kubectl create deployment nginx-server --image=$NGINX_IMAGE -n default --replicas=1 --port=80 --dry-run=client -o yaml | kubectl apply -f -
kubectl expose deployment nginx-server --name=nginx-service --port=80 --target-port=80 --type=NodePort -n default
- หาก Workload Create ไม่สำเร็จให้ตรวจสอบ IP:Port ของ Harbor ใน Image Registries ว่าถูกต้องหรือไม่ เนื่องจาก SKE จะต้องดึง image จาก Harbor ได้
ตรวจสอบผลการสร้าง Workload
- จะพบ workload ถูกสร้างสำเร็จ
- ทั้งหมดนี้จะต้องเข้าด้วย IP VIP (ตัวอย่างเป็น 198.18.10.20) ตามด้วย port ที่เขียนไว้ตรง External Access เนื่องจากเลือกไว้เป็นแบบ NodePort
- จะมี pod nginx 1 รายการ และมี helloworld-server 3 รายการ
ตรวจสอบการเรียกใช้งาน Service ที่สร้าง
- ทดสอบเข้าด้วย http://IP_VIP:xxxxx ของ workload ที่จะ map ไปที่ 80 ใน service ภายใน
- สำหรับ Service helloworld-server จะมีการแย่งเป็น 3 pod (ดูจาก 5 ตัวท้าย) ทำให้เมื่อเข้าจาก http://IP_VIP:xxxxx ของ workload จะถูกแจกจ่ายไปยัง pod ต่างๆ
คำแนะนำอื่นๆ
- การสร้าง workload ไม่จำเป็นต้องนำ image มาฝากไว้ที่ Harbor ก่อนเสมอไป สามารถเรียกตรงได้ หาก cluster k8s สามารถออกinternet ได้
- หากไม่สามารถสร้าง SC ได้ สามารถใช้ disk จาก local แทนได้ (กำหนดในไฟล์ .yaml) โดยไม่ต้องสร้างเป็น PVC เพื่อเรียก PV
- กรณีต้องการเรียก resource ด้วย IP อื่นๆ นอกจาก IP Cluster ให้ทำการสร้าง Loadbalance ขึ้นมาเพื่อถือ IP และทำการ forward port เข้าไปยังใน cluster k8s ต่อไป
- PVC จะเป็น LUN ใน aSAN
ข้อคิดเห็น
0 ข้อคิดเห็น
โปรด ลงชื่อเข้าใช้ เพื่อแสดงข้อคิดเห็น