在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用Ansible構建虛擬機部署Linux的最佳實踐

Linux閱碼場 ? 來源:Linux閱碼場 ? 2023-05-16 15:13 ? 次閱讀

編者按:本文節選自節選自《基于Linux的企業自動化》第五章。“第5章,使用Ansible構建用于部署的虛擬機模板,通過構建虛擬機模板來探索部署Linux的最佳實踐,虛擬機模板將以實際操作的方式大規模部署在虛擬機管理程序上。”

名詞解釋:

- cloud-init: 提供云實例初始時自定義配置的能力,支持多個發行版和多個平臺;

- docker-compose:業務只需要單個容器場時,可以用docker命令管理。如果業務需要多個容器,可以用docker-compose定義和運行它們;

- Ansible-vault:提供文件和變量的加密能力,可以用于保護密碼等敏感數據。

以下是原文

5.3 使用Ansible來構建和標準化模板

你現在應該有一個基本的Linux映像,以便在企業中部署。如果你選擇下載一個現成的模板(或者確實是使用公共云提供商提供的模板),那么你的映像將是一個非常空白的模板,隨時可以定制。如果你之前選擇構建自己的映像,那么你可能已經選擇執行了少量定制,例如我們之前執行的cloud-init安裝。然而,你會注意到,我們是手工完成這些的,這與我們在本書早期所稱贊的可伸縮、可重復、可審核的流程很不一樣。在我們繼續閱讀本章的這一節時,我們將了解如何使用Ansible自定義一個基本模板,而不管它來自何處。

沒有適合所有人的普適的Linux映像,因此,本章介紹的方法并不一定是最佳的。但是,我們將研究一些與自定義為要部署的映像相關聯的更常見的任務,例如:

將文件傳輸到映像中

安裝軟件包

編輯配置文件

驗證映像

通過這些示例的組合,大多數讀者都應該能夠輕松地根據自己的需求定制自己的映像。讓我們開始更深入地探討這個問題,看看如何將文件傳輸到我們之前使用Ansible創建的虛擬機映像中。

5.3.1 將文件傳輸到映像中

根據作者的經驗,通常需要將文件注入(inject)到操作系統映像中,以確保它滿足給定的一組要求。這些文件可能是簡單的文本文件,例如當前的企業標準每日消息(message of the day)、現有軟件包的配置文件,甚至可能是軟件包中不存在的二進制文件。Ansible可以輕松地處理所有這些問題,所以讓我們看一些具體的例子。一般來說,在角色中編寫Ansible代碼以支持重用和可讀性是一種很好的做法,因此我們將在這里為示例定義一個角色。在這個例子中,我做了以下假設:

我們已經下載/構建了本章上一節中概述的Linux模板。

我們正在虛擬機中運行此裸模板。

此虛擬機的IP地址為192.168.81.141。

虛擬機已使用以下憑據設置了用戶賬戶:

用戶名:imagebuild。

口令:Password。

此賬戶已啟用sudo。

很自然,我們不會分發一個其中包含一個使用這樣的弱口令的啟用sudo的賬戶的云映像,因此我們假設我們只在構建階段使用該賬戶,然后在清理階段將其刪除。Ansible需要能夠連接到遠程主機來執行它的工作,但是它使用的賬戶在本質上可能是暫時的,并且在使用后會被刪除:

1.在我們的示例中,我們將創建一個類似于下面的清單文件。你的實際清單文件無疑會有所不同,為你的映像和環境定制它是留給你的一個練習:

[imagesetup]

192.168.81.141

[imagesetup:vars]

ansible_user=imagebuild

ansible_password=password

ansible_sudo_pass=password

這是一個非常簡單的示例;在許多方面,當我們沒有配置SSH密鑰身份驗證時,它是這個過程所需的最低限度的配置。SSH密鑰通常是處理SSH身份驗證的最佳方法,因為它們提供了一些好處,尤其是任務可以在沒有口令提示的情況下運行。

提示

盡管此清單文件本質上是暫時的,但使用ansible-vault存儲口令仍然是最佳實踐,這里建議這樣做。為了本章的簡單性和減少你需要完成的步驟的數量,我們將不加密口令(采用明文)。

接下來,我們將為角色創建基本目錄結構:

$ mkdir -p roles/filecopyexample/tasks

$ mkdir -p roles/filecopyexample/files

3.現在,讓我們創建幾個示例文件進行復制。首先,創建一個要附加到roles/filecopyexample/files/motd中的當天消息的自定義消息:

------------------------

