2022-10-08 分類: 網站建設
隨著云計算、DevOps和微服務應用架構的發(fā)展,容器云成為IT的主要基礎設施平臺之一。以Docker為代表的容器技術,是目前有效的應用交付模式之一;以Kubernetes為代表的容器編排技術,是目前流行的應用部署方案。云平臺的基礎設施、DevOps的工程體系和微服務應用架構是IT技術轉型的底座。而容器云又是這個底座下的一塊基石。
下面幾個問題是在Docker+K8S容器云建設過程中,最常被問起和需要解決的難點問題。來自社區(qū)交流活動,多位社區(qū)會員分享解答,整理者:gavin_zhang
1、企業(yè)是應該選擇原生的Docker還是定制化的Docker,比如胖容器/富容器?
【問題描述】Docker是當前企業(yè)在進行容器化時選的容器技術,但是原生的Docker在實際使用的過程中,特別是在傳統(tǒng)虛機運維到容器化運維的過渡中,會碰到以下類似問題:
1、如何ssh登錄到容器,像登錄虛機那樣,可以通過ssh進行管理
2、對于普通用戶來說,如何從容器中拷貝文件到外部
3、虛機中一般會配置定時任務,在容器中如何實現(xiàn)
4、虛機中一般會安裝各種agent,容器中怎么去安裝
若企業(yè)直接采用原生的Docker,那么以上問題是比較棘手的。因此企業(yè)在容器技術選型上,是否應該為了大程度兼容虛機運維模式,對Docker進行定制化改造,滿足實際需求呢?
@某銀行 技術經理:
是使用原生還是定制就要看企業(yè)實力了。一般的企業(yè)不會去動原生的東西,不愿意將人力花在這個方面。很多企業(yè)是通過應用的改造來適配容器化的方案,包括運維上的問題。
4個問題:
1、docker exec可以進入容器,如果是k8s或者ocp,還有有相應的api
2、方便拷貝的方式第一個容器中應用產生的文件目錄掛載到本地;第二個使用相應的命令如docker cp;也許你說的不僅限一些簡單場景,其實都是有方法的,不僅以上兩種
3、容器中也是可以使用crontab定時任務操作的
4、agent的功能要先說清楚,如果上k8s或者ocp,一個pod可以完成你要說的內容。如果僅僅是用docker,根據(jù)功能需要應該也是有方法的。
@gavin_zhang 某股份制銀行 系統(tǒng)架構師:
1、docker exec可以滿足要求
2、最直接就是掛在本地磁盤存儲到容器上
3、可以考慮一下,定時調度起一個Docker執(zhí)行任務
4、主要是這些Agent是用來干什么的?Docker實例本來就是作為一種一次性的,不可變的運行實例,傳統(tǒng)虛擬機的那個操作Agent,不符合容器的設計理念
定制化大的問題在于,目前技術升級比較快,一旦定制,就鎖定在幾個版本了,后續(xù)升級維護工作量會很大。
2、容器云平臺主流技術和成熟產品選型及如何制定相關的標準和規(guī)范探討?
【問題描述】在引入容器平臺時,需先了解當前主流的容器平臺技術和成熟產品,然后制定相關的標準和規(guī)范。具體如下:
想了解當前主流容器平臺openshift3、openshift4、Rancher、博云等國產容器產商的有哪些區(qū)別?容器平臺如何選型?這些產品的功能、性能比較。
除了資金成本,容器平臺后期的使用和運維需要如何考慮,目前公司自己對容器平臺的開發(fā)能力不在,運維人員需要具體具備哪些能力,運維與開發(fā)如何協(xié)作,投入運維人員的規(guī)模如何估算?
容器平臺早期實施的過程中需要做哪些規(guī)劃,避免哪些坑?
此問題有多位同行進行詳細的解答分享,我們已經專門整理成一篇文章,并在不久前向讀者們推送過,點擊下面的標題即可回顧閱讀:
3、Kubenetes在金融多安全域的環(huán)境中,架構規(guī)劃問題?
【問題描述】金融行業(yè)網絡架構中存在多安全域的設計,kubenetes在多安全域網絡隔離的情況下,每個安全域都部署一套k8s集群嗎?生產環(huán)境k8s集群中calico有哪些網絡控制策略好實踐?
@nameless 某云計算廠商 技術總監(jiān) :
理論上來說各個安全域的網絡時隔離的,如果部署一套k8s集群,所有的node節(jié)點和master節(jié)點是聯(lián)通的,node直接默認也是聯(lián)通的??梢悦總€安全域部署一套k8s集群,使用同一的容器管理平臺,這是k8s多集群管理。
calico是k8s其中一個網絡插件,其他還有flannel、ovs等不同的網絡插件,生產使用哪一種網絡插件需根據(jù)自身業(yè)務需求選擇。
@某銀行 技術經理:
其實不需要這么復雜,比如分了互聯(lián)網區(qū)、中間業(yè)務區(qū)、核心業(yè)務區(qū),k8s集群有6個node節(jié)點,可以兩個放互聯(lián)網、兩個放中間業(yè)務,兩個放核心業(yè)務,比如master節(jié)點都在OA區(qū),只要將master跟著6個node網絡上能通即可,不需要node間都能互相訪問,一個集群也是可以的。
calico是可以解決集群內外訪問的問題,但是隨著需要訪問集群的外部節(jié)點的增加,那運維成本就很高了??梢允褂胕ngress類似的解決方案。
4、容器云平臺建設難點之網絡如何選擇?如果選SDN網絡,那么SDN網絡實現(xiàn)方案又應該如何選擇?
【問題描述】容器網絡如何選擇?容器云平臺的網絡一直是一個技術難題,是采用SDN網絡還是橋接到Underlay網絡;如果使用SDN網絡,那么多的SDN網絡實現(xiàn)方案,如何選擇?
@liufengyi 某互聯(lián)網銀行 軟件架構設計師:
優(yōu)先考慮公司整個網絡扁平化,互聯(lián)互通,這樣對應用改造成本要小很多,即基于公司原來的網絡打通來進行。如果容器的應用是一個相對獨立的服務,可以考慮overlay。規(guī)模不大的情況下一些開源網絡組件可以考慮采用。
@某金融企業(yè) 系統(tǒng)工程師:
calico、bgp、ingress、nginx等都是可以的
1、calico將集群內與集群外網絡打通,但是隨著集群外訪問集群內的節(jié)點越來越多,運維難度會加大
2、bgp需配置內部路由協(xié)議,性能上有損耗
3、ingress、nginx道理類似,將需要被外部訪問的應用使用這兩個組件外部負載進到集群內部
4、hostnetwork方式
5、nodeport方式
……
如何選擇要根據(jù)自身IT架構及監(jiān)管要求定了
@zhuqibs 軟件開發(fā)工程師:
關于SDN還是underlay,如果你是自建的,一定不會選用SDN, 成本啊,兄弟們!Cisco去年要給我們搭建個ACI, 一個交換機就是1萬多,如果是銀行錢多沒有關系,中小企業(yè)資金緊張加上疫情,哪會選擇。
VMware的NST-G我們也用過,有bug,這個PKS每個月都會有一次“月經”,每次網絡存儲全堵死,IO基本龜速,廠商派人解決了大半年,連交換機都換了都沒有解決,結果賠了3臺服務器,幫我們全換成普通的vcentor。
SDN聽上去美好,現(xiàn)實很骨感,當然如果你有錢并愿意試錯,又追求新技術,當然也是沒問題的。比如阿里云、騰訊云這些公有云,基本必然是SDN,人家有錢有人,來填坑。
所以,一般公司Underlay就可以了,加上Kubernetes自己的calico,fannel,或cattle,一般都沒問題,就是網絡上沒有硬隔離,沒有客戶化的東東,但我們可以用公有云的啊,自己去建,多費錢。
@xiaoping378 某行科技公司 系統(tǒng)架構師:
1. 既然是說容器云平臺建設,肯定已經有了網絡基礎設施,那不考慮數(shù)據(jù)中心級別的SDN方案。只考慮在已有的網絡建設成果上建設。
2. 不用迷信商業(yè)方案,無論是開源還是商業(yè)方案,大家都得遵守k8s的cni接口。不建議在容器網絡方案中寄托太多的功能,如網絡限速、安群策略等等。
3. 考慮目前主機層面大都可以保障二層是通的。最簡單方案方案可以選flannel。目前flannel發(fā)展到現(xiàn)在,已經支持vxlan模式下啟用DR網絡了,通俗講,就是同一子網下,走hostgw,宿主機充當軟路由,性能接近裸網,垮子網的情況走vxlan。即兼顧了性能,又考慮了可擴展性。另外flannel目前也重點優(yōu)化了大規(guī)模容器云的路由表或arp占用過多問題,做到了:每擴展一個主機只增加一個路由項、一個fdb項、一個arp項。
4. 如果考慮容器網絡隔離和安全策略的話(其實沒必要,網絡隔離,可以從項目級別來設置調度策略做到物理隔離),可以考慮Canal網絡方案,他是calico和flannel的結合體。
@Garyy 某保險 系統(tǒng)工程師:
關于容器網絡的建設思路:
容器網絡發(fā)展到現(xiàn)在,已經是雙雄會的格局。雙雄會其實指的就是Docker的CNM和Google、CoreOS、Kuberenetes主導的CNI。首先明確一點,CNM和CNI并不是網絡實現(xiàn),他們是網絡規(guī)范和網絡體系,從研發(fā)的角度他們就是一堆接口,你底層是用Flannel也好、用Calico也好,他們并不關心,CNM和CNI關心的是網絡管理的問題。
網絡需求調研發(fā)現(xiàn),業(yè)務部門主要關注以下幾點:1、容器網絡與物理網絡打通;2、速度越快越好;3、改動越少越好;4、盡可能少的風險點。
容器的網絡方案大體可分為協(xié)議棧層級、穿越形態(tài)、隔離方式這三種形式
協(xié)議棧層級:二層比較好理解,在以前傳統(tǒng)的機房或虛擬化場景中比較常見,就是基于橋接的 ARP+MAC 學習,它大的缺陷是廣播。因為二層的廣播,會限制節(jié)點的量級;三層(純路由轉發(fā)),協(xié)議棧三層一般基于 BGP,自主學習整個機房的路由狀態(tài)。它大的優(yōu)點是它的 IP 穿透性,也就是說只要是基于這個 IP 的網絡,那此網絡就可以去穿越。顯而易見,它的規(guī)模是非常有優(yōu)勢,且具有良好的量級擴展性。但在實際部署過程中,因為企業(yè)的網絡大多受控。比如,有的企業(yè)網絡的 BGP 是基于安全考慮不給開發(fā)者用或者說企業(yè)網絡本身不是 BGP,那這種情況下你就受限了;協(xié)議棧二層加三層,它的優(yōu)點是能夠解決純二層的規(guī)模性擴展問題,又能解決純三層的各種限制問題,特別是在云化 VPC 場景下,可以利用 VPC 的跨節(jié)點三層轉發(fā)能力。
穿越形態(tài):這個與實際部署環(huán)境十分相關。穿越形態(tài)分為兩種:Underlay、Overlay。
Underlay:在一個較好的可控的網絡場景下,我們一般利用 Underlay。可以這樣通俗的理解,無論下面是裸機還是虛擬機,只要整個網絡可控,容器的網絡便可直接穿過去 ,這就是 Underlay。
Overlay:Overlay 在云化場景比較常見。Overlay 下面是受控的 VPC 網絡,當出現(xiàn)不屬于 VPC 管轄范圍中的 IP 或者 MAC,VPC 將不允許此 IP/MAC 穿越。出現(xiàn)這種情況時,我們可利用 Overlay 方式來做。
Overlay網絡使物理網絡虛擬化、資源池化,是實現(xiàn)云網融合的關鍵。把Overlay網絡和SDN技術結合使用,把SDN控制器作為Overlay網絡控制平面的控制器,這種方式更容易使網絡與計算組件整合,是網絡向云平臺服務轉變的理想選擇。
隔離方式:隔離方式通常分為VLAN和VXLAN 兩種。
VLAN:VLAN 機房中使用偏多,但實際上存在一個問題。就是它總的租戶數(shù)量受限。眾所周知,VLAN 具有數(shù)量限制。
VXLAN:VXLAN 是現(xiàn)今較為主流的一種隔離方式。因為它的規(guī)模性較好較大,且它基于 IP 穿越方式較好。
@Steven99 軟件架構設計師:
容器網絡選擇我個人覺得不是重點,其實不管哪種網絡,都應該對終端用戶透明,所以不應該糾結于網絡模型。
需要考慮的重點可能是安全性,穩(wěn)定性,易用性等,我們使用calico網絡,發(fā)現(xiàn)也是很多問題,在考慮替換。開源產品總是需要很多額外的工作,測試驗證,逐步優(yōu)化,不實際使用,很難說哪種更合適,在使用過程中可能會逐步清晰自己的需求。
容器安全,容器網絡安全可能是重點,特別上生產業(yè)務,服務數(shù)量達到一定量后,會有很多想不到的問題,當然,不實際做過,也很難選擇,所以可以嘗試先用起來,經常使用會逐步清晰明白自己要什么。
5、容器東西向網絡安全是怎么考慮的?
@zhuqibs Mcd 軟件開發(fā)工程師:
東西向流量的控制,是服務網格的控制范疇,istio可以實現(xiàn),但目前istio不完善,所有很不好用。建議使用kong、traefik為代表的api gateway,其中Kong基于nginx,可以在容器中部署到每個pod中去,控制pod和pod之間的流量。
@nameless 某云計算廠商 技術總監(jiān) :
東西向流量指同一宿主機上與其他容器相互訪問,同一主機上pod默認是互通的。
我認為可以從上層邏輯控制上減少安全隱患,即根據(jù)業(yè)務劃分不同的邏輯集群,盡量讓有血緣關系的業(yè)務放在同一邏輯集群。
6、容器中的應用問題排查方法探討?
【問題描述】如何獲取容器里面的堆棧信息,如何抓包分析,當有容器外應用訪問容器內應用或容器內應用訪問容器外應用,如何根據(jù)ip追蹤訪問鏈路?
@zhuqibs Mcd 軟件開發(fā)工程師:
從監(jiān)控組件考慮,可以使用skywalking進行鏈路上api調用中端口信息的跟蹤,如果用商業(yè)化apm組件,cisco、聽云都有不錯的產品。
在微服務架構中,每個pod就是一個服務,在每個應用pod中加入kong組件,每個kong組件都可以輸入流量監(jiān)控數(shù)據(jù)到prometheus,這樣,也能不方便取代鏈路監(jiān)控軟件的功能,當然只是“部分”,skywalking和apm還能取到其他類型的數(shù)據(jù)。
@liufengyi 某互聯(lián)網銀行 軟件架構設計師:
我們集成了apm來做故障發(fā)現(xiàn)和排查,可以通過查詢容器在哪臺宿主機上,然后抓指定虛擬網卡上容器的網絡包。
@gavin_zhang 某股份制銀行 系統(tǒng)架構師:
堆棧信息可以在應用框架加入dump功能,以日志的方式輸出到日志系統(tǒng)。
實現(xiàn)應用的全鏈路最終,解決方案有Spring cloud sleuth等
7、容器云平臺的整體規(guī)劃:包括計算資源、存儲、網絡的選型?
【問題描述】我想了解一下容器云平臺的一個整體規(guī)劃,包括計算資源、存儲、網絡的選型,我們打算將微服務遷移到容器云平臺。
@nameless 某云計算廠商 技術總監(jiān) :
個人意見:
1、首先確定目標,建設容器云平臺的目標,規(guī)劃哪些業(yè)務上容器,大概的資源需求是多少,集群規(guī)模多大等等;
2、容器平臺選型,基本是k8s,這個應該沒問題;
3、計算資源:基本是采用裸機還是虛擬機作為計算資源,兩種方案各有優(yōu)劣,如果已有IaaS平臺,可以采用虛擬機,如果沒有IaaS平臺,也可以直接使用裸機;
4、網絡資源:需要考慮業(yè)務上容器是否需要對業(yè)務進行改造,另外就是將來業(yè)務向容器平臺遷移過程,比如一個微服務業(yè)務,遷移至容器平臺時,先遷移部分微服務,還是整體遷移?遷移部分微服務后,已上容器微服務和未上微服務網絡網絡通信等等;
5、存儲資源:考慮業(yè)務上容器是有狀態(tài)業(yè)務還是無狀態(tài)業(yè)務,已經業(yè)務對性能的影響,選擇合適的存儲資源;
綜上,還需要考慮運維團隊的運維能力、以及和開發(fā)對接等等。
8、使用容器云平臺,如何提升系統(tǒng)開發(fā)和測試的能力?
【問題描述】目前公司選擇springcloud微服務體系,在開發(fā)測試過程中,如何使用容器云平臺提升系統(tǒng)開發(fā)測試能力?能夠提升哪些能力?
有沒有較好的實踐路徑和應注意的關鍵點?比如是否在開發(fā)測試云上先搭建通用的服務(注冊中心等,是否開發(fā)測試云通用一套服務?),maven私倉管理、基礎鏡像管理等等?
@gavin_zhang 某股份制銀行 系統(tǒng)架構師:
對于測試,可以使用容器平臺的持續(xù)交付的能力,縮短測試版本周期和環(huán)境準備的時間;使用平臺靈活的路由功能,進行多版本兼容性測試。
較好的實踐路徑和應注意的關鍵點 :
1.通用的服務建議統(tǒng)一建設成平臺服務,但是不建議測試開發(fā)使用同一個運行實例。
2.建立私有的鏡像倉庫,制定基礎鏡像白名單。
3.做好鏡像的版本管理,利用容器和git的tag,做到實例和鏡像,鏡像和源碼的對應。
9、銀行重要的業(yè)務場景如何用k8s做滾動更新?
@某銀行 技術經理:
這個問題細說的話就多了,需要看業(yè)務場景。強一致性交易類業(yè)務,像消費之類的需要應用本身來保證,事務失敗要能回滾。那版本升級回滾就要有優(yōu)雅停機的動作,一些渠道類交易,只是做中間轉接,一般是可以直接做升級回滾的。
升級回滾的操作,主要是通過替換應用依賴的鏡像版本。k8s的升級回滾是利用新版本鏡像或者舊版本鏡像拉起一個新pod,下線一個舊pod依次完成此操作的,保證業(yè)務正常運行。
@gavin_zhang 某股份制銀行 系統(tǒng)架構師:
平臺方面:結合K8s的流量分發(fā),實現(xiàn)金絲雀發(fā)布機制,通過精細的流量控制,來實現(xiàn)業(yè)務的滾動更新。應用方面:應用需要有合理的設計,在規(guī)劃時就需要有相關的設計,對應用有合理的低耦合的切分,盡量減少發(fā)布應用的涉及面,這其中最重要的如何實現(xiàn)問題的回退,特別是影響到賬務數(shù)據(jù)的,采用數(shù)據(jù)染色或是零時表的方式,盡量做到應用可回溯。
@rangeryu 螞蟻金服 產品經理:
這個問題可以結合著螞蟻作大規(guī)模發(fā)布的時候所關注的變更管理來回答。
原生 deployment 做灰度或者金絲雀發(fā)布時,默認情況下在 Pod 變更和流量治理層面的管控還稍顯不足,無法完全做到無損發(fā)布或按需過程管控。因此,我們在 PaaS 產品層面做了定制,在 Kubernetes 層面做了自定義資源的擴展,目的是能夠在云原生的場景下,依然對整個發(fā)布過程實現(xiàn)精細化管控,使得大規(guī)模集群發(fā)布、灰度、回滾時更加優(yōu)雅,符合技術風險三板斧原則。
在實際的生產環(huán)境中,圍繞容器大規(guī)模變更會配合業(yè)務監(jiān)控及更多維度的觀察,確保每一步都是符合預期、驗證通過的。這樣在應用實例層面的精細化管控,為運維提供了能夠及時剎車回滾的機會,是線上應用發(fā)布的一個重要的保險繩。
簡單來說,在螞蟻內部所有的變更要滿足” 可灰度、可監(jiān)控、可應急 “,當基礎設施全面轉向云原生,就開始基于Kubernetes作了非常多擴展和補充。對于金融業(yè)務場景,從實際產品層,需要做到:
1. 感知底層拓撲
2. 分組/beta/分批發(fā)布
3. 優(yōu)雅摘流
10、 容器云的高可用問題?為了實現(xiàn)高可用,容器云內部需要多個獨立的Kubernetes集群,底層網絡和基礎設施應該如何部署才能實現(xiàn)故障隔離?應用如何在多個集群之間實現(xiàn)故障轉移?
@某銀行 技術經理:
k8s應用高可用的功能都是k8s本身完成的,如果需要做到集群間的單個應用的高可用,應該是要做高度定制,在容器云平臺上監(jiān)控應用的狀態(tài),公用鏡像倉庫。
@gavin_zhang 某股份制銀行 系統(tǒng)架構師:
目前的一種實現(xiàn)方案是有應用層來做跨集群的高可用方案,利用Euraka或是Zookeeper這種跨集群的管理中心,來實現(xiàn)應用之間的跨集群調用。如果實現(xiàn)了服務網格(Service Mesh),可以考慮在Service Mesh層實現(xiàn)。
分享文章:Docker+k8s容器云建設中10個常見難點
分享網址:http://jinyejixie.com/news37/203487.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供全網營銷推廣、網站建設、建站公司、品牌網站制作、標簽優(yōu)化、網站改版
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容