k8s 二進制安裝 詳細安裝步驟

目錄

一? ? 實驗環境

二? ?操作系統初始化配置(所有機器)

1,關閉防火墻

2,關閉selinux

3,關閉swap

4,?根據規劃設置主機名

5,?做域名映射

6,調整內核參數

7,?時間同步

三? ?部署 docker引擎(node?節點)

四? ??部署 etcd 集群

1,?etcd?介紹

1.1?etcd?是什么

1.2?etcd?特點

1.3???etcd?端口

2,??準備簽發證書環境

3,?下載CFSSL三個工具

4,??生成Etcd證書

5,下載?etcd?的安裝包,啟動etcd

6,?把etcd相關證書文件、命令文件和服務管理文件全部拷貝到另外兩個etcd集群節點

7,?在 node01 節點上操作(etcd02 )

8,?在 node02?節點上操作(etcd03?)

9 ,查看etcd主從?狀態

9.1?檢查etcd群集狀態

9.2?更詳細檢查etcd群集狀態

9.3??查看etcd集群成員列表

五? ??部署 Master 組件

1,上傳5個需要的腳本

2,創建kubernetes工作目錄

3,生成CA證書、相關組件的證書和私鑰

4,?將 master組件的關鍵命令文件到 kubernetes工作目錄的 bin?

5,? 創建token?認證文件

6,?查看準備環境

7,?開啟 apiserver 服務

8,?啟動 scheduler 服務

9,?啟動 controller-manager 服務

10,??生成kubectl連接集群的kubeconfig文件

11,通過kubectl工具查看當前集群組件狀態

六? ? ?部署 Worker Node 組件(在所有 node 節點上操作)

1,創建kubernetes工作目錄,上傳兩個腳本

2,把 kubelet、kube-proxy 拷貝到 node 節點

3,?生成node?節點的配置文件

3.1?具體步驟

3.2?具體解釋

4,?準備環境

4,? ?啟動? kubelet.sh?腳本? ?啟動kublet?組件

5,?在 master01 節點上操作,通過 CSR 請求

6,?node節點? ?啟動?proxy?組件

七? ???部署 CNI 網絡組件? 之部署 flannel

1,環境準備

2,準備flannel?鏡像

3,?準備?cni?的可執行應用

4,利用腳本部署 CNI 網絡

5,?查看node?節點狀態

6,?將node02?也加入網絡

八? ? 部署 CNI 網絡組件? 之部署??Calico

1,上傳 calico.yaml 文件到 /opt/k8s 目錄中,部署 CNI 網絡

2,執行yaml?文件

?3,?查看node?節點狀態

?九? ?二進制安裝步驟總結

1, 環境部署

2,node 節點 部署 docker引擎

3,部署 etcd 集群

3.1 ssl 子目錄準備

3.2 bin 子目錄準備

3.3 腳本啟動一臺etcd01

3.4 做其他的etcd

4,部署 Master 組件

4.1 ssl 子目錄準備

4.2 bin 子目錄準備

4.3 cfg 目錄準備

4.4 啟動 apiserver 服務

4.5 啟動 scheduler 服務

4.6 啟動 controller-manager 服務

4.7 啟動 kubectl 工具

5, 部署 Worker Node 集群

5.1 bin 子目錄 準備

5.2 cfg 子目錄準備

5.3 master 機器做RBAC授權

5.4 啟動 kubelet 服務

5.5 master通過 CSR 請求

5.6 啟動 proxy 服務

6, 部署 flannel

6.1 node機器

6.2 master 機器

7,部署 Calico

6.1 node 機器

6.2 master 機器


一? ? 實驗環境

k8s集群master01:192.168.217.66? ? kube-apiserver kube-controller-manager kube-scheduler etcd
k8s集群master02:192.168.217.77

k8s集群node01:192.168.217.88? ? kubelet kube-proxy docker?
k8s集群node02:192.168.217.99

etcd集群節點1:192.168.217.66? ? etcd
etcd集群節點2:192.168.217.88? ? etcd

etcd集群節點3:192.168.217.99? ? etcd

負載均衡nginx+keepalive01(master):192.168.217.22
負載均衡nginx+keepalive02(backup):192.168.217.44


VIP 192.168.10.100
?

二? ?操作系統初始化配置(所有機器)

1,關閉防火墻

systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X#
iptables -F:這一部分命令是用來清空filter表中的所有規則鏈(包括INPUT、OUTPUT、FORWARD)。這意味著所有進入、離開或通過系統的數據包都將按照默認策略處理,通常是接受(ACCEPT)或拒絕(DROP)。iptables -t nat -F:這里,-t nat指定了操作表為nat表,-F則表示清空。它會清空nat表內的規則,包括PREROUTING、POSTROUTING和OUTPUT鏈。這些規則通常用于網絡地址轉換(NAT),比如端口轉發或者IP偽裝。iptables -t mangle -F:這部分命令清空了mangle表中的規則。mangle表用于修改數據包的服務類型、TTL(生存時間)值或標記等,通常涉及到更高級的路由和QoS(服務質量)控制。iptables -X:此命令用于刪除用戶自定義的(非內置的)鏈。這不會影響INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING這樣的內置鏈,而是會刪除你自己創建的任何額外鏈。綜上所述,執行這個命令后,你的iptables規則將會被完全重置,所有的自定義規則都會被清除,系統將恢復到iptables的初始默認狀態。在執行此操作前,請確保你了解這將對你的系統網絡安全設置產生的影響,并已經做好了相應的備份或有恢復策略。

2,關閉selinux

setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

3,關閉swap

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 
# -r 是開啟擴展正則 將.*swap.*  換成#$

4,?根據規劃設置主機名

hostnamectl set-hostname master01
hostnamectl set-hostname master02
hostnamectl set-hostname node01
hostnamectl set-hostname node02

5,?做域名映射

cat >> /etc/hosts << EOF
192.168.217.66 master01
192.168.217.77 master02
192.168.217.88 node01
192.168.217.99 node02
EOF

6,調整內核參數

cat > /etc/sysctl.d/k8s.conf << EOF
#開啟網橋模式,可將網橋的流量傳遞給iptables鏈
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#關閉ipv6協議
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOFsysctl --system
##
sysctl --system 命令用于從系統配置文件(通常是 /etc/sysctl.conf 以及 /etc/sysctl.d/ 目錄下的其他配置文件)中讀取并應用內核參數設置。當執行這個命令時,系統會遍歷這些配置文件,將其中定義的內核參數值應用到當前運行的內核中,從而實現對系統行為的調整,例如開啟或關閉IP轉發、調整網絡緩沖區大小、改變文件系統的行為等,而無需重啟系統。

7,?時間同步

yum install ntpdate -y
ntpdate time.windows.com

三? ?部署 docker引擎(node?節點)

yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.iosystemctl start docker.service
systemctl enable docker.service 

四? ??部署 etcd 集群

CFSSL?是為etcd?的準備的? ?

CFSSL?生成的?密鑰文件? 會拖到?etcd?的ssl?目錄中

1,?etcd?介紹

1.1?etcd?是什么

etcd是CoreOS團隊于2013年6月發起的開源項目,它的目標是構建一個高可用的分布式鍵值(key-value)數據庫。etcd內部采用raft協議作為一致性算法,etcd是go語言編寫的。

1.2?etcd?特點

etcd 作為服務發現系統,有以下的特點:
簡單:安裝配置簡單,而且提供了HTTP API進行交互,使用也很簡單
安全:支持SSL證書驗證
快速:單實例支持每秒2k+讀操作
可靠:采用raft算法,實現分布式系統數據的可用性和一致性
?

1.3???etcd?端口

etcd 目前默認使用2379端口提供HTTP API服務, 2380端口和peer通信(這兩個端口已經被IANA(互聯網數字分配機構)官方預留給etcd)。 即etcd默認使用2379端口對外為客戶端提供通訊,使用端口2380來進行服務器間內部通訊。
etcd 在生產環境中一般推薦集群方式部署。由于etcd 的leader選舉機制,要求至少為3臺或以上的奇數臺。


2,??準備簽發證書環境

CFSSL 是 CloudFlare 公司開源的一款 PKI/TLS 工具。 CFSSL 包含一個命令行工具一個用于簽名、驗證和捆綁 TLS 證書的 HTTP API 服務。使用Go語言編寫。
CFSSL 使用配置文件生成證書,因此自簽之前,需要生成它識別的 json 格式的配置文件,CFSSL 提供了方便的命令行生成配置文件。
CFSSL 用來為 etcd 提供 TLS 證書,它支持簽三種類型的證書:
1、client 證書,服務端連接客戶端時攜帶的證書,用于客戶端驗證服務端身份,如 kube-apiserver 訪問 etcd;
2、server 證書,客戶端連接服務端時攜帶的證書,用于服務端驗證客戶端身份,如 etcd 對外提供服務;
3、peer 證書,相互之間連接時使用的證書,如 etcd 節點之間進行驗證和通信
這里全部都使用同一套證書認證。
?

3,?下載CFSSL三個工具

下載

#準備cfssl證書生成工具
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/local/bin/cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/local/bin/cfssl-certinfo

移到指定目錄? ?加權限

cfssl:證書簽發的工具命令
cfssljson:將 cfssl 生成的證書(json格式)變為文件承載式證書
cfssl-certinfo:驗證證書的信息
cfssl-certinfo -cert <證書名稱>			#查看證書的信息

