主頁 >  其他 > K8s 終將廢棄 docker,TKE 早已支持 containerd

K8s 終將廢棄 docker,TKE 早已支持 containerd

2020-12-15 08:30:15 其他

近日 K8s 官方稱最早將在 1.23版本棄用 docker 作為容器運行時,并在博客中強調可以使用如 containerd 等 CRI 運行時來代替 docker,本文會做詳細解讀,并介紹 docker 與 containerd 的關系,以及為什么 containerd 是更好的選擇,這里先回答下TKE用戶關心的問題:我們的集群該怎么辦?

TKE集群該怎么辦

  • TKE早在 2019年5月就已經支持選擇 containerd 作為容器運行時,如果新建集群,推薦選擇 containerd 作為容器運行時
  • 已有集群在升級到 K8s 1.23(假定 TKE 第一個不支持 dockershim 的 K8s版本,也可能是 1.24)之前,仍然可以繼續使用 docker 作為容器運行時
  • 已有集群通過 TKE 集群升級功能升級到 1.23時, TKE會提供切換運行時為 containerd 的選項,當然,這種情況下沒辦法做到 Pod 不受影響,只能采用重裝節點的方式來升級
  • 已有集群也可以將運行時切換為 containerd ,新增節點會使用 containerd , 存量節點不受影響仍然使用 docker (注意: 這會造成同一集群中 docker 節點與 containerd 節點共存,如果有使用 Docker in Docker, 或者其他依賴節點上 docker daemon 與 docker.sock 的業務,需要提前采取措施來避免產生問題,例如通過按節點標簽調度,保證這類業務調度到 docker 節點;或者采用如前文所述在 containerd 集群運行 Docker in Docker 的方案)
  • 當然,在未來 docker 也有可能在內部實作 CRI 或者添加一個 dockershim 行程,如果 docker 做了相應適配,TKE 這邊在未來也會進行支持,

