Cockpit實(shí)戰(zhàn):從賬戶模型到日常運(yùn)維)
SAP云平臺(tái)Cockpit聽起來(lái)像是某個(gè)深藏在后臺(tái)的管理頁(yè)面但實(shí)際上它是使用SAP云平臺(tái)時(shí)繞不開的入口。Cockpit既能看到子賬戶有哪些資源也能完成權(quán)限分配、服務(wù)訂閱、空間管理、目的地配置等一整套云上運(yùn)維動(dòng)作。很多剛接觸的人第一次登錄后被左側(cè)一長(zhǎng)串菜單搞得發(fā)懵子賬戶、空間、服務(wù)市場(chǎng)、Boosters這些詞全部堆在眼前完全不知道該先點(diǎn)哪個(gè)。這篇文章就圍繞SAP云平臺(tái)Cockpit的日常用法按照“賬戶模型-高頻操作-排障思路”這條線展開盡量把每一步背后的原因也講清楚適合已經(jīng)創(chuàng)建了試用賬戶、但不太清楚下一步該做什么的開發(fā)者也適合剛接手平臺(tái)管理工作、需要快速上手的運(yùn)維同學(xué)。1. 先認(rèn)清Cockpit在整套體系里的角色1.1 控制臺(tái)不是多出來(lái)的一個(gè)頁(yè)面Cockpit本質(zhì)上就是SAP云平臺(tái)的統(tǒng)一管理前端。它背后不是一堆孤立的報(bào)表而是一整套賬戶和資源的管理邏輯。我剛開始接觸時(shí)犯過(guò)一個(gè)典型錯(cuò)誤直接沖到Service Marketplace里訂閱各種服務(wù)卻完全忽略了這些服務(wù)必須掛在某個(gè)子賬戶下而子賬戶需要先獲得配額兩件事缺一不可。結(jié)果服務(wù)列表里明明有東西可選真正創(chuàng)建實(shí)例時(shí)卻一直提示配額不足浪費(fèi)了不少時(shí)間。如果你把Cockpit當(dāng)成一個(gè)日常操作臺(tái)就很好理解了。所有跟云平臺(tái)相關(guān)的“管理類操作”比如建子賬戶、給用戶授權(quán)、訂閱服務(wù)、配置連接都會(huì)在這里發(fā)生。至于應(yīng)用本身跑在哪里、代碼日志怎么查那是運(yùn)行時(shí)環(huán)境的事不在Cockpit的直接操作范圍內(nèi)。很多初學(xué)者把這兩層混在一起以為在Cockpit里能看到所有應(yīng)用的代碼級(jí)日志其實(shí)不是。1.2 登錄入口與區(qū)域選擇訪問(wèn)Cockpit一般是通過(guò)你所處區(qū)域?qū)?yīng)的平臺(tái)站點(diǎn)進(jìn)入比如歐洲區(qū)域、美國(guó)區(qū)域各有各自的入口。登錄時(shí)使用的是平臺(tái)賬號(hào)而不是某個(gè)單應(yīng)用的賬號(hào)。如果公司內(nèi)沒(méi)有統(tǒng)一分配賬號(hào)也可以注冊(cè)試用賬號(hào)體驗(yàn)試用賬號(hào)登錄后的界面和正式環(huán)境基本一致只是配額有限。第一次進(jìn)入的時(shí)候大概率會(huì)要求選擇區(qū)域。這一步千萬(wàn)別隨便選因?yàn)椴煌瑓^(qū)域之間的可用服務(wù)種類、配額策略可能有差異。比如某個(gè)云基礎(chǔ)設(shè)施的服務(wù)不一定在每一個(gè)區(qū)域都上線。區(qū)域的選定還涉及數(shù)據(jù)流向后續(xù)應(yīng)用部署在哪里數(shù)據(jù)就主要留在哪里。我們團(tuán)隊(duì)日常會(huì)在兩個(gè)區(qū)域之間切換忘切區(qū)域去查資源是最常踩的坑之一。右上角的區(qū)域切換器非常重要查不到東西時(shí)先確認(rèn)當(dāng)前處于哪個(gè)區(qū)域再往下查子賬戶和服務(wù)很多時(shí)候問(wèn)題就出在這一步。1.3 首頁(yè)儀表板該看什么登錄成功后的Overview頁(yè)面會(huì)展示當(dāng)前區(qū)域的子賬戶數(shù)量、服務(wù)訂閱情況、可用許可證等。這一頁(yè)適合做常規(guī)體檢比如看看配額使用率、是否有異常資源占用但不建議在這里做實(shí)際修改操作。真正的功能入口在左側(cè)導(dǎo)航欄。左側(cè)導(dǎo)航從上到下依次會(huì)有Boosters、Subaccounts、Service Marketplace、Directories等入口部分版本還會(huì)多出告警監(jiān)控相關(guān)的菜單。這些項(xiàng)目才是Cockpit的核心操作面板。第一次接觸時(shí)我建議把左側(cè)菜單從上到下挨個(gè)點(diǎn)一遍花十分鐘搞清楚每一項(xiàng)目的是干什么的。這個(gè)投入非常值得之后你就知道遇到某種需求時(shí)該去哪一層找入口而不是在菜單之間來(lái)回猜。2. 賬戶模型與權(quán)限體系幾乎所有操作的底層邏輯2.1 目錄、子賬戶、空間之間到底什么關(guān)系很多教程一上來(lái)就讓你創(chuàng)建子賬戶卻沒(méi)有先把這三層結(jié)構(gòu)講清楚。我自己梳理之后是這樣理解的目錄是最外層的“收納袋”用來(lái)把多個(gè)子賬戶組織在一起便于在團(tuán)隊(duì)或者多項(xiàng)目場(chǎng)景下統(tǒng)一管理配額和成本子賬戶是實(shí)際擁有資源配額的最小管理單元里面可以啟用環(huán)境、訂閱服務(wù)空間則是Cloud Foundry環(huán)境里的進(jìn)一步劃分類似開發(fā)環(huán)境中的“項(xiàng)目目錄”同一個(gè)子賬戶下可以劃出開發(fā)空間、測(cè)試空間和生產(chǎn)空間。打個(gè)比方目錄是辦公室里的文件柜子賬戶是其中一個(gè)抽屜空間則是抽屜里不同顏色的文件夾。資源配額通常是按抽屜來(lái)分配的而應(yīng)用和服務(wù)則放在具體文件夾里。理解了這一層后面在菜單里找東西就不會(huì)迷路。Cockpit里創(chuàng)建子賬戶時(shí)頁(yè)面會(huì)要求填寫顯示名稱同時(shí)還可以指定空間名??臻g名可以是默認(rèn)的dev也可以自定義成test、prod之類。注意新創(chuàng)建的子賬戶不會(huì)自動(dòng)獲得任何資源所有配額都要手動(dòng)分配這一點(diǎn)在界面上雖然有提示但很多人還是會(huì)忽略。2.2 用戶、角色集合與權(quán)限的綁定用戶和權(quán)限這部分看起來(lái)有點(diǎn)繞但核心邏輯只有一句話用戶先進(jìn)入子賬戶角色決定他在這個(gè)子賬戶及空間里能做什么。平臺(tái)內(nèi)置了幾種預(yù)設(shè)角色比如管理員、開發(fā)者、查看者每種角色的權(quán)限范圍不同。管理員可以做全局配置開發(fā)者可以在空間部署應(yīng)用查看者基本只能看。實(shí)際操作里Cockpit并不是直接在用戶身上逐條勾選角色而是通過(guò)Role Collections角色集合來(lái)綁定。流程是先在子賬戶的Security → Users里添加用戶然后在用戶詳情頁(yè)里分配角色集合。我見過(guò)很多人在這一步失敗用戶添加完了但沒(méi)綁角色集合結(jié)果用戶能登錄Cockpit一進(jìn)入空間操作就會(huì)提示權(quán)限不足。解決方式也很簡(jiǎn)單回到用戶詳情頁(yè)在Role Collections中勾選合適的集合并保存即可。另一個(gè)常見情況是用戶已經(jīng)綁了角色集合但新配置的權(quán)限沒(méi)有及時(shí)生效重新登錄一次就好。2.3 配額分配別把資源留在一個(gè)子賬戶子賬戶可用的服務(wù)配額來(lái)自平臺(tái)賬號(hào)的總配額。你需要手動(dòng)把總配額拆分給各個(gè)子賬戶比如把內(nèi)存配額一部分給開發(fā)子賬戶一部分留給生產(chǎn)子賬戶。劃分完成后子賬戶才能在Service Marketplace中創(chuàng)建對(duì)應(yīng)服務(wù)的實(shí)例否則即使服務(wù)列表里顯示可用創(chuàng)建時(shí)依然會(huì)報(bào)配額不足。我在實(shí)際項(xiàng)目中吃過(guò)不少虧。剛開始圖省事把所有配額都集中在一個(gè)子賬戶里后面項(xiàng)目擴(kuò)展時(shí)要給另一個(gè)環(huán)境騰資源就得反復(fù)回去調(diào)整。經(jīng)驗(yàn)是動(dòng)手之前先規(guī)劃哪個(gè)子賬戶跑什么服務(wù)、預(yù)計(jì)需要多少內(nèi)存和存儲(chǔ)把這些寫下來(lái)再一次性在配額配置里調(diào)好。短期看起來(lái)多花了一點(diǎn)時(shí)間后續(xù)省下的是反復(fù)改配置和排障的成本。3. 高頻操作實(shí)戰(zhàn)從建子賬戶到跑起一個(gè)環(huán)境3.1 創(chuàng)建子賬戶的完整過(guò)程打開Cockpit之后進(jìn)入Subaccounts頁(yè)面點(diǎn)擊創(chuàng)建子賬戶的按鈕。不同版本界面措辭可能略有差異但入口基本都一樣。需要填寫的信息主要有幾個(gè)顯示名稱、子賬戶所處的區(qū)域、選用的云基礎(chǔ)設(shè)施以及是否啟用Cloud Foundry環(huán)境。其中比較關(guān)鍵的是Cloud Foundry環(huán)境選項(xiàng)。如果現(xiàn)在就啟用頁(yè)面會(huì)要求指定一個(gè)空間名。如果暫時(shí)不想啟用可以之后在子賬戶詳情里再手動(dòng)添加。這一點(diǎn)看個(gè)人需要但我的建議是如果你打算部署應(yīng)用就在創(chuàng)建時(shí)順手啟用這樣整個(gè)環(huán)境鏈路會(huì)更順。創(chuàng)建完成之后Cockpit會(huì)生成一個(gè)子賬戶ID這個(gè)ID是全局唯一標(biāo)識(shí)之后用命令行工具或者API訪問(wèn)該子賬戶時(shí)會(huì)頻繁用到。很多教程不提這個(gè)ID導(dǎo)致后續(xù)對(duì)不上號(hào)建議用戶拿到ID后隨手記錄下來(lái)。還有一點(diǎn)容易被忽略創(chuàng)建子賬戶時(shí)可以順便打上標(biāo)簽。標(biāo)簽用于成本統(tǒng)計(jì)和資源歸類在子賬戶很多的情況下非常有用。我的建議是從一開始就規(guī)規(guī)矩矩打標(biāo)簽例如項(xiàng)目名加上環(huán)境名后續(xù)做成本報(bào)表時(shí)會(huì)輕松很多。3.2 在服務(wù)市場(chǎng)里啟用服務(wù)Service Marketplace翻譯過(guò)來(lái)就是服務(wù)市場(chǎng)點(diǎn)進(jìn)去之后會(huì)看到當(dāng)前子賬戶在所選區(qū)域下能訂閱的所有服務(wù)。這里有一個(gè)容易誤解的地方列表列出了某項(xiàng)服務(wù)只代表“可用”并不代表本子賬戶已經(jīng)開通。要想真正使用必須進(jìn)入該服務(wù)的詳情頁(yè)點(diǎn)擊創(chuàng)建選擇一個(gè)服務(wù)計(jì)劃Plan輸入實(shí)例名稱再完成配置。創(chuàng)建成功之后平臺(tái)還會(huì)引導(dǎo)你生成服務(wù)密鑰。服務(wù)密鑰里包含連接該服務(wù)所需的地址和憑據(jù)應(yīng)用通過(guò)它來(lái)訪問(wèn)服務(wù)。這步很多人會(huì)漏掉漏了之后程序連接服務(wù)時(shí)拿不到可用的憑據(jù)就會(huì)反復(fù)超時(shí)或者認(rèn)證失敗。密鑰可以事后補(bǔ)建在服務(wù)實(shí)例詳情頁(yè)里能找到相關(guān)入口但最好在創(chuàng)建實(shí)例時(shí)順手就把密鑰生成出來(lái)并妥善保存。如果你把憑據(jù)寫進(jìn)了代碼那就等于給項(xiàng)目埋了一個(gè)隱患。我遇到過(guò)一種情況服務(wù)市場(chǎng)里看不到想要的服務(wù)。第一步往往不是發(fā)帖求助而是回到子賬戶的配額界面檢查該服務(wù)的配額是否已經(jīng)分配給當(dāng)前子賬戶沒(méi)有的話需要先從總配額里分配。至于服務(wù)的版本和可用區(qū)域可以在服務(wù)詳情里看到說(shuō)明。不同區(qū)域的已上線情況不同這也是我前面強(qiáng)調(diào)區(qū)域選擇重要的原因。3.3 配置目的地讓云端應(yīng)用連上外部系統(tǒng)Cockpit里有一個(gè)專門用來(lái)配置連接信息的模塊叫Destination中文通常叫目的地。它的作用可以理解為從當(dāng)前子賬戶出發(fā)訪問(wèn)另一個(gè)系統(tǒng)時(shí)所需的連接配置。最常見的是HTTP類型比如從云平臺(tái)上的應(yīng)用調(diào)用某個(gè)本地系統(tǒng)的接口就要先把目標(biāo)系統(tǒng)的訪問(wèn)地址和認(rèn)證信息配成一個(gè)目的地。新建HTTP Destination時(shí)主要字段有名稱、URL、身份驗(yàn)證方式。身份驗(yàn)證方式最常用的是BasicAuthentication也就是用戶名密碼方式也有NoAuthentication和ClientCertificateAuthentication可選。配置完成后界面通常會(huì)提供測(cè)試連接的功能點(diǎn)擊Check Connection平臺(tái)會(huì)嘗試發(fā)一次請(qǐng)求來(lái)驗(yàn)證連通性。這一步我強(qiáng)烈建議做因?yàn)楹芏嗯渲脝?wèn)題都會(huì)在測(cè)試時(shí)暴露出來(lái)。實(shí)際踩坑中最典型的錯(cuò)誤是URL寫成了內(nèi)網(wǎng)地址。云平臺(tái)跑在云端內(nèi)網(wǎng)地址大概率不可達(dá)測(cè)試會(huì)直接報(bào)錯(cuò)。另外有些系統(tǒng)對(duì)證書有校驗(yàn)如果證書不被信任也會(huì)導(dǎo)致連接失敗。配置目的地之前最好先確認(rèn)目標(biāo)地址從云端網(wǎng)絡(luò)是否可達(dá)以及對(duì)方系統(tǒng)是否放開訪問(wèn)權(quán)限。曾經(jīng)有同事折騰了一下午最后發(fā)現(xiàn)是目標(biāo)環(huán)境的防火墻把云平臺(tái)的出口IP攔了服務(wù)平臺(tái)側(cè)配置反復(fù)修改都沒(méi)用。3.4 用Boosters快速搭建演示環(huán)境Boosters也就是加速器是Cockpit里提供給“不想手動(dòng)一步步配置”的人群使用的功能。選擇對(duì)應(yīng)的加速器后它會(huì)把子賬戶創(chuàng)建、服務(wù)啟用、基礎(chǔ)配置等前置步驟串起來(lái)通過(guò)引導(dǎo)式問(wèn)答完成環(huán)境搭建。對(duì)第一次接觸平臺(tái)的人來(lái)說(shuō)這個(gè)入口是最友好的。不過(guò)我個(gè)人的建議是第一次搭測(cè)試環(huán)境可以用Booster快速起步生產(chǎn)環(huán)境還是回到手動(dòng)流程。原因是Booster幫你做了很多決定比如配額分配、服務(wù)計(jì)劃選擇這些決定默認(rèn)不一定適合你的業(yè)務(wù)場(chǎng)景。只有自己手動(dòng)配一遍才能清楚每個(gè)步驟背后的含義后續(xù)出了問(wèn)題也更容易定位。其實(shí)Booster最大的價(jià)值在于“演示”和“驗(yàn)證”而不是“生產(chǎn)配置”。如果Booster執(zhí)行到一半卡住了通??梢栽谌蝿?wù)日志里看到具體失敗原因。日志會(huì)直接指出是哪一步權(quán)限不足還是配額不夠。按日志提示去子賬戶和配額界面調(diào)整通常就能繼續(xù)。不要一看到卡住就重跑先分析原因會(huì)更高效。4. 日常運(yùn)維與排障Cockpit里那些能省時(shí)間的細(xì)節(jié)4.1 看日志與應(yīng)用狀態(tài)Cockpit里進(jìn)入某個(gè)空間的Overview能看到該空間下已部署應(yīng)用的狀態(tài)和實(shí)例數(shù)量。點(diǎn)擊具體應(yīng)用可以查看實(shí)例是否正常、資源占用情況、請(qǐng)求記錄等信息。這里看到的不是代碼級(jí)日志代碼級(jí)日志通常要去對(duì)應(yīng)的應(yīng)用運(yùn)行時(shí)里查但Cockpit的作用在于快速判斷應(yīng)用是否崩潰、是否頻繁重啟。我平時(shí)比較習(xí)慣先通過(guò)Cockpit做一層過(guò)濾如果應(yīng)用狀態(tài)異常就再往下鉆到運(yùn)行時(shí)日志看具體報(bào)錯(cuò)如果狀態(tài)正常但接口返回異常再結(jié)合目的地和網(wǎng)絡(luò)配置繼續(xù)排查。這種分層排查思路比直接扎進(jìn)日志里翻要清晰得多也能更快定位是資源問(wèn)題還是代碼問(wèn)題。4.2 排障套路先查區(qū)域、再查配額、最后查權(quán)限結(jié)合我自己踩過(guò)的坑90%的報(bào)錯(cuò)都逃不出這三類區(qū)域不對(duì)、配額不夠、權(quán)限不足。如果你照著教程操作結(jié)果界面和教程對(duì)不上先看當(dāng)前選中的區(qū)域是不是和教程一致區(qū)域選錯(cuò)會(huì)直接影響菜單和服務(wù)列表如果服務(wù)創(chuàng)建到一半失敗大概率是配額分配不夠如果界面某些按鈕點(diǎn)了沒(méi)反應(yīng)或者報(bào)403那就去檢查用戶的角色集合是否綁定成功。這套排查順序看起來(lái)簡(jiǎn)單但在實(shí)際使用中真的很管用。有一次用戶反饋“我能登錄Cockpit但進(jìn)不了空間的應(yīng)用頁(yè)面”我先讓他確認(rèn)區(qū)域沒(méi)問(wèn)題再看子賬戶配額也沒(méi)問(wèn)題最后才想到是不是角色集合沒(méi)有正確分配一看果然如此。如果一開始就去翻日志估計(jì)要折騰很久。4.3 用標(biāo)簽和成本視圖管理資源Cockpit支持在子賬戶、空間等資源上打標(biāo)簽這一點(diǎn)很適合多項(xiàng)目共用平臺(tái)的情況。一開始我也忽略了這個(gè)功能覺得多一步操作很麻煩后來(lái)項(xiàng)目多了資源列表變得雜亂想統(tǒng)計(jì)某個(gè)項(xiàng)目用了多少資源只能靠猜。后來(lái)我養(yǎng)成了習(xí)慣創(chuàng)建子賬戶時(shí)就打上項(xiàng)目名和環(huán)境標(biāo)簽后續(xù)成本報(bào)表可以按標(biāo)簽維度查看。平臺(tái)的成本報(bào)表功能能看到配額使用情況和消耗趨勢(shì)。到了月底和人核對(duì)賬單時(shí)可以很清楚地知道某個(gè)項(xiàng)目的資源消耗在哪一個(gè)子賬戶用在什么服務(wù)上。雖然這一步對(duì)功能開發(fā)本身沒(méi)有影響但對(duì)負(fù)責(zé)成本管理的人來(lái)說(shuō)非常重要。剛開始用Cockpit時(shí)不必把標(biāo)簽作為優(yōu)先事項(xiàng)但項(xiàng)目一旦超過(guò)三個(gè)這就會(huì)變成剛需。5. 個(gè)人實(shí)操心得這些細(xì)節(jié)最能看出是否真正上手5.1 盡早養(yǎng)成“從子賬戶出發(fā)”的習(xí)慣我剛上手時(shí)特別隨心所欲看到左側(cè)有菜單就直接點(diǎn)結(jié)果經(jīng)常在不同環(huán)境和子賬戶之間跳來(lái)跳去最后不知道自己改的是哪一塊配置。后來(lái)我給自己定了一個(gè)規(guī)矩每次做任何操作之前先在左側(cè)確認(rèn)當(dāng)前選中的子賬戶然后再?gòu)淖淤~戶的Overview頁(yè)面出發(fā)。這個(gè)習(xí)慣堅(jiān)持下來(lái)之后誤操作的概率大大降低。尤其是同時(shí)管理多個(gè)子賬戶時(shí)誤操作到別的環(huán)境風(fēng)險(xiǎn)很高。給子賬戶起名的時(shí)候也要考慮可讀性比如加上項(xiàng)目前綴或環(huán)境后綴不要用“test1”“test2”這種只有自己看得懂的名字。團(tuán)隊(duì)協(xié)作時(shí)清晰命名比想象中重要。5.2 管理密鑰與憑據(jù)要趁早規(guī)劃創(chuàng)建服務(wù)實(shí)例時(shí)順手生成的服務(wù)密鑰如果弄丟了大部分情況可以在服務(wù)實(shí)例詳情頁(yè)重新創(chuàng)建不算嚴(yán)重事故。真正值得重視的是不要把密鑰明文寫在項(xiàng)目代碼里更不要提交到版本庫(kù)。順便說(shuō)一句平臺(tái)對(duì)憑據(jù)的輪換也有建議機(jī)制定期更新并同步到應(yīng)用配置里是更穩(wěn)妥的做法。實(shí)際工作中我習(xí)慣用一個(gè)專門的位置保存密鑰文件并嚴(yán)格控制訪問(wèn)權(quán)限。如果密鑰泄露第一時(shí)間重新生成并更新相關(guān)配置然后排查可能受影響的服務(wù)。這種事在開發(fā)環(huán)境里影響范圍有限一旦發(fā)生在生產(chǎn)環(huán)境就會(huì)非常麻煩。5.3 多利用文檔入口少依賴過(guò)期教程Cockpit界面里大多數(shù)模塊都帶有查看相關(guān)文檔的入口點(diǎn)進(jìn)去能看到該功能的最新解釋和限制。有些服務(wù)在界面上會(huì)明確標(biāo)注已停止維護(hù)并給出替代方案。以官方頁(yè)面和實(shí)時(shí)界面為準(zhǔn)是使用Cockpit最靠譜的方式。我就見過(guò)有人照著一篇很早的文章操作文章里的入口已經(jīng)在新版界面中被挪到了別處結(jié)果他對(duì)著屏幕找了半天都沒(méi)找到還以為是權(quán)限問(wèn)題。后來(lái)點(diǎn)開文檔鏈接十分鐘就解決了。網(wǎng)絡(luò)上的教程只能作為參考真正會(huì)隨著版本更新的只有官方界面和文檔。5.4 給剛起步的人一個(gè)可執(zhí)行的路線如果你剛接觸Cockpit不知道從哪里開始我建議按照這樣的順序走一遍先用試用賬戶登錄把區(qū)域切換、賬號(hào)信息看一遍然后創(chuàng)建第一個(gè)子賬戶順手啟用默認(rèn)空間接著從服務(wù)市場(chǎng)訂閱一個(gè)輕量服務(wù)創(chuàng)建實(shí)例并生成密鑰最后配置一個(gè)HTTP目的地并成功完成連接測(cè)試。走完這一圈Cockpit的骨架就基本清楚了。后面再碰更復(fù)雜的配置無(wú)非是在這條骨架上增加細(xì)節(jié)。Cockpit的功能很多但核心操作邏輯是相通的。反復(fù)用過(guò)幾次之后你就會(huì)明白它并不神秘只是一個(gè)設(shè)計(jì)上分層清晰的資源管理臺(tái)。踩過(guò)幾次坑之后你對(duì)它的理解會(huì)完全不一樣。