4,??生成Etcd證書

準備k8s?目錄

上傳 etcd-cert.sh (生成CFSSL?證書的腳本) etcd.sh (啟動?etcd?的腳本)到 /opt/k8s/ 目錄中

并加?執行權限

創建用于生成CA證書、etcd 服務器證書以及私鑰的目錄? ?將腳本移過去

編寫腳本? 注意更改證書 生命周期? ?以及etcf?服務器的ip?地址

運行腳本?生成CA證書、etcd 服務器證書以及私鑰

  1. ca-config.json:CA(Certificate Authority,證書頒發機構)的配置文件,定義了如何生成CA證書的規則,比如默認有效期、密鑰使用算法等。

  2. ca-csr.json:CA證書簽名請求文件(Certificate Signing Request),包含了請求CA簽發證書所需的信息。

  3. ca.pem:CA的公鑰證書文件,用于驗證由該CA簽發的所有證書的真實性。

  4. server.csr:服務器證書的簽名請求文件,用于請求簽發特定服務器的TLS證書。

  5. server-key.pem:服務器私鑰文件,與server.pem一起用于服務器的TLS加密通信。

  6. server-csr.json:另一個服務器證書簽名請求文件,可能用于不同目的或備份。

  7. server.pem:服務器的公鑰證書文件,包含了服務器的公鑰以及由CA簽名的證書信息。

  8. etcd-cert.sh:一個腳本文件,可能是用來自動化執行上述TLS證書生成過程的Shell腳本。

5,下載?etcd?的安裝包,啟動etcd

下載?etcd?的安裝包?到/opt/k8s

https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz

解壓安裝包并查看? ?

etcd就是etcd 服務的啟動命令,后面可跟各種啟動參數
etcdctl主要為etcd 服務提供了命令行操作

創建用于存放 etcd 配置文件命令文件,證書的目錄

把?原來?壓縮包解壓出來的??etcd??etcdctl?移動到 bin

將把4個.pem?結尾的? ?證書 放ssl

寫etcd?啟動腳本 (根據腳本示例? ?用位置變量?跟三個etcd?的ip來啟動)腳本

確保所有的啟動etcd?的準備環境(cfg?配置文件目前是空的? 在啟動etcd?腳本后會自動生成)

啟動etcd?啟動腳本

cd /opt/k8s/./etcd.sh etcd01 192.168.217.66 etcd02=https://192.168.217.88:2380,etcd03=https://192.168.217.99:2380#
進入卡住狀態等待其他節點加入,這里需要三臺etcd服務同時啟動,如果只啟動其中一臺后,服務會卡在那里,直到集群中所有etcd節點都已啟動,可忽略這個情況

可另外打開一個窗口查看etcd進程是否正常ps -ef | grep etcd

注意?他可能會報超時的錯誤? ?查看端口都正常運行

6,?把etcd相關證書文件、命令文件和服務管理文件全部拷貝到另外兩個etcd集群節點

拷貝etcd 目錄?下的所有文件(證書? 配置文件?二進制文件)

拷貝服務管理文件

scp /usr/lib/systemd/system/etcd.service root@192.168.217.99:/usr/lib/systemd/system/scp /usr/lib/systemd/system/etcd.service root@192.168.217.88:/usr/lib/systemd/system/

7,?在 node01 節點上操作(etcd02 )

vim /opt/etcd/cfg/etcd? ?寫etcd02?的配置文件

啟動etcd服務

8,?在 node02?節點上操作(etcd03?)

vim /opt/etcd/cfg/etcd?

9 ,查看etcd主從?狀態

啟動順序:?應先啟動etcd01? ?再啟動etcd02 03

9.1?檢查etcd群集狀態
ETCDCTL_API=3   /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.217.66:2379,https://192.168.217.88:2379,https://192.168.217.99:2379" endpoint health --write-out=table##########------------------------------------------------------------------------------------------
--cert-file:識別HTTPS端使用SSL證書文件
--key-file:使用此SSL密鑰文件標識HTTPS客戶端
--ca-file:使用此CA證書驗證啟用https的服務器的證書
--endpoints:集群中以逗號分隔的機器地址列表
cluster-health:檢查etcd集群的運行狀況

