自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么Capistrano被Docker和Kubernetes取代了

云計(jì)算 云原生
Capistrano了解您將處理的三個(gè)基本環(huán)境: 通常是生產(chǎn),暫存和開(kāi)發(fā)。開(kāi)發(fā)環(huán)境可能是筆記本電腦;暫存環(huán)境可能是某種QA可以訪問(wèn)的云服務(wù)器。使用這些定義,Capistrano可以針對(duì)特定計(jì)算機(jī)執(zhí)行操作。

David Eastman主持了一場(chǎng)技術(shù)版的古董鑒定節(jié)目,通過(guò)回顧前容器(甚至是Chef之前!)時(shí)代的軟件工具Capistrano。

譯自 Why Capistrano Got Usurped by Docker and Then Kubernetes 。

當(dāng)我聽(tīng)著受歡迎的知識(shí)產(chǎn)權(quán)和數(shù)字權(quán)利倡導(dǎo)者Cory Doctorow朗讀他的新書(shū)的一小部分時(shí),我聽(tīng)到他提到了加利福尼亞州的 Capistrano。但我當(dāng)然還記得Capistrano,這是一種流行于2010年代初的遠(yuǎn)程服務(wù)器自動(dòng)化工具——它實(shí)際上是容器和Kubernetes之前的工具。

我有時(shí)對(duì)隨著時(shí)間流逝失去流行度的常用技術(shù)感興趣。當(dāng)然,Capistrano并沒(méi)有真正死亡——即使我正在使用過(guò)去式來(lái)描述它。開(kāi)源工具從未真正死亡,它們只是變得不受歡迎(并可能被儲(chǔ)存在閣樓中)。我記得在十多年前曾將Capistrano用作遠(yuǎn)程服務(wù)器自動(dòng)化工具。它會(huì)使用SSH按照腳本允許您將更新部署到目標(biāo)服務(wù)器。更新可能是一個(gè)新的可執(zhí)行文件,可能是一些代碼,可能是一些配置,可能是一些數(shù)據(jù)庫(kù)更改。很好,但為什么要回顧一個(gè)不再常用的系統(tǒng)呢?

首先,為了理解趨勢(shì),回顧過(guò)去的例子很有幫助。當(dāng)某樣?xùn)|西的流行度下降時(shí)注意其點(diǎn)也很有幫助,同時(shí)檢查我們是否失去了任何東西。當(dāng)前的技術(shù)只是時(shí)間線上的一個(gè)小插曲,如果你偶爾回頭看一眼,預(yù)測(cè)接下來(lái)會(huì)發(fā)生什么會(huì)容易得多。如果您需要在新站點(diǎn)上處理部署,除了您自己偏愛(ài)的工具之外,擁有一系列工具也很好。您甚至可能不得不在舊堆棧中使用Capistrano。因此,讓我們來(lái)評(píng)估這件古董,看看它有多大的價(jià)值。

環(huán)境

Capistrano了解您將處理的三個(gè)基本環(huán)境: 通常是生產(chǎn),暫存和開(kāi)發(fā)。開(kāi)發(fā)環(huán)境可能是筆記本電腦;暫存環(huán)境可能是某種QA可以訪問(wèn)的云服務(wù)器。使用這些定義,Capistrano可以針對(duì)特定計(jì)算機(jī)執(zhí)行操作。

任務(wù)和角色

Capistrano中的基本命令是任務(wù)。這些是在部署的不同階段執(zhí)行的。但是要過(guò)濾這些任務(wù),您可以使用角色來(lái)描述您正在處理的系統(tǒng)的哪一部分:

role :app, "my-app-server.com"
role :web, "my-static-server.com"
role :db, "my-db-server.com"

這表示應(yīng)用程序服務(wù)器(生成動(dòng)態(tài)內(nèi)容的部分)、網(wǎng)頁(yè)或Web服務(wù)器以及數(shù)據(jù)庫(kù)作為單獨(dú)的部分。您當(dāng)然可以創(chuàng)建自己的定義。

或者,您可以更多地關(guān)注環(huán)境分離,而角色在其下操作。對(duì)于生產(chǎn)環(huán)境的描述,我們可能會(huì)設(shè)置以下內(nèi)容:

# config/deploy/production.rb


server "11.22.333.444", user: "ubuntu", roles: %w{app db web}

默認(rèn)部署任務(wù)具有代表部署階段的幾個(gè)子任務(wù):

  • deploy:starting 開(kāi)始部署,確保先決條件得到滿足
  • deploy:updating 使用新版本更新服務(wù)器
  • deploy:publishing 發(fā)布新版本
  • deploy:finishing 完成部署,開(kāi)始清理
  • deploy:upload 將文件復(fù)制到當(dāng)前部署的版本。這對(duì)于分階段更新文件很有用
  • deploy:rollback 全部回滾

這是一個(gè)自定義的部署任務(wù)的示例。這種類(lèi)似ruby的代碼使用角色來(lái)過(guò)濾任務(wù),以及部署的階段。在本例中,我們可以在完成之前更新style.css文件:

namespace :deploy do
   after :finishing, :upload do
     on roles(:web) do
       path = "web/assets"
       upload! "themes/assets/style.css", "#{path}"
     end
     on roles(:db) do
       # Migrate database
     end
   end
 end

在Capistrano安裝后,您可以在命令行中使用以下命令觸發(fā)此操作:

默認(rèn)部署流程及相應(yīng)的回滾流程。這是一個(gè)更詳細(xì)的示例:

