主頁 >  其他 > 從零開始入門 K8s| K8s 的應用編排與管理

從零開始入門 K8s| K8s 的應用編排與管理

2020-09-17 12:14:01 其他

作者 | 張振 阿里巴巴高級技術專家

一、資源元資訊

1. Kubernetes 資源物件

我們知道,Kubernetes 的資源物件組成:主要包括了 Spec、Status 兩部分,其中 Spec 部分用來描述期望的狀態,Status 部分用來描述觀測到的狀態,

今天我們將為大家介紹 K8s 的另外一個部分,即元資料部分,該部分主要包括了用來識別資源的標簽:Labels, 用來描述資源的注解;Annotations, 用來描述多個資源之間相互關系的 OwnerReference,這些元資料在 K8s 運行中有非常重要的作用,

2. labels

第一個元資料,也是最重要的一個元資料——資源標簽,資源標簽是一種具有標識型的 Key:Value 元資料,如下圖所示,展示了幾個常見的標簽,

前三個標簽都打在了 Pod 物件上,分別標識了對應的應用環境、發布的成熟度和應用的版本,從應用標簽的例子可以看到,標簽的名字包括了一個域名的前綴,用來描述打標簽的系統和工具, 最后一個標簽打在 Node 物件上,還在域名前增加了版本的標識 beta 字串,

標簽主要用來篩選資源和組合資源,可以使用類似于 SQL 查詢 select,來根據 Label 查詢相關的資源,

file


3. Selector

最常見的 Selector 就是相等型 Selector,現在舉一個簡單的例子:

假設系統中有四個 Pod,每個 Pod 都有標識系統層級和環境的標簽,我們通過 Tie:front 這個標簽,可以匹配左邊欄的 Pod,相等型 Selector 還可以包括多個相等條件,多個相等條件之間是邏輯”與“的關系,

在剛才的例子中,通過 Tie=front,Env=dev 的 Selector,我們可以篩選出所有 Tie=front,而且 Env=dev 的 Pod,也就是下圖中左上角的 Pod,另外一種 Selector 是集合型 Selector,在例子中,Selector 篩選所有環境是 test 或者 gray 的 Pod,

除了 in 的集合操作外,還有 notin 集合操作,比如 tie notin(front,back),將會篩選所有 tie 不是 front 且不是 back 的 Pod,另外,也可以根據是否存在某 lable 的篩選,如:Selector release,篩選所有帶 release 標簽的 Pod,集合型和相等型的 Selector,也可以用“,”來連接,同樣的標識邏輯”與“的關系,

file

4. Annotations

另外一種重要的元資料是:annotations,一般是系統或者工具用來存盤資源的非標示性資訊,可以用來擴展資源的 spec/status 的描述,這里給了幾個 annotations 的例子:

第一個例子,存盤了阿里云負載器的證書 ID,我們可以看到 annotations 一樣可以擁有域名的前綴,標注中也可以包含版本資訊,第二個 annotation存盤了 nginx 接入層的配置資訊,我們可以看到 annotations 中包括“,”這樣無法出現在 label 中的特殊字符,第三個 annotations 一般可以在 kubectl apply 命令列操作后的資源中看到, annotation 值是一個結構化的資料,實際上是一個 json 串,標記了上一次 kubectl 操作的資源的 json 的描述,

file

5. Ownereference

最后一個元資料叫做 Ownereference,所謂所有者,一般就是指集合類的資源,比如說 Pod 集合,就有 replicaset、statefulset,這個將在后序的課程中講到,

集合類資源的控制器會創建對應的歸屬資源,比如:replicaset 控制器在操作中會創建 Pod,被創建 Pod 的 Ownereference 就指向了創建 Pod 的 replicaset,Ownereference 使得用戶可以方便地查找一個創建資源的物件,另外,還可以用來實作級聯洗掉的效果,** **

二、操作演示

這里通過 kubectl 命令去連接我們 ACK 中已經創建好的一個 K8s 集群,然后來展示一下怎么查看和修改 K8s 物件中的元資料,主要就是 Pod 的一個標簽、注解,還有對應的 Ownerference,

首先我們看一下集群里現在的配置情況:

1.查看 Pod,現在沒有任何的一個 Pod;

  • kubectl get pods

2.然后用事先準備好的一個 Pod 的 yaml,創建一個 Pod 出來;

  • kubectl apply -f pod1.yaml
  • kubectl apply -f pod2.yaml

3.現在查看一下 Pod 打的標簽,我們用 --show-labels 這個選項,可以看到這兩個 Pod 都打上了一個部署環境和層級的標簽;

  • kubectl get pods —show-labels