9.2?更詳細檢查etcd群集狀態
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.217.66:2379,https://192.168.217.88:2379,https://192.168.217.99:2379" endpoint status --write-out=table######
------------------------------------------------------------------------------------------
--cert-file:識別HTTPS端使用SSL證書文件
--key-file:使用此SSL密鑰文件標識HTTPS客戶端
--ca-file:使用此CA證書驗證啟用https的服務器的證書
--endpoints:集群中以逗號分隔的機器地址列表
cluster-health:檢查etcd集群的運行狀況

  • ENDPOINT: 表示etcd集群中每個成員的訪問地址和端口。

  • ID: 是每個etcd節點在集群中的唯一標識符,通常是一個隨機生成的字符串。

  • VERSION: 顯示etcd服務器的版本號。

  • DB SIZE: 數據庫的大小,這里以“20 kB”為例,表示當前etcd節點存儲的數據量大小。

  • IS LEADER: 指示該節點是否為集群中的領導者(Leader)。在Raft共識算法中,集群中只有一個Leader負責處理所有寫操作和協調集群狀態。結果顯示為truefalse

  • IS LEARNER: 表示該節點是否為學習者(Learner)節點,學習者節點接收復制的日志條目但不參與選舉。結果顯示為truefalse

  • RAFT TERM: Raft協議中的任期號(Term),用于選舉領導和日志復制的邏輯時鐘。每當選舉出新的領導者時,任期號就會遞增。

  • RAFT INDEX: 當前Raft日志條目的索引,表示了Raft日志的最新位置。

  • RAFT APPLIED INDEX: 已經被應用到狀態機的日志條目索引,這個值應該總是小于等于RAFT INDEX,表示哪些日志已經被實際執行。

  • ERRORS: 如果在檢查該節點狀態時遇到任何錯誤,這一列將顯示具體的錯誤信息。如果沒有錯誤,則為空。

9.3??查看etcd集群成員列表
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.217.66:2379,https://192.168.217.88:2379,https://192.168.217.99:2379" --write-out=table member list

五? ??部署 Master 組件

大體邏輯是??創建kubernetes工作目錄
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}? 將需要的文件都拖入

然后?分別執行4個腳本?開啟? ?

apiserver 服務(? ? 需要二進制文件、token、證書)

scheduler 服務
controller-manager 服務

kubectl工具

1,上傳5個需要的腳本

上傳 master.zip 和 k8s-cert.sh 到 /opt/k8s 目錄中

解壓 master.zip 壓縮包??unzip master.zip

得到4個?啟動腳本? ? 以及生成證書的腳本(api?server?需要)

2,創建kubernetes工作目錄

mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

3,生成CA證書、相關組件的證書和私鑰

創建用于生成CA證書、相關組件的證書和私鑰的目錄

運行腳本? ? 生成CA證書、相關組件的證書和私鑰

修改? 這個生成證書的?腳本

啟動腳本? ?生成證書??./k8s-cert.sh?

復制CA證書、apiserver相關證書和私鑰到 kubernetes工作目錄的 ssl 子目錄中

cp ca*pem apiserver*pem /opt/kubernetes/ssl/

4,?將 master組件的關鍵命令文件到 kubernetes工作目錄的 bin?

#上傳 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目錄中,解壓 kubernetes 壓縮包
#下載地址:

ttps://github.com/kubernetes/kubernetes/blob/release-1.20/CHANGELOG/CHANGELOG-1.20.md
#注:打開鏈接你會發現里面有很多包,下載一個server包就夠了,包含了Master和Worker Node二進制文件。

?解壓kubernetes-server?包

查看解壓后的?文件

復制master組件的關鍵命令文件到 kubernetes工作目錄的 bin 子目錄中

并?做軟連接

5,? 創建token?認證文件

創建 bootstrap toke長度n 認證文件,apiserver 啟動時會調用,然后就相當于在集群內創建了一個這個用戶,接下來就可以用 RBAC 給他授權

cd /opt/k8s/? ??vim token.sh

#獲取隨機數前16個字節內容,以十六進制格式輸出,并刪除其中空格
BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
#生成 token.csv 文件,按照 Token序列號,用戶名,UID,用戶組 的格式生成
cat > /opt/kubernetes/cfg/token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF

腳本執行完畢后,會在 /opt/kubernetes/cfg/token.csv 路徑下生成一個包含新Bootstrap Token的CSV文件。當 Kubernetes API Server 啟動時,如果配置為讀取此文件或目錄下的token文件,它會自動識別并注冊這些Token,使得集群內可以使用這個Token進行認證。之后,通過RBAC(Role-Based Access Control)系統,可以進一步為這個Token關聯的用戶或用戶組分配具體的訪問權限。

給腳本加權限? ?并執行? 這就是token

6,?查看準備環境

4個啟動?腳本

7,?開啟 apiserver 服務

二進制文件、token、證書都準備好后,開啟 apiserver 服務

./apiserver.sh 192.168.217.66 https://192.168.217.66:2379,https://192.168.217.88:2379,https://192.168.217.99:2379

檢查進程是否啟動成功

ps aux | grep kube-apiservernetstat -natp | grep 6443   #安全端口6443用于接收HTTPS請求,用于基于Token文件或客戶端證書等認證

8,?啟動 scheduler 服務

vim scheduler.sh

啟動腳本

查看是否啟動成功

