[บันทึกช่วยจำ] ลองเล่น VMware vSphere with Tanzu + HAProxy ตอนจบ

Kritsadanshon Sadeewong
5 min readDec 8, 2020

สารบัญ

จากคราวที่แล้ว [บันทึกช่วยจำ] ลองเล่น VMware vSphere with Tanzu with HAProxy ต่อที่ 1 เราได้ทำการตั้งค่าต่างๆ เพื่อเปิดใช้งาน vSphere with Tanzu ขึ้นมาใช้งานเรียบร้อย ต่อไปเราก็จะมาลองใช้งานดูบ้างว่าจะยาก หรือง่ายขนาดไหน เราไปลองกันเลย

Download Kubernetes CLI Tools

ขั้นตอนที่ 1 — เรียกใช้งาน

ขั้นตอนที่ 2— เลือกระบบปฎิบัติการที่เราใช้งานอยู่ และคลิ้ก Download CLI Plugin … ในตัวอย่างใช้เป็น Windows

ขั้นตอนที่ 3— เมื่อ Download เสร็จแล้วก็แตกไฟล์ไปไว้ Folder ที่เราสามารถเรียกใช้งานได้สะดวกๆ โดยเราจะได้ 2 ไฟล์ได้แก้ kubectl.exe และ kubectl-vsphere.exe

สร้าง K8s Cluster (Tanzu Kubernetes Cluster)

ขั้นตอนที่ 1 — เปิด cmd และไปที่ path ที่เราเก็บไฟล์ CLI Plugin

ขั้นตอนที่ 2 — ทำการ Login เข้าไปที่ Supervisor Cluster ด้วยคำสั่ง

$ kubectl.exe vsphere login --server=172.17.37.100 -u devops@vsphere.local --insecure-skip-tls-verify

เมื่อทำการ Authen เรียบร้อย ระบบจะแสดง workload namespace ที่เรามีสิทธิ์เข้าใช้งาน

ขั้นตอนที่ 3 — ทำการเลือก workload namespace ที่เราจะใช้งาน

$ kubectl.exe config use-context devops

ขั้นตอนที่ 4— สร้าง yaml ไฟล์ขึ้นมาตามตัวอย่างดังต่อไปนี้

ในส่วนของ Storage Policy สามารถดูได้ด้วยคำสั่ง **ต้อง Login ด้วยสิทธิ์ Admin

$ kubectl.exe get storageclass
$ kubectl.exe describe storageclass

และในส่วนของ Size VM สามารถดูได้ด้วยคำสั่ง **ต้อง Login ด้วยสิทธิ์ Admin

$ kubectl.exe get virtualmachineclasses
$ kubectl.exe describe virtualmachineclasses

ขั้นตอนที่ 5— เมื่อเราได้ไฟล์ tkc.yaml มาแล้วเราก็ทำการสั่ง apply เพื่อให้ระบบทำการสร้าง K8s Cluster ขึ้นมา

$ kubectl.exe apply -f tkc.yaml

หลังจากสั่ง apply ไปแล้วให้กลับไปดูที่หน้า vCenter จะพบว่าระบบกำลังสร้าง K8s Cluster ขึ้นมาในขั้นตอนนี้อาจจะต้องใช้เวลาสั่งครู่ขึ้นอยู่กับจำนวน VMs ที่เราประกาศไว้

เราสามารถตรวจสอบสถานะได้ด้วย โดยสถานะจะต้องเป็น Running ทั้งหมด

$ kubectl.exe get machine

เมื่อ K8s Cluster เราสถานะเป็น Running หมดแล้วก็แสดงว่าพร้อมใช้งาน

ขั้นตอนที่ 6— ต่อมาเรามาลอง deploy application กันดูว่าจะสามารถ deploy ได้ไหม โดยให้ copy ตัวอย่าง yaml ไฟล์ด้านล่างไปใช้ได้เลย โดย yaml ดังกล่าวจะเป็นการใช้ Service แบบ Load Balancer และมีการใช้ Persisten Volume ด้วยเพื่อทดสอบฟังก์ชั่นหลักๆ ว่าสามารถใช้งานได้ไหม

เมื่อสร้าง yaml ไฟล์เสร็จเรียบร้อยลองสั่ง apply ดูซิ

$ kubectl.exe apply -f tz-demo-app.yaml