Enteprise Linux Template

Created with Ansible

-----------------------

4.我們還要為chrony服務創建一個新的配置文件來同步我們的公司時間服務器,在roles/filecopyexample/files/chrony.conf中輸入:

pool ntp.example.com iburst maxsources 4

keyfile /etc/chrony/chrony.keys

driftfile /var/lib/chrony/chrony.drift

logdir /var/log/chrony

maxupdateskew 100.0

rtcsync

makestep 1 3

我們打算將這兩個文件復制到遠程服務器。但是,Ansible并不局限于從Ansible主機復制文件,它還可以將文件從遠程服務器直接下載到目標主機:

1.假設你的構建需要docker-compose,我們可以從內部服務器下載它,如果你的映像服務器可以訪問internet,甚至可以直接從internet下載。假設我們想在映像中安裝docker-compose1.18.0,我們可以指示Ansible直接從https://github.com/docker/compose/releases/download/1.18.0/docker-compose-Linux-x86_64下載。

2.現在,讓我們構建我們的角色來復制兩個文件并把docker-compose下載到我們的映像中,這必須寫在roles/filecopyexample/tasks/main.yml中。此角色的第一部分顯示在以下代碼中,用于跨我們前面討論的兩個配置文件進行復制:

---

- name: Copy new MOTD file, and backup any existing file if it exists

copy:

src: files/motd

dest: /etc/motd

owner: root

group: root

mode: '0644'

backup: yes

- name: Copy across new chrony configuration, and backup anyexisting file if it exists

copy:

src: files/chrony.conf

dest: /etc/chrony.conf

owner: root

group: root

mode: '0644'

backup: yes

然后此角色繼續在VM映像上安裝docker-compose的任務:

- name: Install docker-compose 1.18.0

get_url:

url: https://github.com/docker/compose/releases/download/1.18.0/docker-compose-Linux-x86_64

dest: /usr/local/bin/docker-compose

mode: 0755

owner: root

group: root

因此,我們的角色現在已經完成了,不過請確保為你的環境正確定制它。例如,docker-compose可能有較新的版本,這意味著前面的get_url模塊的url參數將發生更改。

提示

chrony配置文件的路徑可能會因操作系統而異。請在運行前面的劇本之前檢查此項。示例中顯示的路徑適用于CentOS 7系統,正如我們先前構建的系統。

3.最后,我們將在頂級目錄中(從中創建roles/目錄)創建一個供調用的site.yml文件,并運行此角色。這應該包含以下內容:

---

- name: Run example roles

hosts: all

become: yes

roles:

- filecopyexample

4.最后,讓我們用ansible-playbook -i hostssite.yml命令運行我們的示例并查看發生了什么:

如我們所見,changed的狀態告訴我們所有三個文件都已成功傳輸或下載,作為示例,我們可以看到現在可以運行docker-compose了,它是在劇本運行期間安裝的(盡管這需要Docker正確運行,在本例中沒有安裝它)。

顯然,這個示例已經做出了一個基本假設,即在構建階段,chrony包安裝在我們的示例映像上。盡管出于我們前面討論的原因,從一個最小的操作系統映像開始是有意義的,但幾乎可以肯定的是,在基本構建之上安裝一些補充軟件包是有必要的,我們將在下一節中對此進行探討。

5.3.2 安裝軟件包

我們在上一節中已經介紹了如何安裝獨立的二進制文件,如docker-compose,但是如果我們需要實際安裝一些未安裝在我們的基本映像中的其他操作系統軟件包呢?例如,cloud-init在大多數云環境中非常有用,但它沒有包含在我們之前執行的CentOS 7最小安裝中。

在這里,Ansible同樣可以提供幫助,這次,我們將定義一個角色來安裝我們需要的軟件包。我們將重用上一節中的清單文件,并以與之前相同的方式創建一個名為packageinstall的新角色:

1.現在,前面關于復制文件的示例將適用于所有Linux分發版,唯一需要注意的是目標文件存在的位置可能不同。例如,CentOS 7虛擬機映像將在/etc/chrony.conf中安裝chrony配置文件,而Ubuntu 18.04 LTS服務器將在/etc/chrony/chrony.conf中安裝它。除了對copy模塊的dest:參數的這一小改動之外,代碼將保持不變。

遺憾的是,軟件包的安裝會變得更復雜一些。

2.假設我們想在CentOS 7 2示例映像上安裝cloud-init和docker,執行此操作所需的角色可能如下所示:

---

- name: Install the epel-release package

yum:

name: epel-release

