LPI DevOps Tools Engineer 證照介紹(1)

Linux Professional Institute (LPI) 是一間提供開源軟體認證的非營利機構,它所舉辦的 LPIC 系列證照,是目前世界最知名的 Linux 非特定發行版本 (vendor-neutral) 認證。隨著 DevOps 的浪潮,LPI 在一年前的今天 (2017 年 10 月 16日) 正式推出了 DevOps Tools Certification。因為自己的工作職務算是維運人員 (Ops) ,再加上想去考張技術證照,因此這次挑戰我選擇了這個主題,嘗試以三十天的時間準備這張證照,並將學習的過程記錄下來。

在正式開始之前,先來介紹一下這張認證的相關資訊,包括要怎麼考、考些什麼等等。官方網站的介紹在這裡: http://www.lpi.org/our-certifications/lpic-ot-devops-overview,以下的部分將官網的情報整理並翻譯出來讓大家參考。

題型及考試方式:

LPI DevOps Tools Certification 目前的版本為 1.0,認證代碼為 701-100,報名考試不需任何身份資格。測驗方式和 LPI 其他多數認證相同,採筆試舉行,共有 60 道多選及填空題,所使用的語言為英文,考試時間 90 分鐘,認證有效期限 5 年。

接下來我們來看看這個認證所要測驗的目標能力及涵蓋範圍。

To receive the Linux Professional Institute DevOps Tools Engineer Certification the candidate must:

  • Have a working knowledge of DevOps-related domains such as Software Engineering and Architecture, Container and Machine Deployment, Configuration Management and Monitoring.
  • Have proficiency in prominent free and open source utilities such as Docker, Vagrant, Ansible, Puppet, Git, and Jenkins.

要得到這張認證,必須要有 DevOps 相關領域的知識,像是軟體工程架構、容器及機器的部署、設置、管理與監控,並熟悉相關的開源工具,例如 Docker、Vagrant、Ansible、Puppet、Git 和 Jenkins。

接下來官網更詳細的介紹了這個認證所涵蓋的主題、目標及比重配分(括號內的數字),我們來看一下官網的說明。

Topic 701: 軟體工程 Software Engineering (18)

701.1 現代軟體開發 Modern Software Development (6)

  • 瞭解並設計基於服務的應用程式 (service based application)
  • 瞭解常用的 API 概念及標準
  • 瞭解資料倉儲 (data storage)、服務狀態 (service status) 以及 session 處理
  • 設計能於容器 (container) 中運行的軟體
  • 設計能於雲端環境部署的軟體
  • 知道單層 (monothilic)、遺留 (legacy) 軟體在移轉及整合過程中的風險
  • 瞭解常見的應用程式安全風險及如何減輕
  • 瞭解敏捷軟體開發的概念
  • 瞭解 DevOps 的概念及對軟體開發人員、維運人員的影響

701.2 軟體標準元件及平台 Standard Components and Platforms for Software (2)

  • 物件儲存 (Object Storage) 的特性及概念
  • 關聯式及 No SQL 資料庫的特性及概念
  • 訊息仲介 (message broker) 及訊息佇列 (message queue) 的特性及概念
  • 大數據服務 (big data services) 的特性及概念
  • 應用程式執行期間 (application runtime) / 平台即服務 (PaaS) 的特性及概念
  • 內容傳遞網路 (content delivery network, CDN) 的特性及概念

701.3 源碼管理 Source Code Management (5)

  • 瞭解 Git 的概念及儲存庫 (repository) 的結構
  • 在 Git 儲存庫中管理檔案
  • 管理分支 (branch) 和標籤 (tag)
  • 使用遠端儲存庫、分支、子模組 (submodule) 工作
  • 合併檔案及分支
  • 知道 SVN、CVS,包括集中式 (centralized) 及分散式 (distributed) 源碼管理解決方案的概念

