主頁 >  其他 > 阿里巴巴 Kubernetes 應用管理實踐中的經驗與教訓

阿里巴巴 Kubernetes 應用管理實踐中的經驗與教訓

2020-09-16 13:07:20 其他

作者 | 孫健波(阿里巴巴技術專家)、趙鈺瑩

導讀:云原生時代,Kubernetes 的重要性日益凸顯,然而,大多數互聯網公司在 Kubernetes 上的探索并非想象中順利,Kubernetes 自帶的復雜性足以讓一批開發者望而卻步,本文中,阿里巴巴技術專家孫健波在接受采訪時基于阿里巴巴 Kubernetes 應用管理實踐程序提供了一些經驗與建議,以期對開發者有所幫助,

在互聯網時代,開發者更多是通過頂層架構設計,比如多集群部署和分布式架構的方式來實作出現資源相關問題時的快速切換,做了很多事情來讓彈性變得更加簡單,并通過混部計算任務來提高資源利用率,云計算的出現則解決了從 CAPEX 到 OPEX 的轉變問題,

云計算時代讓開發可以聚焦在應用價值本身,相較于以前開發者除了業務模塊還要投入大量精力在存盤、網路等基礎設施,如今這些基礎設施都已經像水電煤一樣便捷易用,云計算的基礎設施具有穩定、高可用、彈性伸縮等一系列能力,除此之外還配套解決了一系列應用開發“最佳實踐”的問題,比如監控、審計、日志分析、灰度發布等,原來,一個工程師需要非常全面才能做好一個高可靠的應用,現在只要了解足夠多的基礎設施產品,這些最佳實踐就可以信手拈來了,但是,在面對天然復雜的 Kubernetes 時,很多開發者都無能為力,

作為 Jira 和代碼庫 Bitbucket 背后的公司,Atlassian 的 Kubernetes 團隊首席工程師 Nick Young 在采訪中表示:

雖然當初選擇 Kubernetes 的戰略是正確的(至少到現在也沒有發現其他可能的選擇),解決了現階段遇到的許多問題,但部署程序例外艱辛,

那么,有好的解決辦法嗎?

太過復雜的 Kubernetes

“如果讓我說 Kubernetes 存在的問題,當然是‘太復雜了’”,孫健波在采訪中說道,“不過,這其實是由于 Kubernetes 本身的定位導致的,”

孫健波補充道,Kubernetes 的定位是“platform for platform”,它的直接用戶,既不是應用開發者,也不是應用運維,而是“platform builder”,也就是基礎設施或者平臺級工程師,但是,長期以來,我們對 Kubernetes 專案很多時候都在錯位使用,大量的應用運維人員、甚至應用研發都在直接圍繞 Kubernetes 很底層的 API 進行協作,這是導致很多人抱怨 “Kubernetes 實在是太復雜了”的根本原因之一,

這就好比一名 Java Web 工程師必須直接使用 Linux Kernel 系統呼叫來部署和管理業務代碼,自然會覺得 Linux “太反人類了”,所以,目前 Kubernetes 專案實際上欠缺一層更高層次的封裝,來使得這個專案能夠對上層的軟體研發和運維人員更加友好,

如果可以理解上述的定位,那么 Kubernetes 將 API 物件設計成 all-in-one 是合理的,這就好比 Linux Kernel 的 API,也不需要區分使用者是誰,但是,當開發者真正要基于 K8s 管理應用、并對接研發、運維工程師時,就必然要考慮這個問題,也必然要考慮如何做到像另一層 Linux Kernel API 那樣以標準、統一的方式解決這個問題,這也是阿里云和微軟聯合開放云原生應用模型 Open Application Model (OAM)的原因,

有狀態應用支持

除了天然的復雜性問題,Kubernetes 對于有狀態應用的支持也一直是眾多開發者花費大量時間研究和解決的問題,并不是不可以支持,只是沒有相對較優的解決方案,目前,業內主流的針對有狀態應用的解法是 Operator,但是撰寫 Operator 其實是很困難的,

在采訪中,孫健波表示,這是因為 Operator 本質上是一個“高級版”的 K8s 客戶端,但是 K8s API Server 的設計,是“重客戶端”的模型,這當然是為了簡化 API Server 本身的復雜度,但也導致了無論是 K8s client 庫,還是以此為基礎的 Operator,都變的例外復雜和難以理解:它們都夾雜了大量 K8s 本身的實作細節,比如 reflector、cache store、informer 等,這些,并不應該是 Operator 撰寫者需要關心的,Operator 撰寫者應該是有狀態應用本身的領域專家(比如 TiDB 的工程師),而不應該是 K8s 專家,這是現在 K8s 有狀態應用管理最大的痛點,而這可能需要一個新的 Operator 框架來解決這個問題,

