K8S核心組件etcd詳解(上)

1 介紹

https://etcd.io/docs/v3.5/

etcd是一個高可用的分布式鍵值存儲系統,是CoreOS(現在隸屬于Red Hat)公司開發的一個開源項目。它提供了一個簡單的接口來存儲和檢索鍵值對數據,并使用Raft協議實現了分布式一致性。etcd廣泛應用于Docker、Kubernetes等分布式系統中,用于存儲配置信息、服務發現、領導者選舉等方面。

2 etcd高可用集群部署

2.1 服務器配置

主機名ip地址cpu數量內存數量
etcd1172.18.101.3948
etcd2172.18.101.4048
etcd3172.18.101.4148

2.2 部署etcd集群

安裝包下載地址

https://github.com/etcd-io/etcd/tags

以下操作在三個etcd節點上進行

[root@etcd-1 ~]# wget https://github.com/etcd-io/etcd/releases/download/v3.4.27/etcd-v3.4.27-linux-amd64.tar.gz
[root@etcd-1 ~]# tar xvf etcd-v3.4.27-linux-amd64.tar.gz
[root@etcd-1 ~]# mv etcd-v3.4.27-linux-amd64/etcd* /usr/local/bin/ ##復制etcd命令文件
[root@etcd-1 ~]# mkdir -p /var/lib/etcd/ ? ##創建數據存放目錄
[root@etcd-1 ~]# mkdir -p /etc/etcd ##創建配置文件存放目錄

三個節點設置etcd配置文件,三個節點的防火墻要放行2379及2380端口

#etcd節點1
[root@etcd-1 ~]# cat /etc/etcd/etcd.conf
ETCD_NAME=etcd1
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://172.18.101.39:2380"
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://172.18.101.39:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.18.101.39:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://172.18.101.39:2380,etcd2=http://172.18.101.40:2380,etcd3=http://172.18.101.41:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="singless"
ETCD_ADVERTISE_CLIENT_URLS="http://172.18.101.39:2379"#etcd節點2
[root@etcd-2 ~]# cat /etc/etcd/etcd.conf
ETCD_NAME=etcd2
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://172.18.101.40:2380"
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://172.18.101.40:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.18.101.40:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://172.18.101.39:2380,etcd2=http://172.18.101.40:2380,etcd3=http://172.18.101.41:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="singless"
ETCD_ADVERTISE_CLIENT_URLS="http://172.18.101.40:2379"#etcd節點3
[root@etcd-3 ~]# cat /etc/etcd/etcd.conf
ETCD_NAME=etcd3
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://172.18.101.41:2380"
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://172.18.101.41:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.18.101.41:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://172.18.101.39:2380,etcd2=http://172.18.101.40:2380,etcd3=http://172.18.101.41:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="singless"
ETCD_ADVERTISE_CLIENT_URLS="http://172.18.101.41:2379"
  • ETCD_NAME:指定ETCD節點的名稱。每個節點在集群中應具有唯一的名稱,以便進行識別和通信。

  • ETCD_DATA_DIR:指定ETCD存儲數據的目錄路徑。ETCD使用此目錄來持久化存儲數據。

  • ETCD_LISTEN_PEER_URLS:指定ETCD節點監聽對等節點連接的URL。對等URL用于節點之間的通信和數據同步。

  • ETCD_LISTEN_CLIENT_URLS:指定ETCD節點監聽客戶端連接的URL列表。客戶端URL用于與ETCD集群進行交互,例如執行讀取或寫入操作。

  • ETCD_INITIAL_ADVERTISE_PEER_URLS:指定ETCD節點初始公告對等節點連接的URL。當新節點加入集群時,將向其他節點宣告自己的URL,以便其他節點可以找到并連接到它。

  • ETCD_INITIAL_CLUSTER:指定ETCD集群的初始成員列表及其對等節點連接URL。每個成員由名稱和對等節點連接URL組成,用逗號分隔。在啟動集群時,指定初始成員列表用于插入新節點。

  • ETCD_INITIAL_CLUSTER_STATE:指定ETCD集群的初始狀態。可選值為"new"和"existing"。"new"表示創建一個新的集群,"existing"表示已經存在的集群。

  • ETCD_INITIAL_CLUSTER_TOKEN:指定ETCD集群的初始令牌。所有成員在啟動時應使用相同的令牌,以便它們可以識別和加入相同的集群。

  • ETCD_ADVERTISE_CLIENT_URLS:指定ETCD節點公告給客戶端的連接URL。客戶端連接URL用于向應用程序或工具公開ETCD節點,以便進行讀取和寫入操作。

