สร้าง Standard ของการทำงาน จะทำกี่ครั้ง
หรือบนเครื่องไหนก็ให้ผลเหมือนกัน
ทำ Version control ได้
ควบคุมเวลาได้และประหยัดเวลา
ทดสอบเพื่อควบคุมคุณภาพได้
ตรวจสอบผลและแก้ปัญหาได้ง่าย
เครื่องมือ Configuration Manage ที่มีอยู่มากมาย เช่น Chef, Puppet เป็นต้น มันทำงานได้ดีบน Unix/Linux แม้จะมี Version ที่อยู่บน Windows ด้วย แต่มันก็ยังไม่ค่อยดี เพราะการจัดการ Configuration ของ Unix เป็น Document Oriented OS แต่ Windows เป็น API Oriented OS นั่นคือ การ Configure ระบบงาน Unix มักอยู่ในรูป Text File และเมื่อเป็น Windows มักจะเป็น Registry, การเรียก API หรือ WMI
PowerShell DSC
เครื่องมือ Configuration Management ที่ออกมาหลายตัว มีความถนัดกันคนละอย่าง เพราะการเรียกใช้ Function ก่อนหน้านี้ยังไม่มีมาตราฐาน ก็เป็นภาระของผู้ที่ซื้อเอง ที่จะต้องพิจารณาว่าเลือกถูกตัว หรือเหมาะกับงาน แต่ตอนนี้ Microsoft สร้าง PowerShell Desire State Configuration (DSC) ขึ้นมาเพื่อสร้างเป็นมาตรฐาน ทำให้ใช้ PowerShell จัดการ Configuration Management ได้ โดยเป็นได้ทั้งการเขียนเพื่อใช้เองหรือเรียกจาก พวกเครื่องมาที่ซื้อมาก็ไดั
PowerShell – Imperative vs. Declarative และ Idempotent (ไอ-เด็ม-โพ-เทน)
เราจะใช้ PowerShell เพื่อทำหน้าที่ Configuration Management หากพูดถึง PowerShell ที่เป็น Script มันมีรูปแบบที่เรียกว่า Imperative หมายถึง หากอยากทำงานอะไรก็ต้องเขียนขั้นตอนทุกอย่างเอง ตัวอย่าง เมื่อเราต้องดูแล Print Server มันเป็น Windows Service ชื่อ Spooler ในตัวอย่างเป็นรูปด้านซ้ายเป็นแบบ Script (imperative) และด้านขวาเป็นแบบ DSC (declarative)
ด้านซ้ายต้องเขียนเงื่อนไขไปดูว่า Service Start (บรรทัดที่ 1) หรือไม่ ถ้าไม่ Start ก็สั่ง Start (บรรทัดที่ 8) แต่ด้านขวา รูปแบบของ DSC ซึ่งเป็นแบบ Declarative ทางด้านขวาเป็นการสั่งการว่าให้ดู Service Name = Spooler ต้องมีสถานะเป็น Running แบบนี้ไม่ต้องเขียนเงื่อนไข ทำแค่กำหนดค่าที่ต้องการให้เป็นลงไป เราเรียกแบบนี้ว่า Declarative ยังมีอีกคำอันที่จับเรื่อง DSC แล้วต้องรู้จักคือ Idempotent หรือ ทำกี่ครั้งก็เหมือนเดิม หมายถึง การใช้ Configuration Management เราต้องการให้เครื่องอยู่ในสถานะที่เรากำหนดไว้ ดังนั้น เมื่อ Run script DSC แม้ว่าจะ Run กี่ครั้งก็ตาม มันก็ทำให้ Configuration เหมือนที่กำหนดไว้ทุกครั้ง
เริ่ม PowerShell DSC แรกกันเลย
การเขียน PowerShell DSC มี format และลำดับดังนี้
1. สร้าง Configuration ขึ้นมาตามตัวอย่างในภาพ
A. ใช้คำสั่งว่า Configuration แล้วตามด้วยชื่อที่ตั้งขึ้นมาเอง
B. สามารถส่งค่า Parameter ได้ เช่น ที่ใช้บ่อยก็เป็นชื่อ Computer
C. หัวใจของ DSC อันหนึ่งคือ Resource ส่วนนี้ใช้ import resource file
D. ระบุ node โดยใส่ชื่อ Computer name ที่ต้องการ config ลง และลงมือเขียนสิ่งที่เราต้องการทำ ในภาพเป็นการกำหนดให้ Service ที่ชื่อ Spooler ต้องอยู่ในสถานะ Running
2. Compile ได้ผลลัพธ์เป็น mof file (Windows Management Object file) ด้วยการเรียกชื่อ Configuration ตามด้วย Parameter คือ NodeName จะได้ Output เป็นไฟล์อยู่ใน folder
3. สั่ง Run configuration โดยระบุแค่ Path ในตัวอย่างใส่ -Verbose -Wait เพื่อให้แสดง Message ตอนที่มัน Run ด้วย ด้านล่างเป็นผลลัพธ์ โดยก่อนจะ Run ได้ stop service spooler ไว้ จะเป็นว่าช่วงแรกมันจะ Test เพื่อดูว่าต้องทำอะไร ซึ่งมันพบว่า Service stop มันจึงสั่ง Start ในส่วน Set
Script ตัวอย่าง
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2. PowerShell Function – ความหมายของ Function คือ ฺBlock of Code เราสามารถเขียนคำสั่งเป็น Function แล้ว save เก็บในไฟล์เพื่อทำใช้ซ้ำบ่อยได้ แต่หากเราใช้คำสั่ง Get-Command จะเห็นว่าคำสั่งที่มากับ PowerShell บางอันก็เป็น Function และบางอันก็เป็น Cmdlet ในึครั้งต่อไปเราจะฝึกเขียน Function กัน
ใน ตอนที่ 1 ได้ทำความรู้จักว่า Nano Server นอกจากไม่มีหน้าจอ GUI และไม่มี Command Windows หรือ PowerShell ให้เราเข้าไปทำงาน จากนี้ไปเราจะได้รู้ว่า Windows มี Remote Access ที่เป็น Command-Line Console ที่ช่วยให้การทำงานแบบ Remote เป็นเรื่องง่ายๆ เราจะศึกษาการสั่งงาน Windows และ Nano Server ด้วย Windows Remote Management และ PowerShell Remoting ขอใช้ตัวอย่างทั้งหมดเป็น PowerShell
WS-Management
เมื่อก่อนเวลาที่ Administrator ของ Windows Server ต้องทำงานกับ Server ผ่าน Network หากไม่นับ Remote Desktop ยังมีวิธีเรียกผ่าน WMI ที่ใช้ Protocol Remote Procedure Call (RPC) ที่ต้องเปิด Firewall Port TCP/135 และอีกเปิดอีกหลาย Port ในเวลาต่อมา เมื่อ Microsoft ได้เข้าร่วมกับ Distributed Management Task Force (DMTF) ในยุคที่ Web ได้รับความนิยม ได้เกิด Web Service – Management (WS-Management) ที่เป็น Open standard โดยใช้ Protocol HTTP SOAP ใน Version ของ Microsoft เรียกชื่อว่า Windows Remote Management (WinRM) การใช้งานต้องมี Tool ที่ใช้บ่อยๆ มี 2 ตัวคือ WinRS และ PowerShell Remote ในภาพด้านล่างแสดงให้เห็นการเรียกใช้งาน WS-Management ทำงานเป็นด้าน Client และ Server ที่จะทดลองทำกัน
WinRM จะมีฝั่ง Client ในภาพด้านซ้ายจะเป็น Windows version Desktop หรือ Server ก็ได้ WinRM จะมี Configuration ของมันเอง ในส่วนของ Server ก็เหมือนกัน Configuration นี้ แบ่งเป็น Client, Service (หรือ Server), Listener และอื่นๆ ด้าน Server ยังมี End Point ที่สามารถเขียน Application ไปเกาะไว้กับ WinRM ในที่นี้จะเป็นตัว PowerShell Remote
ใช้งาน PowerShell Remoting ครั้งแรก
ในขั้นตอนและ Script ตัวอย่างใช้ Server IP 192.168.1.113 เมื่อนำไปทดลองต้องเปลี่ยนเป็น IP ของ Server ที่ใช้งานได้จริงด้วย
ขั้นตอนแรก เป็นการ Enable ให้ Windows Server เปิดการใช้งาน PowerShell Remote ได้ เริ่มจาก Logon ไปที่ Server เพื่อ Configure WinRM โดยให้เปิด PowerShell ด้วย runas administrator แล้ว run Enable-PSRemoting –force
คำสั่งด้านบน Windows ได้ทำงานไป 4 ขั้นตอนคือ
กำหนดให้ Service – Windows Remote Management เป็น auto start
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ปี 2016 เป็นปีครบรอบ 20 ปี ของ Microsoft Windows Server (อ่านเพิ่มเติม) และก็บริษัทได้เปิด Windows Server 2016 ที่มีตัว Nano Server เป็นทางเลือก แทนการใช้ Windows Server ที่ทำกันมาก่อนหน้านี้ Nano Server มีขนาดเริ่มต้น ไม่ถึง 500 Megabyte และมีประสิทธิภาพดีกว่า Windows Server แบบเดิมอีกด้วย มันน่าสนใจว่าตั้งแต่นี้ไป Server จะมีรูปแบบการทำงานที่ไม่เหมือนเดิม มันจะเปลี่ยนไปทิศทางที่ดีขึ้นเพียงใด เรามารู้จัก Nano Server กัน เพื่อใช้ให้เป็นกัน
Nano Server เกิดจากอะไร
Windows Server ถูกสร้างเป็นให้ทำงานได้หลายอย่างในตัวมัน เช่น เป็น File Server, Web Server, Active Directory หรือแม้แต่ Hyper-V เป็นต้น ข้อดีคือความสะดวก แต่สำหรับผู้ที่ดูแล Application บน Windows Server จะพบว่ามีด้านลบแอบแฝงอยู่ พอจะยกเป็นตัวอย่าง 3 เรื่องดังนี้
Microsoft ออก Security Update (Hotfix) ทุกเดือน (Patch Tuesday) เป็นการเพิ่มงานและกระทบการใช้งาน Application เพราะ Hotfix ต้อง Restart Server และบน Windows มี API มากมายเหลือเกิน มันไม่ใช่สิ่งที่ทุกคนต้องใช้แต่ต้องการ Hotfix ด้วย
กิน Resource บนเครื่องมากเช่น RAM, CPU, Disk และ Network เพราะการเก็บสิ่งที่ไม่จำเป็น มันทำให้ต้องซื้อ Server หรือใช้ Cloud ที่ราคาแพงขึ้นโดยไม่จำเป็น
การมี User Interface ที่เป็น Windows หรือ Command Prompt (DOS) บน Server ไม่เป็นผลดีกับผู้ดูแล Server เพราะปัจจุบันการทำงานแบบ Automate ต้องทำผ่าน Script แต่การมี User Interface เป็นการเปิดช่องให้ Developer มองข้ามเรื่อง Automate
การเกิดของ Nano Server เป็นสร้าง Server Operating System ขึ้นมาใหม่ ถึงแม้ตอนที่ Microsoft ออก Windows Server 2008 ได้ออก Server Core มาก่อนแล้ว แต่มันไม่เหมือนกับ Nano เพราะ Server Core ใช้แนวคิดตัด GUI หรือบาง Feature ออกจาก Full Windows แต่ Nano ถูกสร้างขึ้นมาใหม่ มันมีคุณสมบัติเด่น 7 ข้อที่ควรรู้ แบบย่อๆ ดังนี้
1
Compatible กับ Windows 64bit จึงใช้ Program เป็น Windows Server ได้
2
จับมัน Join Domain ได้ แต่ไม่มี Command Prompt หรือ Windows GUI (และไม่รองรับ Remote Desktop) คนใน Microsoft เรียกมันว่า Headless เนื่องจากมันไม่มีหน้าจอเพื่อใช้ทำงานปกติ แต่มีจอ Emergency Management Console เพื่อให้ตั้งค่า Network Configuration การใช้งานจริงๆ Microsoft ได้พัฒนา Remote Management คือ Server Manager, PowerShell Remoting และ WMI
3
เล็กมาก มีขนาดบน Disk เพียง 500 Megabyte เมื่อเทียบกับ Server ที่มีขนาด 6 Gigabyte มันช่วยให้การทำ Virtualization สร้าง VM ต่อ Host ได้มากขึ้นและประหยัด Hardware ได้ ประโยชน์ของความเล็กนี้ ทำให้มัน Restart ได้เร็วมาก
ไม่มี Plug and Play device driver ทีผ่านมา Plug and Play ช่วยจัดการเรื่อง Driver ที่ใช้บ่อยๆ บน Server ก็คือ Network card และ HBA card เพื่อต่อกับ SAN Storage
7
สามารถเพิ่ม Feature หรือติดตั้ง Applicationแต่ไม่มี .MSI ทำโดยเพิ่มPackage หรือถ้าเป็น Application อื่นๆ ที่ทำงานบน เช่น Apache Tomcat ก็ทำได้ Microsoft รองรับ application compatibility กับ Windows Server ที่ต้องทำงานแบบ Server mode ด้วย Reverse Folder ที่เป็นเหมือน Virtual API
คงพอเห็นแนวความคิดของ Nano Server กันแล้ว ต่อไปจะแนะนำการสร้างเครื่องแรกแบบง่ายๆ กันก่อน เราจะสร้าง File Server ด้วย Nano Server สิ่งที่ต้องเตรียมไว้ดังนี้
Microsoft Windows Server 2016 โดย Download จาก ที่นี่
Windows Server 2016 ที่เป็น Hyper-V Server 2016 ถ้ายังไม่มีก็สร้างใหม่ได้
สร้าง Folder c:\Temp และ copy folder – Nano Server จากแผ่น CD 2016 ไปใส่ไว้ใน C:\Temp
เตรียม Folder c:\temp\NanoVM เพื่อใช้สร้าง Nano Server
สร้าง Nano Server แรกเป็น Virtual Machine
1. การลง Nano ไม่ได้ลงจากแผ่น CD แต่มันเก็บอยู่แผ่น Windows Server 2016 ใน Folder -> NanoServer เราต้องใช้เครื่องมือ เช่น PowerShell สร้าง ในตัวอย่างนี้จะสร้างเป็น Virtual hard disk ไปใส่ใน Hyper-V Virtual Machine
2. Explorer – Nano Server Folder ถ้าเปิดใน Folder Nano Server จะพบส่วนประกอบสำคัญ 3 ส่วนในนี้ คือ .WIM file, NanoServerImageGenerator ที่เป็นเครื่องมือ PowerShell เพื่อสร้าง VHD, สุดท้ายคือ Packages ที่เป็น Feature ที่จะติดตั้งลงไปใน VHD
3. สร้าง VHD ของ Nano Server
ขั้นตอนนี้ก็ Run script ตามนี้
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
การเข้าใจ Image ต้องควบคู่ไปกับ Layer ตามที่รู้กันแล้วว่า Container เป็นการ share OS เมื่อเราอยากใช้เครื่อง Server ทำหน้าที่อะไร เราจึงต้องมี Image หรือ Application นั้น เช่น เราต้องการ ASP.Net Server คือ เราสร้าง Windows Server ขึ้นมาก่อน แล้วก็ Enable ASP.Net ในโลกของ Windows Container เราจะต้อง download OS Image + ASP. Net จาก Repository เป็นต้น
ใน part 1 เราได้รู้จักของ Container กันมาแล้ว คราวนี้เราจะลงมือสร้าง Windows Container กัน ขั้นตอนไม่ยากมี 4 ขั้นตอนหลัก เน้นทำตามภาพประกอบ ดังนี้
Download Windows Server 2016
ติดตั้ง Windows Server 2016 ลงบน VM โดยลงเป็น Server Core
Enable Feature Container
Download base image ของ Windows Server Core
เรามาลงมือทำกันเลย!!
Download Windows Server 2016 กดที่นี่ ให้เลือก Windows Server 2016 อันนี้เป็น Evaluation จะใช้ได้ 180 วัน โดยเราต้องลงทะเบียนเพื่อ download
Container เป็น Feature บน Windows Server ดังนั้น เราต้องสร้าง Windows Server ขึ้นมาก่อน แนะนำให้สร้างเป็น VM โดยเราจะใช้ Hyper-V, VMware, Oracle VM หรืออะไรที่สะดวกก็ได้ ในกรณีของผม ใช้ Oracle VM เลือก Guest เป็น Windows 10 มี Minimum hardware Requirement ที่แบ่งให้ VM ตามนี้
– เลือก Windows Server 2016 Standard Technical Preview 5 (Desktop Experience)
ขั้นตอนนี้ก็ปล่อยให้มันลงจนจบ
4. สร้าง Password ของ Administrator
เมื่อลง Windows เสร็จแล้วจะได้จอนี้ ก็กด Ctrl+Alt+Del เพื่อ Logon เข้า Windows เราจะใช้ Script Powershell นี้เพื่อความสะดวกในการสร้าง Container
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
มีการสร้าง Container บน Linux ใน VServer project เป็นครั้งแรกบน Linux ที่แยก Container เป็น unit (Virtual Private Server) แต่ละ unit จะคิดว่ามันมีเครื่อง server เป็นของมันเอง
2004
เกิด Solaris Zone
2005
เกิด Open Virtuzzo (OpenVZ)
2006
– Cpuset
– เปลี่ยนชื่อ control groups หรือ cgroups
– Kernal namespaces, user namespaces
2008
Linux Container Project (LXC)
2013
Docker (dotCloud) release เป็น March 2013
2014
Release of LXC
Security SELinux and Seccomp
Docker ใช้ libcontainer ด้วยภาษา Go แทน LXC
2015
ได้มีการประกาศว่า Docker ได้รับการสนับจาก RedHat, IBM, Google, Cisco System และ Amadeus IT Group
การเป็นผู้ดูแล Software นั้น หน้าที่หนึ่งที่ต้องทำคือ ควบคุมให้มีการใช้ Software ที่มี Support จากผู้พัฒนา เพื่อที่เวลามีปัญหาต่างๆ เช่น Function ไม่ทำงานอันเนื่องจาก Bug, ช่องโหว่ด้าน Security เป็นต้น งานของเราจะได้มีผู้ช่วยเหลือ นอกจากนี้ ปัจจุบันหลายๆ ธุรกิจมีหน่วยงานภายนอกเข้ามาตรวจสอบ โดยมากก็จะตรวจเรื่องนี้ด้วย ่ตามปกติเราเรียกว่าที่เลิก support ตรงๆ เลยคือ End of Support
สำหรับการใช้งาน Microsoft มีที่ให้ตรวจสอบคือ https://support.microsoft.com/en-us/lifecycle/search การใช้งานก็ไม่ยาก แค่พิมพ์ชื่อ production ที่ต้องการตรวจวัน end of support แล้วกด Search แต่มันต้องมีวิธีการอ่าน ให้อ่านง่ายๆ ตามภาพด้านล่างครับ