另一方面,復雜應用的支持不止撰寫 Operator 這么簡單,這里還需要有狀態應用交付的技術支撐,這是目前社區上各種持續交付專案都有意或者無意間忽略掉的事情,事實上,持續交付一個基于 Operator 的有狀態應用,跟交付一個無狀態的 K8s Deployment 的技術挑戰完全不是一個量級的,這也是孫健波所在團隊在 CNCF 應用交付領域小組(CNCF SIG App Deliver)倡導“應用交付分層模型”的重要原因:如下圖所示,四層模型分別為“應用定義”、“應用交付”、“應用運維與自動化”、“平臺層”,只有通過這四個層不同能力的合力協作,才能真正做到高質量和高效率的交付有狀態應用,

file

舉個例子,Kubernetes API 物件的設計是“all-in-one”的, 即:應用管理程序中的所有參與者,都必須在同一個 API 物件上進行協作,這就導致開發者會看到,像 K8s Deployment 這樣的 API 物件描述里, 既有應用開發關注的欄位,也可以看到運維關注的欄位,還有一些欄位可能還是被多方關注的,

實際上,無論是應用開發、應用運維,還是 HPA 這樣的 K8s 自動化能力,它們都有可能需要控制一個 API 物件里的同一個欄位,最典型的情況就是副本數(replica)這種引數,但是,到底誰 own 這個欄位,是一個非常棘手的問題,

綜上,既然 K8s 的定位是云時代的 Linux Kernel,那么 Kubernetes 就必須在 Operator 支持、API 層以及各類介面定義的完善上不斷進行突破,使得更多生態參與者可以更好的基于 K8s 構建自己的能力和價值,

阿里巴巴大規模 Kubernetes 實踐

如今,Kubernetes 在阿里經濟體的應用場景涵蓋了阿里方方面面的業務,包括電商、物流、離在線計算等,這也是目前支撐阿里 618、雙 11 等互聯網級大促的主力軍之一,阿里集團和螞蟻金服內部運行了數十個超大規模的 K8s 集群,其中最大的集群約 1 萬個機器節點,而且這其實還不是能力上限,每個集群都會服務上萬個應用,在阿里云 Kubernetes 服務(ACK)上,我們還維護了上萬個用戶的 K8s 集群,這個規模和其中的技術挑戰在全世界也是首屈一指的,

孫健波透露,阿里內部早在 2011 年便開始了應用容器化,當時最開始是基于 LXC 技術構建容器,隨后開始用自研的容器技術和編排調度系統,整套系統本身沒有什么問題,但是作為基礎設施技術團隊,目標一定是希望阿里的基礎技術堆疊能夠支撐更廣泛的上層生態,能夠不斷演進和升級,因此,整個團隊又花了一年多時間逐漸補齊了 K8s 的規模和性能短板,總體來看,升級為 K8s 是一個非常自然的程序,整個實踐程序其實也很簡單:

  • 第一:解決應用容器化的問題,這里需要合理利用 K8s 的容器設計模式;
  • 第二:解決應用定義與描述的問題,這里需要合理的利用 OAM,Helm 等應用定義工具和模型來實作,并且要能夠對接現有的應用管理能力;
  • 第三:構建完整的應用交付鏈,這里可以考慮使用和集成各種持續交付能力,

如上的三步完成,就具備了對接研發、運維、上層 PaaS 的能力,能夠講清楚自己的平臺價值,接下來就可以試點開始,在不影響現有應用管理體系的前提下,一步步換掉下面的基礎設施,

Kubernetes 本身并不提供完整的應用管理體系,這個體系是整個云原生的生態基于 K8s 構建出來的,可以用下圖表示:

file

Helm 就是其中最成功的一個例子,它位于整個應用管理體系的最上面,也就是第 1 層,還有 Kustomize 等各種 YAML 管理工具,CNAB 等打包工具,它們都對應在第 1.5 層,然后有 Tekton、Flagger 、Kepton 等應用交付專案,對應在第 2 層,Operator ,以及 K8s 的各種作業負載組件,比如 Deployment、StatefulSet,對應在第 3 層,最后才是 K8s 的核心功能,負責對作業負載的容器進行管理,封裝基礎設施能力,對各種不同的作業負載對接底層基礎設施提供 API 等,

初期,整個團隊最大的挑戰來自于規模和性能瓶頸,但這個解法也是最直接的,孫健波表示,隨著規模逐漸增大,我們看到規模化鋪開 K8s 最大的挑戰實際上是如何基于 K8s 進行應用管理和對接上層生態,比如,我們需要統一的管控來自數十個團隊、數百個不同目的的 Controller;我們需要以每天近萬次的頻率交付來自不同團隊的生產級應用,這些應用的發布、擴容策略可能完全不同;我們還需要對接數十個更加復雜的上層平臺,混合調度和部署不同形態的作業以追求最高的資源利用率,這些訴求才是阿里巴巴 Kubernetes 實踐要解決的問題,規模和性能只是其中一個組成部分,

除了 Kubernetes 的原生功能外,在阿里巴巴內部會開發大量的基礎設施以 K8s 插件的形式對接到這些功能上,隨著規模的擴大,用統一的方式發現和管理這些能力成為了一個關鍵問題,