配置systemd管理etcd,三個節點配置相同

[root@etcd-1 ~]# cat /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target[Service]
User=root
Type=notify
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/local/bin/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000[Install]
WantedBy=multi-user.target

三個節點上啟動服務

[root@etcd-1 ~]# systemctl enable etcd
[root@etcd-1 ~]# systemctl start etcd

2.3 部署后集群狀態檢查

2.3.1 查看集群成員

[root@etcd-1 ~]# etcdctl member list ##列出集群成員
916281517eb238d9, started, etcd2, http://172.18.101.40:2380, http://172.18.101.40:2379,?false
9a04401d57e3afba, started, etcd1, http://172.18.101.39:2380, http://172.18.101.39:2379,?false
9f9b71960dcb7180, started, etcd3, http://172.18.101.41:2380, http://172.18.101.41:2379,?false
[root@etcd-1 ~]# etcdctl -w table endpoint status --endpoints=172.18.101.39:2379,172.18.101.40:2379,172.18.101.41:2379 ##查看集群leader是哪個節點
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ? ? ENDPOINT ? ? | ? ? ? ID ? ? ? | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|?172.18.101.39:2379 | 9a04401d57e3afba | ?3.4.27 | ??20?kB | ? ? ?true?| ? ? ?false?| ? ? ??123?| ? ? ? ??14?| ? ? ? ? ? ? ? ??14?| ? ? ? |
|?172.18.101.40:2379 | 916281517eb238d9 | ?3.4.27 | ??20?kB | ? ??false?| ? ? ?false?| ? ? ??123?| ? ? ? ??14?| ? ? ? ? ? ? ? ??14?| ? ? ? |
|?172.18.101.41:2379 | 9f9b71960dcb7180 | ?3.4.27 | ??20?kB | ? ??false?| ? ? ?false?| ? ? ??123?| ? ? ? ??14?| ? ? ? ? ? ? ? ??14?| ? ? ? |
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

圖片

2.3.2 查看集群成員的健康狀態

[root@etcd-1 ~]# etcdctl -w table endpoint health --endpoints=172.18.101.39:2379,172.18.101.40:2379,172.18.101.41:2379
+--------------------+--------+------------+-------+
| ? ? ENDPOINT ? ? | HEALTH | ? TOOK ? | ERROR |
+--------------------+--------+------------+-------+
|?172.18.101.39:2379 | ??true?|?2.190331ms | ? ? ? |
|?172.18.101.41:2379 | ??true?|?2.517434ms | ? ? ? |
|?172.18.101.40:2379 | ??true?| ?3.06371ms | ? ? ? |
+--------------------+--------+------------+-------+

圖片

3 某個節點異常如何處理

  • 使用命令移除節點

  • 刪除異常節點數據目錄

  • 重新將節點添加至集群

3.1 移除節點

假設etcd3出現了異常

[root@etcd-1 ~]# etcdctl member list ##第一列為節點的id
916281517eb238d9, started, etcd2, http://172.18.101.40:2380, http://172.18.101.40:2379,?false
9a04401d57e3afba, started, etcd1, http://172.18.101.39:2380, http://172.18.101.39:2379,?false
9f9b71960dcb7180, started, etcd3, http://172.18.101.41:2380, http://172.18.101.41:2379,?false
[root@etcd-1 ~]#
[root@etcd-1 ~]# etcdctl member remove 9f9b71960dcb7180 ##通過節點的id將節點刪除
Member 9f9b71960dcb7180 removed from cluster 8356fccf618a037f
[root@etcd-1 ~]# etcdctl member list
916281517eb238d9, started, etcd2, http://172.18.101.40:2380, http://172.18.101.40:2379,?false
9a04401d57e3afba, started, etcd1, http://172.18.101.39:2380, http://172.18.101.39:2379,?false

3.2 刪除異常節點的數據目錄

[root@etcd-3 ~]# rm -rf /var/lib/etcd
[root@etcd-3 ~]# cat /etc/etcd/etcd.conf ##修改ETCD_INITIAL_CLUSTER_STATE為exsiting
ETCD_NAME=etcd3
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://172.18.101.41:2380"
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://172.18.101.41:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.18.101.41:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://172.18.101.39:2380,etcd2=http://172.18.101.40:2380,etcd3=http://172.18.101.41:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"??##修改為existing
ETCD_INITIAL_CLUSTER_TOKEN="singless"
ETCD_ADVERTISE_CLIENT_URLS="http://172.18.101.41:2379"

圖片

3.3 將節點添加至集群

