Azure และ AWS

การเลือกระหว่าง Azure กับ AWS คงไม่ง่ายถ้าจะบอกใคร ดี เด่น ดัง เพราะฉะนั้น System มืออาชีพ ควรทำความเข้าใจทั้ง 2 ฝั่ง ช่วงนี้รีบ Update ความรู้เรื่อง Cloud ประเดิมด้วยการเทียบ Product กัน ซึ่งต่อไป vm360degree.com จะเป็น blog ที่เน้น cloud ระหว่างนี้หาชั่วโมงฟรีก่อน การได้ชั่วโมง cloud ฟรีๆ นานๆ สำหรับ bloger เองก็ไม่ใช่เรื่องง่ายครับ

อันแรก เป็นตัว map product ของ 2 cloud
https://docs.microsoft.com/en-us/azure/architecture/aws-professional/services
อันต่อมา เป็นตัวแปลง AWS เป็น Azure
https://docs.microsoft.com/en-us/azure/architecture/aws-professional/index

Advertisement

PowerShell DSC

การดูแลระบบ Computer มักยึดติดกับขั้นตอน (Step) และ Configuration โดยเฉพาะการติดตั้ง Application (Software deployment), ควบคุมค่า Configuration ของ OS หรือ Application และเก็บค่า Configuration นั้นไว้ เพื่อควบคุมสถานะให้มันใช้งานได้ เวลาที่ระบบมีปัญหามันมักเป็นเรื่องที่ติดค้างอยู่ในใจของผู้ที่ต้องดูแลระบบ เมื่อได้ยินคำถาม เช่น “ใครไปแก้อะไร?” หรือ “ทำอะไรไม่เหมือนกันกับเครื่องที่ใช้งานได้หรือเปล่า” บางทีระบบงานอาจใช้งานมากจนเพิ่มจำนวนเครื่อง (scale-out) หรือย้ายเครื่องไปเครื่องใหม่ที่มีประสิทธิภาพดีกว่า (scale-up) จะต้องติดตั้ง Application ใหม่ ก็ต้องไปหาขั้นตอนการทำหรือไปตามคนที่ทำเป็นมาทำให้ได้ไหม? สมัยนี้ Hardware ก็ไปทาง Virtualization หรืออยู่บน Cloud เป็นหลัก ทำให้การย้ายเครื่องทำได้ง่าย เหตุการณ์ที่ยกมานี้มีโอกาสเกิดขึ้นจริงได้เสมอ ถ้าเรามองภาพ Server กันใหม่ ว่าเครื่อง Server มันประกอบด้วย Hardware, Application และ Configuration แล้วทำเราเอกสารบันทึกขั้นตอนการ Setup และค่า Configuration เก็บไว้ทำเป็น Version เมื่อมีเอกสารนี้แล้วเวลาจะทำอะไรก็อ้างอิงจากเอกสารนี้ แล้วนี่ก็เป็นที่มาของระบบที่เรียกว่า Configuration Management

Configuration Management

การเปลี่ยนแปลงในระบบมักถูกเหมาเรียกว่า Change ไปหมด เพราะมันคือการเปลี่ยนแปลง แต่หากมองในด้านการกระทำของ Change ใน 2 ส่วนคือ เปลี่ยนอะไร (What) และ เปลี่ยนอย่างไร (How) มันมีคำเรียกใหม่คือ Configuration Management เพื่อให้เข้าใจง่ายๆ เราจะเรียก Change ว่าคือกระบวนการ (Process) เมื่อต้องการจะเปลี่ยนแปลงอะไรสักอย่าง ที่ควบคุมตลอด Life-Cycle ของการเปลี่ยนแปลงนั้นๆ เช่น การขอ Change เพื่อทำ Web Application, จัดลำดับของ Change ว่าจะเลือกทำอะไรก่อน , Resource , Timeline เป็นต้น ส่วนของ Configuration Management จะเน้นไปการติดตั้ง (Implementation) ของ Change เช่น การทำขั้นตอน (Step) การติดตั้ง Web Application, การบันทึกค่า Configuration เป็นต้น การทำ Configuration Management เป็นกระบวนการดูแลและควบคุมค่า Configuration ในระบบ การไปลงมือทำก็มีเครื่องมือตามหลัก ITIL ก็อาจพูดถึง CMDB แต่ในหัวข้อของเรา จะพูดถึงเครื่องมือ Configuration Management ในส่วนของการทำ Configuration และติดตั้ง

การนำ Configuration Management มาใช้มีประโยชน์ดังนี้

  • สร้าง 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)

img-1

ด้านซ้ายต้องเขียนเงื่อนไขไปดูว่า 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 ต้องอยู่ในสถานะ RunningCreate-config

2. Compile ได้ผลลัพธ์เป็น mof file (Windows Management Object file) ด้วยการเรียกชื่อ Configuration ตามด้วย Parameter คือ NodeName จะได้ Output เป็นไฟล์อยู่ใน folder mof-folder
3. สั่ง Run configuration โดยระบุแค่ Path ในตัวอย่างใส่ -Verbose -Wait เพื่อให้แสดง Message ตอนที่มัน Run ด้วย ด้านล่างเป็นผลลัพธ์ โดยก่อนจะ Run ได้ stop service spooler ไว้ จะเป็นว่าช่วงแรกมันจะ Test เพื่อดูว่าต้องทำอะไร ซึ่งมันพบว่า Service stop มันจึงสั่ง Start ในส่วน Setimg-2

Script ตัวอย่าง