deploy
  deploy:starting
    [before]
      deploy:ensure_stage
      deploy:set_shared_assets
    deploy:check
  deploy:started
  deploy:updating
    git:create_release
    deploy:symlink:shared
  deploy:updated
    [before]
      deploy:bundle
    [after]
      deploy:migrate
      deploy:compile_assets
      deploy:normalize_assets
  deploy:publishing
    deploy:symlink:release
  deploy:published
  deploy:finishing
    deploy:cleanup
  deploy:finished
    deploy:log_revision

您可以看到鉤子——"started"、"updated"、"published"和"finished"——它們對(duì)應(yīng)于動(dòng)作"starting"、"publishing"等。這些用于使用before和after子句將自定義任務(wù)掛鉤到流程中,就像我們上面看到的那樣。

請(qǐng)注意,在發(fā)布后創(chuàng)建或更新一個(gè)指向最新版本的"current"符號(hào)鏈接。如果在任何步驟中部署失敗,current符號(hào)鏈接仍指向舊版本。

那么發(fā)生了什么?

"先運(yùn)行這個(gè),然后運(yùn)行那個(gè)"的模型并不能總是很好地預(yù)測(cè)部署后您的系統(tǒng)會(huì)是什么樣子。像Chef這樣的工具更擅長(zhǎng)處理蔓延的系統(tǒng),因?yàn)樗鼈儚哪P烷_(kāi)始,然后說(shuō)“使這個(gè)設(shè)置為真”。Chef以收斂和冪等作為工作方式。丟失的位會(huì)被添加,但在那之后重新應(yīng)用相同的步驟不會(huì)改變?nèi)魏问虑?。因此,?duì)相同操作的多次執(zhí)行不會(huì)對(duì)狀態(tài)產(chǎn)生副作用。

Capistrano的靈活性會(huì)允許較少經(jīng)驗(yàn)的開(kāi)發(fā)人員建立工作但不穩(wěn)定的部署。

相比之下,單個(gè)Docker鏡像允許對(duì)OS、包、庫(kù)和代碼進(jìn)行系統(tǒng)性控制。它還允許筆記本電腦和云服務(wù)器以相似的方式對(duì)待——僅僅作為掛載容器的地方。

最后,Kubernetes在不必?fù)?dān)心速度變慢和超時(shí)的情況下處理了集群。擁有一個(gè)完全透明的基礎(chǔ)設(shè)施,以及運(yùn)行所有方面的所需服務(wù)和確切配置的能力,使DevOps團(tuán)隊(duì)的生活更加輕松。與更改已經(jīng)運(yùn)行的服務(wù)不同,可以創(chuàng)建新容器并終止舊容器。

從現(xiàn)代觀點(diǎn)來(lái)看,Capistrano的另一個(gè)問(wèn)題是它是用Ruby構(gòu)建的。Ruby語(yǔ)言不公平地與Ruby on Rails的流行程度聯(lián)系在一起;那已經(jīng)隨著Node.js和JavaScript的興起而衰落。總體而言,其他語(yǔ)言和語(yǔ)言趨勢(shì)在流行度上已經(jīng)超過(guò)了它: 例如,Python已經(jīng)成為首選的腳本語(yǔ)言。所示的任務(wù)使用了一個(gè)DSL,它實(shí)際上是ruby Rake構(gòu)建工具。

是否損失了什么呢?可能。擁有一組自定義任務(wù)以進(jìn)行快速更改確實(shí)鼓勵(lì)了黑客方法,但它也允許進(jìn)行較小的臨時(shí)基于事件的更改。“使此更改發(fā)生”而不是“我總是希望服務(wù)器看起來(lái)像這樣”。

更好的說(shuō)法可能是,像Capistrano這樣的工具出現(xiàn)在任何團(tuán)隊(duì)的部署之旅的路徑上,作為在需要更廣闊的視野之前的一個(gè)路徑點(diǎn)。但即使作為一個(gè)蒙塵的遺跡,Capistrano仍然是一個(gè)偉大的模塊化工具,用于自動(dòng)化Web應(yīng)用程序的部署和維護(hù)。

至于加利福尼亞州的Capistrano?恐怕是壞消息。

圖片圖片

驚喜

整理完文章后,我發(fā)現(xiàn)原來(lái) Capistrano 就在我身邊, vagrant 用了它:

圖片圖片


責(zé)任編輯:武曉燕 來(lái)源: 云云眾生s
相關(guān)推薦

2021-09-14 08:50:38

Kubernetes容器Docker

2021-12-03 17:22:09

CC++編程語(yǔ)言

2019-08-05 14:23:43

DockerKubernetes容器

2021-03-16 08:35:14

Kubernetes Docker容器

2021-06-04 05:21:19

KubernetesDocker容器

2024-08-22 12:51:46

2020-01-13 10:16:53

TCPUDP協(xié)議

2021-07-09 09:24:06

NanoID UUID軟件開(kāi)發(fā)

2020-04-01 15:30:19

TCPUDP服務(wù)器

2020-01-15 08:42:16

TCP三次握手弱網(wǎng)絡(luò)

2018-04-10 13:40:14

Kubernetes容器服務(wù)器

2021-08-03 10:40:24

Kubernetes容器公有云

2021-04-09 09:55:55

DockerGoLinux

2020-08-21 07:18:21

KubernetesDocker

2018-12-27 09:10:45

2020-06-19 14:55:11

Kubernetes容器技術(shù)

2018-07-09 14:44:27

存儲(chǔ)

2021-05-06 06:53:39

DockerGoogleFacebook

2013-11-26 15:12:40

2018-03-13 09:34:36

Kubernetes容器系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)