[root@etcd-1 ~]# etcdctl member add etcd3 --peer-urls=http://172.18.101.41:2380
Member 51fc8f5f71060fdc added to cluster 8356fccf618a037f
[root@etcd-1 ~]# etcdctl member list ##可以看到節點添加后處于一個未啟動的狀態,需要手動去etcd-3節點上啟動一下etcd服務
51fc8f5f71060fdc, unstarted, , http://172.18.101.41:2380, ,?false
916281517eb238d9, started, etcd2, http://172.18.101.40:2380, http://172.18.101.40:2379,?false
9a04401d57e3afba, started, etcd1, http://172.18.101.39:2380, http://172.18.101.39:2379,?false

圖片

在etcd-3上啟動服務即可

[root@etcd-3 ~]# systemctl start etcd
[root@etcd-1 ~]# etcdctl member list ##重新添加后,節點的id會變,屬于正常現象
51fc8f5f71060fdc, started, etcd3, http://172.18.101.41:2380, http://172.18.101.41:2379,?false
916281517eb238d9, started, etcd2, http://172.18.101.40:2380, http://172.18.101.40:2379,?false
9a04401d57e3afba, started, etcd1, http://172.18.101.39:2380, http://172.18.101.39:2379,?false

4 etcdctl增刪改查操作

https://github.com/etcd-io/etcd/tree/main/etcdctl

etcdctl 是用于與 ETCD 進行交互的命令行工具,它提供了一系列命令和選項,用于檢索、設置、修改和刪除 ETCD 中的數據。

4.1 etcd的數據存儲模型

前面介紹過,etcd是一個分布式的鍵值存儲系統。etcd在鍵的組織上采用了層次化的空間結構,類似于文件系統中目錄的概念。但是并不存在目錄的那種層級關系。

例如現在

類似于文件系統中的目錄(文件夾)結構,ETCD的命名空間允許以鍵的層次結構來組織數據,并且每個鍵可以唯一地標識一個節點。頂層節點被稱為根節點,然后可以在根節點下創建子節點,子節點又可以包含更多子節點,以此類推。這種層次化的結構可以用于將數據進行分類、分類和組織。

例如,假設我們有以下目錄結構:

  • /singless/test

  • /singless/test/gender

在上述示例中/singless/test/singless/test/gender,有類似于目錄一樣的共同的索引前綴//singless,但是并不存在目錄的那種層級關系。它們都可以作為一個key存儲相應的value。

4.2 增和改

增加數據和修改數據需要用到put命令進行操作

[root@etcd-1 ~]# etcdctl put /singless/test/gender male ##創建一個鍵/singless/test/gender,值為male
OK
[root@etcd-1 ~]# etcdctl put /singless/test true ##創建一個鍵/singless/test,值為test
OK

圖片

4.3 查詢操作

查詢操作需要使用到get參數

[root@etcd-1 ~]# etcdctl get /singless/test/gender ##根據具體的key查詢對應的值
/singless/test/gender
male
[root@etcd-1 ~]# etcdctl get --prefix / ##根據索引前綴查詢,這里查詢的是以/為前綴的key、value,所以能看到所有的鍵值對
/singless/test
true
/singless/test/gender
male
[root@etcd-1 ~]# etcdctl put /singless/test false ##使用put修改鍵/singless/test的value
OK
[root@etcd-1 ~]# etcdctl get /singless/test
/singless/test
false

圖片

4.4 刪除操作

刪除操作使用del命令

[root@etcd-1 ~]# etcdctl del /singless/test ##可以指定key進行刪除
1
[root@etcd-1 ~]# etcdctl get --prefix /
/singless/test/gender
male
[root@etcd-1 ~]# etcdctl del --prefix / ##也可以執行索引前綴進行刪除
1
[root@etcd-1 ~]# etcdctl get --prefix /

5 k8s中的etcd

5.1 介紹

k8s中所有對象的manifest都需要保存到某個地方,這樣他們的manifest在api server重啟和失敗的時候才不會丟失,因此引入了etcd。在k8s中只有api server和etcd直接交互,其它組件都通過api server間接和etcd交互,這樣做的好處如下。

  • 增強樂觀鎖系統及驗證系統的健壯性

  • 方便后續存儲的替換,只需修改api server組件的相關接口。

etcd是一個響應快、分布式、一致的KV存儲,也是k8s存儲集群狀態和元數據的唯一地方。

圖片

5.2 查看k8s中etcd存儲的數據