Configuration ManagePrintServer
{
param (
[string[]]$NodeName = 'localhost'
)
Import-DscResource –ModuleName 'PSDesiredStateConfiguration'
Node $NodeName
{
Service StartSpooler
{
Name = "spooler"
State = "running"
Ensure = "Present"
}
}
}
ManagePrintServer -NodeName localhost -OutputPath C:\mof
Start-DscConfiguration -Path C:\mof -Verbose -wait
view raw set-spooler.ps1 hosted with ❤ by GitHub

สรุป

เราได้ทำความเข้าใจ Configuration Management ว่ามันไม่ได้เป็นเพียง Script ที่ใช้ Run งานทั่วไป แต่มันเป็นการสอนเครื่องว่า เครื่องนี้เราต้องการให้มี Configuration เป็นแบบนี้ แล้วมันจะช่วย Set ให้เป็นแบบนี้เสมอ ในตอนต่อไปเราจะหัดเขียน Configuration เรียนรู้เรื่อง Local Configuration Manager และ Resource

 

Reference

https://www.pluralsight.com/blog/software-development/powershell-dsc-pull-server

https://pmstudycircle.com/2012/01/configuration-management-vs-change-management/

PowerShell สำหรับผู้ดูแล Windows Server ตอนที่ 1

PowerShell คือ ภาษา Shell Script ที่ Microsoft สร้างขึ้นมาให้ผู้ดูแลระบบงานบน Windows  ใช้สั่งให้เครื่องทำงาน  มันใช้ได้กับ Windows และอีกหลายโปรแกรม ซึ่งดีกว่าการใช้คำสั่งใน DOS โดยที่ PowerShell นี้มากับ Windows ทำงานอยู่บน.Net Framework และต่อมาเมื่อมี .Net Core สำหรับ Linux ก็มี PowerShell บน Linux ด้วย จากจุดเริ่มต้นมันช่วยให้สั่งงานผ่าน Command Line และ Batch File (PowerShell Script File) ต่อมาการทำงานของ Microsoft เกือบทุกเรื่องก็รองรับ PowerShell แล้ว  การไม่ต้องยึดติดกับ GUI ตลอดเวลา มันช่วยให้ทำงานเป็น  Automate ได้มากขึ้น สรุปง่ายๆ ว่าอะไรที่ต้องซ้ำๆ ให้เขียนเป็น PowerShell Script เก็บไว้ใช้ได้ มันช่วยให้ทำงานได้เร็วขึ้น เป็นมาตรฐาน ลดความผิดพลาด

เมื่อไรถึงจะใช้ PowerShell

การใช้คำสั่งบน Windows ยุคก่อนมี PowerShell บางคำสั่งเป็น GUI บางครั้งก็เป็น Command Line แนวทางยังไม่ชัดเจน ต่อมาตั้งแต่มี PowerShell คนใน Microsoft เห็นประโยชน์จึงนำไป Integrate กับ Product อืนๆ เช่น Config Windows Server, Active Directory, Exchange, SharePoint เป็นต้น โดยการสั่งงานอะไรที่ทำผ่าน GUI ได้ ก็จะมีคำสั่งใน PowerShell ได้เช่นกัน มันจึงช่วยให้การทำงานเป็นระบบมากขึ้น เช่น ทำเป็น script แก้ไขระบบ ไปทดลองก่อนในระบบทดสอบ เมื่อเสร็จก็นำไปใช้จริงที่ระบบ Production หรือ การสั่งงานบางอย่างที่มีความซับซ้อนหรือระดับ low level มากๆ เหล่านี้ก็ใช้ PowerShell ได้ และหากใช้บ่อยก็หาเครื่องมือทำ Version เช่น GIT มาช่วยด้วย

วิธีเปิด PowerShell Console

Console ของ PowerShell มีให้ใช้ทั้งแบบ Command Line และแบบที่มี Editor คือ PowerShell Integrated Scripting Environment (ISE)  เรามักใช้ Command Line เมื่อ Run script ส่วน ISE เหมาะกับการใช้เขียน Script การเปิดทำได้หลายวิธีคือ

วิธีที่ 1 – Click ที่ icon บน Taskbar  image สำหรับ Command Line หรือ ise_icon สำหรับ PowerShell ISE

วิธีที่ 2 – กดปุ่ม Windows + R พิมพ์ powershell_ise  หรือ powershell

วิธีที่ 3 – เปิด Command Windows แล้วพิมพ์คำสั่ง powershell_ise  หรือ powershell

ด้านล่างเป็นตัวอย่างหน้าจอ PowerShell ISE  ที่ใช้เขียน Script ในหน้าจอแบ่งเป็น 3 ช่อง ที่ใช้บ่อยคือ Script pane เพื่อเขียน Script และช่อง Console เพื่อดู Output

ise

Hello, World

PowerShell ใช้รูปแบบคำสั่ง verb-noun ให้จำไปใช้กันง่ายๆ ตัวอย่างของ Verb เช่น Get, Set, Write, Remove เป็นต้น คำสั่งแสดงผลหน้าจอก็เป็น  write-host “hello,world” มี 4 คำสั่ง เป็นคำสั่งสามัญประจำบ้าน จดจำไว้เลย

  • get-help  ใช้แสดงวิธีใช้คำสั่ง
  • get-member ใช้เพื่อขอดูว่า คำสั่งที่เรียกใช้ มีคุณสมบัติอะไรให้ใช้งานบ้าง
  • select-object ใช้เพื่อขอดูว่า คำสั่งที่เรียกใช้ มีคุณสมบัติอะไรให้ใช้งานบ้าง

เราจะทดลองคำสั่ง 4 อันนี้ โดยใช้คำสั่ง get-date เป็นตัวอย่าง

