Ansible 作為開源自動化工具,能有效簡化 Kubernetes 叢集的管理流程。本文不僅涵蓋 Ansible 的基本語法和使用方法,更探討如何在 Kubernetes 環境中應用 Ansible,包含容器管理、應用程式佈署、控制平面維護等導向。從基礎的 Ansible Playbook 撰寫到進階的 Kubernetes 資源管理,本文提供循序漸進的指引和實務案例,適合不同程度的技術人員學習。此外,本文也涵蓋了公有雲整合和企業級 Ansible 自動化平台的相關內容,讓讀者能將 Ansible 應用於更複雜的生產環境。
Ansible 自動化技術:Kubernetes 叢集管理
前言
本文旨在引導讀者使用 Ansible 開源技術自動化 Kubernetes 叢集的過程。對於想要了解 Ansible 技術的 IT 專業人員,包括 Kubernetes、Linux 和 Windows 系統管理員、DevOps 專業人員、思想領袖和基礎設施即程式碼(IaC)愛好者,本文提供了無術語解釋的詳細。
本文內容
本文涵蓋以下主題的深入內容:
- 針對初學者和經驗豐富的使用者的 Ansible 程式碼語言例項
- 最新版本的 Ansible 安裝
- 使用 Ansible 進行容器管理(Docker 和 Podman)
- 使用 Ansible 管理 Kubernetes 基礎設施的例項
- 常見錯誤的故障排除
開發環境需求
要充分利用本文,您需要具備以下基本環境:
- 文字編輯器:根據終端(如 VIM、Emacs、Nano、Pico 等)或根據 GUI(如 VS Code、Atom、Geany 等)
- 安裝了
ansible或ansible-core軟體包的工作站 - Kubernetes 或 OpenShift 叢集
本文使用的約定
本文是一本實用,包含大量例項和終端命令,還有一些 Ansible 語言程式碼樣本。Ansible 語言程式碼主要使用 YAML 和 INI 格式。
程式碼範例
---
# YAML 檔案示例
Ansible 語言採用 YAML 格式編寫,這是一種人類可讀的資料序列化語言,在組態檔案中極為流行。
為何選擇 Ansible?
基礎設施和營運(I&O)長官者將 Ansible 平台視為實施基礎設施即程式碼(IaC)、組態即程式碼(CaC)、策略即程式碼(PaC)、程式碼Pipeline、協調(K8s)、DevSecOps、自癒基礎設施和事件驅動自動化方法的關鍵工具。
本文目標
透過本文,您將學習如何使用 Ansible 開源自動化技術提高生產力和效率,以佈署大規模、雲原生的應用程式和服務。容器技術革新了 IT 產業,但僅憑容器執行時引擎(如 Docker 和 Podman)不足以處理現代龐大的工作負載。Kubernetes 的出現彌補了這一不足。
Kubernetes 的優勢
Kubernetes 應用程式設計為微服務,封裝在容器中,並佈署在混合雲中的多個雲平台上,以服務全球客戶。您還可以透過滾動更新、金絲雀發布和藍綠佈署等方式,在不影響使用者效能的前提下升級應用程式和服務。
結語
本文是電腦工程師和長官者的寶貴資源,他們深信創新、自動化和加速是推動未來業務蓬勃發展的關鍵。透過逐步改進和養成使用自動化的良好習慣,您可以建立一個成功的基礎設施。
重點回顧:
- Ansible 在 Kubernetes 自動化管理中的作用
- 使用 Ansible 進行容器管理和 Kubernetes 基礎設施管理的最佳實踐
- 如何排除常見錯誤並最佳化自動化流程
隨著技術的不斷進步,Ansible 和 Kubernetes 將繼續在自動化和容器協調領域發揮重要作用。掌握這些技術,將使您在 IT 行業中保持競爭優勢。
#### 內容解密:
本章節主要介紹了 Ansible 在自動化 Kubernetes 叢集管理中的應用,以及本文的內容和結構安排。透過閱讀本文,讀者將能夠深入瞭解 Ansible 的使用方法,並掌握 Kubernetes 自動化管理的關鍵技術。
Ansible 與 Kubernetes 自動化技術
前言
現代 IT 基礎設施的組織方式在組織內部及其與客戶和合作夥伴之間的互動中扮演著至關重要的角色。本文旨在引導讀者瞭解如何利用 Ansible 自動化平台來管理 Kubernetes(K8s)基礎設施。內容涵蓋了八個章節,並包含了豐富的程式碼範例和終端機命令以驗證結果。
本文結構
第一章:現代 IT 基礎設施與 Kubernetes 簡介
本章節探討了現代 IT 基礎設施的組織方式,並介紹了 Kubernetes 的歷史,從最初的 Google 專案到後來的 CNCF(雲原生計算基金會)。此外,還介紹了 Kubernetes 的著名版本,如 Red Hat OpenShift、Amazon EKS 等公有雲供應商。透過一個使用 Python 語言編寫的「Hello App」例項,展示瞭如何將應用程式容器化(使用 Fedora、Ubuntu、Alpine Linux)並在 Kubernetes 上執行。
第二章:深入瞭解 Ansible 語言
本章節探討了 Ansible 語言的架構,包括如何設定目標節點、清單(inventories)、劇本(playbooks)、變數(variables)、過濾器(filters)、條件陳述式(conditionals)、處理器(handlers)、迴圈(loops)、魔法變數(magic variables)、金函式庫(vaults)、範本(templates)、外掛(plugins)、角色(roles)以及集合(collections)。
第三章:容器技術自動化
本章節主要關注容器技術,包括如何在不同的作業系統上自動化安裝 Docker,如何使用 Linux 上的 Flatpack 和 Snap 技術,以及如何將流行的網頁伺服器 Apache 以容器化的方式佈署在 Debian/Ubuntu 上。這些操作都透過 Docker 和 Red Hat Enterprise Linux 搭配 Podman 執行時引擎來實作。
第四章:深入 Kubernetes
本章節詳細介紹了 Kubernetes,包括控制平面和資料平面的區別,以及如何使用 kubectl 工具。此外,還涵蓋瞭如何使用虛擬機器、Raspberry Pi、Minikube、Kubespray、Kubeadm 和 OpenShift Local 來建立實驗環境。並且,介紹瞭如何組態 Ansible 與 Kubernetes 互動,以及如何排除常見錯誤。本章節包含大量 Ansible 劇本程式碼,用於建立和報告名稱空間、佈署、Pod、金鑰和持久性儲存區等。
第五章:建置與佈署微服務應用程式
本章節講解了如何使用 Spring 技術建置一個網頁、RESTful 的 Java 微服務應用程式,並將其佈署為容器化的映像檔,使用 Tomcat 網頁伺服器。此外,還介紹瞭如何自動化佈署無狀態(例如 PHP Guestbook 應用程式搭配 Redis)和有狀態(例如 WordPress 和 MySQL 搭配持久性儲存區)的應用程式到 Kubernetes 上。同時,涵蓋瞭如何對名稱空間、Pod 資源(AppArmor)和 Pod 系統呼叫(seccomp)應用安全性措施。
第六章:管理控制平面
本章節討論瞭如何管理控制平面,這對於叢集管理員的使用案例尤其有用。並且,介紹瞭如何利用 Ansible 佈署 DEV、SIT、UAT 和 PROD 等不同環境的基礎設施。此外,還涵蓋瞭如何透過 Helm 套件管理器佈署監控工具(Prometheus),以及如何從資源中擷取日誌進行故障排除。
第七章:公有雲供應商
本章節專注於公有雲供應商,包括如何利用混合/多雲供應商的優勢,分享責任模型是什麼,以及 Amazon Web Services(AWS)、Google Cloud Platform(GCP)和 Microsoft Azure Cloud Services 的特定基礎設施實作。
第八章:企業級 Ansible 自動化
本章節介紹了企業級的 Ansible 自動化平台,包括完成的容器導向 Shiny Ansible Automation Platform,該平台提供了 Web-UI RESTful API 和 Ansible 認證集合。此外,還討論了未來 IT 趨勢,如事件驅動的 Ansible、Ansible 受信任程式碼和 Ansible 受信任集合等。
原始碼下載
免責宣告
本文中表達的任何意見或個人觀點均為作者個人觀點,不代表 Red Hat Inc. 或 JPMorgan Chase & Co. 的立場。本作品不是 JPMorgan Chase & Co. 或其附屬公司的產品。JPMorgan Chase & Co. 或其任何附屬公司都不對本作品的內容做出任何明示或暗示的陳述或保證。
現代IT基礎設施與Hello App
資訊科技基礎設施正以史上最快的速度演進。根據摩爾定律,伺服器的運算能力越來越強,能在極短的時間內執行更多的操作。同樣地,網路基礎設施也在快速發展。
IT基礎設施是企業成功的關鍵。企業利用強大的工具高效地管理IT資源,節省時間。成功的秘訣在於IT開發與維運團隊之間的全面合作。在後疫情時代,「自動化」、「加速」和「創新」成為每一家企業的座右銘。
Kubernetes和Ansible是基礎設施即程式碼(IaC)平台,能夠管理一系列服務並及時做出關鍵決策。
現代IT基礎設施(DevOps和IaC)
全球的IT部門都面臨著高效交付頂級客戶IT服務的挑戰。同樣重要的是,要從基礎設施中獲得最大的投資回報。換言之,IT基礎設施涵蓋了整個資料中心:伺服器、網路裝置、線纜、儲存裝置等。每位優秀的系統管理員都知道基礎設施拼圖中的每一個部件都非常重要。
傳統上,大型組織中的基礎設施團隊或小型組織中的系統管理員承擔著手動管理IT基礎設施的責任,以為內外部利益相關者提供最佳服務。大型組織通常營運多個本地資料中心和雲端供應商。
在這種傳統的基礎設施中佈署應用程式需要結合作業系統和底層系統函式庫,如圖1-1所示。
Hardware
Operating System
Libraries
App App App
圖1-1. 傳統佈署
這種架構的主要缺點是應用程式與底層作業系統和系統函式庫緊密相連。有時需要升級底層作業系統才能更新應用程式,或者因為其他應用程式使用了不同版本的分享函式庫而無法進行升級。
基礎設施團隊的工作包括安裝和更新軟體的全生命週期、更改組態以及管理伺服器、虛擬機器和節點上的服務。服務品質可以透過關鍵指標來衡量。
一些讀者熟悉關鍵指標,它們揭示了軟體或硬體的正常執行時間。正常執行時間衡量服務可供使用者互動的時間百分比。100%的正常執行時間意味著服務始終可用。不幸的是,由於軟體和硬體故障,這在現實中是不現實的。客戶因此會體驗到較低的服務品質。
您可以將此分析應用於任何網頁服務、API服務、網站、網頁應用程式、硬體、伺服器、網路裝置或雲端供應商。一些企業在其契約中也有與不良正常執行時間相關的處罰或保險。
因此,提高基礎設施的效能以滿足業務需求或在市場上更好地競爭至關重要。
現代處理器晶片整合了虛擬化技術,能夠分割資源以滿足日益增長的需求。靜態資源分割技術,如VMware vSphere,使許多組織能夠在一套硬體上執行多個作業系統。使用虛擬化、資源分割、Linux「cgroup」技術和Linux容器(LXC)提供虛擬機器作為資源分配的基本元件,如圖1-2所示。
Hardware
Operating System
Container Runtime
Virtual machine
App
Libraries
Virtual machine
App
Libraries
Virtual machine
App
Libraries
Operating System
Operating System
Operating System
App
圖1-2. 虛擬化佈署
知名的公司如VMware vSphere、Xen等因此蓬勃發展。雲端供應商如Amazon Web Services(AWS)、Azure Cloud和Google Cloud Platform(GCP)也從虛擬化的興起中受益。它們的熱門產品包括Amazon EC2、Azure虛擬機器和Google Compute Engine。
虛擬機器最主要的缺點包括:
- 靜態分配資源(CPU和RAM)
- IT基礎設施團隊需要管理的資源更多
- 需要維護多個作業系統(主機和客戶端)
- 單一硬體故障點(可透過叢集高階功能和Veeam備份套件緩解)
向容器邁進
由於這些缺點,越來越多的組織開始採用多雲(多個雲端供應商)或混合雲(資料中心和一個或多個雲端供應商)策略,以向客戶提供更好的服務。它們可以避免單一供應商的故障。容器使企業能夠根據通用標準(SLA、服務品質和成本)在本地、私有和公共雲端供應商之間進行選擇,或混合使用所有這些基礎設施技術。應用程式的可移植性透過微服務軟體架構設計模式得到保證,其中應用程式被分解為彼此獨立的最小元件,如圖1-3所示。
Hardware
Operating System
Container Runtime
Container
App
Libraries
Container
App
Libraries
Container
App
Libraries
圖1-3. 容器佈署
圖表翻譯:
此圖示展示了容器佈署的架構。硬體層之上是作業系統,接著是容器執行時環境,然後是包含應用程式及其依賴函式庫的容器。這種架構使得應用程式能夠獨立於底層作業系統執行,提高了可移植性和佈署效率。
為了在最短的時間內提供最大的價值,IT工程師需要比裸機或虛擬機器更強大的工具。在容器中佈署應用程式完全獨立於底層作業系統,如圖1-3所示。
Docker公司由Kamel Founadi、Solomon Hykes和Sebastien Pah於2011年創立,在2010年夏天經過Y Combinator孵化。Docker於2013年在Santa Clara的PyCon大會上首次公開亮相。Docker規範了容器映像的構建方式以及映像的載入和執行方式。Docker建立了一套使用作業系統級虛擬化技術來交付容器的平台即服務(PaaS)產品,例如命令列Docker工具。
內容解密:
這段內容介紹了Docker公司的背景及其在容器技術中的作用。Docker透過定義容器映像的構建和執行標準,簡化了應用程式的佈署和管理,提高了開發和維運的效率。
現代 IT 基礎設施與 Hello App
容器技術的崛起
Podman 是 Docker 的開源替代方案,其全稱為 POD MANager。Podman 的主要優勢在於不需要像 Docker 一樣在機器上執行服務;Podman 是「無守護程式」的。它的命令語法與 Docker 非常相似。如果您對應用程式的安全性有所擔憂,或者計劃使用 Kubernetes,那麼 Podman 是一個更好的選擇。本文使用 Docker 是因為它在 IT 界更為人熟知且廣泛使用。但是對於大多數以 Docker 字首開頭的命令,您可以用 podman 取代 docker 並獲得相同的結果。
容器生命週期
容器的範本程式碼被稱為 Dockerfile,它允許您構建容器的二進製版本,稱為映像檔。一個更具技術中立性的 Dockerfile 替代方案是由 Open Container Initiative(OCI)提出的 Containerfile,OCI 是 Linux 基金會的一部分。兩者都是用於自動化建立容器映像檔步驟的組態檔案。OCI 推動了圍繞容器格式和執行時的開放行業標準。OCI 發布了三個規範:Runtime Specification(runtime-spec)、Image Specification(image-spec)和 Distribution Specification(distribution-spec)。Dockerfiles 和 Containerfiles 使用系統工具、系統函式庫、程式碼、執行時和設定的組合來指定應用程式的執行方式。單個映像檔可以在本地 Docker 或 Kubernetes 叢集中執行多次。
一旦構建完成,容器映像檔就會被儲存在容器登入檔中(參見圖 1-4)。第一個容器登入檔是 Docker Hub,但現在市場上有許多容器登入檔可供選擇。首先想到的一個替代方案是紅帽的 Quay。容器映像檔與後設資料一起儲存在其中,這使得 Kubernetes 叢集能夠輕鬆地在其中搜尋和找到它們。
此圖示
graph LR
A[Dockerfile/Containerfile] -->|build|> B[Image]
B -->|push|> C[Container Registry]
C -->|pull|> B
B -->|run|> D[Container]
圖表翻譯: 此圖展示了容器的生命週期,從 Dockerfile 或 Containerfile 構建映像檔,將映像檔推播到容器登入檔,然後從登入檔中提取映像檔並執行為容器。
容器的版本控制與管理
您可以在容器登入檔中維護多個版本的容器。您還可以使用標籤和分支來組織映像檔,以符合 DEV(開發)、SIT(系統整合測試)、UAT(使用者驗收測試)和 PROD(生產)等 DevOps 原則。標籤只是為映像檔的特定版本增加了一個標記,使得使用者更容易找到它。
多容器管理
如果您需要多個容器,則必須使用 Docker Compose 工具,它定義並執行多容器 Docker 應用程式。
現代業務應用的需求
現代業務應用程式需要以下一個或多個功能:
- 高用性
- 多雲相容性
- 多層儲存
- 彈性/自動擴充套件
- 自我修復
- 安全設計(DevSecOps)
容器對於營救管理員的工作流程非常有用。一般來說,管理儲存、網路和組態更容易;容器幫助開發人員變得更加靈活和高效。
使用容器的好處
- 它們是將應用程式和函式庫封裝成單個物件(容器)的標準方式。
- 與使用虛擬機器相比,它們啟動速度更快。
- 它們易於擴充套件。
- 它們是可移植的,因為您可以將它們託管在任何地方。
- 它們支援微服務架構。
協調工具:Kubernetes
像 Kubernetes 這樣的協調工具允許您輕鬆地大規模管理容器。DevOps 和 DevSecOps 等開發者中心方法論的全球趨勢正在推動應用程式即服務、微服務和無伺服器應用程式的發展,它們正在加速推進。在這種情況下,由持續整合和持續交付(CI/CD)工具集建立的容器會被測試以確保品質保證,並比以往任何時候都更快地被推廣到生產環境。Apache Mesos 和 Docker Swarm 等技術也經常被涉及。
Ansible:基礎設施自動化工具
Ansible 是領先的開源基礎設施自動化技術。全球的基礎設施團隊和系統管理員意識到,他們需要一種更好的方法來擴充套件他們的系統管理指令碼,以跟上業務需求。託管的 Web 應用程式增加了複雜性、電子郵件流和作業系統的新版本。當目標裝置數量增加時,手動工作變得不可持續。像 Ansible 這樣的 API 驅動的伺服器管理和組態管理工具幫助使事情變得可控。
Ansible 的主要使用案例
- 組態管理
- 應用程式佈署
紅帽公司(2019 年起成為 IBM 的一部分)長官著 Ansible 專案的全球開發,保證了程式碼的開源品質。Ansible 平台適用於各種現代作業系統,只需要在 Linux 目標節點上安裝 OpenSSH 連線和 Python 解譯器。它透過不同的連線技術支援廣泛的作業系統。例如,您可以使用 WinRM 連線 Windows 目標節點,使用網路 API 連線網路裝置。
Kubernetes 與雲原生運算基金會
在應用程式容器化的早期階段,像 Docker 和 Podman 這樣的執行時系統對於手動佈署和測試應用程式非常有用。然而,當工作負載變得更高,管理容錯移轉變得至關重要時,世界需要一種更自動化的方式來做到這一點。
Kubernetes(也稱為 K8s)是協調和管理容器工作負載的最佳方式。Kubernetes 負責佈署、擴充套件和管理容器化應用程式。它是開源的,並且完全自動化。
Kubernetes 的優勢
Kubernetes 有多個版本釋出;目前每年有三次釋出。Docker 關注的是單個容器映像檔的建立、載入和執行,而 Kubernetes 是一種排程和管理大量容器的方式。
您可以在 Kubernetes 中佈署您的容器,以大規模生產應用程式。您可以無縫地移動容器和應用程式,並且像 Docker 和 Podman 一樣,您可以在 Kubernetes 中執行您的容器。Kubernetes 可以在任何地方執行——本地、在私有資料中心、在公共雲上,甚至在嵌入式硬體(如最新的小型 Raspberry Pi 裝置)上。Kubernetes 支援多種處理器架構和現代作業系統。
在 Kubernetes 中更新、升級和管理相對容易,並保證了組織的安全性。
Kubernetes 叢集
在 Kubernetes 中,叢集由至少一個 Kubernetes 主節點組成;許多 Kubernetes 工作機器被稱為節點。叢集是 Kubernetes 的基礎;所有容器化工作負載和服務都在叢集內執行。
雲原生運算基金會(CNCF)長官著 Kubernetes 專案的發展,提供了一個供應商中立的視野。CNCF 是 Linux 基金會的一部分。CNCF 還組織社群活動,包括 KubeCon 和 CloudNativeCon,您可以在那裡遇到專家並分享故事。
成功案例
最令人鼓舞的客戶故事來自 BlackRock、Netflix、Zalando、Uber、《紐約時報》、ING、Squarespace、BlaBlaCar、華為、Amadeus、PNC Bank、Seagate、Verizon Media 等創新長官者。
詳細解說
本章介紹了現代 IT 基礎設施中的關鍵技術,包括容器技術、Kubernetes 和 Ansible。首先,我們探討了容器的基本概念及其優勢,包括使用 Docker 和 Podman 等工具。然後,我們深入瞭解了 Kubernetes 如何提供自動化的容器協調和管理,以及 Ansible 如何實作基礎設施的自動化。最後,我們討論了雲原生運算基金會(CNCF)在推動 Kubernetes 發展中的作用,以及一些成功的案例研究。本章為讀者提供了對現代 IT 基礎設施中關鍵技術的全面瞭解,為後續章節中更深入的主題討論奠定了基礎。