วิธีติดตั้ง Kubernetes ด้วย CoreOS (ตอนที่ 2 Worker Node)

ถ้าต้องการระบบจัดการ docker container สักตัวต้องทำอย่างไร (ตอนที่ 2)             จากตอนก่อนหน้านี้ รู้จักกับ Kubernetes และวิธีติดตั้ง Kubernetes ด้วย CoreOS (ตอนที่ 1 Master Node)[1] ก็มาต่อด้วยการติดตั้งบนเครื่อง Worker ต่อครับ  วิธีการติดตั้ง Kubernetes Worker Node[2] ทำการติดตั้ง CoreOS บน Worker Node สร้าง directory ดังนี้ sudo mkdir -p /etc/kubernetes/ssl ทำการ copy ที่สร้างไว้ก่อนหน้านี้มาไว้ใน folder ดังนี้ File: /etc/kubernetes/ssl/ca.pem File: /etc/kubernetes/ssl/${WORKER_FQDN}-worker.pem File: /etc/kubernetes/ssl/${WORKER_FQDN}-worker-key.pem เปลี่ยน permission และ owner file เฉพาะไฟล์ -key* ดังนี้ sudo chmod 600 /etc/kubernetes/ssl/*-key.pem sudo chown root:root /etc/kubernetes/ssl/*-key.pem ทำการทำ link เผื่อให้ config แต่ละ worker เหมือน ๆ กัน cd /etc/kubernetes/ssl/ sudo ln -s ${WORKER_FQDN}-worker.pem worker.pem sudo ln -s ${WORKER_FQDN}-worker-key.pem worker-key.pem จากนั้นตั้งค่า flannel network เป็น network ที่เอาไว้เชื่อมแต่ละ pod ให้สามารถคุยกันได้ข้ามเครื่อง เพื่อสร้างวง virtual ip ให้กับ pod ดังนี้ sudo mkdir /etc/flannel ทำการสร้างไฟล์ option.env sudo vim /etc/flannel/options.env เนื้อหาในไฟล์ดังนี้ FLANNELD_IFACE=<Worker IP> FLANNELD_ETCD_ENDPOINTS=http://<Master IP>:2379,http://<Node1 IP>:2379,http://<Node2 IP>:2379 จากนั้นทำการสร้าง flannel service ดังนี้ sudo mkdir -p /etc/systemd/system/flanneld.service.d/ sudo vim /etc/systemd/system/flanneld.service.d/40-ExecStartPre-symlink.conf เนื้อหาในไฟล์ดังนี้ [Service] ExecStartPre=/usr/bin/ln -sf /etc/flannel/options.env /run/flannel/options.env จากนั้นทำการตั้งค่า docker เพื่อกำหนดให้ใช้งานผ่าน flannel โดยสร้างไฟล์ config ดังนี้ sudo mkdir -p /etc/systemd/system/docker.service.d sudo vim /etc/systemd/system/docker.service.d/40-flannel.conf เนื้อหาในไฟล์ดังนี้ [Unit] Requires=flanneld.service After=flanneld.service [Service] EnvironmentFile=/etc/kubernetes/cni/docker_opts_cni.env โดยที่ทำสร้างไฟล์ docker_opts_cni.env ขึ้นมาประกอบดังนี้ sudo mkdir -p /etc/kubernetes/cni sudo vim /etc/kubernetes/cni/docker_opts_cni.env เนื้อหาในไฟล์ดังนี้ DOCKER_OPT_BIP=”” DOCKER_OPT_IPMASQ=”” จากนั้นทำการ restart docker service สักรอบดังนี้ sudo systemctl restart docker หนังจากนั้นทำการสร้าง config ไฟล์สุดท้ายสำหรับ flannel ดังนี้ sudo mkdir -p /etc/kubernetes/cni/net.d sudo vim /etc/kubernetes/cni/net.d/10-flannel.conf เนื้อหาในไฟล์ดังนี้ { “name”: “podnet”, “type”: “flannel”, “delegate”: { “isDefaultGateway”: true } } ทำการ start flannel service

Read More »

รู้จักกับ Kubernetes และวิธีติดตั้ง Kubernetes ด้วย CoreOS (ตอนที่ 1 Master Node)

ถ้าต้องการระบบจัดการ docker container สักตัวต้องทำอย่างไร             เมื่อกล่าวถึงระบบจัดการ docker container สักตัวหนึ่ง มักจะกล่าวถึง opensource ตัวหนึ่งชื่อ kubernetes ซึ่งเป็นเครื่องมือที่พัฒนาขึ้นมาด้วย Google[1] ซึ่งสามารถรองรับทั้งในส่วนของ Google Container Engine และ CoreOS จริง ๆ ลงได้บนอีกหลาย platform แต่สำหรับ CoreOS ได้ออกแบบมาให้รองรับ Kubernetes ทำให้การติดตั้งง่ายและสมบูรณ์มากขึ้น (อ่านไปเรื่อย ๆ จะสงสัยนี่ง่ายแล้วเหรอ แต่หลังจากเขียนบทความนี้เสร็จก็มีตัวติดตั้งตัวใหม่ชื่อ Tectonic[6] น่าจะเป็นตัวที่ทำให้การติดตั้งง่ายขึ้นครับ)             Kubernetes เป็นเครื่องมือที่ช่วย build, deploy และ scale ให้เป็นเรื่องง่าย ๆ และสามารถ replicate containner ได้ง่ายมาก การติดตั้ง Kubernetes บน Google Container Engine ง่ายมาก แต่การติดตั้งบน CoreOS จะยากกว่า ซึ่งสามารถติดตั้งแบบ Single Node และ Multi-Node ซึ่งถ้าจะทำ Multi-Node ต้องเชื่อมต่อไปยัง etcd service ที่ติดตั้งบน CoreOS Cluster ด้วยก็จะดีครับ (ไม่งั้นเป็น Cluster ที่ไม่สมบูรณ์) สามารถอ่านเพิ่มเติมได้ที่วิธีการติดตั้ง CoreOS Cluster[2] (ในบทความใช้ก่อนหน้านี้ CoreOS Cluster เขียนในส่วน ETCD Version 2 แต่การใช้งานกับ Kubernetes ต้องใช้ ETCD Version 3 ตอนนี้ยังไม่มีบทความเสริมในส่วนนี้ อาจจะต้องหาข้อมูลเองก่อนครับ จริง ๆ มีวิธีแต่ยังยากในการเขียนบทความ ไว้ค่อยเขียนเพิ่มให้อีกทีครับ) ซึ่งแน่นอนระหว่าง master node และ worker node มีการตรวจสอบเรื่อง certificate ระหว่าง service ด้วย             ตัวอย่าง Diagram ของระบบทั้งหมด[3] เรียนรู้การค่าเบื้องต้นก่อนการติดตั้ง[4] MASTER_HOST : คือ ชื่อ host ที่ node ลูกเอาไว้ติดต่อและให้เข้าถึงจาก external client  เช่นเวลาสั่งสร้างเครื่องก็จะสั่งผ่านตัวนี้ ในกรณที่ต้องการทำ HA MASTER_HOST จะถูกใช้เป็น load balance โดยใช้ร่วมกับ DNS name โดยการคุยกันระหว่าง MASTER_HOST และ worker (node ลูก) จะใช้ port 443 และมีการเข้ารหัสและยืนยันด้วย TLS Certificate ETCD_ENDPOINT : คือ บริการของ etcd service ซึ่งมีใน CoreOS Cluster ที่ติดตั้งไว้ ให้ใส่ไปให้หมดว่ามีเครื่องอะไรบ้าง คั่นด้วย , (ในที่นี้ไม่ได้ใช้ fleet สร้างเครื่อง หลังจากลงเสร็จจะใช้ kubectl สร้างแทน) POD_NETWORK : เช่น 10.2.0.0/16 ใช้สำหรับกำหนดวง IP ของ pod (pod คือ ชื่อเรียก container อาจจะแค่ 1 container เหรือเรียกเป็นกลุ่มของหลาย ๆ container ที่สร้างด้วย kubernetes) SERVICE_IP_RANGE : เช่น 10.3.0.0/24 ใช้สำหรับ service

Read More »

Kafka #01 Basic Installtion

Apache Kafka เป็น distributed streaming platform [1] กล่าวคือ สามารถ Publish และ Subscribe ข้อมูลแบบ Streaming ได้ คล้ายๆกับ Message Queue หรือ Enterprise Messaging System ระบบนี้ใช้ได้ทั้งเป็น Real-time Streaming Data Pipeline และ สร้าง Streaming Application ได้ Apache Kafka ออกแบบมาให้สามารถทำงานเป็นแบบ Cluster โดยเก็บข้อมูลเป็น Stream of Record ซึ่งจัดหมวดหมู่ในรูปของ Topics ข้อมูลแต่ละ Record ประกอบด้วบ Key, Value และ timestamp เอาเป็นว่า ระบบนี้เอาไว้สำหรับรองรับการส่งข้อมูลแนวๆ Streaming มาเพื่อทำการวิเคราะห์แบบ Real-Time แทนที่จะต้องบริหารเองก็แล้วกัน แถมด้วยความสามารถในการ Subscribe ข้อมูล สามารถย้อนไปดูข้อมูลก่อนหน้าได้ (ตามขอบเขตเวลาที่กำหนด) มาติดตั้งกัน บทความนี้ ทดสอบบน Ubuntu 16.04 ไป Download และ ติดตั้ง จาก https://www.apache.org/dyn/closer.cgi?path=/kafka/0.10.2.0/kafka_2.11-0.10.2.0.tgz ด้วยคำสั่ง wget http://www-eu.apache.org/dist/kafka/0.10.2.0/kafka_2.11-0.10.2.0.tgz tar -zxvf kafka_2.11-0.10.2.0.tgz cd kafka_2.11-0.10.2.0 Kafka ทำงานบน Zookeeper ดังนั้นให้เริ่มทำงานด้วยคำสั่ง bin/zookeeper-server-start.sh config/zookeeper.properties & แล้วจึง สั่ง Start Kafka bin/kafka-server-start.sh config/server.properties & ต่อไป Producer กับ Consumer จะติดต่อกันผ่าน Topic จึงต้องสร้าง topic ด้วยคำสั่งต่อไปนี้ bin/kafka-topics.sh –create –zookeeper localhost:2181 –replication-factor 1 –partitions 1 –topic test ซึ่งในที่นี้ จะได้ Topic ชื่อ test ทำงานบน Zookeeper บน Localhost ที่ Port 2181 ลองใช้คำสั่งต่อไปนี้เพื่อดู Topic ทั้งหมด bin/kafka-topics.sh –list –zookeeper localhost:2181 ทดลองส่งข้อมูลเข้าไปให้ Kafka ซึ่งจะทำงานที่ Localhost ที่ Port 9092 bin/kafka-console-producer.sh –broker-list localhost:9092 –topic test แล้วลองพิมพ์ข้อความอะไรลงไปดู เช่น Hello World This is a book Blah Blah ลองเปิดอีก Terminal ขึ้นมา แล้วใช้คำสั่งต่อไปนี้ bin/kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic test –from-beginning ก็จะเห็นได้ว่า สามารถเรียกดูสิ่งที่ส่งเข้าไปใน Topic “test” ตั้งแต่เริ่มต้นได้ ตรงนี้ยังไม่แปลกอะไร และไม่น่าตื่นเต้นอะไร บทความต่อไปจะกล่าวถึงการสร้างเป็น Cluster แล้วก็ทำงานกับ หลายๆ Producer และ หลายๆ Consumer พร้อมๆกัน   Reference https://kafka.apache.org/intro

Read More »

Spark #03: Query Apache Access Log with Spark SQL

ต่อจาก Spark #02: Cluster Installation ซึ่งทำให้เรามี Spark Cluster ที่พร้อมจะทำงานแบบ Distributed Computing แล้ว ขั้นตอนการติดตั้ง Hadoop Cluster อย่างง่าย ทำให้มี Hadoop HDFS เป็นพื้นที่จัดกับ Zeppelin #01 Installation ทำให้สามารถใช้งาน Spark ได้ง่ายขึ้น บทความนี้ จะกล่าวถึงการนำเข้าไฟล์ Apache Access Log เข้าไปเก็บไว้ใน Hadoop HDFS แล้ว ให้ Apache Spark Cluster เข้าไปค้นหาข้อมูล โดยใช้ภาษา SQL ผ่าน Spark SQL API นำ Apache Access Log เข้า HDFS ให้ Copy Apache Access Log ที่มีอยู่มาเก็บไว้ในเครื่องที่สามารถติดต่อ Hadoop HDFS ได้ (ในที่นี้ ชื่อไฟล์เป็น apache.access.log) ใช้คำสั่งต่อไป (แทน /test/ ด้วย Path ที่สร้างไว้ใน HDFS) hdfs dfs -copyFromLocal apache.access.log /test/ เมื่อไปดูผ่าน Web UI ของ Hadoop HDFS ก็จะเห็นไฟล์อยู่ดังนี้ วิธี Query ข้อมูลจาก Zeppelin ไปยัง Spark Cluster เปิด Zeppelin Web UI แล้วสร้าง Note ใหม่ โดยคลิกที่ Create new node แล้วใส่ชื่อ Note เช่น Query Apache Access Log ตั้ง Default Interpreter เป็น Spark แล้วคลิก Create Note ใส่ Code ต่อไปนี้ลงไป ด้านขวามือบน จะมีรูปเฟือง ให้คลิก แล้วเลือก Insert New แล้วใส่ข้อความนี้ลงไป จากนั้นคลิก Run all paragraphs ผลที่ได้ ตอนต่อไปจะมาอธิบายวิธีการเขียนคำสั่งครับ

Read More »

Zeppelin #01 Installation

Apache Zeppelin เป็น Web-Base Notebook สำหรับเป็นการเชื่อมต่อกับระบบ Data Analytic [1] สามารถใช้ทำ Data-Driven แบบ Interactive และยังสามารถใช้งานพร้อมๆกันหลายคนได้ รองรับการทำงานผ่านภาษา SQL, Scala และอื่นๆอีกมากมาย ในบทความนี้ จะแนะนำการติดตั้ง Apache Zeppelin 0.7.0 บน Ubuntu 16.04 ไปที่ http://zeppelin.apache.org/download.html เพื่อ Download ชุดติดตั้ง ซึ่งแบ่งออกเป็น แบบรวมทุก Interpreters ขนาด 710 MB หรือ จะเลือกเป็นแบบ ที่รองรับเฉพาะ Spark ขนาด 272 MB ซึ่งหากในอนาคตต้องการใช้ภาษาอื่นอีก ก็จะต้องติดตั้งเพิ่มเติม (แนะนำให้ใช้แบบรวม Interpreters) บน Ubuntu ที่จะใช้เป็น Zeppelin Server ใช้คำสั่งต่อไปนี้เพื่อ Download wget http://www-eu.apache.org/dist/zeppelin/zeppelin-0.7.0/zeppelin-0.7.0-bin-all.tgz ติดตั้ง Zeppelin (ต้องใช้ Java) ด้วยคำสั่งต่อไปนี้ sudo apt install default-jre tar -zxvf zeppelin-0.7.0-bin-all.tgz ; ln -s zeppelin-0.7.0-bin-all.tgz zeppelin Start Zeppelin cd zeppelin bin/zeppelin-daemon.sh start หากเรียบร้อยก็จะสามารถใช้งานผ่านทาง Web UI ที่ port: 8080 ได้ ในกรณีที่ติดตั้ง Zeppelin บนเครื่องเดียวกับ Spark Master ก็จะพบว่า Port ชนกัน (คือใช้ Web UI ที่ port 8080 เหมือนกัน) เราสามารถเปลี่ยน Web UI port ของ Zeppelin ได้โดยใช้คำสั่งต่อไปนี้ cp conf/zeppelin-site.xml.template conf/zeppelin-site.xml แล้วแก้ไขไฟล์ conf/zeppelin-site.xml แก้ไขค่า 8080 เป็น ค่าอื่น เช่น 8090 เป็นต้น <property> <name>zeppelin.server.port</name> <value>8080</value> <description>Server port.</description> </property> แล้วทำการ Start Zeppelin ใหม่ Reference: http://zeppelin.apache.org/

Read More »