เรียนรู้วิธีเริ่มต้นใช้งาน Docker บนแพลตฟอร์ม Google Cloud

Kubernetes อาจเป็นตัวเลือกที่ดีที่สุดเมื่อปรับใช้ปริมาณงานจำนวนมากบน Google Cloud Platform อย่างไรก็ตาม Docker Swarm ได้รับความนิยมมาโดยตลอดในหมู่นักพัฒนาที่ชอบการใช้งานที่รวดเร็วและความเรียบง่าย และในหมู่ปฏิบัติการที่กำลังเรียนรู้ที่จะทำความคุ้นเคยกับสภาพแวดล้อมที่จัดเตรียมไว้

ในโพสต์นี้ เราจะอธิบายวิธีการปรับใช้คลัสเตอร์ Docker Swarm บน GCP โดยใช้ Terraform ตั้งแต่เริ่มต้น มาทำกันเถอะ!

เริ่ม

ในการเริ่มต้น ให้ลงชื่อเข้าใช้คอนโซล Google Cloud Platform และสร้างคีย์ส่วนตัวของบัญชีบริการจาก IAM:

ดาวน์โหลดไฟล์ JSON และจัดเก็บไว้ในโฟลเดอร์ที่ปลอดภัย

เพื่อความง่าย ฉันได้แบ่งส่วนประกอบคลัสเตอร์ Swarm ออกเป็นไฟล์เทมเพลตหลายไฟล์ โดยแต่ละไฟล์มีหน้าที่ในการสร้างทรัพยากร Google Compute เฉพาะ

1. ตั้งค่าผู้จัดการฝูงของคุณ

ในตัวอย่างนี้ ฉันได้กำหนด Docker Swarm managers ตามอิมเมจ CoreOS:

2. ตั้งค่าคนงานฝูงของคุณ

ในทำนองเดียวกัน ชุดของ Swarm work ที่ใช้อิมเมจ CoreOS และฉันได้ใช้คุณลักษณะการพึ่งพาทรัพยากรของ Terraform เพื่อให้แน่ใจว่าผู้จัดการ Swarm ได้รับการปรับใช้ อันดับแรก. โปรดทราบการใช้คำหลัก depends_on:

3. กำหนดกฎเครือข่ายของคุณ

นอกจากนี้ ฉันได้กำหนดอินเทอร์เฟซเครือข่ายพร้อมรายการกฎไฟร์วอลล์ที่อนุญาตการรับส่งข้อมูลขาเข้าสำหรับการจัดการคลัสเตอร์ การสื่อสารแบบแพตซิงค์ การรับส่งข้อมูลเครือข่ายนักเทียบท่าซ้อนทับ และ ssh จากทุกที่:

4. ทำให้สินค้าคงคลังของคุณเป็นแบบอัตโนมัติด้วย Terraform

เพื่อยกระดับระบบอัตโนมัติขึ้นไปอีกขั้น ลองใช้แหล่งข้อมูล Terraform template_file เพื่อสร้างพื้นที่โฆษณา Ansible แบบไดนามิกจากไฟล์สถานะ Terraform:

ไฟล์เทมเพลตมีรูปแบบดังต่อไปนี้ และจะถูกแทนที่ด้วยที่อยู่ IP ของผู้จัดการ Swarm และพนักงานขณะรันไทม์:

สุดท้ายนี้ เรามากำหนดให้ Google Cloud เป็นผู้ให้บริการเริ่มต้น:

5. ตั้งค่าบทบาท Ansible เพื่อจัดเตรียมอินสแตนซ์

เมื่อกำหนดเทมเพลตแล้ว เราจะใช้ Ansible เพื่อจัดเตรียมอินสแตนซ์ของเราและเปลี่ยนให้เป็นคลัสเตอร์ Swarm ดังนั้นฉันจึงสร้าง Ansible ขึ้นมา 3 บทบาท:

  • python: ตามชื่อของมัน มันจะติดตั้ง Python บนเครื่อง CoreOS มาพร้อมกับพื้นฐานเท่านั้น มันเป็นการกระจาย Linux ขั้นต่ำโดยไม่มีอะไรมาก ยกเว้นเครื่องมือที่มีศูนย์กลางอยู่ที่คอนเทนเนอร์ที่ทำงานอยู่
  • swarm-init: ดำเนินการคำสั่ง docker swarm init บนผู้จัดการคนแรกและจัดเก็บโทเค็น swarm join
  • swarm-join: รวมโหนดเข้ากับคลัสเตอร์โดยใช้โทเค็นที่สร้างขึ้นก่อนหน้านี้

