CSE: Kubernetes สำหรับผู้ที่อยู่ใน vCloud

CSE: Kubernetes สำหรับผู้ที่อยู่ใน vCloud
Hello!

มันเกิดขึ้นที่ทีมเล็ก ๆ ของเรา (และในอนาคตทั้งหมด) ได้เติบโตขึ้นเพื่อย้ายผลิตภัณฑ์บางส่วน (และในอนาคตทั้งหมด) ไปยัง Kubernetes ไม่ต้องบอกว่าเมื่อเร็ว ๆ นี้และไม่ใช่ในทันทีทันใด

มีเหตุผลหลายประการสำหรับเรื่องนี้ แต่เรื่องราวของเราไม่เกี่ยวกับโฮลิวาร์

เรามีทางเลือกเพียงเล็กน้อยเกี่ยวกับฐานโครงสร้างพื้นฐาน ผู้อำนวยการ vCloud และผู้อำนวยการ vCloud เราเลือกอันที่ใหม่กว่าและตัดสินใจเริ่ม

เป็นอีกครั้งที่เมื่อมองผ่าน "หนทางที่ยากลำบาก" ฉันจึงได้ข้อสรุปอย่างรวดเร็วว่าเมื่อวานนี้จำเป็นต้องมีเครื่องมือสำหรับการทำให้กระบวนการพื้นฐานอย่างน้อยเป็นอัตโนมัติ เช่น การปรับใช้และการปรับขนาด การเจาะลึก Google ทำให้เกิดความกระจ่างเกี่ยวกับผลิตภัณฑ์เช่น VMware Container Service Extension (CSE) ซึ่งเป็นผลิตภัณฑ์โอเพ่นซอร์สที่ช่วยให้คุณสามารถสร้างและปรับขนาดคลัสเตอร์ k8s สำหรับคลัสเตอร์ใน vCloud ได้โดยอัตโนมัติ

ข้อจำกัดความรับผิดชอบ: CSE มีข้อจำกัด แต่สำหรับจุดประสงค์ของเราถือว่าสมบูรณ์แบบ นอกจากนี้ โซลูชันจะต้องได้รับการสนับสนุนโดยผู้ให้บริการคลาวด์ แต่เนื่องจากส่วนของเซิร์ฟเวอร์นั้นเป็นโอเพ่นซอร์สเช่นกัน โปรดขอให้ผู้จัดการที่ใกล้ที่สุดของคุณจัดเตรียมไว้ :)

ในการเริ่มใช้งาน คุณต้องมีบัญชีผู้ดูแลระบบในองค์กร vCloud และเครือข่ายกำหนดเส้นทางที่สร้างไว้ก่อนหน้านี้สำหรับคลัสเตอร์ (ในระหว่างกระบวนการปรับใช้ คุณต้องเข้าถึงอินเทอร์เน็ตจากเครือข่ายนี้ อย่าลืมกำหนดค่าไฟร์วอลล์/NAT) ที่อยู่ไม่สำคัญ ในตัวอย่างนี้ สมมติว่า 10.0.240.0/24

CSE: Kubernetes สำหรับผู้ที่อยู่ใน vCloud

เนื่องจากหลังจากการสร้างคลัสเตอร์จะต้องได้รับการจัดการด้วยวิธีใดวิธีหนึ่ง ขอแนะนำให้มี VPN พร้อมกำหนดเส้นทางไปยังเครือข่ายที่สร้างขึ้น เราใช้ SSL VPN มาตรฐานที่กำหนดค่าบน Edge Gateway ขององค์กรของเรา

ถัดไป คุณต้องติดตั้งไคลเอ็นต์ CSE ที่จะจัดการคลัสเตอร์ k8s ในกรณีของฉัน นี่คือแล็ปท็อปที่ใช้งานได้และมีคอนเทนเนอร์ที่ซ่อนอยู่อย่างดีซึ่งขับเคลื่อนระบบอัตโนมัติ

