DevOps方法論
:::tips
DevOps方法論的主要來源是Agile, Lean 和TOC, 獨創的方法論是持續交付。
:::
DevOps 是一種軟體開發方法,涉及持續開發,持續測試,持續整合,部署和監視。這一系列過程跨越了傳統上孤立的開發和運營團隊,DevOps 試圖消除它們之間的障礙。
因此,DevOps 工程師基本上與 Development 和 Operations 團隊合作,DevOps 是這兩個主要部分之間的連結。
DevOps經典圖書
- 《DevOps實踐指南》
- 《持續交付:釋出可靠軟體的系統方法》&《持續交付 2.0》
- 《鳳凰專案》
- 《Effective DevOps》
必備技能
DevOps 包括諸如構建自動化、CI/CD、基礎架構即程式碼等概念,並且有許多工具可以實現這些概念。由於這些工具數量眾多,因此可能會造成混亂和壓倒性的結果。
最重要的是要了解概念,併為每個類別的學習找一種特定的工具。例如,當你已經知道什麼是 CI/CD 並知道如何使用 Jenkins 時,也將很容易學習同型別的其他替代工具。
接下來讓就來看看學習 DevOps 需要掌握哪些技能。
1)軟體開發的概念
作為一名 DevOps 工程師,你不會直接對應用程式進行程式設計,但是當你與開發團隊緊密合作以改善和自動化他們的任務時,你需要了解以下概念:
- 開發人員的工作方式
- 他們正在使用哪個 git 工作流程
- 如何配置應用程式
- 自動化測試
2)作業系統
作為 DevOps 工程師,你負責準備在作業系統上部署應用程式的所需要的基礎結構環境。並且由於大多數伺服器是 Linux 伺服器,因此你需要了解 Linux 作業系統,並善於使用命令列,所以你需要知道:
- 基本的 Shell 命令
- Linux 檔案系統
- 管理伺服器的基礎知識
- SSH 金鑰管理
- 在伺服器上安裝不同的工具
3)網路與安全
你還需要了解網路和安全性的基礎知識才能配置基礎架構,例如:
- 配置防火牆以保護應用程式
- 瞭解 IP 地址,埠和 DNS 的工作方式
- 負載均衡器
- 代理伺服器
- HTTP/HTTPS
但是,要在 DevOps 和 IT Operations 之間劃清界線,你不是系統管理員。因此,在這裡不需要高階知識,理解和了解基本知識就夠了。IT 方面是這些 SysAdmins,Networking 或 Security Engineers 人的專長。
4)容器化
隨著容器成為新標準,你可能會將應用程式作為容器執行,這意味著你需要大致瞭解:
- 虛擬化的概念
- 容器的概念
- 學習哪個工具?Docker - 當今最受歡迎的容器技術
5)持續整合和部署
在 DevOps 中,所有程式碼更改(例如開發人員的新功能和錯誤修復)都應整合到現有應用程式中,並以自動化方式連續地部署到終端使用者。因此,建立完整的 CI/CD 管道是 DevOps 工程師的主要任務和職責。
在完成功能或錯誤修正後,應自動觸發在 CI 伺服器(例如 Jenkins )上執行的管道,該管道:
- 執行測試
- 打包應用程式
- 構建 Docker 映象
- 將 Docker Image 推送到工件儲存庫,最後
- 將新版本部署到伺服器(可以是開發,測試或生產伺服器)
因此,你需要在此處學習技能:
- 設定 CI/CD 伺服器
- 構建工具和程式包管理器工具以執行測試並打包應用程式
- 配置工件儲存庫(例如 Nexus,Artifactory)
當然,可以整合更多的步驟,但是此流程代表 CI/CD 管道的核心,並且是 DevOps 任務和職責的核心。
學習哪個工具?Jenkins 是最受歡迎的人之一。其他:Bamboo,Gitlab,TeamCity,CircleCI,TravisCI。
6)雲提供商
如今,許多公司正在使用雲上的虛擬基礎架構,而不是管理自己的基礎架構。這些是基礎架構即服務(IaaS)平臺,可提供一系列服務,例如備份,安全性,負載平衡等。
因此,你需要學習雲平臺的服務。例如。對於 AWS,你應該瞭解以下基本知識:
- IAM 服務-管理使用者和許可權
- VPC 服務-你的專用網路
- EC2 服務-虛擬伺服器
- AWS 提供了更多的服務,但是你只需要瞭解你實際需要的服務即可。例如,當 K8s 叢集在 AWS 上執行時,你還需要學習 EKS 服務。
AWS 是功能最強大,使用最廣泛的一種,但也是最困難的一種。
學習哪個工具?AWS 是最受歡迎的一種。其他熱門:Azure,Google Cloud,阿里雲,騰訊雲。
7)容器編排
如前所述,容器已被廣泛使用,在大公司中,成百上千個容器正在多臺伺服器上執行,這意味著需要以某種方式管理這些容器。
為此目的,有一些容器編排工具,而最受歡迎的是 Kubernetes。因此,你需要學習:
- Kubernetes 如何工作
- 管理和管理 Kubernetes 叢集
- 並在其中部署應用程式
學習哪個工具?Kubernetes - 最受歡迎。
8)監視和日誌管理
軟體投入生產後,對其進行監視以跟蹤效能,發現基礎結構以及應用程式中的問題非常重要。因此,作為 DevOps 工程師的職責之一是:
- 設定軟體監控
- 設定基礎架構監控,例如用於你的 Kubernetes 叢集和底層伺服器。
學習哪個工具?Prometheus, Grafana...
9)基礎設施即程式碼
手動建立和維護基礎架構非常耗時且容易出錯,尤其是當你需要複製基礎架構時,例如用於開發,測試和生產環境。
在 DevOps 中,希望儘可能地自動化,那就是將“基礎結構即程式碼(Infrastructure as Configuration)”引入其中。因此使用 IaC ,我們將使用程式碼來建立和配置基礎結構,你需要了解兩種 IaC 方式:
- 基礎設施配置
- 配置管理
使用這些工具,可以輕鬆地複製和恢復基礎結構。因此,你應該在每個類別中都知道一種工具,以使自己的工作更有效率,並改善與同事的協作。
學習哪個工具?
基礎架構設定:Terraform 是最受歡迎的一種。配置管理:Ansible,Puppet,Chef。
10)指令碼語言
作為 DevOps 工程師就常見的工作就是編寫指令碼和小型的應用程式以自動化任務。為了能夠做到這一點,你需要了解一種指令碼或程式語言。
這可能是特定於作業系統的指令碼語言,例如 bash 或 Powershell。
還需要掌握一種獨立於作業系統的語言,例如 Python 或 Go。這些語言功能更強大,更靈活。如果你善於使用其中之一,它將使你在就業市場上更具價值。
學習哪個工具?Python:目前是最需要的一個,它易於學習,易於閱讀並且具有許多可用的庫。其他:Go,NodeJS,Ruby。
11)版本控制
上述所有這些自動化邏輯都作為程式碼編寫,使用版本控制工具(例如Git)來管理這些程式碼和配置檔案。
學習哪個工具?Git - 最受歡迎和廣泛使用。
網站和部落格
- DEOS :DevOps 國際峰會,以案例總結著稱;
- DevOpsDays:大名鼎鼎的 DevOpsDays 社群;
- TheNewStack :綜合性網站,盛產高質量的電子書;
- DevOps.com :綜合性網站;
- DZone : 綜合性網站,盛產高質量的電子書;
- Azure DevOps:綜合性網站,盛產高質量的電子書;
- Martin Fowler :Martin Fowler 的部落格;
- CloudBees Devops :Jenkins 背後的公司的部落格