9,?啟動 controller-manager 服務

vim controller-manager.sh?

啟動腳本

查看是否啟動成功

10,??生成kubectl連接集群的kubeconfig文件

vim admin.sh

啟動腳本

11,通過kubectl工具查看當前集群組件狀態

kubectl get cs

查看版本信息

kubectl version

六? ? ?部署 Worker Node 組件(在所有 node 節點上操作)

大體的思路就是?bin,cfg,ssl,logs?這四個文件夾內放入指定

通過這兩個腳本啟動組件 ?kubelet.sh、proxy.sh
?

1,創建kubernetes工作目錄,上傳兩個腳本

解壓壓縮包?查看壓縮包? 獲得兩個啟動腳本,并加權限

2,把 kubelet、kube-proxy 拷貝到 node 節點

在 master01 節點上操作

3,?生成node?節點的配置文件

3.1?具體步驟

在 master01 節點上操作

上傳kubeconfig.sh文件到/opt/k8s/kubeconfig目錄中

?#上傳kubeconfig.sh文件到/opt/k8s/kubeconfig目錄中,生成kubelet初次加入集群引導kubeconfig文件kube-proxy.kubeconfig文件
#kubeconfig 文件包含集群參數(CA 證書、API Server 地址),客戶端參數(上面生成的證書和私鑰),集群 context 上下文參數(集群名稱、用戶名)。Kubenetes 組件(如 kubelet、kube-proxy)通過啟動時指定不同的 kubeconfig 文件可以切換到不同的集群,連接到 apiserver。

執行腳本

把配置文件 bootstrap.kubeconfig、kube-proxy.kubeconfig 拷貝到 node 節點

RBAC授權,使用戶 kubelet-bootstrap 能夠有權限發起 CSR 請求證書

kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap###############
若執行失敗,可先給kubectl綁定默認cluster-admin管理員集群角色,授權集群操作權限
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

3.2?具體解釋

kubelet 采用 TLS Bootstrapping 機制自動完成到 kube-apiserver 的注冊,在 node 節點量較大或者后期自動擴容時非常有用。
Master apiserver 啟用 TLS 認證后,node 節點 kubelet 組件想要加入集群,必須使用CA簽發的有效證書才能與 apiserver 通信,當 node 節點很多時,簽署證書是一件很繁瑣的事情。因此 Kubernetes 引入了 TLS bootstraping 機制來自動頒發客戶端證書kubelet 會以一個低權限用戶自動向 apiserver 申請證書,kubelet 的證書由 apiserver 動態簽署。

kubelet 首次啟動通過加載 bootstrap.kubeconfig 中的用戶 Token 和 apiserver CA 證書發起首次 CSR 請求,這個 Token 被預先內置在 apiserver 節點的 token.csv 中,其身份為 kubelet-bootstrap 用戶和 system:kubelet-bootstrap 用戶組;想要首次 CSR 請求能成功(即不會被 apiserver 401 拒絕),則需要先創建一個 ClusterRoleBinding,將 kubelet-bootstrap 用戶和 system:node-bootstrapper 內置 ClusterRole 綁定(通過 kubectl get clusterroles 可查詢),使其能夠發起 CSR 認證請求

TLS bootstrapping 時的證書實際是由 kube-controller-manager 組件來簽署的,也就是說證書有效期是 kube-controller-manager 組件控制的;kube-controller-manager 組件提供了一個 --experimental-cluster-signing-duration 參數來設置簽署的證書有效時間;默認為 8760h0m0s,將其改為 87600h0m0s,即 10 年后再進行 TLS bootstrapping 簽署證書即可。

也就是說 kubelet 首次訪問 API Server 時,是使用 token 做認證,通過后,Controller Manager 會為 kubelet 生成一個證書,以后的訪問都是用證書做認證了。
?

4,?準備環境

準備兩個啟動腳本

準備?對應目錄的文件

4,? ?啟動? kubelet.sh?腳本? ?啟動kublet?組件

在 node01 節點上操作

?查看kubelet.sh?腳本

啟動kubelet?組件

5,?在 master01 節點上操作,通過 CSR 請求

在?master01 節點上操作

檢查到 node01 節點的 kubelet 發起的 CSR 請求,Pending 表示等待集群給該節點簽發證書

通過 CSR 請求

kubectl certificate approve # 后面跟node請求的那個很長的編號

再次查看??Approved,Issued 表示已授權 CSR 請求并簽發證書

6,?node節點? ?啟動?proxy?組件

在?master01 節點上操作

查看節點,由于網絡插件還沒有部署,節點會沒有準備就緒 NotReady

在 node01 節點上操作

加載 ip_vs 模塊