ไคลเอนต์ต้องติดตั้ง Python เวอร์ชัน 3.7.3 และสูงกว่าและติดตั้งโมดูลแล้ว vcd-cliมาติดตั้งทั้งคู่กันดีกว่า

pip3 install vcd-cli

pip3 install container-service-extension

หลังการติดตั้ง เราจะตรวจสอบเวอร์ชัน CSE และรับสิ่งต่อไปนี้:

# vcd cse version
Error: No such command "cse".

ไม่คาดคิดแต่แก้ไขได้ ปรากฎว่าต้องแนบ CSE เป็นโมดูลกับ vcd-cli
ในการดำเนินการนี้ คุณต้องเข้าสู่ระบบ vcd-cli ในองค์กรของเราก่อน:

# vcd login MyCloud.provider.com org-dev admin
Password: 
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'

หลังจากนี้ vcd-cli จะสร้างไฟล์กำหนดค่า ~/.vcd-cli/profiles.yaml
ในตอนท้ายคุณต้องเพิ่มสิ่งต่อไปนี้:

extensions:
  - container_service_extension.client.cse

จากนั้นเราจะตรวจสอบอีกครั้ง:

# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0

ขั้นตอนการติดตั้งไคลเอนต์เสร็จสมบูรณ์ เรามาลองปรับใช้คลัสเตอร์แรกกัน
CSE มีพารามิเตอร์การใช้งานหลายชุด ซึ่งสามารถดูทั้งหมดได้ ที่นี่

ขั้นแรก มาสร้างคีย์สำหรับการเข้าถึงคลัสเตอร์ในอนาคตโดยไม่ต้องใช้รหัสผ่าน จุดนี้มีความสำคัญเนื่องจากโดยค่าเริ่มต้น การเข้าสู่ระบบด้วยรหัสผ่านไปยังโหนดจะถูกปิดใช้งาน และหากคุณไม่ได้ตั้งค่าคีย์ คุณสามารถทำงานมากมายผ่านคอนโซลของเครื่องเสมือนซึ่งไม่สะดวก

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

เรามาลองเริ่มสร้างคลัสเตอร์กัน:

vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/.ssh/id_rsa.pub --nodes 3 --enable-nfs

หากเราได้รับข้อผิดพลาด ข้อผิดพลาด: เซสชันหมดอายุหรือผู้ใช้ไม่ได้เข้าสู่ระบบ กรุณาเข้าสู่ระบบใหม่ — เข้าสู่ระบบ vcd-cli ไปยัง vCloud อีกครั้งตามที่อธิบายไว้ข้างต้นแล้วลองอีกครั้ง

คราวนี้ทุกอย่างเรียบร้อยดี และเริ่มงานสร้างคลัสเตอร์แล้ว

cluster operation: Creating cluster vApp 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) from template 'photon-v2_k8-1.12_weave-2.3.0' (revision 1)

ภารกิจจะใช้เวลาประมาณ 20 นาที ในระหว่างนี้ มาดูพารามิเตอร์การเปิดตัวพื้นฐานกัน

—เครือข่าย — เครือข่ายที่เราสร้างไว้ก่อนหน้านี้
—ssh-key — คีย์ที่เราสร้างขึ้นซึ่งจะถูกเขียนไปยังโหนดคลัสเตอร์
—nodes n — จำนวนโหนดของผู้ปฏิบัติงานในคลัสเตอร์ จะมีต้นแบบหนึ่งคนเสมอ นี่เป็นข้อจำกัดของ CSE
—enable-nfs — สร้างโหนดเพิ่มเติมสำหรับการแชร์ NFS ภายใต้วอลุ่มถาวร มันเป็นตัวเลือกแบบเหยียบนิดหน่อย เราจะกลับไปปรับแต่งสิ่งที่มันทำในภายหลัง