[root@k8s-master01 ~]# kubectl get pod -n kube-system |grep etcd
etcd-k8s-master01 ? ? ? ? ? ? ? ? ? ? ? ? ?1/1 ? ? Running ??1?? ? ? ? ? ? 47d
etcd-k8s-master02 ? ? ? ? ? ? ? ? ? ? ? ? ?1/1 ? ? Running ??0?? ? ? ? ? ? 47d
etcd-k8s-master03 ? ? ? ? ? ? ? ? ? ? ? ? ?1/1 ? ? Running ??0?? ? ? ? ? ? 47d
[root@k8s-master01 ~]#
[root@k8s-master01 ~]# kubectl exec -it -n kube-system etcd-k8s-master01 -- /bin/sh
sh-5.1# etcdctl member list --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key
15c808b23512a31a, started, k8s-master02, https://10.0.107.77:2380, https://10.0.107.77:2379,?false
5ca9692dbcd57e55, started, k8s-master03, https://10.0.113.204:2380, https://10.0.113.204:2379,?false
f8b45063ae1a7dfa, started, k8s-master01, https://10.0.87.66:2380, https://10.0.87.66:2379,?false

k8s中的etcd需要使用到證書進行認證

圖片

查看etcd中存儲的數據,可以手動在master節點上安裝etcdctl命令

[root@k8s-master01 ~]# export ETCDCTL_API=3 ##指定使用的api版本
[root@k8s-master01 ~]# etcdctl get --prefix "" --endpoints=10.0.87.66:2379,10.0.107.77:2379,10.0.113.204:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key |head -2

--endpoints指定etcd節點,另外要使用到k8s證書,證書通常在/etc/kubernetes/pki/目錄下,以下輸出可以看到etcd中存儲的k8s相關的鍵值數據。

圖片

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41226.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41226.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41226.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于計數以及Index返回訂單號升級版002(控制字符長度,控制年月標記,拾取未使用編號)--使用兩個表來滿足操作