get-help ใช้เพื่อขอดูวิธีใช้คำสั่งที่เราต้อง เช่น  get-help get-date ในภาพด้านล่าง

 

image

จากภาพด้านบนมีคำอธิบายดังนี้

1. เป็นการใช้คำสั่ง Get-Help เพื่อขอดูวิธีใช้คำสั่ง Get-Date

2. Syntax เป็นการบอกวิธีใช้

3. Description บอกว่า gets a DateTime object

4. Remark 4 วิธีเพิ่มเติม

get-help get date –example
get-help get-date –detailed
get-help get-date –full
get-help get-date –online

คำสั่งที่ใช้ใน PowerShell แบ่งออกเป็น 4 พวกคือ Cmdlet, PowerShell Functions, PowerShell Scripts และ Native Windows Command แต่ละพวกมีรายละเอียดต่อไปนี้

1. Cmdlet (อ่านว่า คอม-เหล็ด Command-Let) เป็นรูปแบบการเรียกคำสั่งแบบ “Verb-noun” ที่สื่อความหมายของคำสั่งได้ง่าย ได้แก่ คำสั่ง Get-Command

image

2. PowerShell Function – ความหมายของ Function คือ ฺBlock of Code เราสามารถเขียนคำสั่งเป็น Function แล้ว save เก็บในไฟล์เพื่อทำใช้ซ้ำบ่อยได้ แต่หากเราใช้คำสั่ง Get-Command จะเห็นว่าคำสั่งที่มากับ PowerShell บางอันก็เป็น Function และบางอันก็เป็น Cmdlet ในึครั้งต่อไปเราจะฝึกเขียน Function กัน

 