此外,阿里巴巴內部也有眾多存量 PaaS,這些是為了滿足用戶不同業務場景上云所構建的,比如有的用戶希望上傳一個 Java 的 War 包就可以運行,有的用戶希望上傳一個鏡像就可以運行,在這些需求背后,阿里各團隊幫用戶做了許多應用管理的作業,這也是存量 PaaS 出現的原因,而這些存量 PaaS 與 Kubernetes 對接程序可能會產生各種問題,目前,阿里正在通過 OAM 這個統一標準的應用管理模型,幫助這些 PaaS 向 K8s 底盤進行對接和靠攏,實作標準化和云原生化,

解耦運維和研發

通過解耦,Kubernetes 專案以及對應的云服務商就可以為不同的角色暴露不同維度、更符合對應用戶訴求的宣告式 API,比如,應用開發者只需要在 YAML 檔案中宣告”應用 A 要使用 5G 可讀寫空間“,應用運維人員則只需要在對應的 YAML 檔案里宣告”Pod A 要掛載 5G 的可讀寫資料卷“,這種”讓用戶只關心自己所關心的事情“所帶來的專注力,是降低 Kubernetes 使用者學習門檻和上手難度的關鍵所在,

孫健波表示,現在大多數的解法實際上是“悲觀處理”,比如,阿里內部的 PaaS 平臺,為了減輕研發使用的負擔,長期以來只開放給研發設定 5 個 Deployment 的欄位,這當然是因為 K8s YAML "all-in-one"的設計,使得完整的 YAML 對研發來說太復雜,但這也導致 K8s 本身的能力,絕大多數情況下對研發來說是完全沒有體感的,而對 PaaS 平臺運維來說,他反而覺得 K8s YAML 太簡單,不夠描述平臺的運維能力,所以要給 YAML 檔案添加大量 annotation,

此外,這里的核心問題在于,對運維人員而言,這種“悲觀處理”的結果就是他自己太“獨裁”,包攬了大量細節作業,還費力不討好,比如擴容策略,目前就是完全由運維一方說了算,可是,研發作為撰寫代碼的實際人員,才是對應用怎么擴容最有發言權的,而且研發人員也非常希望把自己的意見告訴運維,好讓 K8s 更加 靈活,真正滿足擴容需求,但這個訴求在目前的系統里是無法實作的,

所以,“研發和運維解耦”并不是要把兩者割裂,而是要給研發提供一個標準、高效的,同運維進行溝通的方式,這也是 OAM 應用管理模型要解決的問題,孫健波表示,OAM 的主要作用之一就是提供一套研發從自己的角度表達訴求的標準和規范,然后這套標準“你知,我知,系統知”,那么上面這些問題也就迎刃而解了,

具體來說,OAM 是一個專注于描述應用的標準規范,有了這個規范,應用描述就可以徹底與基礎設施部署和管理應用的細節分開,這種關注點分離(Seperation of Conerns)的設計好處是非常明顯的,舉個例子,在實際生產環境中,無論是 Ingress、CNI 還是 Service Mesh,這些表面看起來一致的運維概念,在不同的 Kubernetes 集群中可謂千差萬別,通過將應用定義與集群的運維能力分離,我們就可以讓應用開發者更專注應用本身的價值點,而不是”應用部署在哪“這樣的運維細節,

此外,關注點分離讓平臺架構師可以輕松地把平臺運維能力封裝成可被復用的組件,從而讓應用開發者專注于將這些運維組件與代碼進行集成,從而快速、輕松地構建可信賴的應用,OAM 的目標是讓簡單的應用管理變得更加輕松,讓復雜的應用交付變得更加可控,孫健波表示,未來,團隊將專注于將這套體系逐步向云端 ISV 和軟體分發商側推進,讓基于 K8s 的應用管理體系真正成為云時代的主流,

嘉賓介紹:孫健波,阿里巴巴技術專家,Kubernetes 專案社區成員,目前在阿里巴巴參與大規模云原生應用交付與管理相關作業,2015 年參與撰寫《Docker 容器與容器云》技術書籍,曾任職七牛,參與過時序資料庫、流式計算、日志平臺等專案相關應用上云程序,

今年 12 月 6-7 日北京 ArchSummit 全球架構師峰會上,孫健波老師會繼續分享《阿里巴巴 Kubernetes 應用管理實踐中的經驗與教訓》,會介紹阿里對解耦研發和運維程序中的現有實踐,以及實踐本身存在的問題;以及實施的標準化、統一化解決的思路,以及對社區的進一步思考,

“ 阿里巴巴云原生微信公眾號(ID:Alicloudnative)關注微服務、Serverless、容器、Service Mesh等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的技術公眾號,”

更多詳細資訊可關注“阿里巴巴云原生”,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/57234.html

標籤:其他

上一篇:賺積分

下一篇:LOTO課2:二極管實踐 --- 橋式全波整流

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more