for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done--------------------------------------------------------
#
對于在 /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs 路徑下,通過列出文件并使用 grep 命令篩選出以點號之前的部分(即模塊名稱)的每一個條目,執行以下操作:打印(echo)出當前處理的模塊名稱。
使用 /sbin/modinfo 命令查詢該模塊的文件名(-F filename),此步驟用來檢查模塊信息是否存在且是否可以被正確識別。2>&1 是將錯誤輸出重定向到標準輸出,以便于忽略可能的錯誤信息不影響后續命令執行。
如果上一步驟成功(意味著模塊信息存在且可識別),則使用 /sbin/modprobe 命令加載該內核模塊。
簡而言之,這個腳本會遍歷指定目錄下的 IPVS 相關內核模塊,檢查每個模塊的有效性,然后嘗試加載這些有效的內核模塊。

啟動proxy服務

node2?重復以上操作

七? ???部署 CNI 網絡組件? 之部署 flannel

1,環境準備

在?master01 節點上操作

兩個node? 都通過已授權 CSR 請求并簽發證書

2,準備flannel?鏡像

在?node01 節點上操作

準備flannel?鏡像的壓縮包

導入鏡像

3,?準備?cni?的可執行應用

在?node01 節點上操作

創建指定目錄? ? 將cni?壓縮包解壓到??

看一下? 全是綠色可執行文件

4,利用腳本部署 CNI 網絡

在?master01 節點上操作

上傳 kube-flannel.yml 文件到 /opt/k8s 目錄中,部署 CNI 網絡


?

執行部署的?yaml?文件

kubectl apply -f kube-flannel.yml 

5,?查看node?節點狀態

在?master01 節點上操作

kubectl get pods -n kube-system##########################
這個命令是用于在 Kubernetes 集群中查詢指定命名空間 (kube-system) 內的所有 Pod 的狀態

查看node?狀態

6,?將node02?也加入網絡

因為?k8s?自動修復的功能? ?所以只需要在node02? 上拖入flannel?鏡像,和cni?應用

node2? 即會自動加入網絡

在?node02 節點上操作

在?master01 節點上操作

八? ? 部署 CNI 網絡組件? 之部署??Calico

備注:?此項操作與部署flannel?二選一?

這邊不需要拖cni包,ymal 文件全給你配置好了,他會從鏡像倉庫上拉取,自動解壓到/opt/cni/bin ? 變成一堆綠色的可執行文件 這邊注意網絡環境是否通暢,如有必要改一下dns

在?master01 節點上操作

1,上傳 calico.yaml 文件到 /opt/k8s 目錄中,部署 CNI 網絡

#修改里面定義 Pod 的網絡(CALICO_IPV4POOL_CIDR),需與前面 kube-controller-manager 配置文件指定的 cluster-cidr 網段一樣

#Calico 默認使用的網段為 192.168.0.0/16

2,執行yaml?文件

kubectl apply -f calico.yaml

?3,?查看node?節點狀態

此時有個為notready? 因為88機器未做好cni組件

?將?node02?里? cni文件夾下的一堆可執行文件? ?拖到node01

注意!此處這些綠色可執行文件和flannel?模式下的? 文件是不一樣的

再次查看? 網絡已通

以上。一個簡單架構的未禁止安裝k8s?就做好了

由于篇幅有限,下一章將詳細介紹部署master02?以及?nginx負載均衡

?九? ?二進制安裝步驟總結

1, 環境部署

關閉防火墻 關閉selinux 關閉swap 根據規劃設置主機名

做域名映射 調整內核參數 時間同步

2,node 節點 部署 docker引擎

3,部署 etcd 集群

大體步驟是 etcd 目錄下(cfg bin ssl 三個子目錄)

3.1 ssl 子目錄準備

下載CFSSL 工具

用etcd-cert.sh腳本 生成CA證書、etcd 服務器證書以及私鑰

4個.pem 結尾的 文件 放ssl

3.2 bin 子目錄準備

下載 etcd 的安裝包(etcd-v3.4.9-linux-amd64.tar.gz) 解壓

將可執行文件 etcd etcdctl 移動到 bin

3.3 腳本啟動一臺etcd01

etcd.sh

3.4 做其他的etcd

拷貝 etcd 目錄下(cfg bin ssl 三個子目錄)

拷貝服務管理文件

改其他etcd機器的 etcd 目錄下cfg子目錄的配置文件

4,部署 Master 組件

大體步驟是 kubernetes目錄 下 bin,cfg,ssl,logs 四個子目錄

4.1 ssl 子目錄準備

下載CFSSL 工具

用k8s-cert.sh 腳本 生成CA證書、apiserver相關證書和私鑰

4個.pem 結尾的 文件 放ssl

4.2 bin 子目錄準備

下載master的安裝包( kubernetes-server-linux-amd64.tar.gz) 解壓