701.4 持續整合及交付 Continuous Integration and Continuous Delivery (5)

  • 瞭解持續整合及持續交付 (CI/CD) 的概念
  • 瞭解 CI/CD 管理的組成元件,包括建置 (build)、單元、整合及驗收 (acceptance) 測試、artifact[註] 管理、交付及部署
  • 瞭解部署的最佳實踐 (best practices)
  • 瞭解 Jenkins 的架構及特性,包括 Jenkins 插件 (plugin)、Jenkins API、通知及分散建置 (distributed build)
  • 在 Jenkins 中定義工作 (jobs) 並運行,包括參數處理
  • Fingerprinting、artifacts 和 artifacts 儲存庫
  • 瞭解 Jenkins 持續交付管線模型,並在 Jenkins 中實作宣告式 (declarative) 的持續交付管線
  • 知道可能的認證 (authentication) 和授權 (authorization) 模型
  • 瞭解管線插件
  • 瞭解 Jenkins 重要模組的特性,如 Copy Artifact 插件、Fingerprint 插件、Docker 管線、Docker 建置及發佈插件、Git 插件、Credential 插件
  • 知道 Artifactory 和 Nexus

Topic 702 – 容器管理 Container Management (16)

702.1 容器使用 Container Usage (7)

  • 瞭解 Docker 架構
  • 使用由 Docker Registry 取得的既存映像檔 (existing Docker image)
  • 建立 Dockerfile,並由 Dockerfile 建置映像檔
  • 上傳映像檔至 Docker registry
  • 操作並存取 Docker 容器
  • 將容器與 Docker 網路連接
  • 使用 Docker 卷宗作為容器共享及永久儲存

702.2 容器部署及編配 Container Deployment and Orchestration (5)

  • 瞭解 Docker Compose 的應用模型
  • 建立並運行 Docker Compose Files (版本3及之後)
  • 瞭解 Docker Swarm 模式的架構及功能
  • 在 Docker Swarm 中運行容器,包含服務、堆疊 (stack) 的定義以及 secrets 的使用
  • 瞭解 Kubernetes 的架構及應用模型
  • 定義並管理基於容器的 Kubernetes 應用,包含 Deployment、Service、ReplicaSet、Pod 的定義

702.3 容器設施 Container Infrastructure (4)

  • 使用 Docker Machine 設置 Docker host
  • 瞭解 Docker 網路概念,包括 overlay 網路
  • 建立並管理 Docker 網路
  • 瞭解 Docker 儲存的概念
  • 建立並管理 Docker 卷宗
  • 知道 Flocker 和 flannel
  • 瞭解服務探知 (service discovery) 的概念
  • CoreOS Container Linux、rkt 和 etcd 的基本特性知識
  • 瞭解容器虛擬化及容器映像的安全風險及如何減輕

Topic 703 – 機器部署 Machine Deployment (8)

703.1 虛擬機器部署 Virtual Machine Deployment (4)

  • 瞭解 Vagrant 架構及概念,包括儲存及網路
  • 從 Atlas 取得並使用 box
  • 建立及執行 Vagrantfile
  • 存取 Vagrant 虛擬機器
  • 在 Vagrant 虛擬機和 host 系統間共享並同步目錄
  • 瞭解 Vagrant provisioning,包括檔案、Shell、Ansible 和 Docker
  • 瞭解多台機器建置

703.2 雲端部署 Cloud Deployment (2)

  • 瞭解 cloud-init 的特性及概念,包含使用者資料 (user-data) 及初始化、設定 cloud-init
  • 使用 cloud-init 來建立檔案系統、調整大小 (resize) 及掛載,設定使用者帳戶,包含登入 credential 例如 SSH 金錀,以及由發行商儲存庫 (distribution’s repository) 安裝軟體包
  • 瞭解基礎設施即服務 (IaaS) 雲及運算實例虛擬化的特性及影響,例如快照 (snapshotting)、暫停、克隆 (cloning) 及資源限制

703.3 系統咉像檔創建 System Image Creation (2)

  • 瞭解 Packer 的功能及特性
  • 建立並維護樣板 (template) 檔案
  • 使用不同的 builder 從樣板建立映像檔

