DevOps 實際上是什么意思??
DevOps 是一種軟件開發(fā)方法,涉及持續(xù)開發(fā),持續(xù)測試,持續(xù)集成,部署和監(jiān)視。這一系列過程跨越了傳統(tǒng)上孤立的開發(fā)和運營團隊,DevOps 試圖消除它們之間的障礙。
因此,DevOps 工程師基本上與 Development 和 Operations 團隊合作,DevOps 是這兩個主要部分之間的鏈接。
DevOps 包括諸如構(gòu)建自動化、CI/CD、基礎(chǔ)架構(gòu)即代碼等概念,并且有許多工具可以實現(xiàn)這些概念。由于這些工具數(shù)量眾多,因此可能會造成混亂和壓倒性的結(jié)果。
最重要的是要了解概念,并為每個類別的學(xué)習(xí)找一種特定的工具。例如,當(dāng)你已經(jīng)知道什么是 CI/CD 并知道如何使用 Jenkins 時,也將很容易學(xué)習(xí)同類型的其他替代工具。
接下來讓就來看看學(xué)習(xí) DevOps 需要掌握哪些技能。
1)軟件開發(fā)的概念
作為一名 DevOps 工程師,你不會直接對應(yīng)用程序進行編程,但是當(dāng)你與開發(fā)團隊緊密合作以改善和自動化他們的任務(wù)時,你需要了解以下概念:
- 開發(fā)人員的工作方式
- 他們正在使用哪個 git 工作流程
- 如何配置應(yīng)用程序
- 自動化測試
2)操作系統(tǒng)
作為 DevOps 工程師,你負(fù)責(zé)準(zhǔn)備在操作系統(tǒng)上部署應(yīng)用程序的所需要的基礎(chǔ)結(jié)構(gòu)環(huán)境。并且由于大多數(shù)服務(wù)器是 Linux 服務(wù)器,因此你需要了解 Linux 操作系統(tǒng),并善于使用命令行,所以你需要知道:
- 基本的 Shell 命令
- Linux 文件系統(tǒng)
- 管理服務(wù)器的基礎(chǔ)知識
- SSH 密鑰管理
- 在服務(wù)器上安裝不同的工具
3)網(wǎng)絡(luò)與安全
你還需要了解網(wǎng)絡(luò)和安全性的基礎(chǔ)知識才能配置基礎(chǔ)架構(gòu),例如:
- 配置防火墻以保護應(yīng)用程序
- 了解 IP 地址,端口和 DNS 的工作方式
- 負(fù)載均衡器
- 代理服務(wù)器
- HTTP/HTTPS
但是,要在 DevOps 和 IT Operations 之間劃清界線,你不是系統(tǒng)管理員。因此,在這里不需要高級知識,理解和了解基本知識就夠了。IT 方面是這些 SysAdmins,Networking 或 Security Engineers 人的專長。
4)容器化
隨著容器成為新標(biāo)準(zhǔn),你可能會將應(yīng)用程序作為容器運行,這意味著你需要大致了解:
- 虛擬化的概念
- 容器的概念
- 學(xué)習(xí)哪個工具?Docker - 當(dāng)今最受歡迎的容器技術(shù)
5)持續(xù)集成和部署
在 DevOps 中,所有代碼更改(例如開發(fā)人員的新功能和錯誤修復(fù))都應(yīng)集成到現(xiàn)有應(yīng)用程序中,并以自動化方式連續(xù)地部署到最終用戶。因此,建立完整的 CI/CD 管道是 DevOps 工程師的主要任務(wù)和職責(zé)。
在完成功能或錯誤修正后,應(yīng)自動觸發(fā)在 CI 服務(wù)器(例如 Jenkins )上運行的管道,該管道:
- 運行測試
- 打包應(yīng)用程序
- 構(gòu)建 Docker 鏡像
- 將 Docker Image 推送到工件存儲庫,最后
- 將新版本部署到服務(wù)器(可以是開發(fā),測試或生產(chǎn)服務(wù)器)
因此,你需要在此處學(xué)習(xí)技能:
- 設(shè)置 CI/CD 服務(wù)器
- 構(gòu)建工具和程序包管理器工具以執(zhí)行測試并打包應(yīng)用程序
- 配置工件存儲庫(例如 Nexus,Artifactory)
當(dāng)然,可以集成更多的步驟,但是此流程代表 CI/CD 管道的核心,并且是 DevOps 任務(wù)和職責(zé)的核心。
學(xué)習(xí)哪個工具?Jenkins 是最受歡迎的人之一。其他:Bamboo,Gitlab,TeamCity,CircleCI,TravisCI。
6)云提供商
如今,許多公司正在使用云上的虛擬基礎(chǔ)架構(gòu),而不是管理自己的基礎(chǔ)架構(gòu)。這些是基礎(chǔ)架構(gòu)即服務(wù)(IaaS)平臺,可提供一系列服務(wù),例如備份,安全性,負(fù)載平衡等。
因此,你需要學(xué)習(xí)云平臺的服務(wù)。例如。對于 AWS,你應(yīng)該了解以下基本知識:
- IAM 服務(wù)-管理用戶和權(quán)限
- VPC 服務(wù)-你的專用網(wǎng)絡(luò)
- EC2 服務(wù)-虛擬服務(wù)器
- AWS 提供了更多的服務(wù),但是你只需要了解你實際需要的服務(wù)即可。例如,當(dāng) K8s 集群在 AWS 上運行時,你還需要學(xué)習(xí) EKS 服務(wù)。
AWS 是功能最強大,使用最廣泛的一種,但也是最困難的一種。
學(xué)習(xí)哪個工具?AWS 是最受歡迎的一種。其他熱門:Azure,Google Cloud,阿里云,騰訊云。
7)容器編排
如前所述,容器已被廣泛使用,在大公司中,成百上千個容器正在多臺服務(wù)器上運行,這意味著需要以某種方式管理這些容器。
為此目的,有一些容器編排工具,而最受歡迎的是 Kubernetes。因此,你需要學(xué)習(xí):
- Kubernetes 如何工作
- 管理和管理 Kubernetes 集群
- 并在其中部署應(yīng)用程序
學(xué)習(xí)哪個工具?Kubernetes - 最受歡迎。
8)監(jiān)視和日志管理
軟件投入生產(chǎn)后,對其進行監(jiān)視以跟蹤性能,發(fā)現(xiàn)基礎(chǔ)結(jié)構(gòu)以及應(yīng)用程序中的問題非常重要。因此,作為 DevOps 工程師的職責(zé)之一是:
- 設(shè)置軟件監(jiān)控
- 設(shè)置基礎(chǔ)架構(gòu)監(jiān)控,例如用于你的 Kubernetes 集群和底層服務(wù)器。
學(xué)習(xí)哪個工具?Prometheus, Grafana...
9)基礎(chǔ)設(shè)施即代碼
手動創(chuàng)建和維護基礎(chǔ)架構(gòu)非常耗時且容易出錯,尤其是當(dāng)你需要復(fù)制基礎(chǔ)架構(gòu)時,例如用于開發(fā),測試和生產(chǎn)環(huán)境。
在 DevOps 中,希望盡可能地自動化,那就是將“基礎(chǔ)結(jié)構(gòu)即代碼(Infrastructure as Configuration)”引入其中。因此使用 IaC ,我們將使用代碼來創(chuàng)建和配置基礎(chǔ)結(jié)構(gòu),你需要了解兩種 IaC 方式:
- 基礎(chǔ)設(shè)施配置
- 配置管理
使用這些工具,可以輕松地復(fù)制和恢復(fù)基礎(chǔ)結(jié)構(gòu)。因此,你應(yīng)該在每個類別中都知道一種工具,以使自己的工作更有效率,并改善與同事的協(xié)作。
學(xué)習(xí)哪個工具?
基礎(chǔ)架構(gòu)設(shè)置:Terraform 是最受歡迎的一種。配置管理:Ansible,Puppet,Chef。
10)腳本語言
作為 DevOps 工程師就常見的工作就是編寫腳本和小型的應(yīng)用程序以自動化任務(wù)。為了能夠做到這一點,你需要了解一種腳本或編程語言。
這可能是特定于操作系統(tǒng)的腳本語言,例如 bash 或 Powershell。
還需要掌握一種獨立于操作系統(tǒng)的語言,例如 Python 或 Go。這些語言功能更強大,更靈活。如果你善于使用其中之一,它將使你在就業(yè)市場上更具價值。
學(xué)習(xí)哪個工具?Python:目前是最需要的一個,它易于學(xué)習(xí),易于閱讀并且具有許多可用的庫。其他:Go,NodeJS,Ruby。
11)版本控制
上述所有這些自動化邏輯都作為代碼編寫,使用版本控制工具(例如Git)來管理這些代碼和配置文件。
學(xué)習(xí)哪個工具?Git - 最受歡迎和廣泛使用。