Reference

  1. PowerShell cmd vs. function  (https://powershell.org/forums/topic/cmdlets-vs-functions/)
  2. PowerShell Function http://windowsitpro.com/windows/create-your-own-powershell-functions

Remote Admin – Nano Server ตอนที่ 1 PowerShell Remote อย่างง่าย

ใน ตอนที่ 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 ที่ใช้งานได้จริงด้วย

  1. ขั้นตอนแรก เป็นการ Enable ให้ Windows Server เปิดการใช้งาน PowerShell Remote ได้ เริ่มจาก Logon ไปที่ Server เพื่อ Configure WinRM โดยให้เปิด PowerShell ด้วย runas administrator แล้ว run Enable-PSRemoting –force


คำสั่งด้านบน Windows ได้ทำงานไป 4 ขั้นตอนคือ

  • กำหนดให้ Service – Windows Remote Management เป็น auto start
  • Register ให้ PowerShell เป็น endpoint ไว้กับ WinRM Listener เมื่อมี Client connect เข้ามา WinRMจะได้ส่ง Request ไปได้ถูกตัว เช่น เมื่อ Client ที่เป็น PowerShell เรียกเข้ามาก็จะส่งต่อให้ PowerShell Remote รับงานไปทำ เป็นต้น
  • สร้าง policy ใน Windows Firewall ให้ allow port tcp 5985 และ tcp 5986 สำหรับ HTTP และ HTTPS ตามลำดับ
  • กำหนด Permission การใช้งาน Remote

2. การ Configure เครื่อง Client ที่เราใช้ Remote ไปทำงานบน Server ในนี้เป็นการทดสอบกับ Workgroup  ขั้นตอนดังนี้คือ

  • ด้าน Client จะต้องดูว่า Service – Windows Remote Management (WS-Management) อยู่ใน Status Running จึงจะใช้งานได้
  • ลงทะเบียน Server ที่เราต้องการ Remote ไปทำงานไว้ในค่า TrustedHosts ด้วยคำสั่ง set-Item WSMan:\localhost\Client\TrustedHosts -value  ถ้ามีหลาย Server ใช้เครื่องหมาย “,” คั่นไว้ (ส่วนนี้ Server 1 เครื่อง ก็ add ครั้งเดียวพอ)ถ้าต้องการอ่านค่ามาดูใช้คำสั่ง get-Item WSMan:\localhost\Client\TrustedHosts 

3. เปิด Remote ไปทำงาน

  • เตรียม User ID และ Password สำหรับ Logon เข้า Server ด้วยคำสั่ง get-Credential
  • สร้าง Remote Session ด้วยคำสั่ง  new-PSSession โดยเราเก็บค่า Session ไว้ในตัวแปร
  • เข้า Remote Session ด้วยคำสั่ง enter-PSSession สังเกตุว่า Prompt ในภาพด้านล่างเปลี่ยนไป มันแสดงเป็น IP Address ของเครื่อง Remote แทน
  • เมื่ออยากจะกลับมาที่เครื่อง Client ก็ใช้คำสั่ง exit

4. เราสามารถ Remote ไปเป็น Command Prompt ก็ได้ ตัวอย่างคำสั่ง Remote ไปใช้คำสั่ง cmd.exe บน remote server

c:\winrs -r:192.168.1.113 -u:administrator -p:Passw0rd cmd.exe

เมื่อได้ทำตามตัวอย่างคงพอเห็นภาพว่าการ Remote ไม่ยาก ใช้ได้กับ Windows Server และ Nano Server ในครั้งต่อไปจะกลับไปสร้าง Nano Server มาใช้งานต่อไป

รวมภาพตัวอย่างการทำงานและ PowerShell Script

ด้านล่างเป็น Script ที่ได้ทดสอบฝั่ง Client ตอนทำต้อง runas Administrator ด้วย

Start-Service WinRM
$myTrustWinRM = get-Item WSMan:\localhost\Client\TrustedHosts
if($myTrustWinRM.Value.Length -eq 0)
{
$myNewTrust = "192.168.1.113"
Write-Host "new trustedhosts"
}
else
{
$myTargetServerIP = "192.168.1.113"
$myNewTrust = ($myTrustWinRM).Value + ", $myTargetServerIP"
Write-Host "append trustedhosts"
}
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $myNewTrust
$MyCred = Get-Credential "administrator"
$nanoPSHost = New-PSSession -ComputerName $myNewTrust -Credential $MyCred
Enter-PSSession -Id ($nanoPSHost).id

client_connect_2

client_connect_3

client_connect_4

client_connect_5

client_connect_6

Nano Server – Part 1: Introduction Nano Server คืออะไร

ปี 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 เรื่องดังนี้

  1. Microsoft ออก Security Update (Hotfix) ทุกเดือน (Patch Tuesday) เป็นการเพิ่มงานและกระทบการใช้งาน Application เพราะ Hotfix ต้อง Restart Server และบน Windows   มี API มากมายเหลือเกิน มันไม่ใช่สิ่งที่ทุกคนต้องใช้แต่ต้องการ Hotfix ด้วย
  2. กิน Resource บนเครื่องมากเช่น RAM, CPU, Disk และ Network เพราะการเก็บสิ่งที่ไม่จำเป็น มันทำให้ต้องซื้อ Server หรือใช้ Cloud ที่ราคาแพงขึ้นโดยไม่จำเป็น
  3. การมี 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 ได้เร็วมาก
4 Hotfix ลดลง อย่างมากเพราะมันเล็กมันตัดสิ่งที่ไม่จำเป็นออกหมด ทำให้ลดจำนวน   Hotfix   ถึงขั้นบางคนใน Microsoft คิดว่า Nano ควรมี Hotfix ระดับ   Critical ปีละไม่เกิน   2 ครั้ง
5 ไม่มีแผ่น Boot   สำหรับ Nano การทำไปลงจะต้องสร้าง Boot image   เอง (ทำง่ายๆ)
6 ไม่มี 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 สิ่งที่ต้องเตรียมไว้ดังนี้

  1. Microsoft Windows Server 2016 โดย Download จาก ที่นี่
  2. Windows Server 2016 ที่เป็น Hyper-V Server 2016 ถ้ายังไม่มีก็สร้างใหม่ได้
  3. สร้าง Folder c:\Temp และ copy folder – Nano Server จากแผ่น CD 2016 ไปใส่ไว้ใน C:\Temp
  4. เตรียม Folder c:\temp\NanoVM เพื่อใช้สร้าง Nano Server

Nano-p1-3

สร้าง Nano Server แรกเป็น Virtual Machine

1. การลง Nano ไม่ได้ลงจากแผ่น CD แต่มันเก็บอยู่แผ่น Windows Server 2016 ใน Folder -> NanoServer เราต้องใช้เครื่องมือ เช่น PowerShell สร้าง ในตัวอย่างนี้จะสร้างเป็น Virtual hard disk ไปใส่ใน Hyper-V Virtual Machine

Nano-p1-1

 

2. Explorer – Nano Server Folder ถ้าเปิดใน Folder Nano Server จะพบส่วนประกอบสำคัญ 3 ส่วนในนี้ คือ .WIM file, NanoServerImageGenerator ที่เป็นเครื่องมือ PowerShell เพื่อสร้าง VHD, สุดท้ายคือ Packages ที่เป็น Feature ที่จะติดตั้งลงไปใน VHD

Nano-p1-2

3. สร้าง VHD ของ Nano Server

ขั้นตอนนี้ก็ Run script ตามนี้

$sw = [Diagnostics.Stopwatch]::StartNew()
Import-Module -Name C:\temp\NanoServer\NanoServerImageGenerator
# Prepare password as secure string
$secAdminPassword = ("Passw0rd"|ConvertTo-SecureString -AsPlainText -Force)
# Create Nano image
New-NanoServerImage -MediaPath C:\temp -BasePath .\ -DeploymentType Guest -Edition Standard -TargetPath "c:\temp\NanoVM\vmNanoStorage.vhdx" -AdministratorPassword $secAdminPassword -MaxSize 10GB -storage -ComputerName Nano
# Create VM
$strVM = "Nano"
New-VM -VHDPath c:\temp\nanovm\vmnanostorage.vhdx -MemoryStartupBytes 512MB -Name $strVM -Generation 2
Set-VMProcessor -VMName $strVM -Count 1
$sw.Stop()
$sw.Elapsed

4. ตรวจผลการสร้าง VHD จากการ Run PowerShell Script ใช้เวลาไม่ถึง 4 นาที

Nano-p1-5

 

5. Start-VM และ Config ค่าเริ่มต้น

เริ่มด้วยการไป Assign Virtual Network Card และ Start-VM

Nano-p1-6

 

Start VM

Nano-p1-7

6. Emergency Management Console

– หน้านี้เป็นหน้าแรก ให้ Login ด้วย user name: Administrator และ Password ที่เตรียมตอน Run PowerShell script

image

 

– เมื่อ Login เข้ามาแล้วจะเป็นหน้า Main Menu

Nano-p1-8

– เลือก Networking จะได้หน้านี้

Nano-p1-9-1

– เลือก Ethernet จะได้หน้านี้ สามารถกำหนด DHCP หรือ IP Address ได้

Nano-p1-9-2

– กลับไปหน้าแรกเลือก inbound firewall rule จากหน้าแรกจะได้หน้านี้ เพื่อเปิด/ปิด port ด้วย firewall ตามภาพด้านล่างจะเปิดให้ใช้ Ping ได้

Nano-p1-10-1

–  ต้องไป Enable ก่อน จึงจะทดสอบ Ping มาที่ Nano ได้

Nano-p1-10-2

7. PowerShell Remote Management

– เนื่องจากเราต้อง Remote เข้ามาจัดการ Nano ด้วย PowerShell Remoting เราจึงต้องเปิด WinRM ด้วย

Nano-p1-11-1

 

– กด Enter เพื่อเปิด WinRM จำเป็นต้องใช้ สำหรับการ Remote  Management

Nano-p1-11-2

มาถึงตรงนี้ คงจะเห็นภาพแล้ว Nano เป็นอย่างไร ตอนต่อไปจะเป็นการ Remote ด้วย powershell (อ่านที่นี่) และการสร้าง Web Server

Reference

  1. Emergency Management Console(https://windowsserver.uservoice.com/forums/295068-nano-server/suggestions/7943241-nano-server-console-to-show-change-network-informa)

คำนวณ License Windows Server 2016

เดือนตุลาคม ปี 2016 ทาง Microsoft ได้ออก Windows Server 2016 โดยได้เปลี่ยนวิธีคิด License จากเดิมนับจำนวน CPU เป็นนับตามจำนวนของ CPU core ในรอบนี้ภาพรวมๆ ก็ยังคล้ายของเดิมในส่วนของการนับไปใช้กับ Virtual Machine แต่ update เรื่อง Container เข้าไปด้วย  มี Feature ส่วนที่เพิ่มขึ้นแล้วบางอันถูกไปใส่ไว้ใน Datacenter Edition แต่ส่วนใหญ่อาจไม่ได้ใช้กัน เช่น Storage Replica, Shield VM เป็นต้น หลักๆ เรายังใช้ Standard Edition แต่ถ้ามี VM มากๆ ก็ให้ดู Datacenter ไว้ด้วย การเข้าใจเรื่อง License นอกจากช่วยให้ประหยัด และยังช่วยระวังซื้อผิด Edition ด้วย

เทคโนโลยี CPU Core และการขยับของ Microsoft

การเกิดของ Multiple CPU Core อย่างของ Intel CPU มีมานานแล้ว การมี Core มากๆ ช่วยให้ Server ทำงานได้มีประสิทธิภาพสูง อย่าง Intel Xeon E5 V4 ใน 1 CPU มี core ให้เลือกตั้งแต่ 4 core ยาวๆ กันไปจนถึง 22 core ในด้าน Software License ที่ผ่านมา Software หลายตัวได้คิดราคาค่า License ตาม CPU core กันแล้ว ถ้างานมากก็ต้อง core  มาก เป็นเหตุให้ต้องจ่ายค่า License Software มาก มันก็น่าจะเป็นธรรมกับผู้พัฒนา Software และส่งเสริมให้มีการพัฒนางานใหม่ๆ ออกมาด้วย ในส่วนของ Microsoft เองได้ปรับการคิดค่า License ของ Software ตาม Core ไปบ้างแล้ว เช่น Microsoft SQL Server ตั้งแต่ version 2012 เป็นต้น

หลักการคิด License ของ Windows Server 2016

ปัจจัยการคิด License จะมี 2 ส่วน คือ Edition ที่ซื้อและจำนวน CPU Core โดยทำตามขั้นต่อไปนี้

1. เลือก Edition  รอบนี้มี 5 Edition ดังนี้

Edition Name วิธีคิด License
1 Datacenter นับตามจำนวน CPU Core*
2 Standard นับตามจำนวน CPU Core*
3 Essestial นับตามจำนวน Processor
จำกัดจำนวน User ที่ 1-25 user หรือ 50 Devices
4 Storage Server นับตามจำนวน Processor แต่ไม่ขายตรง เป็น OEM เท่านั้น
5 Hyper-V Server Free แต่ใช้ทำเป็น  Hyper-V Host เท่านั้น

*Client Access Licenses ยังต้องซื้อตามปกติ

2. เลือก Feature ที่ต้องการใช้งาน

Datacenter Edition Standard Edition
Windows Server Core Functionality

(Function หลักของ Windows -> เท่ากัน)

เหมือนกัน เหมือนกัน
OSEs / Hyper-V containers

จำนวน VM

ไม่จำกัด 2 VM (หากสร้างเกิน 2 VM ให้ซื้อ license ใช้สูตรคำนวณตาม core นี้  เติมได้ทีละ 2 vm เช่น 1-16 core ซื้อมาตอนแรก 8 license ตอนสร้าง VM ที่ 3 และ 4 ก็ซื้ออีก 8 license  สร้างเพิ่มเครื่องที่ 5,6 ก็ซื้ออีก 8 license

 

update 24 มค 60, ถ้าเครื่องมี 40 core ใช้ 20 license สร้างได้แค่ 2 VM, ถ้าจะสร้างเพิ่ม 20 lic ต่อ 2 vm ใช้ สูตรคำนวณที่นี่ )

Windows Server containers ไม่จำกัด ไม่จำกัด
Nano Server ทำได้ ทำได้
New Storage Features including Storage Spaces Direct and Storage Replica Yes
New Shielded Virtual Machines and Host Guardian Service Yes
New networking stack Yes

3. นับ CPU Core

ใน Standard และ Data Center จะนับ License ตาม CPU Core

  • Core, จำนวน Core ทั้งหมดที่มีตาม CPU Core Model ดู specification จาก Intel ได้
  • 1 licenses เท่ากับ 2 core
  • กำหนดให้ 1 server ต้องซื้อเริ่มต้น 8 licenses (เท่ากับมี 1 – 16 core จ่ายราคาเดียวกัน คือ 8 licenses)
  • ถ้า Core เกิน 16 ซื้อเพิ่มเป็น license ละ 2 cores

4. ราคาตาม Price List ตาม web site Microsoft

Windows Server 2016 edition Licensing model CAL requirements* Pricing Open NL ERP (US$)
Datacenter Core-based Windows Server CAL $6,155
Standard Core-based Windows Server CAL $882
Essentials Processor-based No CAL required $501

5. คำนวณค่า License

จากราคาตาม Plice List ตามข้อ 4 อ้างอิงจาก Intel Xeon E5 V3 จำนวน Core ที่มีขายจริงเริ่มที่ 4 core การนับจำนวน License และคิดราคาทำได้ง่ายๆ ตัวอย่างคิด License แบบ Standard Edition

A. เครื่องมี 1 CPU – Intel E5-1630 v4 มี 4 cores ต้องซื้อ 8 license (น้อยกว่า 16 core) ราคาประมาณ 30,870 บาท

B. เครื่องมี 1 CPU –  Intel E5-2667 v4 มี 8 cores ต้องซื้อ 8 license (น้อยกว่า 16 core) ราคาประมาณ 30,870 บาท

C. เครื่องมี 1 CPU – Intel E5-2680 v4 มี 14 cores ต้องซื้อ 8 license  (น้อยกว่า 16 core)  ราคาประมาณ 30,870 บาท

D. เครื่องมี 2 CPU – Intel E5-2680 v4 มี 14 cores รวมเป็น 28 cores ต้องซื้อ 8 license (16 core แรก ) + 6 license (12 core ที่เพิ่มขึ้น) รวมต้องใช้ 14 license  ราคาประมาณ 53,970 บาทการคิด License Windows Server 2016 ตาม Core ไม่ยาก

image

 

คิด License ตาม Step 1 – 4 แล้วเทียบราคาจากตารางในขั้นตอนที่ 5 ง่ายๆ แค่นี้

image

Reference

  1. Software Defined Networking (SDN)
  2. Windows Server License Data Sheet
  3. Excel สำหรับคำนวณ License

Windows Container : Storage 1

ในตอนที่ 2 เราได้เตรียม Container Host กันแล้ว และใช้คำสั่ง docker run ไปบ้าง ตอนนี้เราจะทำความเข้าใจหัวข้อต่อไปนี้

  1. Container Image, Layer, History  และ  docker commit
  2. Volume
Container Image และ Layer

การเข้าใจ Image ต้องควบคู่ไปกับ Layer ตามที่รู้กันแล้วว่า Container เป็นการ share OS เมื่อเราอยากใช้เครื่อง Server ทำหน้าที่อะไร เราจึงต้องมี Image หรือ Application นั้น เช่น เราต้องการ ASP.Net Server คือ เราสร้าง Windows Server ขึ้นมาก่อน แล้วก็ Enable ASP.Net ในโลกของ Windows Container เราจะต้อง download OS Image + ASP. Net จาก Repository เป็นต้น

Image หมายถึง Package ของ Application ที่เตรียมไว้ Run ใน Container ในภาพประกอบด้านล่าง Image ถูกเก็บไว้ที่ Repository มี 3 ที่คือ Public, Private และ Local  ซึ่ง Image อาจมีลง Application เพิ่มเติมบน Image เดิมได้เรื่อยๆ ส่วนที่มา update มันไม่ได้ถูกแก้ของเดิม แต่เป็นการสร้างเป็นของใหม่เพิ่มเติมขึ้นไปเรียกว่า Layer

Image ที่ประกอบด้วย Layer นั้น ใน Container แม้จะมีกี่ Layer ก็ตาม จะมี Layer 2 แบบ คือ Read-only และ Read-Write ตามภาพด้านล่าง โดย Layer ชั้นบนสุดจะสามารถ write ได้ แต่มันเป็นแค่ write เก็บไว้ในระหว่างที่ Run image นั้น หลังจะ stop image สิ่งที่ write ก็จะหายไป ถ้าจะเก็บถาวรต้องใช้ Volume

Layer

Volume

ตามที่กล่าวไปแล้ว Image ถูกออกแบบว่าห้าม save งานลงไปในนั้นโดยตรงเพราะแนวคิดการใช้งาน Docker คือการควบคุมให้ version ใน image มีมาตรฐาน เพื่อให้ใครไปดึงมาใช้ก็เหมือนกัน ถ้าเราต้องการบันทึกข้อมูลจะต้องใช้ Volume เพื่อเก็บข้อมูลถาวร (Persistent Storage) หลังของ volume มีดังนี้

1. สร้าง Folder บน Container Host สำหรับ Share ให้ Container นำไปใช้งาน ในตัวอย่าง ตั้งชื่อ volume นี้ว่า WebVolume

docker volume create –name WebVolume

ตรวจสอบผลงานด้วยคำสั่ง

docker volume inspect webvolume

image

2. ใช้งาน Volume ด้วยคำสั่ง docker run แล้วใส่ parameter volume

docker run -it -v WebVolume:c:\WebVolume microsoft/windowsservercore cmd.exe

image

ในภาพจะเห็นว่ามี Folder ชื่อ webvolume อยู่ใน Container และเมื่อสร้างไฟล์ hello.txt ด้วย Notepad ถ้าเราต้องการใช้งานต่อก็เรียก docker run –v

image

ในตอนนี้เราได้รู้จัก Docker Storage เบื้องต้น รู้จัก Image, Layer และ Volume เรื่องนี้ยังไม่จบ ต่อไปจะทำความรู้จักกับ Storage driver ให้มากขึ้น และเราจะรู้จักวิธีสร้าง image ในคราวต่อๆ ไปครับ

Reference

  1. Docker Layer
  2. Docker Fundamental
  3. Image Stored
  4. Volume

 

#WindowsContainerThailand

 

Windows Containter 2: วิธีสร้าง Windows Container step-by-step

ใน 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

เรามาลงมือทำกันเลย!!

  1. Download Windows Server 2016 กดที่นี่ ให้เลือก Windows Server 2016 อันนี้เป็น Evaluation จะใช้ได้ 180 วัน โดยเราต้องลงทะเบียนเพื่อ download
  2. Container เป็น Feature บน Windows Server ดังนั้น เราต้องสร้าง Windows Server ขึ้นมาก่อน แนะนำให้สร้างเป็น VM โดยเราจะใช้ Hyper-V, VMware, Oracle VM หรืออะไรที่สะดวกก็ได้ ในกรณีของผม ใช้ Oracle VM เลือก Guest เป็น Windows 10 มี Minimum hardware Requirement ที่แบ่งให้ VM ตามนี้
CPU 1 core
RAM 1 GB
Disk 25 GB
Network Card Wifi หรือ สาย LAN ก็ได้

เครื่องต้องต่อกับ Internet

3.  ลง Windows ตามภาพ

– เริ่มลง Windows

1

 

– กด Next2

 

– กด Install Now

3

– หน้านี้ เนื่องจาก Evaluation เราไม่มี Product Key ก็ไม่ต้องใส่ กดตามภาพ

4

 

– เลือก Windows Server 2016 Standard Technical Preview 5 (Desktop Experience)

5

 

6

 

7

 

8

ขั้นตอนนี้ก็ปล่อยให้มันลงจนจบ

4. สร้าง Password ของ Administrator

เมื่อลง Windows เสร็จแล้วจะได้จอนี้ ก็กด Ctrl+Alt+Del เพื่อ Logon เข้า Windows เราจะใช้ Script Powershell นี้เพื่อความสะดวกในการสร้าง Container

# This script is from MSDN
Install-WindowsFeatures Containers
#Download docker service and client
Invoke-WebRequest "https://get.docker.com/builds/Windows/x86_64/docker-1.12.1.zip" -OutFile "$env:TEMP\docker-1.12.1.zip" -UseBasicParsing
# Put docker to \Program Files\docker
Expand-Archive -Path "$env:TEMP\docker-1.12.1.zip" -DestinationPath $env:ProgramFiles
$env:path += ";c:\program files\docker"
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Program Files\Docker", [EnvironmentVariableTarget]::Machine)
& $env:ProgramFiles\docker\dockerd.exe --register-service
Start-Service docker

 

ทำตาม step ในภาพ

step powershell

 

 

ถึงตอนนี้ เราสร้างเครื่อง Windows Container พร้อมกับติดตั้ง base image ของ Windows Server Core เสร็จแล้ว

5.  ทดลองเปิด Windows Container เพื่อทดสอบว่า docker ใช้งานได้แล้ว

– ทำตามภาพเลย คำสั่ง docker ps –a เพื่อดูว่ามี image run อยู่หรือไม่ สังเกตุตรง column “status”

– ให้สังเกตุตรง hostname ว่าตัว host ของ container มีชื่ออะไร เมื่อเรา run image จะเห็นมันเป็นคนละเครื่องกัน

22

-อธิบายคำสั่ง

docker ps -a เพื่อขอดูว่ามี container อะไรกำลัง run อยู่ โดยเราเพิ่ม parameter -a ไปด้วยเพื่อให้แสดงทั้งที่ run และ stop ไปแล้ว

docker run -it –name myCore <image ID> <คำสั่งที่การ run ใน container> อันนี้เราให้ docker start container ขึ้นมา run โดยใช้ image windowsservercore แต่แทนที่จะเรียกชื่อ เราใช้ Image ID แทน

  • ตอนนี้เราอยู่ใน container แล้ว คำสั่ง hostname จะแสดงว่ามันเป็นคนละชื่อกัน

23

– กด Ctrl+P+Q เพื่อกลับไปที่ host ใช้คำสั่ง docker ps –a จะเป็นว่า status เครื่อง container ของเรากำลัง run อยู่

24

– เราปิดเครื่อง และขอจบตอนนี้ตรงนี้

25

สรุป

เราได้สร้างเครื่อง Windows Container ขึ้นมาแล้ว และทดลอง run image ตอนต่อไปจะเป็นการใช้งาน Windows Container

Windows Container 1: ยกระดับ Virtual Server Admin ให้ใช้งาน Container Technology ด้วยการเรียนรู้ Docker และ Windows Container

ก่อนจะมาเป็น Container บน Linux หรือ Windows

เมื่อเรียก Container ขอให้นึกถึงตู้ Shipping Container ที่ใช้บรรจุสินค้าสำหรับขนส่ง คุณสมบัติของมันคือ

1. บรรจุสินค้าลงในตู้ แต่ละตู้มีของต่างๆ ของกิน ของใช้ ตู้ใครตู้มัน มันมีความเป็นส่วนตัวหรือ Isolation

2. การขนส่งมีตู้เยอะแยะถูกนำไปใส่ในเรือลำเดียวกันหรือ Share กัน

3. ผู้ฝากส่งสินค้า มีหน้าเพียงบรรจุสินค้าลงตู้ แล้วบอกว่าจะส่งไปไหน

4. เจ้าของเรือ บริหารการใช้ทรัพยากร บนเรือ

clip_image002

(ภาพนี้เป็นของสายการเดินเรือ Mitsui O.S.K.Lines จาก http://www.mol.co.jp/en/services/container/img/ph-01.jpg)

เมื่อกลับมาเรื่อง Linux หรือ Windows ถ้ามันมาทำหน้าที่เป็น “เจ้าของเรือ” มีหน้าเตรียม Resource ให้ผู้ใช้นำงานมาใส่ใน Container สิ่งของนั้นก็คือ Application นั่นเอง

รู้จักจุดร่วมและจุดต่างของ Container กับ Virtualization

เรารู้จักว่า Server virtualization เช่น Hyper-V ที่เป็นการ Share Hardware ด้วยการสร้าง Virtual Machine เมื่อมายุคของ Container มัน Share กันคนละแบบ ดูภาพด้านล่าง พอสรุปง่ายๆ ได้ดังนี้

Server Virtualization – เจ้าของ Server จะแบ่ง CPU, RAM, Disk และ Network ให้ Virtual Machine

– ผู้ใช้ Virtual Machine ต้องไปลง Operating System

Container – เจ้าของ Server จะลงเตรียม OS (Windows/Linux) ไว้ ผู้ใช้งาน Container ใช้ OS share กับ Host

– ผู้ใช้ต้องเลือกว่าเจ้าของ Server คนไหนมี OS Version ที่ต้องการ ก็ไปขอใช้บริการ Container เจ้านั้น

– ในภาพด้านล่างซ้ายมือคือ Server Virtualization ปกติ และขวามือคือ Container ในภาพเป็นตัวอย่าง Software ที่จัดการ Container ตัวหนึ่งที่ได้รับความนิยมมากชื่อ Docker ในภาพมันทำงานบน Linux ที่ฐานของ Docker เราเห็นว่ามันคือ Linux  ด้านล่างที่เป็น Hardware ยังเลือกได้อีกว่าจะใช้ Virtual หรือ Physical ได้ด้วย

image

ความเป็นมาของ Container

ปกติ vm360degree มักจะพูดถึงเทคโนโลยีของ Microsoft แต่พอเป็นเรื่อง Container มันเกิดจาก Linux ขอสรุปเหตการณ์สำคัญในตารางด้านล่าง ซึ่งทำให้เห็นพัฒนาการอย่างต่อเนื่องของ Container ว่ามีกันมานานหลายตัวแล้วบน Linux จนมีความสมบูรณ์เลยทีเดียว รวมถึงตัวหนึ่งในนั้นคือ Docker ก็ได้รับความนิยมเป็นอย่างมาก Docker เกิดขึ้นในปี 2013 จนปัจจุบัน Cloud Service Provider อย่าง Amazon EC2, Microsoft Azure ก็ใช้งาน Docker ได้ การเล่าเรื่อง Container ตั้งแต่นี้จะเป็นเรื่อง Docker

ปี เหตุการณ์
2000 ก้าวแรกของ Container – FreeBSD Jailed ได้ติดตั้งบน FreeBSD
2001 มีการสร้าง 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
2016 Microsoft ใส่ Container ใน Windows Server 2016

 

Container ไม่เหมือน Virtual Machine – ปรับความคิดก่อนใช้งาน

กฏข้อแรกข้อเดียวของ vm360degree สำหรับ Container คือ คุณไม่สามารถนำความรู้ของ Virtualization มาใช้กับ Container มันไม่เกี่ยวกัน ถ้าถามผมว่า Container ใช้ทำอะไร ผมก็ตอบไม่ได้ แต่เมื่อคุณใช้ไปสักระยะก็จะได้คำตอบไปพร้อมๆ กัน  เรามาค้นคว้าหาคำตอบไปด้วยกัน ผ่านประสบการณ์ ในการดูแลระบบของเรา ตามขั้นตอนการทำงานหรือ Use Case ต่อไปนี้

1. สร้าง Container พื้นฐาน บน Amazon AWS

2. ติดตั้ง Application บน Container, การจัดการ image, สร้าง docker file

3. จัดการ Resource เช่น network, RAM, CPU

4. เรียนรู้ Windows Container

5. Container กับ DevOps

Reference

http://rhelblog.redhat.com/2015/08/28/the-history-of-containers/

http://www.slideshare.net/jpetazzo/anatomy-of-a-container-namespaces-cgroups-some-filesystem-magic-linuxcon

วิธีอ่าน ประกาศ end of support ของ Microsoft

การเป็นผู้ดูแล Software นั้น หน้าที่หนึ่งที่ต้องทำคือ ควบคุมให้มีการใช้ Software ที่มี Support จากผู้พัฒนา เพื่อที่เวลามีปัญหาต่างๆ เช่น Function ไม่ทำงานอันเนื่องจาก Bug, ช่องโหว่ด้าน Security เป็นต้น งานของเราจะได้มีผู้ช่วยเหลือ  นอกจากนี้ ปัจจุบันหลายๆ ธุรกิจมีหน่วยงานภายนอกเข้ามาตรวจสอบ โดยมากก็จะตรวจเรื่องนี้ด้วย ่ตามปกติเราเรียกว่าที่เลิก support ตรงๆ เลยคือ End of Support

สำหรับการใช้งาน Microsoft มีที่ให้ตรวจสอบคือ https://support.microsoft.com/en-us/lifecycle/search การใช้งานก็ไม่ยาก แค่พิมพ์ชื่อ production ที่ต้องการตรวจวัน end of support แล้วกด Search  แต่มันต้องมีวิธีการอ่าน ให้อ่านง่ายๆ ตามภาพด้านล่างครับ

 

MS Support