1實現步驟以及說明 1.根據參數獲取當前setNoIndex表里現在的No的index值,如果包含關鍵字當前對應數據,則現在SetIndexNoLeft 表中找到有無未使用并未占用的那條數據(被占用的數據IsTaken1,生成后使用當前時間與updated時間進行比…

Django圖書商城系統實戰開發-實現訂單管理

Django圖書商城系統實戰開發-實現訂單管理 簡介 在本教程中,我們將繼續基于Django框架開發圖書商城系統,這次的重點是實現訂單管理功能。訂單管理是一個電子商務系統中非常重要的部分,它涉及到用戶下單、支付、發貨以及訂單狀態的管理等方面…

【hive】簡單介紹hive的幾種join

文章目錄 前言1. Common Join2. Map Join介紹:使用方法:限制: 3. Bucket Map Join介紹:好處:使用條件:使用方法: 4. Sort Merge Bucket Map Join介紹:如何使用: 5. Skew …

如何在控制臺查看excel內容

背景 最近發現打開電腦的excel很慢,而且使用到的場景很少,也因為mac自帶了預覽的功能。但是shigen就是閑不住,想自己搞一個excel預覽軟件,于是在一番技術選型之后,我決定使用python在控制臺顯示excel的內容。 具體的需…

Redis與MySQL的比較:什么情況下使用Redis更合適?什么情況下使用MySQL更合適?

Redis和MySQL是兩種不同類型的數據庫,各有自己的特點和適用場景。下面是Redis和MySQL的比較以及它們適合使用的情況: Redis適合的場景: 高性能讀寫:Redis是基于內存的快速Key-Value存儲,讀寫性能非常高。它適用于需要…

NodeJs導出PDF

(優于別人,并不高貴,真正的高貴應該是優于過去的自己。——海明威) 場景 根據訂單參數生成賬單PDF 結果 示例代碼 /* eslint-disable no-unused-vars */ /* eslint-disable no-undef */ /* eslint-disable complexity */ const…

【jquery實現動態給表格添加刪除行,合并指定單元格】

jquery實現動態給表格添加刪除行&#xff0c;合并指定單元格 前端技術 jspjquery 動態添加行 //新增行 $("#addRowBtn").click(function(){var rowEl$("<tr><td><input typecheckbox classcheckItem/></td><td><input nam…

NPOI 讀取和寫入Excel

在C#中使用NPOI庫讀取和寫入Excel文件&#xff0c;你需要先下載并安裝NPOI庫。你可以在NuGet管理器中搜索NPOI并進行安裝。 以下是一個使用NPOI庫進行Excel文件讀取和寫入的示例&#xff1a; 讀取Excel文件&#xff1a; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel…

【仿寫tomcat】二、掃描java文件,獲取帶有@WebServlet注解的類

tomcat仿寫 項目結構掃描文件servlet注解map容器servlet工具類啟動類調用 項目結構 掃描文件之前當然要確定一下項目結構了&#xff0c;我這里的方案是tomcat和項目同級 項目的話就仿照我們平時使用的結構就好了&#xff0c;我們規定所有的靜態資源文件都在webApp目錄下存放…

【數據庫】P1 數據庫基本常識

數據庫基本常識 數據庫 ≠ 數據庫管理系統表&#xff08;Table&#xff09;SQL是什么 數據庫 ≠ 數據庫管理系統 數據庫是保存有組織的數據的容器&#xff0c;數據庫稱為 DB&#xff08;DataBase&#xff09;&#xff1b;數據庫管理系統是創建和操縱數據庫的軟件&#xff0c;數…

充氣泵方案設計——便攜無線充氣泵方案

充氣泵方案的進化史是人類歷史上電子技術發展史中的一環。電子技術&#xff0c;特別是微電子技術是 20 世紀發展最為迅速、影響最為廣泛的技術成就。電子技術的核心是電子器件,電子器件的進步和換代&#xff0c;引起了電子電路極大的變化&#xff0c;出現了很多新的電路和應用。…

java解決mysql大數據聯查問題

java解決mysql大數據聯查問題 近期有一個需求是聯查兩張表比對三個字段 一般用mysql就可以解決 SELECT* FROMtb_a aLEFT JOIN b ON a.test b.testAND a.NAME b.NAME AND a.type b.type但是表a和表b的數據量都很不小&#xff0c;大概在10w左右&#xff0c;由于并不是以固定…

Webpact學習筆記記錄

Webpact學習筆記記錄 一.初始化項目1.生成package.json2.安裝webpack3.執行webpack體驗 二、webpack的配置文件三、less-loader解析less1.安裝loader2.配置 四、eslint-loader語法檢查1.安裝loader2.配置loader3.在package.json中加入 五、js語法轉換1.安裝loader2.配置loader …

前端能正常跑起來但是控制臺報錯數據undefined之onMounted最好不要用異步寫法

記錄問題 在做項目的時候&#xff0c;項目可以正常運行&#xff0c;但是控制臺總是報錯&#xff0c;有一個數據是undefined。 分析問題 一般遇到這種情況&#xff0c;就是vue找不到這個數據。但是為什么能正常運行&#xff1f;說明是開始加載的時候找不到數據&#xff0c;但…

Java進階篇--數據結構

目錄 一.數組&#xff08;Array&#xff09;&#xff1a; 1.1 特點&#xff1a; 1.2 基本操作&#xff1a; 1.3 使用數組的好處包括&#xff1a; 1.4 數組也有一些限制&#xff1a; 二.集合框架&#xff08;Collections Framework&#xff09;&#xff1a; 2.1 列表…

當你出差在外時,怎樣輕松訪問遠程訪問企業局域網象過河ERP系統?

文章目錄 概述1.查看象過河服務端端口2.內網穿透3. 異地公網連接4. 固定公網地址4.1 保留一個固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址連接 概述 ERP系統對于企業來說重要性不言而喻&#xff0c;不管是財務、生產、銷售還是采購&#xff0c;都需要用到ERP系統來協助。…

miniconda克隆arcpy

arcpy環境克隆 前言嘗試思考到此結束 前言 最近遇到了一些問題&#xff0c;需要用到arcpy來處理一些東西&#xff0c;但眾所周知&#xff0c;arcgis的arcpy是python 2.0的&#xff0c;我不是很喜歡&#xff1b;所以我安裝了arcgis pro 2.8&#xff0c;我發現這也是個坑&#x…

Git分布式版本控制系統

目錄 2、安裝git 2.1 初始環境 2.2 Yum安裝Git 2.3 編譯安裝 2.4 初次運行 Git 前的配置 2.5 初始化及獲取 Git 倉庫 2.6 Git命令常規操作 2.6.2 添加新文件 2.6.3 刪除git內的文件 2.6.4 重命名暫存區數據 2.6.5 查看歷史記錄 2.6.6 還原歷史數據 2.6.7 還原未來…

react使用antd的table組件,實現點擊彈窗顯示對應列的內容

特別提醒&#xff1a;不能在table的columns的render里面設置彈窗組件渲染&#xff0c;因為這會導致彈窗顯示的始終是最后一行的內容&#xff0c;因為這樣渲染的結果是每一行都會重新渲染一遍這個彈窗并且會給傳遞一個content的值&#xff0c;渲染到最后一行的時候&#xff0c;就…