หลังจากที่เราได้สร้าง application บน Openshift ตาม lab ที่แล้ว (Lab 2), ขั้นตอนต่อไป คือ เรามั่นใจได้อย่างไรว่า applications ของเรา มันทำงานได้ปกติ และ เราจะ access เข้าไปที่ applications ที่เรา deploy ขึ้นไป Openshift ได้อย่างไร
ต้องอย่าลืมว่า RBAC (Role Base Access Control) จะมากับ Openshift เป็น default นะครับ ฉะนั้น User ที่เราใช้ผ่าน cli oc ต้องมี permission ทำการสร้าง project, application และอื่นๆ ด้วยนะครับ จาก lab นี้ เราจะใช้ user = developer เป็นหลักนะครับ ดังนั้น เพื่อให้เราสามารถเห็นทุก projects และมีสิทธิ๋ในการสั่ง command ผ่าน CLI took ได้เปรียบเสมือน system:admin ได้นั้น เราต้องมีการปรับค่าให้ developer account ตามด้านล่าง
$ minishift addons install --defaults
$ minishift addons enable cluster-admin
$ oc adm policy --as system:admin add-cluster-role-to-user cluster-admin developer
oc login ผ่าน cmd/terminal มาแล้ว เราสามารถ deploy sample application จาก github ได้
$ oc login
Authentication required for https://192.168.99.100:8443 (openshift)
Username: developer
Password:
Login successful.
You don't have any projects. You can try to create a new project, by running
oc new-project <projectname>
ทำการสร้าง project ก่อนที่จะสร้าง app นะครับ
oc new-project nodejs-ex --display-name="nodejs" --description="Sample Node.js ex app"
เมื่อเราสั่ง oc new-app
build ก็ถูกทำงาน (คล้ายๆ กับ docker build), แต่แตกต่างกันตรงที่ build จะรัน background และเราก็จะค่อยเห็นว่า cmd/terminal ไมค่อยพิมพ์อะไรผ่าน console ออกมา
ดังนั้น เพื่อทำการ check output ให้ใช้คำสั่งด้านล่าง
$ oc status
อันดับต่อไป เรามาสร้าง app โดยการดึง source code จาก github มา deploy บน Openshift:
$ oc new-app https://github.com/sclorg/nodejs-ex -l name=myapp
warning: Cannot check if git requires authentication.
--> Found image 93de123 (14 months old) in image stream "openshift/nodejs" under tag "10" for "nodejs"
Node.js 10.12.0
---------------
Node.js available as docker container is a base platform for building and running various Node.js applications and frameworks. Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
Tags: builder, nodejs, nodejs-10.12.0
* The source repository appears to match: nodejs
* A source build using source code from https://github.com/sclorg/nodejs-ex will be created
* The resulting image will be pushed to image stream tag "nodejs-ex:latest"
* Use 'start-build' to trigger a new build
* WARNING: this source repository may require credentials.
Create a secret with your git credentials and use 'set build-secret' to assign it to the build config.
* This image will be deployed in deployment config "nodejs-ex"
* Port 8080/tcp will be load balanced by service "nodejs-ex"
* Other containers can access this service through the hostname "nodejs-ex"
--> Creating resources with label name=myapp ...
imagestream.image.openshift.io "nodejs-ex" created
buildconfig.build.openshift.io "nodejs-ex" created
deploymentconfig.apps.openshift.io "nodejs-ex" created
service "nodejs-ex" created
--> Success
Build scheduled, use 'oc logs -f bc/nodejs-ex' to track its progress.
Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
'oc expose svc/nodejs-ex'
Run 'oc status' to view your app.
และทำการตรวจสอบสถานะ:
$ oc status
In project nodejs (nodejs-echo) on server https://192.168.64.11:8443
svc/nodejs-ex - 172.30.6.48:8080
dc/nodejs-ex deploys istag/nodejs-ex:latest <-
bc/nodejs-ex source builds https://github.com/sclorg/nodejs-ex on openshift/nodejs:10
build #1 running for 36 hours
deployment #1 waiting on image or update
2 infos identified, use 'oc status --suggest' to see details.
จาก output เราจะเห็นว่า service endpoint ที่เราเอาไว้ใช้เข้าถึง app คือ 172.30.6.48:8080
และเรายังเห็น build type ที่ใช้สร้าง app อีกด้วย นั่นก็คือ openshift/nodejs:10
ท้ายที่สุด เราเห็นอีกว่า app ของเรามันยังไม่พร้อมใช้งาน ยังรอ image upload อยู่ ดังนั้น ถ้าเราต้องการดู build logs เพิ่มเติม เราสามารถใช้ command ด้านล่าง
# get all builds
$ oc get build
NAME TYPE FROM STATUS STARTED DURATION
nodejs-ex-1 Source Git@e59fe75 Complete 32 minutes ago 32s
# check logs from the specific build
$ oc logs build/<app-name>-<build-no>
จากตัวอย่าง เราจะเห็นว่าตอนนี้ เรามีเพียงแค่ 1 build เท่านั้น เราลองดู logs จาก build นี้โดย
$ oc logs build/nodejs-ex-1
ใน Kubernetes, เราตรวจสอบ running applications ได้ และ Openshift ก็ได้รับคุณสมบัติเหล่านั้นมาด้วยเหมือนกัน แต่ใน Openshift เราจะใช้ oc
command:
$ oc get pod
NAME READY STATUS RESTARTS AGE
nodejs-ex-1-build 0/1 Completed 0 13m
nodejs-ex-1-hx6v9 1/1 Running 0 12m
เราจะเห็นว่า pod nodejs-ex-1-build
ที่ถูกสร้างขึ้นมาเพื่อทำการ build โดยเฉพาะได้ถูกทำลาย หลังจากที่มันทำงานเสร็จสิ้นแล้ว. ส่วน pod nodejs-ex-1-hx6v9
คือ pod ที่มี application ที่เรา deploy ขึ้นไปทำงานอยู่
ถ้าเราต้องการดู deployments ทั้งหมด เราสามารถใช้คำสั่งด้านล่าง
$ oc get dc
NAME REVISION DESIRED CURRENT TRIGGERED BY
nodejs-ex 1 1 1 config,image(nodejs-ex:latest)
สำหรับการตรวจสอบ services นั้น ถ้าเป้น Kubernetes เราก็จะใช้ kubectl get svc
หรือ kubectl get service
ส่วนสำหรับใน Openshift เราก็ใช้ oc
$ oc get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nodejs-ex ClusterIP 172.30.6.48 <none> 8080/TCP 14m
เราจะเห็นว่า service ที่เรามีอยู ณ ตอนนี้คือ nodejs-ex
มันได้ถูกมอบหมาย IP Address แต่ว่าเป็น Internal เท่านั้น
สำหรับ lab นี้ เราจะเห็นว่าการตรวจสอบสถานะของ applications, builds, pods, deployments และ services ผ่านทาง CLI tool (cmd/terminal) ก็ทำได้ง่าย ไม่ยาก ซึ่ง Openshift UI ก็มี features ทั้งหมดนี้มาให้อยู่แล้ว สำหรับใครที่มองว่าการใช้งาน CLI tool ค่อนข้างวุ่นวาย สามารถทดลองใช้ UI Console ได้นะครับ จะง่ายกว่ามาก
ส่วนอันดับถัดไป เราจะเห็นว่า ณ ตอนนี้ Application ของเรามันทำงานแล้ว แล้วเราจะเข้าถึง application ของเราอย่างไน ในเมื่อ service มันมีมาแต่ internal IP address ดังนั้นเราเริ่ม Lab ต่อไปนะครับ สำหรับการ expose service ไปยังภายนอก Openshift cluster final Lab (Lab 4)