4.我們也可以通過另外一種方式來查看具體的資源資訊,首先查看 nginx1 第一個 Pod 的一個資訊,用 -o yaml 的方式輸出,可以看到這個 Pod 元資料里面包括了一個 lables 的欄位,里面有兩個 lable;

  • kubectl get pods nginx1 -o yaml | less

5.現在再想一下,怎么樣對 Pod 已有的 lable 進行修改?我們先把它的部署環境,從開發環境改成測驗環境,然后指定 Pod 名字,在環境再加上它的一個值 test ,看一下能不能成功, 這里報了一個錯誤,可以看到,它其實是說現在這個 label 已經有值了;

  • kubectl label pods nginx1 env=test

6.如果想覆寫掉它的話,得額外再加上一個覆寫的選項,加上之后呢,我們應該可以看到這個打標已經成功了;

  • kubectl label pods nginx1 env=test —overwrite

7.我們再看一下現在集群的 lable 設定情況,首先可以看到 nginx1 的確已經加上了一個部署環境 test 標簽;

  • kubectl get pods —show-labels

8.如果想要對 Pod 去掉一個標簽,也是跟打標簽一樣的操作,但是 env 后就不是等號了,只加上 label 名字,后面不加等號,改成用減號表示去除 label 的 k:v;

  • kubectl label pods nginx tie-

9.可以看到這個 label,去標已經完全成功;

  • kubectl get pods —show-labels

file

10.下面來看一下配置的 label 值,的確能看到 nginx1 的這個 Pod 少了一個 tie=front 的標簽,有了這個 Pod 標簽之后,可以看一下怎樣用 label Selector 進行匹配?首先 label Selector 是通過 -l 這個選項來進行指定的 ,指定的時候,先試一下用相等型的一個 label 來篩選,所以我們指定的是部署環境等于測驗的一個 Pod,我們可以看到能夠篩選出一臺;

  • kubectl get pods —show-labels -l env=test

11.假如說有多個相等的條件需要指定的,實際上這是一個與的關系,假如說 env 再等于 dev,我們實際上是一個 Pod 都拿不到的;

  • kubectl get pods —show-labels -l env=test,env=dev

12.然后假如說 env=dev,但是 tie=front,我們能夠匹配到第二個 Pod,也就是 nginx2;

  • kubectl get pods —show-labels -l env=dev,tie=front

13.我們還可以再試一下怎么樣用集合型的 label Selector 來進行篩選,這一次我們還是想要匹配出所有部署環境是 test 或者是 dev 的一個 Pod,所以在這里加上一個引號,然后在括號里面指定所有部署環境的一個集合,這次能把兩個創建的 Pod 都篩選出來;

  • kubectl get pods —show-labels -l ’env in (dev,test)’

14.我們再試一下怎樣對 Pod 增加一個注解,注解的話,跟打標是一樣的操作,但是把 label 命令改成 annotate 命令;然后,一樣指定型別和對應的名字,后面就不是加上 label 的 k:v 了,而是加上 annotation 的 k:v,這里我們可以指定一個任意的字符串,比如說加上空格、加上逗號都可以;

  • kubectl annotate pods nginx1 my-annotate=‘my annotate,ok’

15.然后,我們再看一下這個 Pod 的一些元資料,我們這邊能夠看到這個 Pod 的元資料里面 annotations,這是有一個 my-annotate 這個 Annotations;

  • kubectl get pods nging1 -o yaml | less

然后我們這里其實也能夠看到有一個 kubectl apply 的時候,kubectl 工具增加了一個 annotation,這也是一個 json 串,

file

16.然后我們再演示一下看 Pod 的 Ownereference 是怎么出來的,原來的 Pod 都是直接通過創建 Pod 這個資源方式來創建的,這次換一種方式來創建:通過創建一個 ReplicaSet 物件來創建 Pod ,首先創建一個 ReplicaSet 物件,這個 ReplicaSet 物件可以具體查看一下;

  • kubectl apply -f rs.yaml
  • kubectl get replicasets nginx-replicasets -o yaml |less

file

17.我們可以關注一下這個 ReplicaSet 里面 spec 里面,提到會創建兩個 Pod,然后 selector 通過匹配部署環境是 product 生產環境的這個標簽來進行匹配,所以我們可以看一下,現在集群中的 Pod 情況;

  • **kubectl get pods **

file

18.將會發現多了兩個 Pod,仔細查看這兩個 Pod,可以看到 ReplicaSet 創建出來的 Pod 有一個特點,即它會帶有 Ownereference,然后 Ownereference 里面指向了是一個 replicasets 型別,名字就叫做 nginx-replicasets;

  • kubectl get pods nginx-replicasets-rhd68 -o yaml | less

file

三、控制器模式

1、控制回圈