ในขณะเดียวกัน ใน vCloud คุณสามารถตรวจสอบการสร้างคลัสเตอร์ด้วยสายตาได้
CSE: Kubernetes สำหรับผู้ที่อยู่ใน vCloud

เมื่องานสร้างคลัสเตอร์เสร็จสิ้นก็พร้อมใช้งาน

มาตรวจสอบความถูกต้องของการปรับใช้ด้วยคำสั่งกัน ข้อมูลคลัสเตอร์ vcd cse MyCluster

CSE: Kubernetes สำหรับผู้ที่อยู่ใน vCloud

ต่อไปเราจำเป็นต้องได้รับการกำหนดค่าคลัสเตอร์เพื่อใช้ Kubectl

# vcd cse cluster config MyCluster > ./.kube/config

และคุณสามารถตรวจสอบสถานะของคลัสเตอร์ได้โดยใช้:

CSE: Kubernetes สำหรับผู้ที่อยู่ใน vCloud

ณ จุดนี้ คลัสเตอร์สามารถถือว่าทำงานได้ตามเงื่อนไข หากไม่ใช่สำหรับเรื่องราวที่มีวอลุ่มต่อเนื่อง เนื่องจากเราอยู่ใน vCloud เราจึงไม่สามารถใช้ vSphere Provider ได้ ตัวเลือก --เปิดใช้งาน-nfs ออกแบบมาเพื่อขจัดความรำคาญนี้ให้ราบรื่น แต่ก็ไม่ได้ผลทั้งหมด จำเป็นต้องปรับด้วยตนเอง

ในการเริ่มต้น โหนดของเราต้องสร้างดิสก์อิสระแยกต่างหากใน vCloud สิ่งนี้รับประกันได้ว่าข้อมูลของเราจะไม่หายไปพร้อมกับคลัสเตอร์หากถูกลบ เชื่อมต่อดิสก์กับ NFS ด้วย

# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1

หลังจากนั้นเราไปผ่าน ssh (คุณสร้างคีย์จริงๆเหรอ?) ไปยังโหนด NFS ของเราและในที่สุดก็เชื่อมต่อดิสก์:

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 100GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name     Flags
 1      0.00GB  100GB  100GB               primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Creating filesystem with 24413696 4k blocks and 6111232 inodes
Filesystem UUID: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

สร้างไดเร็กทอรีสำหรับข้อมูลและติดตั้งพาร์ติชันใหม่ที่นั่น:

mkdir /export
echo '/dev/sdb1  /export   ext4  defaults   0 0' >> /etc/fstab
mount -a

มาสร้างพาร์ติชันทดสอบห้าพาร์ติชันและแบ่งปันให้กับคลัสเตอร์:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Добавим это в конец файла
/export/vol1 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol2 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol3 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol4 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol5 *(rw,sync,no_root_squash,no_subtree_check)
#:wq! ;)
#Далее - экспортируем разделы
>exportfs -r

หลังจากมหัศจรรย์ทั้งหมดนี้ เราสามารถสร้าง PV และ PVC ในคลัสเตอร์ของเราได้ดังนี้:
พีวี:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Same IP as the NFS host we ssh'ed to earlier.
    server: 10.150.200.22
    path: "/export/vol1"
EOF

พีวีซี

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 10Gi
EOF

นี่คือจุดที่เรื่องราวของการสร้างคลัสเตอร์หนึ่งสิ้นสุดลง และเรื่องราวของวงจรชีวิตของคลัสเตอร์เริ่มต้นขึ้น เป็นโบนัส มีคำสั่ง CSE ที่มีประโยชน์อีกสองคำสั่งที่ช่วยให้คุณประหยัดทรัพยากรได้ในบางครั้งหรือไม่:

#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8

#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes

ขอขอบคุณทุกท่านที่สละเวลา หากคุณมีคำถามใด ๆ ถามในความคิดเห็น

ที่มา: will.com

เพิ่มความคิดเห็น