Topic 704 – 設置管理 Configuration Management (10)

704.1 Ansible (8)

  • 瞭解自動化系統設置及軟體安裝的原則
  • 建立並維護 inventory 檔案
  • 瞭解 Ansible 如何和遠端系統互動
  • 管理 Ansible SSH 登入 credential,包含使用非特權 (unprivileged) 的登入帳號
  • 建立、維護並執行 Ansible playbook,包括 task、handler、conditional、loop 和 register
  • 建立並使用變數
  • 使用 Ansible vaults 維護 secrets
  • 編寫 Jinja2 templates,包括使用 common filter、loop 和 conditional
  • 瞭解並使用 Ansible 角色 (role),並從 Ansible Galaxy 安裝 Ansible role
  • 瞭解並使用重要的 Ansible task,包括 file、copy、template、ini_file、lineinfile、patch、replace、user、group、command、shell、service、systemd、cron、apt、debconf、yum、git 及 debug
  • 知道 dynamic inventory
  • 知道非 Linux 系統的 Ansible 特性
  • 知道 Ansible 容器

704.2 其他設置管理工具 Other Configuration Management Tools (2)

  • Puppet 基本的特性及架構知識
  • Chef 基本的特性及架構知識

Topic 705 – 服務維運 Service Operation (8)

705.1 IT維運及監控 IT Operations and Monitoring (4)

  • 瞭解 IT 維運及服務 provisioning 的目標,包括非功能性質 (nonfunctional properties) 例如可用 (availability)、延遲 (latency)、響應 (responsiveness)
  • 瞭解並辨認出監控、量測服務技術性功能 (technical functionality) 的度量 (metric) 及指標 (indicator)
  • 瞭解並辨認出監控、量測服務邏輯性功能 (logical functionality) 的度量 (metric) 及指標 (indicator)
  • 瞭解 Prometheus 架構,包含 Exporter、Pushgateway、Alertmanager 及 Grafana
  • 使用 Prometheus 監控容器及微服務
  • 瞭解對 IT 基礎設施進行的 IT 攻擊原則
  • 瞭解保護 IT 基礎設施最重要的原則
  • 瞭解核心 IT 基礎設施的組成元件及其於部署中的角色

705.2 Log管理及分析 Log Management and Analysis (4)

  • 瞭解應用程式及系統 logging 如何運作
  • 瞭解 Logstash 的架構及功能,包括 log 訊息的生命週期及 Logstash 插件
  • 瞭解 Elasticsearch 和 Kibana 應用於 log 資料管理 (Elastic Stack) 之架構及功能
  • 設置 Logstash 以蒐集、正規化、轉化 (transform) 並儲存 log 資料
  • 設置 Syslog 和 Filebeat 以將 log 資料送往 Logstash
  • 設置 Logstash 以發送電子郵件警示
  • 瞭解應用程式對 log 管理的支援

費了一番氣力終於把應試目標能力看完了,其中有很多項目根本不知道是什麼,感覺起來要在三十天內瞭解這些主題是件挺有挑戰性的任務。先來思考一下要怎麼在三十天完成。

我的目標是通過考試,雖然考試範圍看起來很廣,但因為題數只有六十題,要分布在這麼多的主題上,我想考題應該會以重要且基礎的概念為主,(希望)不會過於艱澀。另外加上準備時間及個人能力不足,我想以「瞭解基本概念」以及「有用過這個工具」為原則,並參考上述官網列出的知識點,作為這三十天的準備方向。

回到上面的考試範圍,大致可分為理論及工具使用兩部分,理論的部分主要是 Topic 701 軟體工程,但看看其列出的知識點,範圍非常廣,除了 DevOps 外,還包括 Agile 敏捷開發、資料傳遞管理、現代化服務維運等主題。到底這些主題和 DevOps 的關聯性在那呢?我們先看一下中文維基百科 DevOps 這一條目的說明:

DevOps(Development和Operations的組合詞)是一種重視「軟體開發人員 (Dev) 」和「IT運維技術人員 (Ops) 」之間溝通合作的文化、運動或慣例。透過自動化「軟體交付」和「架構變更」的流程,來使得構建、測試、發布軟體能夠更加地快捷、頻繁和可靠。

我印象中 DevOps 此方法論一開始是為了弭平開發人員和維運人員之間的「衝突」而產生,例如:

  • 維運人員發現新上版的程式有問題,去問開發人員,開發人員說在開發環境中是沒問題的。
  • 開發人員一直開發新功能,一直出新版,維運人員卻擔心系統效能穩定度,不敢上新版。

後來就出現了各種方法來解決上述問題,例如使用虛擬化技術及設置管理工具來確保開發與生產環境的一致性,導入 CI/CD 流程,透過小幅度的變更及更完整的測試流程,降低程式上版所帶來的影響,或是使用自動部署、版本控制回溯,透過漸進式部署達到服務不中斷、有錯誤能回復先前可運行版本的能力,以減輕維運人員的負擔等等。

但無論 DevOps 究竟是什麼,我想對維運人員而言,維持服務的高可用性,可能是更重要的目標,這也是近來很夯的 Site Reliability Engineering 所著重的面向。面對服務資源轉向雲端,部署單位由實體機器走向虛擬機器再走向容器,以及程式上版愈來愈頻繁快速,現代的維運人員可能需要瞭解更多的工具、具備更多的技術。而前述提到的知識點,或許可以算是一種橫跨開發及維運的「跨界」能力,掌控資料流、強化資安能力、提昇系統穩定度、更快速地滿足使用者需等,都提供了維運人員新的學習思考方向。

雖然理論部分提到的知識點都是很值得學習研究的內容,但因為時間的限制,再加上這張證照的名稱是 DevOps Tools Certification,我想在這次挑戰還是以熟悉工具為主。關於考試所涵蓋的工具種類,前面的應試能力目標中大致都提過了,不過我明天還是花點篇幅先簡單的看一下這些工具。

Read more

世界越快心越慢

在晚飯後的休息時間,我特別享受在客廳瀏灠youtube上各樣各式創作者的影音作品。很大不同於傳統媒體,節目多是針對大多數族群喜好挑選的,在youtube上我會依心情看無腦的動畫、一些旅拍記錄、新聞時事談論。 尤其在看了大量的Youtube的分享後,我真的感受到會限制我的是我的無知,特別是那些我想都沒想過的實際應用,在學習後大大幫助到我的生活和工作層面。 休息在家時,我喜歡想一些沒做過的菜,動手去設計生活和工作上的解決方案,自己是真的很難閒著沒事做。 如創作文章,陪養新的習慣都能感覺到成長的喜悅,是不同於吃喝玩樂的快樂的。 創作不去限制固定的形式,文字是創作、影像聲音也是創作,記錄生活也是創作,我想留下的就是創造—》實現—》回憶,這樣子的循環過程,在留下的足跡面看到自己一路上的成長、失敗、絕望、重新再來。 雖然大部份的時候去做這些創作也不明白有什麼特別的意義,但不去做也不會留下什麼,所以呀不如反事都去試試看,也許能有不一樣的水花也許有意想不到的結果,投資自己永遠不會是失敗的決定,不是嗎?先問問自己再開始計畫下一步,未來沒人說得準。 像最近看youtube仍大一群人在為DOS開

By Phillips Hsieh

知識管理的三個步驟:一小時學會把知識運用到生活上