控制型模式最核心的就是控制回圈的概念,在控制回圈中包括了控制器、被控制的系統,以及能夠觀測系統的傳感器,三個邏輯組件,

當然這些組件都是邏輯的,外界通過修改資源 spec 來控制資源,控制器比較資源 spec 和 status,從而計算一個 diff,diff 最后會用來決定執行對系統進行什么樣的控制操作,控制操作會使得系統產生新的輸出,并被傳感器以資源 status 形式上報,控制器的各個組件將都會是獨立自主地運行,不斷使系統向 spec 表示終態趨近,

file

2、Sensor

控制回圈中邏輯的傳感器主要由 Reflector、Informer、Indexer 三個組件構成,

Reflector 通過 List 和 Watch K8s server 來獲取資源的資料,List 用來在 Controller 重啟以及 Watch 中斷的情況下,進行系統資源的全量更新;而 Watch 則在多次 List 之間進行增量的資源更新;Reflector 在獲取新的資源資料后,會在 Delta 佇列中塞入一個包括資源物件資訊本身以及資源物件事件型別的 Delta 記錄,Delta 佇列中可以保證同一個物件在佇列中僅有一條記錄,從而避免 Reflector 重新 List 和 Watch 的時候產生重復的記錄,

Informer 組件不斷地從 Delta 佇列中彈出 delta 記錄,然后把資源物件交給 indexer,讓 indexer 把資源記錄在一個快取中,快取在默認設定下是用資源的命名空間來做索引的,并且可以被 Controller Manager 或多個 Controller 所共享,之后,再把這個事件交給事件的回呼函式

file

控制回圈中的控制器組件主要由事件處理函式以及 worker 組成,事件處理函式之間會相互關注資源的新增、更新、洗掉的事件,并根據控制器的邏輯去決定是否需要處理,對需要處理的事件,會把事件關聯資源的命名空間以及名字塞入一個作業佇列中,并且由后續的 worker 池中的一個 Worker 來處理,作業佇列會對存盤的物件進行去重,從而避免多個 Woker 處理同一個資源的情況,

Worker 在處理資源物件時,一般需要用資源的名字來重新獲得最新的資源資料,用來創建或者更新資源物件,或者呼叫其他的外部服務,Worker 如果處理失敗的時候,一般情況下會把資源的名字重新加入到作業佇列中,從而方便之后進行重試,

3、控制回圈例子-擴容

這里舉一個簡單的例子來說明一下控制回圈的作業原理,

ReplicaSet 是一個用來描述無狀態應用的擴縮容行為的資源, ReplicaSet controler 通過監聽 ReplicaSet 資源來維持應用希望的狀態數量,ReplicaSet 中通過 selector 來匹配所關聯的 Pod,在這里考慮 ReplicaSet rsA 的,replicas 從 2 被改到 3 的場景,

file

首先,Reflector 會 watch 到 ReplicaSet 和 Pod 兩種資源的變化,為什么我們還會 watch pod 資源的變化稍后會講到,發現 ReplicaSet 發生變化后,在 delta 佇列中塞入了物件是 rsA,而且型別是更新的記錄,

Informer 一方面把新的 ReplicaSet 更新到快取中,并與 Namespace nsA 作為索引,另外一方面,呼叫 Update 的回呼函式,ReplicaSet 控制器發現 ReplicaSet 發生變化后會把字串的 nsA/rsA 字串塞入到作業佇列中,作業佇列后的一個 Worker 從作業佇列中取到了 nsA/rsA 這個字串的 key,并且從快取中取到了最新的 ReplicaSet 資料,

Worker 通過比較 ReplicaSet 中 spec 和 status 里的數值,發現需要對這個 ReplicaSet 進行擴容,因此 ReplicaSet 的 Worker 創建了一個 Pod,這個 pod 中的 Ownereference 取向了 ReplicaSet rsA,

file


然后 Reflector Watch 到的 Pod 新增事件,在 delta 佇列中額外加入了 Add 型別的 deta 記錄,一方面把新的 Pod 記錄通過 Indexer 存盤到了快取中,另一方面呼叫了 ReplicaSet 控制器的 Add 回呼函式,Add 回呼函式通過檢查 pod ownerReferences 找到了對應的 ReplicaSet,并把包括 ReplicaSet 命名空間和字串塞入到了作業佇列中,

ReplicaSet 的 Woker 在得到新的作業項之后,從快取中取到了新的 ReplicaSet 記錄,并得到了其所有創建的 Pod,因為 ReplicaSet 的狀態不是最新的,也就是所有創建 Pod 的數量不是最新的,因此在此時 ReplicaSet 更新 status 使得 spec 和 status 達成一致,

file

四、控制器模式總結

1、兩種 API 設計方法