state: present

- name: Install cloud-init and docker

yum:

name: "{{ item }}"

state: present

loop:

- cloud-init

- docker

3.我們必須先安裝EPEL存儲庫,然后才能安裝所需的軟件包裝。當我們運行它時,輸出應該是這樣的:

如果你使用的是不同的Linux發行版,那么你需要相應地改變包管理器。例如,在使用apt包管理器的發行版(如Debian或Ubuntu)上,等效的Ansible角色類似于以下代碼塊:

---

- name: Install cloud-init and docker

apt:

name: "{{ item }}"

state: present

loop:

- cloud-init

- docker.io

注意模塊從yum到apt的變化,以及用于Docker容器服務的不同軟件包名。除此之外,劇本幾乎是一模一樣的。

我們可以進一步改進,這種不同導致了需要為兩種不同的操作系統基礎維護兩個不同的角色,但是如果我們可以智能地將它們組合成一個角色呢?幸運的是,Ansible在第一次運行時收集的事實可以用來識別操作系統,從而運行正確的代碼。

我們將重新利用前面的示例代碼,將這兩個安裝組合成一個Ansible角色:

1.代碼的第一部分與前面的示例幾乎相同,只是我們現在已經指定了when子句,以確保它只在基于Debian或Ubuntu的Linux發行版上運行:

---

- name: Install cloud-init and docker

apt:

name: "{{ item }}"

state: present

loop:

- cloud-init

- docker.io

when: ansible_distribution == 'Debian' or ansible_distribution =='Ubuntu'

2.我們再添加兩個在CentOS或Red Hat Enterprise Linux上執行安裝Docker 所需的步驟:

- name: Install the epel-release package

yum:

name: epel-release

state: present

when: ansible_distribution == 'CentOS' or ansible_distribution =='Red Hat enterprise Linux'

- name: Install cloud-init and docker

yum:

name: "{{ item }}"

state: present

loop:

- cloud-init

- docker

when: ansible_distribution == 'CentOS' or ansible_distribution =='Red Hat enterprise Linux'

再次注意每個任務下的when子句,這些具體示例用于根據Ansible在運行的初始部分獲得的事實來確定是否應該運行任務。因此,如果我們現在在Ubuntu系統上運行這個角色,我們會看到以下內容:

3.如你所見,與apt相關的第一個任務是運行的,但是下面基于yum的的兩個任務由于不滿足when子句的條件,已被跳過。現在,如果我們在CentOS 7目標上運行它,我們會看到:

現在情況正好相反:apt任務被跳過,但運行了兩個與yum相關的任務。

通過這種方式,即使在處理幾個不同的基本操作系統時,也可以維護單個角色來安裝一組通用的軟件包需求。將when子句與Ansible事實相結合是一種非常有效的方法,可以確保單個代碼庫在跨各種系統時的正確行為,因此如果你的SOE確實擴展到基于Debian和RedHat的系統,那么你仍然可以輕松簡單地維護代碼。

一旦安裝了補充軟件包,通常必須對其進行配置才能使其有用。在下一節中,我們將探討Ansible在編輯配置文件中的用法。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7139

    瀏覽量

    89577
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210392
  • 虛擬機
    +關注

    關注

    1

    文章

    937

    瀏覽量

    28426