ตอนนี้ Playbook หลักของคุณจะมีลักษณะดังนี้:

6. ทดสอบการกำหนดค่าของคุณ

หากต้องการทดสอบ ให้เปิดเซสชันเทอร์มินัลใหม่และออกคำสั่งterraform init เพื่อดาวน์โหลดผู้ให้บริการ Google:

สร้างแผนปฏิบัติการ (ทดลองรัน) ด้วยคำสั่ง Terraform Plan โดยจะแสดงให้คุณเห็นสิ่งต่าง ๆ ที่จะถูกสร้างขึ้นล่วงหน้า ซึ่งดีสำหรับการดีบักและรับรองว่าคุณไม่ได้ทำอะไรผิด ดังที่แสดงในภาพหน้าจอถัดไป:

คุณจะสามารถตรวจสอบแผนการดำเนินการของ Terraform ได้ก่อนที่จะปรับใช้กับ GCP เมื่อคุณพร้อมแล้ว ให้ดำเนินการเปลี่ยนแปลงโดยใช้คำสั่ง terraform apply

ผลลัพธ์ต่อไปนี้จะปรากฏขึ้น (บางส่วนถูกตัดออกเพื่อความกระชับ):

หากคุณกลับไปที่ Compute Engine Dashboard อินสแตนซ์ของคุณควรสร้างได้สำเร็จ:

7. สร้างคลัสเตอร์ Swarm ของคุณด้วย Ansible

ตอนนี้อินสแตนซ์ของเราถูกสร้างขึ้นแล้ว เราจำเป็นต้องเปลี่ยนให้เป็นคลัสเตอร์ Swarm ด้วย Ansible ออกคำสั่งต่อไปนี้:

ansible-playbook -i inventory main.yml

ถัดไป SSH ไปยังอินสแตนซ์ของผู้จัดการโดยใช้ที่อยู่ IP สาธารณะ:

หากคุณรัน docker node ls คุณจะได้รับรายการโหนดในกลุ่ม:

ปรับใช้บริการ Visualizer ด้วยคำสั่งต่อไปนี้:

8. อัปเดตกฎเครือข่ายของคุณ

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

เรียกใช้ terraform apply อีกครั้งเพื่อสร้างกฎทางเข้าใหม่ มันจะตรวจจับการเปลี่ยนแปลงและขอให้คุณยืนยัน:

หากคุณชี้เบราว์เซอร์ที่คุณชื่นชอบไปที่ http://instance_ip:8080 แดชบอร์ดต่อไปนี้จะปรากฏขึ้นเพื่อยืนยันว่าคลัสเตอร์ของเราได้รับการตั้งค่าโดยสมบูรณ์:

และนั่นคือทั้งหมดที่คุณต้องทำ! ดูการตั้งค่าคลัสเตอร์ Swarm ของคุณด้านล่าง:



คอยติดตาม!

ในโพสต์ที่กำลังจะมาถึง เราจะดูว่าเราจะพัฒนาสิ่งนี้ต่อไปได้อย่างไรโดยการสร้างคลัสเตอร์ Swarm ที่พร้อมสำหรับการใช้งานจริงบน GCP ภายใน VPC — และวิธีการจัดเตรียมผู้จัดการ Swarm และผู้ปฏิบัติงานตามความต้องการโดยใช้กลุ่มอินสแตนซ์โดยพิจารณาจากการเพิ่มหรือลดภาระงาน

นอกจากนี้เรายังจะได้เรียนรู้วิธีอบอิมเมจเครื่อง CoreOS ด้วย Python ที่ติดตั้ง Packer ไว้ล่วงหน้า และวิธีการใช้ Terraform และ Jenkins เพื่อปรับใช้โครงสร้างพื้นฐานโดยอัตโนมัติ!