將可執行文件 (kube-apiserver kubectl kube-controller-manager kube-scheduler)移動到 bin

4.3 cfg 目錄準備

用token.sh 腳本 在/opt/kubernetes/cfg/token.csv 生成token 令牌

4.4 啟動 apiserver 服務

用 apiserver.sh 腳本

4.5 啟動 scheduler 服務

用scheduler.sh 腳本 (需要在腳本指定api server 的ip)

4.6 啟動 controller-manager 服務

用controller-manager.sh 腳本 (需要在腳本指定api server 的ip)

4.7 啟動 kubectl 工具

用 admin.sh 腳本 (需要在腳本指定api server 的ip)

5, 部署 Worker Node 集群

大體步驟是 kubernetes目錄 下 bin,cfg,ssl,logs 四個子目錄

5.1 bin 子目錄 準備

將master的安裝包( kubernetes-server-linux-amd64.tar.gz) 解壓后的 可執行文件 kubelet kube-proxy 放入

5.2 cfg 子目錄準備

在master機器 用kubeconfig.sh 腳本 生成生成kubelet初次加入集群需要的bootstrap.kubeconfig、kube-proxy.kubeconfig

把bootstrap.kubeconfig、kube-proxy.kubeconfig 放入

5.3 master 機器做RBAC授權

RBAC授權,使用戶 kubelet-bootstrap 能夠有權限發起 CSR 請求證書

5.4 啟動 kubelet 服務

kubelet.sh 腳本

5.5 master通過 CSR 請求

因為啟動了 kubelet 服務 所以會有來自node的請求

檢查CSR 請求 (kubectl get csr)

并通過 CSR 請求 (kubectl certificate approve 請求編號)

5.6 啟動 proxy 服務

加載 ip_vs 模塊

proxy.sh 腳本 啟動

6, 部署 flannel

6.1 node機器

載入 flannel 鏡像

將cni 包加壓到 /opt/cni/bin

6.2 master 機器

執行部署的 yaml 文件 kubectl apply -f kube-flannel.yml

7,部署 Calico

6.2 master 機器

(改ip)執行部署的 yaml 文件 kubectl apply -f calico.yaml

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

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

相關文章

uniapp vu3 scroll-view 滾動到指定位置

設置 scroll-view <scroll-view :scroll-y"true" :scroll-with-animation"true" :scroll-top"scrollTop" :style"height:${height}px"><view v-for"item in 10" :id"box${item}">box {{item}}</v…

原生IP介紹

原生IP&#xff0c;顧名思義&#xff0c;即初始真實IP地址&#xff0c;是指從互聯網服務提供商獲得的IP地址&#xff0c;IP地址在互聯網與用戶之間直接建立聯系&#xff0c;不需要經過代理服務器代理轉發。 原生IP具備以下特點。 1.直接性 原生IP可以直接連接互聯網&#xff…

337_C++_內存對齊操作,內存分配、或其他需要數據對齊的場合中是很常見的操作

