• <button id="4os99"><acronym id="4os99"><menuitem id="4os99"></menuitem></acronym></button>
  • <th id="4os99"><pre id="4os99"></pre></th>
  • <em id="4os99"><tr id="4os99"><kbd id="4os99"></kbd></tr></em>
  • <form id="4os99"></form>
      1. <progress id="4os99"></progress>
        登錄
        立即咨詢

        語言選擇

        諧云 諧云
        在這里探索云原生
        云原生業務上云遷移的最佳實踐
        2022年12月14日

        一、容器資源規劃

        主機資源規劃

        主機資源規劃,即資源池規劃,主要指應用所在的主機資源規劃。

        在K8S集群中,Namespace是邏輯上的概念,如上圖所示,集群中任意一臺主機都能運行各個Namespace的Pod,存在主機資源搶占的情況。因此需要對主機資源池進行精細化管理。

        如上圖所示,可以根據業務性能、是否為核心業務等特性對集群中的主機資源進行資源池劃分,限制其運行主機,防止資源搶占:

        • 高性能應用,例如中間件,依賴本地磁盤,而通用業務一般不依賴本地磁盤,就可以考慮為中間件單獨規劃對應的資源池;

        • 租戶項目規模多,可以根據業務的特性(核心、非核心)規劃資源池。

        • 租戶項目規模少,且沒有核心業務,可以考慮共享的方式不再單獨規劃資源池,即為默認資源池;

        租戶、項目、命名空間資源規劃

        租戶:從公司的組織架構上可以認為是一個部門或者大的項目集。

        項目:項目一般會對應到一個具體的項目組。

        命名空間:可運行服務的一個命名空間,為K8S中的Namespaces。

        事先需要規劃好租戶、項目、命名空間,避免重復性工作。在容器云平臺中,命名空間資源是有限制的,即限制CPU、內存、存儲等資源使用,在規劃命名空間時,需要預留部分資源,服務升級、彈性擴容等行為可能會由于資源不足導致對應行為失敗的情況。分以下幾種情況劃分命名空間:

        情況一:當租戶項目規模少時,可以按照項目劃分命名空間,每個項目獨享自己的命名空間,不同命名空間的資源是隔離的。

        情況二:租戶項目規模多,如果按照項目來規劃命名空間,每個命名空間都需要預留額外的資源(用于升級、擴容等),租戶的資源需要冗余很多資源,有礙提升資源利用率,在這種情況下,就可以按照租戶劃分命名空間,租戶下的項目共享一個命名空間,如果個別項目需要資源隔離可以單獨規劃一個命名空間。

        多租戶管理

        資源管理思路:

        • 平臺管理員:容器平臺運營負責人,管理整體計算資源池以及平臺各個租戶權限管理;

        • 租戶負責人:對應各部門、地市、省份等的管理員,劃分租戶內的各項資源和管理租戶成員、項目管理員權限;

        • 項目管理員:對應到租戶下面有具體資源需求的項目組的負責人,管理項目組成員權限;

        • 項目成員:對應一個運營團隊的成員,負責服務各項管理工作的研發、測試、運維等人員;

        • 工作空間:即命名空間(Namespace):對應一個應用/模塊的運行空間,可運行多個服務,與其他工作空間之間存在網絡隔離。

        資源分配流程:

        • 平臺管理員創建部門的租戶負責人,并配置關聯其擁有的集群資源配額;

        • 租戶負責人將自己的資源進行劃分,分配給具體的部門/項目組使用;

        • 項目管理員將相關項目組/部門成員添加進項目組,按開發/測試/運維等角色賦予操作權限;

        • 項目成員按需創建工作空間,發布相應的服務;

        網絡資源規劃

        網絡資源,主要指K8S中的Pod IP規劃(MacVlan、Calico BGP):

        • 需要開通不同網絡域網絡策略,建議采用固定IP池的方式部署,IP的個數建議為應用實例數的1.5倍(向上取整);

        • 當IP資源緊張時,適當集群采用多種網絡方案(CalicoIPIP)。

        當一個集群存在多個網絡域,并且網絡域之間是隔離的。

        網絡域管理思路:

        • 網絡域:子網的集合,一個網絡域屬于一個集群,一個集群下有多個網絡域,網絡域之間相互隔離。

        • 子網:等同于在交換機上配置的VLAN,一個網絡域可以有多個子網,一個子網只能屬于一個網絡域。

        資源分配流程:

        • 平臺管理員維護好網絡域內的未分配IP數即可,不需要關注不同租戶對于IP地址數的需求差異,以及實際業務的用量情況,在網絡域IP余量不足時,通過添加子網的方式擴容,并分配各個租戶網絡域資源。

        • 租戶/項目人員選擇相關網絡域發布對應應用。

        負載均衡規劃

        負載均衡節點規劃,主要指的是部署負載均衡Ingress-Controller節點規劃。

        • 項目規模大,建議事先規劃好負載均衡節點;

        • 按照業務重要性規劃負載均衡,不同類型的項目可以使用不同的IngressController的節點,比如重要項目和非重要項目可以使用不同的主機。

        負載均衡數量規劃,主要指的是負載均衡節點上部署負載均衡數量,需注意同一臺主機上同網絡的負載均衡端口沖突問題:

        • 統一規劃HTTP/HTTP端口范圍,以及nginx的配置模版;

        • 按照業務類別規劃不同的HTTP/HTTPS端口;

        • 業務請求量大的單獨建議規劃一個端口。

        負載均衡TCP/UDP端口規劃,主要指的是IngressController的TCP/UDP端口規劃:

        平臺統一規劃好TCP端口范圍;HTTP服務建議使用http對外服務方式,慎用TCP端口;按照業務規劃對應的TCP端口池。

        案例一:多網絡域且項目規模小

        在K8S集群中,單獨規劃一組負載均衡節點(兩臺及兩臺以上)分別部署各個網絡域的負載均衡(80/443端口),各個網絡域的負載均衡分別代理自己網絡域的應用。

        案例二:多網絡域且項目規模大

        在大規模K8S集群中,為大流量或核心的業務分別在各網絡域規劃一組負載均衡節點,承擔其業務;其他通用的業務另規劃一組負載均衡節點。

        鏡像資源規劃

        基礎公共鏡像:

        • 平臺建議提供統一系統基礎鏡像;

        • 基礎鏡像大小盡量小, 輕量級的應用便于大規模集群中快速傳輸分發,更符合容器敏捷的理念;

        • 基礎鏡像版本規劃,便于基礎鏡像更新和升級;

        • 基礎鏡像提供統一的端口規劃,便于監控,如tomcat鏡像建議使用統一的web端口(8080);

        • 基礎配置參數外部化,配置參數外部化于配置文件或者環境變量,便于應用容器適配不同的運行環境;

        • 基礎鏡像通過安全掃描;

        • 集成常用的工具命令以及內網源;

        業務鏡像:

        • 每個項目每個集群建議有自己的私有鏡像倉庫;

        • 私有鏡像倉庫清理規則管理:

        • 平臺可以提供統一的清理規則,比如保留每個鏡像的最近10個版本;

        • 項目又可以自定義自己的清理規則;

        • 項目的基礎鏡像與應用的鏡像名稱建議分開,基礎鏡像更新頻率低,容易被誤清理。

        • 鏡像倉庫備份,建議開啟鏡像備份功能

        存儲資源規劃

        遠程共享存儲,盡量使用非高IO和非高實時性場景,應用日志不建議放到共享存儲,建議使用EmptyDir方式掛載,使用其他日志收集組件收集。

        適當復用本地存儲,存儲IO高的應用不建議共享存儲,可以引用本地存儲,如CI流水線依賴,公共依賴(如公共java的本地倉庫目錄,npm緩存目錄)不建議使用共享存儲,可以使用本地存儲,共享存儲依賴網絡,影響構建時間。

        二、應用上云

        應用上云圖譜

        不推薦容器化

        • 應用單個實例資源需求巨大的應用

        • 需要固定硬件,或者是必須依賴特定硬件等;

        • 對內核有依賴或者對內核有操作的應用;

        • 非UTF-8編碼的應用。

        可以容器化

        • 對IO等運行環境要求比較高的應用;

        • 高性能計算的應用;

        • Windows應用

        • 商用化應用;

        • 多進程應用;

        推薦容器化

        • 功能單一的單進程應用;

        • 無狀態的應用;

        • 變更頻繁的應用;

        • 有重復部署需求的應用;

        • 具備橫向擴展能力的應用。

        鏡像打包最佳實踐

        業務等鏡像打包最佳實踐:

        • 使用安全的基礎鏡像,并進行安全掃描;

        • 盡可能使用統一基礎鏡像,增加鏡像分層的復用性;

        • 減少鏡像的層數,盡量把一些功能上面統一的命令合到一起來做;

        • 盡量使用yum,apt-get等在線安裝方式安裝軟件包,并注意清理其中間產物,比如一些安裝包在裝完之后就把它刪掉;

        • 盡量使用單獨目錄進行鏡像否決,減少空間損耗;

        • 多階段進行鏡像構建,確保鏡像最干凈/最??;

        • 使用CMD exec運行方式;

        • 盡量去構建緩存,盡量把一些不變的東西或者變動比較少的東西放在前面,因為不變的東西是可以被緩存的,如果不想使用緩存,則可以在docker build時添加--no-cache=true選項;

        • 使用COPY而非ADD;

        • 使用Supervisor 、S6等init進程管理多個進程;

        • 統一規劃應用安裝路徑和啟動腳本,如統一為/root/app;

        • 應用配置參數外部化,使用環境變量、配置文件方式注入。

        容器遷移步驟最佳實踐

        應用容器化步驟最佳實踐

        三、應用管理

        應用容器化原則

        應用容器化需要滿足以下的原則:

        • 不要在容器中存儲數據

        · 由于容器是一次性的,當容器被停止、銷毀或替換時,應用在容器中存儲的數據同樣會被銷毀。如果應用需要存儲數據,需存儲在共享數據存儲中。

        • 不要發布兩份應用

        · 一些人將容器視為虛擬機。他們中的大多數傾向于認為他們應該在現有的運行容器里發布自己的應用。在開發階段這樣是對的,此時你需要不斷地部署與調試;但對于質量保證與生產中的一個連續部署的管道,你的應用本該成為鏡像的一部分。記?。喝萜鲬摫3植蛔?。

        • 清除不必要的包和文件

        · 容器的一個顯著特點是秒級啟動,一旦制作了一個超大的鏡像將難以分發。在鏡像中應該確保僅有運行應用/進程的必需的文件和庫存在,其他不必要的包、文件等建議應用打包前進行清除。

        • 不要在容器中運行多個進程

        · 容器能完美地運行單個進程(http守護進程,應用服務器,數據庫),但是如果不止有一個進程,管理、獲取日志、獨立更新都會遇到麻煩。

        • 盡可能設計成無狀態

        · 無狀態服務能夠非常容易的做水平擴展,可以做到快速擴容。

        • 服務配置與容器鏡像內容分離

        · 不要在應用中寫死服務的IP和端口(如數據庫IP和端口、服務接口IP和端口),采用域名的方式。環境變量應該以傳參的形式傳入容器,而不是直接寫死在容器中,需要的環境變量可寫入系統集成文檔中。

        • 使用非root用戶運行

        · docker容器默認以root運行。隨著docker的成熟,越來越多的安全默認選項變得可用。請求root是危險的,可能無法在所有環境中可用。所以鏡像應該使用USER命令來指令容器以一個非root用戶來運行。

        • 不要依賴IP地址

        · 每個容器都有自己的內部IP地址,如果你啟動并停止它地址可能會變化。如果應用或微服務需要與其他容器通訊,由于容器IP是不固定的,應用依賴IP地址將無法與其他容器通訊,可以使用K8S內部dns代替ip地址配置形式與其他容器進行通訊。

        • 控制輸出到stdout和stderr的日志寫入量日志

        • 采用集中化處理方案

        • 采用獨立的容器處理定時任務

        • 不要在鏡像中存儲憑據

        · 不要將鏡像中的任何用戶名/密碼寫死。使用環境變量來從容器外部獲取此信息。

        應用鏡像tag使用規范

        部署容器鏡像時,避免使用latest tag:

        • 難以追蹤當前部署的鏡像版本;

        • 難以進行回滾操作;

        • ImagesPullPolicy為IfNotPresent時,本地鏡像不會更新。

        每個鏡像tag使用應用版本號來標識。

        應用健康檢查規范

        應用健檢查規范是實現自動化運維的重要組成部分,也是系統故障自動發現和自我恢復的重要手段。目前有兩種健康檢查方式,分別是進程級和業務級。

        進程級健康檢查是Kubernetes本身具備的,它用來檢驗容器進程是否存活,是默認開啟的。

        業務級的健康檢查由業務實現,它有三點要求:

        • 必須要檢查自身核心業務是否正常;

        • 健康檢查程序執行時間要小于健康檢查周期;

        • 健康檢查程序消耗資源要合理控制,避免出現服務抖動。

        應用健康檢查實現

        健康檢查程序在不同環境下有著不同的實現:

        • web服務下采用HTTP GET方式進行健康檢查,需要實現類似一個“/healthz”URL,這個URL對應的程序需要檢查所有核心服務是否正常,健康檢查程序還應該在異常情況下輸出每一個檢查項的狀態明細。

        • 其他網絡服務下可以采用探查容器指定端口狀態來判斷容器健康狀態。

        • 非網絡服務下需要在容器內部執行特定命令,根據退出碼判斷容器健康狀態。

        主機網絡模式

        一般應用不建議使用主機網絡。如果使用主機網絡模式,需要考慮以下問題:

        • 避免與主機其他系統端口沖突;

        • 多實例服務需要強制分散,部署在不同的主機上;

        • 避免容器故障或者容器所在的主機出現故障,建議引入額外的負載均衡器或其他工具來避免單獨故障。

        應用存儲卷設置

        將存儲放置與容器內部

        • 優點:配置簡單,便于容器實例水平擴展;存儲性能也和宿主機上啟動相當,幾乎沒有額外的損耗。

        • 缺點:容器銷毀或刪除,容器內的存儲也會被銷毀,數據持久化比較困難;同時,在業務邏輯上要求每個容器實例存儲文件相互沒有管理。

        • Volume類型選擇:使用EmptyDir類型,可以供一個Pod內多個容器共享;也可以不使用任何Volume類型,由容器引擎管理應用的文件存儲。

        • 適用場景:適用無狀態容器應用,在系統運行過程中產生的臨時文件可以被保存在容器的存儲空間里。

        • 注意事項:需要考慮存儲空間的限制。

        將存儲掛載在外部宿主機上

        • 優點:數據不會因容器銷毀而丟失,可永久保存;存儲性能與直接在物理機使用相當,沒有磁盤I/O的額外損耗。

        • 缺點:多實例的應用在同一臺宿主機上的目錄配置變的復雜,要求實例對存儲的使用互補干擾;歷史數據在后期業務中仍需使用,需要將容器應用與主機形成綁定關系,不利于應用在故障恢復時選用其他可以的節點重建。

        • Volume類型選擇:使用HostPath類型,將宿主機目錄掛載到容器內;使用local類型的PV,如lvm

        • 適用場景:適用有狀態容器應用,以及對磁盤I/O性能要求高的應用,同時這類應用應該不能隨意水平擴展;還需要通過其他機制實現存儲高可用保障,如可以使用數據遠程備份數據。

        • 注意事項:需要考慮存儲空間的限制;避免多實例運行在同一臺主機。

        使用外部共享存儲

        • 優點:配置簡單,數據的持久化、備份都由共享存儲提供解決方案,也便于容器的水平擴展。

        • 缺點:由于共享存儲多是網絡存儲,所以在進行文件讀寫時需要經過網絡傳輸,存儲性能比較差。

        • Volume類型選擇:使用PV或者StroageClass類型的Volume。

        • 適用場景:適用對磁盤I/O性能要求不高的應用。

        • 注意事項:需要考慮PV存儲空間的限制;需要考慮存儲的性能。

        應用彈性伸縮管理

        應用彈性伸縮有以下幾種方式:

        • 手工擴縮容

        · 應用場景:手工擴縮容通常用于預先知道業務量的變化的情況,如有計劃的市場促銷活動,可以預先通過手工方式對Pod鏡像水平擴容,已達到對預期增加量的支持,在業務高峰過后,預期業務量下降,也可以手工方式縮減容器實例釋放系統資源。

        · 局限性:手工方式對于不可預料的突發業務量的變化很難提供支持。

        •  基于CPU/內存使用率的自動擴縮容

        · 應用場景:在CPU/內存使用率提高時能夠水平擴展來完成更多業務。

        •  自定義業務指標的自動擴縮容

        · 應用場景:可以通過監控等組件來實現自定義業務指標給HPA控制器進行擴縮容決策。

        •  基于時間段進行擴縮容

        · 應用場景:有明顯業務量特征規律的應用,設置時間段進行實例擴縮,如白天業務量比較多,半夜業務量少,就可以設置對應的時間段,在白天進行實例擴增,半夜進行實例縮容。

        業務無感知彈性伸縮

        應用場景:當業務量臨近觸發閾值,會頻繁觸發業務彈性伸縮;當前彈性縮容過程中存在丟失連接,Pod尚未處理完請求就被Kubelet強制銷毀,從?影響?部分業務。

        方案:

        1.  根據時間點擴縮容

        2.  擴縮容指標分開配置

        •  比如達到CPU 80% request值進行擴容,達到CPU30%的值縮容

        •  內存類似

        •  解決CPU or Memory在一定時間窗口內飆高造成業務延時,影響用戶體驗的問題

        c. 增加Prestop 優雅終止

        d. 業務側優化

        •  優雅處理SIGTERM信號。

        e. 修改縮容窗口時間

        •  修改彈性伸縮容器的啟動命令,增加如下參數:--downscaleForbiddenWindow=30

        三、應用上云中遇到的問題

        鏡像應該包含哪些內容

        容器鏡像應該包含以下內容:

        • 基本的OSS

        • 基本的語言運行環境,如lib、bin文件

        • 可運行的程序包

        除外部依賴外,鏡像可以單獨運行,如果容器運行時需要依賴的一些插件,可以通過init container來進行數據的預熱和預處理。

        容器時區配置

        很多官方鏡像都使用的是UTC時區,我們使用這些鏡像時,需要把時區進行修改為CST時區,我們可以在制作應用鏡像時就對時區做正確的配置,防止后期容器運行時一些出現時間不正確問題。

        或者在部署應用時,采用Volume掛載的方式掛載宿主機的localtime文件方式。

        容器中字符集配置

        使用官方鏡像作為Base鏡像,經常會遇見在容器的控制臺輸出目錄,會顯示中文亂碼;或者應用標準日志輸出的日志顯示為亂碼。顯示亂碼問題可以通過在Dockerfile中指定字符集來進行解決。

        Java應用內存配置

        容器鏡像的容器化后的Java應用(Java9以前),運行一段時間后會因總內存超過cgroups限制不斷重啟。

        一個Pod內存分配預估:

        • Java需要使用的內存:

         

        · 堆內存:X

        · 類加載區:64M/128M/256M

        · 線程占用:256KB/1M *N ~~ 250M-1.5G

        · 代碼緩存:48M/96M/240M

        · JVM其他內存:約幾十~100MB

        · 堆外內存:未限制,需調整為256M~600M

        •  操作系統使用:約200多M

         

        Java應用的Pod總內存推薦分配:Java堆內存*1.5/2倍;

        集群內部訪問

        同分區服務之間的調用

        •  在分區namespacea下,有兩個服務,分別為服務A(svca):80、B(svcb):80和有狀態服務M(集群模式:M-0為主,讀寫;M-1為從,只讀):3306,服務A調用服務B,則在服務A里配置B服務地址為svcb:80或svcb.namespacea:80,服務B調研服務M,則在服務B中配置M-0.M:3306和M-1.M:3306。

        不同分區服務之間的調用

        •  在上述分區namespacea的基礎上,另一個分區namspaceb下,有一個服務C(svcc),服務C需要調用namespacea分區的A服務,則在服務C里配置A服務地址為svca.namespacea:80,并且C服務需要訪問分區namespacea下的有狀態服務M,則在服務C里配置M-0.M.namespacea:3306和M-1.M.namespacea:3306

        外部訪問集群內服務

        通過負載均衡器(F5/Ingress-Controller)代理。

        •  集群外的服務調用集群內的服務需要通過集群內服務對外暴露的方式,平臺支持HTTP和TCP/UDP方式暴露服務。

        通過NodePort或者LoadBalancer向外暴露。

        直接訪問容器(不建議)

        •  基于部分的平臺網絡方案,集群外的服務可以直接通過PodIP+容器端口就可以實現訪問。

        集群內訪問集群外服務

        直接訪問集群外服務域名或IP。

        訪問集群內部服務名

        •  通過平臺創建外部服務。例如數據庫、中間件等服務注冊為平臺內部服務,并產生內部服務名。

        添加評論
        諧云
        2024年03月02日
        添加回復
        回復:Hi, i think that i saw you visited my site thus i came to “return the favor”.I'm trying to find things to enhance my site!I suppose its ok to use some of your ideas!!
        添加回復
        回復:This information is invaluable. Where can I find out more?
        添加回復
        回復:Wonderful blog! Do you have any suggestions for aspiring writers? I'm hoping to start my own website soon but I'm a little lost on everything. Would you suggest starting with a free platform like Wordpress or go for a paid option? There are so many choices out there that I'm completely confused .. Any ideas? Many thanks!
        添加回復
        回復:Thanks on your marvelous posting! I quite enjoyed reading it, you are a great author. I will always bookmark your blog and will come back very soon. I want to encourage you to definitely continue your great posts, have a nice weekend!
        添加回復
        回復:I'm impressed, I have to admit. Rarely do I encounter a blog that's both educative and entertaining, and let me tell you, you have hit the nail on the head. The issue is an issue that too few folks are speaking intelligently about. Now i'm very happy that I came across this in my hunt for something relating to this.
        添加回復
        回復:Having read this I believed it was very enlightening. I appreciate you taking the time and energy to put this article together. I once again find myself spending a significant amount of time both reading and posting comments. But so what, it was still worthwhile!
        添加回復
        回復:Write more, thats all I have to say. Literally, it seems as though you relied on the video to make your point. You definitely know what youre talking about, why throw away your intelligence on just posting videos to your blog when you could be giving us something informative to read?
        添加回復
        回復:Every weekend i used to pay a quick visit this site, because i want enjoyment, for the reason that this this web page conations really good funny information too.
        添加回復
        回復:Terrific article! This is the kind of info that are meant to be shared across the web. Shame on Google for now not positioning this publish higher! Come on over and talk over with my website . Thanks =)
        添加回復
        回復:This website was... how do I say it? Relevant!! Finally I have found something which helped me. Kudos!
        添加回復
        回復:Its not my first time to visit this website, i am visiting this site dailly and take nice data from here everyday.
        添加回復
        回復:Hi there every one, here every person is sharing such know-how, so it's good to read this website, and I used to pay a visit this website everyday.
        添加回復
        回復:fantastic points altogether, you simply received a brand new reader. What may you recommend about your put up that you simply made some days ago? Any positive?
        添加回復
        回復:I am really loving the theme/design of your site. Do you ever run into any internet browser compatibility issues? A handful of my blog readers have complained about my website not working correctly in Explorer but looks great in Opera. Do you have any suggestions to help fix this problem?
        添加回復
        回復:If you wish for to get a great deal from this post then you have to apply these methods to your won website.
        添加回復
        回復:Hi there! This is my 1st comment here so I just wanted to give a quick shout out and tell you I genuinely enjoy reading your articles. Can you suggest any other blogs/websites/forums that go over the same topics? Thanks a ton!
        添加回復
        回復:Your style is really unique in comparison to other people I have read stuff from. Many thanks for posting when you've got the opportunity, Guess I'll just bookmark this site.
        添加回復
        回復:I read this piece of writing fully regarding the difference of most up-to-date and preceding technologies, it's amazing article.
        添加回復
        回復:Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my blog that automatically tweet my newest twitter updates. I've been looking for a plug-in like this for quite some time and was hoping maybe you would have some experience with something like this. Please let me know if you run into anything. I truly enjoy reading your blog and I look forward to your new updates.
        添加回復
        回復:Good day I am so thrilled I found your blog, I really found you by mistake, while I was searching on Bing for something else, Anyways I am here now and would just like to say thanks a lot for a fantastic post and a all round interesting blog (I also love the theme/design), I don’t have time to go through it all at the minute but I have bookmarked it and also added in your RSS feeds, so when I have time I will be back to read more, Please do keep up the awesome work.
        添加回復
        回復:You could certainly see your skills in the work you write. The world hopes for more passionate writers like you who aren't afraid to say how they believe. All the time follow your heart.
        添加回復
        回復:Hi there! Someone in my Myspace group shared this website with us so I came to take a look. I'm definitely loving the information. I'm bookmarking and will be tweeting this to my followers! Exceptional blog and great design.
        添加回復
        回復:My brother suggested I might like this blog. He was totally right. This post truly made my day. You can not imagine just how much time I had spent for this information! Thanks!
        添加回復
        諧云
        2024年03月02日
        添加回復
        諧云 CpjJwWHV
        2024年03月02日
        555
        添加回復
        gBqsPxAZ回復CpjJwWHV:555
        添加回復
        gBqsPxAZ回復CpjJwWHV:555
        添加回復
        gBqsPxAZ回復CpjJwWHV:555
        添加回復
        gBqsPxAZ回復CpjJwWHV:555
        添加回復
        回復CpjJwWHV:
        添加回復
        回復CpjJwWHV:
        添加回復
        諧云 CpjJwWHV
        2024年03月02日
        555
        添加回復
        gBqsPxAZ回復CpjJwWHV:555
        添加回復
        gBqsPxAZ回復CpjJwWHV:555
        添加回復
        gBqsPxAZ回復CpjJwWHV:555
        添加回復
        gBqsPxAZ回復CpjJwWHV:555
        添加回復
        回復CpjJwWHV:
        添加回復
        回復CpjJwWHV:
        添加回復
        回復CpjJwWHV:
        添加回復
        回復CpjJwWHV:
        添加回復
        回復CpjJwWHV:
        添加回復
        申請合作咨詢
        您可以通過此表單填寫您的合作意向,我們將會盡快與您取得聯系!
        或撥打電話0571-87607309
        *姓名:
        *手機:
        *郵箱:
        備注:
        備注:
        登錄
        登錄
        注冊賬號 忘記密碼
        注冊
        {{ code.btn }}
        注冊
        立即登錄 忘記密碼?
        忘記密碼
        {{ code.btn }}
        確定
        立即登錄 忘記密碼?
        立即咨詢
        欧美一级a人与免费2019|99久热精品免费观看动漫官网|久久久久国色av免费看|免费A片短视频在线观看国产