摘錄瓦基「閱讀前哨站」文章作為自己學習知識管理的內容 Part1「篩選資訊」 如何從海量資訊中篩選出啟發性、實用性和相關性的精華,讓你在學習過程中不再迷失方向。 1. 實用性 2. 啟發性 Part2「提高理解」 如何通過譬喻法和應用法,將抽象的知識與日常生活和工作緊密結合,建立更深刻的理解。 1. 應用法 2. 譬喻法 Part3「運用知識」 如何連結既有知識,跟自己感興趣的領域和專案產生關聯,讓你在運用知識的路途上游刃有餘。 1. 跟日常工作專案、人際活動產生連結 # 為什麼要寫日記? * 寫日記是為了忘記,忘卻瑣碎事情,保持專注力 * 寫日記就像在翻譯這個世界,訓練自己的解讀能力 * 不只是透過日記來記錄生活,而是透過日記來發展生活 #如何寫日記? * 不要寫流水帳式的日記,而是寫覆盤式的日記 當我們試著記錄活動和感受之間的關聯,有助於辦認出真正快樂的事 日記的記錄方式要以過程為主,而非結果 * 感恩日記的科學建議,每日感恩的案例

By Phillips Hsieh
2024年 3月30日 14屆美利達環彰化百K

2024年 3月30日 14屆美利達環彰化百K

這是場半小時就被秒報名額滿的經典賽事, 能順利出賽實屬隊友的功勞, 這次的準備工作想試試新買的外胎, 因為是無內胎用的外胎, 特別緊超級難安裝的, 問了其他朋友才知道, 要沾上肥皂水才容易滑入車框。 一早四點起床準備, 五點集合備好咖啡在車上飲用, 約了六點在彰化田尾鄉南鎮國小, 整好裝四人一起出發前往會場。 被排在最後一批出發, 這次的路線會繞行的員林148上139縣道, 其實在早上五點多天就開始有點飄雨, 大伙就開始擔心不會要雨戰吧! 果不其然才出發準備上148爬坡雨勢越來越大, 戴著防風眼鏡的我在身體的熱氣加上雨水冷凝效果下, 鏡面上滿是霧氣肉眼可視距離才剩不到五公尺, 只能緊依前前方的車友幫忙開路, 之後洪大跟上來我立馬請求他幫忙開路, 上了139停下車把防風眼鏡收起來, 反正下雨天又陰天完全用不到太陽眼鏡了。 雨是邊下邊打雷, 大伙都在這條139上一台一台單車好像避電針, 一時有點害怕不然想平時沒做什麼壞事, 真打到自己就是天意了。 下了139雨勢開始變小, 大伙的速度開始有所提昇, 開高鐵列車的時機己成熟, 物色好列車就跟好跟滿。 最後找了一隊似乎整團有固定在練

By Phillips Hsieh
2023 12月9號 美利達單車嘉年華

2023 12月9號 美利達單車嘉年華

第二次參加美利達環南投賽事, 還記得去年第一次參加這美利達環南投, 還特地提前一天跟車友在魚池住了一晚。 這回用上了剛在7月份剛安裝的車頂架, 安裝了二種不同的攜車架, 都樂這邊可以不用拆車輪直上車頂, YAKIMA這邊選了經濟的款式, 折掉前輪利用前叉固定在攜車架上。 約了唯一一位一起參加的朋友, 二人一早四點約見面, 幫朋友帶上了拿鐵咖啡, 開上日月潭在水社碼頭停好車, 騎往向山遊客中心, 路過美麗的日月潭簡直不要太美了拍一張。 抵達會場己是人山人海了, 跟著大伙排隊順便也看網紅也欣賞名車。 出發就先沿著日月潭順時針騎, 騎到玄裝寺很急停下來上一下廁所, 比賽時都會尿都特別的滿, 一方面是比較緊張,一方面是特別興奮。 這時己經跟車友失散了, 只能獨推沿路看有沒有車友可以一起組隊的, 很可惜在山區大家的實力不一只求平安順騎了, 原則就是有補給就停有食物就吃。 下到水里人群再次聚集起來, 光等紅綠燈就是一條車龍。 騎行了一大圈水里再回到131縣道, 這時背後傳來熟悉的聲音叫菲哥, 終於跟車友重新集合接下來就一路邊聊邊騎。 最後來幾張專業攝影師拍攝的照片 回到終點台上

By Phillips Hsieh