原文標題:使用Ansible構建虛擬機模板

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    vmware553+linux虛擬機

    運行不同的操作系統,和進行開發、測試 、部署新的應用程序的最佳解決方案。VMware Workstation可在一部實體機器上模擬完整的網絡環境,以及可便于攜帶的虛擬機器,其更好的靈活性與先進的技術勝過了市面上
    發表于 04-30 10:59

    介紹VirtualBox虛擬機構建方法

    本系列文章將向大家介紹嵌入式系統開發的各方面知識。本文將向大家介紹VirtualBox虛擬機構建方法。一、什么是虛擬機二、主流虛擬機三、VirtualBox介紹四、Windows下安
    發表于 11-08 06:21

    Linux容器和虛擬機之間的區別差異分析

    自從Linux上的容器變得流行以來,了解Linux容器和虛擬機之間的區別變得更加棘手。本文將向您提供詳細信息,以了解Linux容器和虛擬機
    的頭像 發表于 12-27 13:52 ?9080次閱讀

    linux虛擬機的聯網方法

    虛擬機安裝linux系統無法上網的解決方法。
    發表于 05-31 09:27 ?1540次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>虛擬機</b>的聯網方法

    linux虛擬機怎么聯網

    虛擬機安裝linux系統無法上網的解決方法。
    發表于 06-03 09:29 ?2406次閱讀

    虛擬機Linux如何測試 DBUS Daemon

    虛擬機Linux如何測試 DBUS Daemon
    的頭像 發表于 06-22 16:35 ?4390次閱讀
    <b class='flag-5'>虛擬機</b>:<b class='flag-5'>Linux</b>如何測試 DBUS Daemon

    為什么建議使用虛擬機來安裝Linux

    筆者認為,通過虛擬機軟件學習是初學者學習Linux最佳方式。
    發表于 07-15 16:19 ?1757次閱讀

    部署Linux最佳實踐探索

    編者按:本文節選自節選自《基于Linux的企業自動化》第五章。“第5章,使用Ansible構建用于部署虛擬機模板,通過
    的頭像 發表于 05-16 09:35 ?607次閱讀

    linux虛擬機怎么調出命令行

    Linux虛擬機是一種模擬運行Linux操作系統的虛擬環境,它可以在Windows、Mac、Linux等主機系統上運行。在
    的頭像 發表于 11-17 09:55 ?3844次閱讀

    linux虛擬機系統基本指令

    Linux虛擬機系統是一種通過虛擬化技術在物理服務器上部署多個獨立的虛擬機實例的操作系統。它可以幫助用戶更有效地利用硬件資源,并方便地
    的頭像 發表于 11-17 10:04 ?1698次閱讀

    linux虛擬機使用教程

    引言:Linux虛擬機是一種方便且常用的技術,它允許用戶在現有操作系統的基礎上創建和運行另一個獨立的操作系統。在本篇文章中,我們將提供一份詳盡的教程,幫助你了解如何安裝、配置和使用Linux
    的頭像 發表于 11-17 10:06 ?1445次閱讀

    虛擬機linux怎么編寫程序

    虛擬機Linux上編寫程序是一項非常常見且有用的任務。無論是開發一個簡單的腳本、一個Web應用程序還是一個復雜的軟件項目,Linux提供了強大的工具和環境來幫助你進行編程。本文將詳細介紹如何在
    的頭像 發表于 11-17 10:08 ?1909次閱讀

    vm虛擬機linux系統怎么編程

    虛擬機中編程Linux系統是學習和探索計算機科學的一個重要方面。使用虛擬機可以在主機上模擬出一個或多個獨立的計算環境,我們可以在其中安裝和運行不同的操作系統。通過創建虛擬機,我們可以
    的頭像 發表于 11-17 10:10 ?2037次閱讀

    linux虛擬機怎么運行代碼

    運行代碼是Linux虛擬機中的常見操作,本文將詳細介紹如何運行代碼。 首先,要運行代碼,你需要先安裝好Linux虛擬機,并確保能夠順利運行。接下來,你需要打開
    的頭像 發表于 11-17 10:12 ?5243次閱讀

    怎么安裝linux虛擬機

    在計算機領域,虛擬機是一種軟件程序,它允許在主操作系統上運行多個虛擬操作系統。Linux虛擬機在開發、測試和學習等環境中得到廣泛應用。本文將詳細介紹如何安裝
    的頭像 發表于 11-23 10:50 ?1155次閱讀
    主站蜘蛛池模板: 男女爱爱免费高清 | 最新黄色地址 | 欧美天堂色 | 久久久久久人精品免费费看 | 色多多福利网站 | 人人插人人爽 | 伊人网大香| 高清国产下药迷倒美女 | 欧美一级高清黄图片 | 操一操干一干 | 香蕉成人国产精品免费看网站 | 日韩高清在线日韩大片观看网址 | 国产福利小视频在线观看 | 天堂网www在线资源链接 | 日韩午夜精品 | jlzzjlzzjlzz亚洲女 | 亚洲春色www | 视频一区二区在线观看 | 色人岛| 色天天色综合 | 一区二区三区在线看 | 日日做夜夜爽夜夜爽 | 色资源网| 亚洲欧美精品一区二区 | 四虎4hu影库免费永久国产 | 色九九| 热门国产xvideos中文 | 操操操综合网 | 一级精品视频 | 狠狠综合 | 欧美电影一区二区三区 | 在线黄色免费网站 | 在线观看三级视频 | 女的扒开尿口让男人桶 | 天堂8中文在线最新版在线 天堂8资源8在线 | 99久久国产免费福利 | 国产精品毛片在线大全 | 人人干综合 | 国产精品天天影视久久综合网 | 日本三级香港三级人妇99 | 毛片免费高清免费 |