Kubernetes 控制器模式依賴宣告式的 API,另外一種常見的 API 型別是命令式 API,為什么 Kubernetes 采用宣告式 API,而不是命令式 API 來設計整個控制器呢?

首先,比較兩種 API 在互動行為上的差別,在生活中,常見的命令式的互動方式是家長和孩子交流方式,因為孩子欠缺目標意識,無法理解家長期望,家長往往通過一些命令,教孩子一些明確的動作,比如說:吃飯、睡覺類似的命令,我們在容器編排體系中,命令式 API 就是通過向系統發出明確的操作來執行的,

而常見的宣告式互動方式,就是老板對自己員工的交流方式,老板一般不會給自己的員工下很明確的決定,實際上可能老板對于要操作的事情本身,還不如員工清楚,因此,老板通過給員工設定可量化的業務目標的方式,來發揮員工自身的主觀能動性,比如說,老板會要求某個產品的市場占有率達到 80%,而不會指出要達到這個市場占有率,要做的具體操作細節,

類似的,在容器編排體系中,我們可以執行一個應用實體副本數保持在 3 個,而不用明確的去擴容 Pod 或是洗掉已有的 Pod,來保證副本數在三個,

file

2、命令式 API 的問題

在理解兩個互動 API 的差別后,可以分析一下命令式 API 的問題,

  • 命令 API 最大的一個問題在于錯誤處理;

在大規模的分布式系統中,錯誤是無處不在的,一旦發出的命令沒有回應,呼叫方只能通過反復重試的方式來試圖恢復錯誤,然而盲目的重試可能會帶來更大的問題,

假設原來的命令,后臺實際上已經執行完成了,重試后又多執行了一個重試的命令操作,為了避免重試的問題,系統往往還需要在執行命令前,先記錄一下需要執行的命令,并且在重啟等場景下,重做待執行的命令,而且在執行的程序中,還需要考慮多個命令的先后順序、覆寫關系等等一些復雜的邏輯情況,

  • 實際上許多命令式的互動系統后臺往往還會做一個巡檢的系統,用來修正命令處理超時、重試等一些場景造成資料不一致的問題;

然而,因為巡檢邏輯和日常操作邏輯是不一樣的,往往在測驗上覆寫不夠,在錯誤處理上不夠嚴謹,具有很大的操作風險,因此往往很多巡檢系統都是人工來觸發的,

  • 最后,命令式 API 在處理多并發訪問時,也很容易出現問題;

假如有多方并發的對一個資源請求進行操作,并且一旦其中有操作出現了錯誤,就需要重試,那么最后哪一個操作生效了,就很難確認,也無法保證,很多命令式系統往往在操作前會對系統進行加鎖,從而保證整個系統最后生效行為的可預見性,但是加鎖行為會降低整個系統的操作執行效率,

  • 相對的,宣告式 API 系統里天然地記錄了系統現在和最終的狀態,

不需要額外的操作資料,另外因為狀態的冪等性,可以在任意時刻反復操作,在宣告式系統運行的方式里,正常的操作實際上就是對資源狀態的巡檢,不需要額外開發巡檢系統,系統的運行邏輯也能夠在日常的運行中得到測驗和錘煉,因此整個操作的穩定性能夠得到保證,

最后,因為資源的最終狀態是明確的,我們可以合并多次對狀態的修改,可以不需要加鎖,就支持多方的并發訪問,

file

3、控制器模式總結

最后我們總結一下:

1.Kubernetes 所采用的控制器模式,是由宣告式 API 驅動的,確切來說,是基于對 Kubernetes 資源物件的修改來驅動的;
2.Kubernetes 資源之后,是關注該資源的控制器,這些控制器將異步的控制系統向設定的終態驅近;
3.這些控制器是自主運行的,使得系統的自動化和無人值守成為可能;
4.因為 Kubernetes 的控制器和資源都是可以自定義的,因此可以方便的擴展控制器模式,特別是對于有狀態應用,我們往往通過自定義資源和控制器的方式,來自動化運維操作,這個也就是后續會介紹的 operator 的場景,

file


本文總結

這里為大家簡單總結一下本文的主要內容:

  • Kubernetes 資源物件中的元資料部分,主要包括了用來識別資源的標簽:Labels, 用來描述資源的注解;Annotations, 用來描述多個資源之間相互關系的 OwnerReference,這些元資料在 K8s 運行中有非常重要的作用;
  • 控制型模式中最核心的就是控制回圈的概念;
  • 兩種 API 設計方法:宣告式 API 和命令式 API ;Kubernetes 所采用的控制器模式,是由宣告式 API 驅動的;

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

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

標籤:其他

上一篇:求一份計算機網路課程設計

下一篇:windows server r2 之如何設定共享檔案夾訪問不需要輸入用戶名和密碼

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