size_t ImagesCache::_alignSize(size_t srcSz, size_t alnSz) {if (0 == alnSz) {printf("[ImagesCache] Incorrect input parameters\n");return srcSz;

代碼隨想錄算法訓練營第五十四天

第二題我看了很久還是沒太明白&#xff0c;我發現理解動規有一點點吃力了啊&#xff0c;努努力。 392.判斷子序列 總感覺在不等于的時候&#xff0c;應該是dp[i][j] dp[i-1][j-2]; 這里其實按他那個圖會更好理解一點。 class Solution { public:bool isSubsequence(string s, …

Gone框架介紹19 -如何進行單元測試?

gone是可以高效開發Web服務的Golang依賴注入框架 github地址&#xff1a;https://github.com/gone-io/gone 文檔地址&#xff1a;https://goner.fun/zh/ 請幫忙在github上點個 ??吧&#xff0c;這對我很重要 &#xff1b;萬分感謝&#xff01;&#xff01; 文章目錄 單元測試…

CentOs安裝

安裝 開發工具 &#xff1a;GCC、 JDK、mysql 如果出現藍屏&#xff0c;要在BIOS開啟虛擬化支持&#xff0c;或者移除打印機。

Google:站長移除無效網址

當您的網址不需要呈現在Google站長中時&#xff0c;您可以在站長工具中移除網址 操作步驟&#xff1a;登錄Google站長&#xff0c;綁定網站完成后&#xff0c;點擊左側刪除 >> 輸入網址 如果遇到一些網址&#xff0c;可以找尋網址間的規律&#xff0c;比如說&#xff0…

2024生日快樂祝福HTML源碼

源碼介紹 2024生日快樂祝福HTML源碼&#xff0c;源碼由HTMLCSSJS組成&#xff0c;記事本打開源碼文件可以進行內容文字之類的修改&#xff0c;雙擊html文件可以本地運行效果&#xff0c;也可以上傳到服務器里面&#xff0c; 源碼截圖 源碼下載 2024生日快樂祝福HTML源碼

Shell腳本 <<EOF ... EOF語法(Here Document)(特殊的輸入重定向方式)(定界符)

文章目錄 Here Document語法Here Document 的基本語法使用場景 關于定界符定界符不是變量定界符在 Here Document 中只是一個字符串&#xff0c;主要功能是標記輸入文本的開始和結束&#xff0c;使用時應遵循最佳實踐格式要求例子和說明如何使用定界符定界符可重復使用&#xf…

Spring數據訪問全攻略:從JdbcTemplate到聲明式事務

上文講到 —— 航向數據之海&#xff1a;Spring的JPA與Hibernate秘籍 本文目錄 四. JdbcTemplate的使用定義JdbcTemplate及其在Spring中的作用展示如何使用JdbcTemplate簡化數據庫操作1. 配置JdbcTemplate2. 使用JdbcTemplate查詢數據3. 打印查詢結果 五. Spring的事務管理介紹…

橋接模式

橋接模式&#xff1a;在這種模式下&#xff0c;虛擬機就像是局域網中一臺獨立的主機&#xff0c;能夠訪問網內任何一臺機器。在橋接模式下&#xff0c;必須為虛擬系統手動配置IP地址、子網掩碼&#xff0c;并且這些配置需要與宿主機器處于同一網段&#xff0c;以便虛擬系統和宿…

leetcode-42. 接雨水(雙指針,前綴)

42. 接雨水 /*** param {number[]} height* return {number}*/ var trap function (height) {let len height.length;let pre_max new Array(len).fill(0);let suf_max new Array(len).fill(0);pre_max[0] height[0];suf_max[len - 1] height[len - 1];for (let i 1; i…

queue使用

C的queue是一種先進先出&#xff08;FIFO&#xff09;的數據結構&#xff0c;可以用來存儲一系列元素。它屬于STL&#xff08;Standard Template Library&#xff09;的一部分&#xff0c;以queue模板類的形式提供。 要使用queue&#xff0c;需要包含頭文件&#xff0c;并使用…

Linux shell編程學習筆記49:strings命令

0 前言 在使用Linux的過程中&#xff0c;有時我們需要在obj文件或二進制文件中查找可打印的字符串&#xff0c;那么可以strings命令。 1. strings命令 的功能、格式和選項說明 我們可以使用命令 strings --help 來查看strings命令的幫助信息。 pupleEndurer bash ~ $ strin…

在k8s中搭建elasticsearch高可用集群,并對數據進行持久化存儲

&#x1f407;明明跟你說過&#xff1a;個人主頁 &#x1f3c5;個人專欄&#xff1a;《洞察之眼&#xff1a;ELK監控與可視化》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目錄 一、引言 1、Elasticsearch簡介 2、k8s簡介 二、環境準備 …

Git項目管理——提交項目和版本回退(二)

個人名片&#xff1a; &#x1f393;作者簡介&#xff1a;嵌入式領域優質創作者&#x1f310;個人主頁&#xff1a;妄北y &#x1f4de;個人QQ&#xff1a;2061314755 &#x1f48c;個人郵箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;個人微信&#xff1a;Vir2025WB…

android繪制多個黑豎線條

本文實例為大家分享了android繪制多個黑豎線條展示的具體代碼&#xff0c;供大家參考&#xff0c;具體內容如下 1.寫一個LinearLayout的布局&#xff0c;將寬度寫成5dp將高度寫成match_parent. 2.在寫一個類繼承LinearLayout&#xff0c;用LayoutInflater實現子布局的在這個L…

train_gpt2_fp32.cu - main

llm.c/test_gpt2_fp32.cu at master karpathy/llm.c (github.com) 源碼 // ---------------------------------------------------------------------------- // main training loop int main(int argc, char *argv[]) {// read in the (optional) command line argumentsco…

三.使用HashiCorp Vault工具管理數據庫

三.ubuntu安裝使用HashiCorp Vault工具管理數據庫 HashiCorp Vault 是一個基于身份的秘密和加密管理系統。機密是您想要嚴格控制訪問的任何內容,例如 API 加密密鑰、密碼和證書。Vault 提供由身份驗證和授權方法門控的加密服務。使用 Vault 的 UI、CLI 或 HTTP API,可以安全…

深度優先搜索匯總

常用英文 最近公共祖先&#xff08;Lowest Common Ancestor&#xff0c;簡稱LCA&#xff09; posterity&#xff0c;英語單詞&#xff0c;主要用作名詞&#xff0c;作名詞時譯為“子孫&#xff0c;后裔&#xff1b;后代”。 什么是深度優先搜索 深度優先搜索&#xff0c;D…