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,我想在這次挑戰還是以熟悉工具為主。關於考試所涵蓋的工具種類,前面的應試能力目標中大致都提過了,不過我明天還是花點篇幅先簡單的看一下這些工具。