เราจะเห็น Error ที่เกิดขึ้นว่าไม่สามารถสร้าง Deployment ได้เพราะตอนนี้เรายัง Login อยู่ใน Supervisor Cluster ซึ่ง Workload Management ของเราใช้งานเป็น vSphere Networking (HAProxy) ทำให้ไม่รองรับในการ Deployment ลงแบบ Natively บน vSphere เราต้องทำการ Login ไปที่ K8s Cluster ที่เราสร้างขึ้นมาซะก่อน

ขั้นตอนที่ 7— ทำการ Login เข้าไปที่ K8s Cluster ด้วยคำสั่ง โดยจะมีการระบุ tanzu-kubernetes-cluster-name และ tanzu-kubernetes-cluster-namespac เพิ่มเข้าไปด้วย

$ kubectl.exe vsphere login --server=172.17.37.100 -u devops@vsphere.local --insecure-skip-tls-verify  --vsphere-username devops@vsphere.local --tanzu-kubernetes-cluster-name devops-tkc-01 --tanzu-kubernetes-cluster-namespace devops

ขั้นตอนที่ 8— สั่ง apply application อีกครั้ง

$ kubectl.exe apply -f tz-demo-app.yaml

สามารถ apply ได้แล้ว ลองตรวจสอบ Service ต่างๆ ดูซิ

$ kubectl.exe get all

Pod ไม่รันเพราะอะไรนะ

$ kubectl.exe get events --sort-by=.metadata.creationTimestamp
Error creating: pods "<NAME>" is forbidden: unable to validate against any pod security policy: []

ปัญหาเกิดจาก Tanzu Kubernetes clusters นั้นจะมี PodSecurityPolicy ค่าเริ่มต้นอยู่ โดย User ที่เรา Login เข้าใช้งานอยู่นั้นจะไม่ถูกอนุญาติ deploy ดังนั้นเราต้องทำการสร้าง RoleBinding ขึ้นมา

ขั้นตอนที่ 9— สร้าง yaml ไฟล์สำหรับ RoleBinding ตามตัวอย่างข้างล่าง แล้วทำการ apply ก่อนที่จะ deploy application

$ kubectl.exe apply -f tz-rolebinding.yaml

ขั้นตอนที่ 10— หลังจากที่ได้ apply RoleBinding เรียบร้อยให้ลอง apply application อีกครั้ง

** ก่อนทำการ apply ใหม่ให้ delete ของเดิมออกก่อน

$ kubectl.exe delete -f tz-demo-app.yaml

ลองตรวจสอบ Service ต่างๆ อีกครั้ง

$ kubectl.exe get all

Containers รันขึ้นมาแล้ว ลองตรวจสอบในส่วนของ Service ที่เราใช้ Load Balancer

ตรวจสอบ Persistent Volume

ขั้นตอนที่ 11— ลองเรียกใช้งาน application ดู

เพื่อเท่านี้เราสามารถให้ทีม Development สามารถใช้งาน Deploy Application ได้แล้ว ทีม Admin ก็สามารถบริหารจัดการ K8s Cluster รวมทั้ง VMs ต่างๆ ได้จากหน้า vCenter เดียวได้แล้ว ในตอนต่อไปเราจะมาทำ และใช้งาน Private Container Registry ไว้เก็บ Container Images ด้วย Harbor กัน

สุดท้ายแล้วหากท่านไหนหลงเข้ามาอ่านแล้วเห็นเป็นประโยชน์ก็สามารถนำไปต่อยอดได้เลย หรือหากมีคำแนะนำดีๆ ก็สามารถบอกกล่าวให้ทราบได้เช่นกันครับ

.

Ref: https://core.vmware.com/resource/vsphere-tanzu-quick-start-guide-v1a

Ref: https://cormachogan.com/2020/09/25/deploy-ha-proxy-for-vsphere-with-tanzu/

Ref: https://cormachogan.com/2020/09/29/deploying-tanzu-kubernetes-guest-cluster-in-vsphere-with-tanzu/

Ref: https://www.virten.net/2020/08/vmware-vsphere-with-kubernetes-guide-part-7-octant-and-lens/

Ref: https://docs.vmware.com/en/VMware-vSphere/7.0/vmware-vsphere-with-tanzu/GUID-7351EEFF-4EF0-468F-A19B-6CEA40983D3D.html

Ref: https://www.virten.net/2020/11/tanzu-kubernetes-licensing-in-vsphere-7-0-update-1/

.

--

--

Kritsadanshon Sadeewong

นายช่างระบบระบบคอมพิวเตอร์ ที่ชอบทดลอง และเรียนรู้สิ่งใหม่ไปเรื่อยๆ