解讀 K8s 棄用 dockershim

Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet uses a module called "dockershim" which implements CRI support for Docker and it has seen maintenance issues in the Kubernetes community. We encourage you to evaluate moving to a container runtime that is a full-fledged implementation of CRI (v1alpha1 or v1 compliant) as they become available. (#94624, @dims) [SIG Node]

K8s 在 1.20的 change log 中提到 K8s 將于 1.20版本開始逐步放棄對 Docker 的支持,在 K8s 的官方博客中也提到具體的宣告和一些 FAQ,

  • Don't Panic: Kubernetes and Docker
  • Dockershim FAQ

在博客中提到 K8s 將在 1.20版本中添加不推薦使用 docker 的資訊,且最早將于 1.23版本中把 dockershim 從 kubelet 中移除,屆時用戶將無法使用 docker 作為 K8s 集群的運行時,不過通過 docker 構建的鏡像在沒有 docker 的 K8s 集群中依然可以使用,

“寄生”在 kubelet 中的 dockershim

本次改動主要內容是準備洗掉 kubelet 中的 dockershim,當然這種做法也是符合預期的,在早期 rkt 和 docker 爭霸時,kubelet 中需要維護兩坨代碼分別來適配 docker 和 rkt ,這使得 kubelet 每次發布新功能都需要考慮對運行時組件的適配問題,嚴重拖慢了新版本發布速度,另外虛擬化已經是一個普遍的需求,如果出現了型別的運行時,SIG-Node 小組可能還需要把和新運行時適配的代碼添加到 kubelet 中,這種做法并不是長久之計,于是在 2016 年,SIG-Node提出了容器操作介面 CRI(Container Runtime Interface), CRI 是對容器操作的一組抽象,只要每種容器運行時都實作這組介面,kubelet 就能通過這組介面來適配所有的運行時,但 Docker 當時并沒有(也不打算)實作這組介面, kubelet 只能在內部維護一個稱之為“dockershim”組件,這個組件充當了 docker 的 CRI 轉接器,kubelet 在創建容器時通過 CRI 介面呼叫 dockershim ,而 dockershim 在通過 http 請求把請求交給 docker ,于是 kubelet 的架構變成下圖這樣:

在使用實作了 CRI 介面的組件作為容器運行時的情況下,kubelet 創建容器的呼叫鏈如圖中紅色箭頭所示,kubelet 中的 ContainerManager 可以直接通過 CRI 呼叫到容器運行時,這程序中只需要一次 grpc 請求;而在使用 docker 時,ContainerManager 會走圖中藍色的呼叫鏈, CRI 的請求通過 unix:///var/run/dockershim.sock 流向 dockershim,dockershim 做轉換后把請求轉發給 docker,至于為什么 docker 后面還有個 containerd 稍后會講到,在 kubelet 中實作 docker 的轉接器本來就是一種不優雅的實作,這種做法讓呼叫鏈變長且不穩定性,還給 kubelet 的維護添加了額外作業,把這部分內容從 kubelet 刪掉就是時間問題了,

棄用 Docker 后會有什么不同?

If you’re an end-user of Kubernetes, not a whole lot will be changing for you. This doesn’t mean the death of Docker, and it doesn’t mean you can’t, or shouldn’t, use Docker as a development tool anymore. Docker is still a useful tool for building containers, and the images that result from running docker build can still run in your Kubernetes cluster.

訊息一出,大家最關心的事情應該就是棄用 docker 后到底會產生什么影響?

官方的答復是:Don't Panic!隨后又重點解釋了幾個大家最關心的問題,我們來分析下官方提到的這些方面:

  • 正常的 K8s 用戶不會有任何影響

    是的,生產環境中高版本的集群只需要把運行時從 docker 切換到其他的 runtime(如 containerd)即可,containerd 是 docker 中的一個底層組件,主要負責維護容器的生命周期,跟隨 docker 經歷了長期考驗,同時 2019年初就從 CNCF 畢業,可以單獨作為容器運行時用在集群中,TKE 也早在 2019 年就已經提供了 containerd 作為運行時選項,因此把 runtime 從 docker 轉換到 containerd 是一個基本無痛的程序,CRI-O 是另一個常被提及的運行時組件,由 redhat 提供,比 containerd 更加輕量級,不過和 docker 的區別較大,可能轉換時會有一些不同之處,

  • 開發環境中通過docker build構建出來的鏡像依然可以在集群中使用

    鏡像一直是容器生態的一大優勢,雖然人們總是把鏡像稱之為“docker鏡像”,但鏡像早就成為了一種規范了,具體規范可以參考image-spec,在任何地方只要構建出符合 Image Spec 的鏡像,就可以拿到其他符合 Image Spec 的容器運行時上運行,

  • 在 Pod 中使用 DinD(Docker in Docker)的用戶會受到影響

    有些使用者會把 docker 的 socket (/run/docker.sock)掛載到 Pod 中,并在 Pod 中呼叫 docker 的 api 構建鏡像或創建編譯容器等,官方在這里的建議是使用 Kaniko、Img 或 Buildah,我們可以通過把 docker daemon 作為 DaemonSet 或者給想要使用 docker 的 Pod 添加一個 docker daemon 的 sidecar 的方式在任意運行時中使用 DinD 的方案,TKE 也專門為在 containerd 集群中使用 DinD 提供了方案,詳見 在containerd中使用DinD,

containerd 的今生前世

所以 containerd 到底是個啥?和 docker 又是什么關系?可能有些同學看到博客后會發出這樣的疑問,接下來就給同學們講解下 containerd 和 docker 的淵源,

docker 與 containerd

2016年,docker 把負責容器生命周期的模塊拆分出來,并將其捐贈給了社區,也就是現在的 containerd,docker 拆分后結構如下圖所示(當然 docker 公司還在 docker 中添加了部分編排的代碼),

在我們呼叫 docker 命令創建容器后,docker daemon 會通過 Image 模塊下載鏡像并保存到 Graph Driver 模塊中,之后通過 client 呼叫containerd 創建并運行容器,我們在使用 docker 創建容器時可能需要使用--volume給容器添加持久化存盤;還有可能通過--network連接我們用 docker 命令創建的幾個容器,當然,這些功能是 docker 中的 Storage 模塊和 Networking 模塊提供給我們的,但 K8s 提供了更強的卷掛載能力和集群級別的網路能力,在集群中 kubelet 只會使用到 docker 提供的鏡像下載和容器管理功能,而編排、網路、存盤等功能都不會用到,下圖中可以看出當前的模式下各模塊的呼叫鏈,同時圖中被紅框標注出的幾個模塊就是 kubelet 創建 Pod 時所依賴的幾個運行時的模塊,

containerd 被捐贈給CNCF社區后,社區給其添加了鏡像管理模塊和 CRI 模塊,這樣 containerd 不只可以管理容器的生命周期,還可以直接作為 K8s 的運行時使用,于是 containerd 在 2019年2月從 CNCF 社區畢業,正式進入生產環境,下圖中能看出以 containerd 作為容器運行時,可以給 kubelet 帶來創建 Pod 所需的全部功能,同時還得到了更純粹的功能模塊以及更短的呼叫鏈,

從上面的對比可以看出從 containerd 被捐贈給社區開始,就一直以成為簡單、穩定且可靠的容器運行時為目標;而 docker 則是希望能成為一個完整的產品,官方檔案中也提到了這一點,docker 為了給用戶更好的互動和使用體驗以及更多的功能,提供了很多開發人員所需要的特性,同時為了給 swarm 做基礎,提供了網路和卷的功能,而這些功能其實都是是 K8s 用不上的;containerd 則相反,僅提供了 kubelet 創建 Pod 所需要的基礎功能,當然這換來的就是更高的魯棒性以及更好的性能,在一定程度上講,即使在 kubelet 1.23 版本之后 docker 提供了 CRI 介面,containerd 仍然是更好的選擇,

在 Kubernetes 集群中使用 containerd

當然現在有諸多的 CRI 實作者,比較主要的除了 containerd 還有 CRI-O,CRI-O 是主要由 Red Hat 員工開發的 CRI 運行時,完全和 docker 沒有關系,因此從 docker 遷移過來可能會比較困難,無疑 containerd 才是 docker 被拋棄后的 CRI 運行時的最佳人選,對于開發同學來說整個遷移程序應該是無感知的,不過對于部分運維同學可能會比較在意部署和運行中細節上的差異,接下來我們重點介紹下在 K8s 中使用 containerd 和 docker 的幾處區別,

  • 容器日志對比項
對比項 Docker Containerd
存盤路徑 如果 docker 作為 K8s 容器運行時,容器日志的落盤將由 docker 來完成,保存在類似/var/lib/docker/containers/$CONTAINERID 目錄下,kubelet 會在 /var/log/pods 和 /var/log/containers 下面建立軟鏈接,指向 /var/lib/docker/containers/$CONTAINERID 該目錄下的容器日志檔案, 如果 Containerd 作為 K8s 容器運行時, 容器日志的落盤由 kubelet 來完成,保存至 /var/log/pods/$CONTAINER_NAME 目錄下,同時在 /var/log/containers 目錄下創建軟鏈接,指向日志檔案,
配置引數 在 docker 組態檔中指定:"log-driver": "json-file","log-opts": {"max-size": "100m","max-file": "5"} 方法一:在 kubelet 引數中指定:--container-log-max-files=5 --container-log-max-size="100Mi" 方法二:在 KubeletConfiguration 中指定: "containerLogMaxSize": "100Mi", "containerLogMaxFiles": 5,
把容器日志保存到資料盤 把資料盤掛載到 “data-root”(預設是 /var/lib/docker)即可, 創建一個軟鏈接 /var/log/pods 指向資料盤掛載點下的某個目錄,在 TKE 中選擇“將容器和鏡像存盤在資料盤”,會自動創建軟鏈接 /var/log/pods,
  • cni 配置方式的區別
    在使用 docker 時,kubelet 中的 dockershim 負責呼叫 cni 插件,而 containerd 的場景中 containerd 中內置的 containerd-cri 插件負責呼叫 cni,因此關于 cni 的組態檔需要放在 containerd 的組態檔中(/etc/containerd/containerd.toml):

     [plugins.cri.cni]
          bin_dir = "/opt/cni/bin"
          conf_dir = "/etc/cni/net.d"
    
  • stream 服務的區別

    說明:

    Kubectl exec/logs 等命令需要在 apiserver 跟容器運行時之間建立流轉發通道,

    如何在 containerd 中使用并配置 Stream 服務?

    Docker API 本身提供 stream 服務,kubelet 內部的 docker-shim 會通過 docker API 做流轉發,而containerd 的 stream 服務需要單獨配置:

      [plugins.cri]
      stream_server_address = "127.0.0.1"
      stream_server_port = "0"
      enable_tls_streaming = false  [plugins.cri]  stream_server_address = "127.0.0.1"  stream_server_port = "0"  enable_tls_streaming = false
    

K8s 1.11 前后版本配置區別是什么?

containerd 的 stream 服務在 K8s 不同版本運行時場景下配置不同,

  • 在 K8s 1.11 之前:
    kubelet 不會做 stream proxy,只會做重定向,即 kubelet 會將 containerd 暴露的 stream server 地址發送給 apiserver,并讓 apiserver 直接訪問 containerd 的 stream 服務,此時,您需要給 stream 服務轉發器認證,用于安全防護,
  • 在 K8s 1.11 之后:
    K8s1.11 引入了 kubelet stream proxy, 使 containerd stream 服務只需要監聽本地地址即可,

在 TKE 集群中使用 containerd

從 2019年5月份開始,TKE就開始支持把 containerd 作為容器運行時選項之一,隨著TKE逐步在 containerd 集群中支持日志收集服務和 GPU 能力,2020年 9月份 containerd 在 TKE 也摘掉了 Beta 版本的標簽,可以正式用于生產環境中了,在長期使用中,我們也發現了一些 containerd 的問題并且及時進行了修復,如:

  • 由于錯誤處理問題導致的 Pod Terminating
  • 由于內核版本問題導致鏡像檔案丟失

想要在TKE集群中使用 containerd 作為運行時有三種方式:

  1. 在創建集群時,選擇 1.12.4 及以上版本的 K8s 后,選擇 containerd 為運行時組件即可

  2. 在已有 docker 集群中,通過創建運行時為 containerd 的節點池來創建一部分 containerd 節點(新建節點池 > 更多設定 > 運行時組件)

  3. 在已有 docker 集群中,修改集群或者節點池的"運行時組件"屬性為"containerd"

注意: 后兩種方式會造成同一集群中 docker 節點與 containerd 節點共存,如果有使用 Docker in Docker, 或者其他依賴節點上 docker daemon 與 docker.sock 的業務,需要提前采取措施來避免產生問題,例如通過按節點標簽調度,保證這類業務調度到 docker 節點;或者采用如前文所述在 containerd 集群運行 Docker in Docker 的方案,

現階段關于 containerd 和 docker 選擇問題可以查看這里,

參考

[1] Don't Panic: Kubernetes and Docker

[2] Dockershim FAQ

[3] Dockershim Removal Kubernetes Enhancement Proposal

[4] kubernetes CHANGELOG-1.20

【騰訊云原生】云說新品、云研新術、云游新活、云賞資訊,掃碼關注同名公眾號,及時獲取更多干貨!!

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

標籤:其他

上一篇:容器網路(八)安裝配置 flannel【54】

下一篇:容器網路(八)在 Docker 中使用 flannel【55】

標籤雲
其他(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