K8S -----二進制搭建 Kubernetes v1.20

目錄

一、準備環境

1.1 修改主機名

1.2 關閉防火墻(三臺一起,這里只展示master01)

1.3?在master添加hosts(依舊是三臺一起)

1.4?調整內核參數并開啟網橋模式

二、部署docker引擎

三、部署 etcd 集群?

1.在master01節點上操作

2.生成Etcd證書

1.創建目錄

2.創建用于生成CA證書、etcd 服務器證書以及私鑰的目錄

3.拷貝服務端

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

3.在 node01 節點上操作

同理node2也是同樣操作

來到master01上檢查etcd群集狀態

四、部署Master組件

1.在 master01 節點上操作

1.1創建kubernetes工作目錄

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

1.3上傳 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目錄中,解壓 kubernetes 壓縮包??編輯

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

1.5 創建 bootstrap token 認證文件

1.6開啟 apiserver 服務

?編輯

1.7啟動 scheduler 服務

1.8啟動 controller-manager 服務

1.9啟動admin服務并生成kubectl連接集群的kubeconfig文件

五、部署 Worker Node 組

1.先在node01和node02上創建kubernetes工作目錄

2.在 master01 節點上操作

2.1把配置文件 拷貝到 node 節點

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

4.在node01上操作

5.在master01上操作

6.在node01上操作


一、準備環境

1.1 修改主機名

hostnamectl set-hostname master01
su
hostnamectl set-hostname node01
su
hostnamectl set-hostname node02
su

Master01192.168.21.10
node01192.168.21.30
node02192.168.21.40

1.2 關閉防火墻(三臺一起,這里只展示master01)

關閉防火墻
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
#關閉selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
關閉swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 

1.3?在master添加hosts(依舊是三臺一起)

vim /etc/hosts#添加ip
192.168.21.10 master01
192.168.21.30 node01
192.168.21.40 node02

1.4?調整內核參數并開啟網橋模式

#調整內核參數
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
EOF
sysctl --system   刷新#時間同步
yum install ntpdate -y
ntpdate time.windows.com

如果報錯是軟件版本的問題,或者dns原因這邊建議修改dns都為114.114.114.114

二、部署docker引擎

//所有 node 節點部署docker引擎
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 集群?

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

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

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

1.在master01節點上操作

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
chmod +x /usr/local/bin/cfssl*

因為事先準備好了 我直接拉入

2.生成Etcd證書

1.創建目錄
mkdir /opt/k8s
cd /opt/k8s/#上傳 etcd-cert.sh 和 etcd.sh 到 /opt/k8s/ 目錄中
chmod +x etcd-cert.sh etcd.sh

2.創建用于生成CA證書、etcd 服務器證書以及私鑰的目錄
mkdir /opt/k8s/etcd-cert
mv etcd-cert.sh etcd-cert/
cd /opt/k8s/etcd-cert/
./etcd-cert.sh			#生成CA證書、etcd 服務器證書以及私鑰

vim etcd-cert.sh

這邊要注意兩個問題一個是年份,一個是ip地址

3.拷貝服務端

上傳 etcd-v3.4.9-linux-amd64.tar.gz 到 /opt/k8s 目錄中,啟動etcd服務

cd /opt/k8s/
拉入安裝包
tar zxvf etcd-v3.4.9-linux-amd64.tar.gz
cd etcd-v3.4.9-linux-amd64/
#創建用于存放 etcd 配置文件,命令文件,證書的目錄
mkdir -p /opt/etcd/{cfg,bin,ssl}
mv etcd etcdctl /opt/etcd/bin/
cp *.pem /opt/etcd/ssl/

ps -ef | grep etcd

4.把etcd相關證書文件、命令文件和服務管理文件全部拷貝到另外兩個etcd集群節點
scp -r /opt/etcd/ root@192.168.21.30:/opt/
scp -r /opt/etcd/ root@192.168.21.40:/opt/
scp /usr/lib/systemd/system/etcd.service root@192.168.21.30:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@192.168.21.40:/usr/lib/systemd/system/

3.在 node01 節點上操作

vim /opt/etcd/cfg/etcd#[Member]
ETCD_NAME="etcd02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.21.30:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.21.30:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.21.30:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.21.30:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.21.10:2380,etcd02=https://192.168.21.30:2380,etcd03=https://192.168.21.40:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

啟動etcd服務

systemctl start etcd
systemctl enable etcd     ##systemctl enable --now etcd

同理node2也是同樣操作
vim /opt/etcd/cfg/etcd
#[Member]
ETCD_NAME="etcd03"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.21.40:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.21.40:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.21.40:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.21.40:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.21.10:2380,etcd02=https://192.168.21.30:2380,etcd03=https://192.168.21.40:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

來到master01上檢查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.21.10:2379,https://192.168.21.30:2379,https://192.168.21.40:2379" endpoint status --write-out=table

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.21.30:2379,https://192.168.21.30:2379,https://192.168.21.40:2379" endpoint health --write-out=table

查看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.21.10:2379,https://192.168.21.30:2379,https://192.168.21.40:2379" --write-out=table member list

四、部署Master組件

1.在 master01 節點上操作
上傳 master.zip 和 k8s-cert.sh 到 /opt/k8s 目錄中,解壓 master.zip 壓縮包
cd /opt/k8s/
unzip master.zip
chmod +x *.sh

1.1創建kubernetes工作目錄
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

1.2 創建用于生成CA證書、相關組件的證書和私鑰的目錄
mkdir /opt/k8s/k8s-cert
cd k8s-cert
拉入事先準備好的腳本
chmod +x k8s-cert.sh

記得腳本把注釋去了,并修改為自己的ip地址

vim k8s-cert

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

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

1.3上傳 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目錄中,解壓 kubernetes 壓縮包
?
1.4 復制master組件的關鍵命令文件到 kubernetes工作目錄的 bin 子目錄中
cd /opt/k8s/kubernetes/server/bin
cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/

1.5 創建 bootstrap token 認證文件
cd /opt/k8s/
vim token.sh
#!/bin/bash
#獲取隨機數前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"
EOFchmod +x token.sh
./token.sh

1.6開啟 apiserver 服務
cd /opt/k8s/master./apiserver.sh 192.168.21.10 https://192.168.21.10:2379,https://192.168.21.30:2379,https://192.168.10.40:2379
#檢查進程是否啟動成功
ps aux | grep kube-apiservernetstat -natp | grep 6443   #安全端口6443用于接收HTTPS請求,用于基于Token文件或客戶端證書等認證

1.7啟動 scheduler 服務
cd /opt/k8s/
./scheduler.sh
ps aux | grep kube-scheduler

vim scheduler.sh

1.8啟動 controller-manager 服務
./controller-manager.sh
ps aux | grep kube-controller-manager

1.9啟動admin服務并生成kubectl連接集群的kubeconfig文件
./admin.sh#通過kubectl工具查看當前集群組件狀態
kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-2               Healthy   {"health":"true"}   
etcd-1               Healthy   {"health":"true"}   
etcd-0               Healthy   {"health":"true"}  #查看版本信息
kubectl version

五、部署 Worker Node 組

1.先在node01和node02上創建kubernetes工作目錄

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

2.在 master01 節點上操作

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

cd /opt/k8s/kubernetes/server/bin
scp kubelet kube-proxy root@node01:/opt/kubernetes/bin/
scp kubelet kube-proxy root@node02:/opt/kubernetes/bin/

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

mkdir /opt/k8s/kubeconfigcd /opt/k8s/kubeconfig
chmod +x kubeconfig.sh
./kubeconfig.sh 192.168.21.10 /opt/k8s/k8s-cert/

2.1把配置文件 拷貝到 node 節點
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@node01:/opt/kubernetes/cfg/
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@node02:/opt/kubernetes/cfg/

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

kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

4.在node01上操作

#啟動 kubelet 服務
cd /opt/
./kubelet.sh 192.168.10.18
ps aux | grep kubelet

5.在master01上操作

在 master01 節點上操作,通過 CSR 請求
#檢查到 node01 節點的 kubelet 發起的 CSR 請求,Pending 表示等待集群給該節點簽發證書
kubectl get csr
NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   12s  kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Pending
#通過 CSR 請求
kubectl certificate approve node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE#Approved,Issued 表示已授權 CSR 請求并簽發證書
kubectl get csr
NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   2m5s kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued#查看節點,由于網絡插件還沒有部署,節點會沒有準備就緒 NotReady
kubectl get node
NAME            STATUS     ROLES    AGE    VERSION
192.168.21.10   NotReady   <none>   108s   v1.20.11

6.在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#啟動proxy服務
cd /opt/
./proxy.sh 192.168.21.10
ps aux | grep kube-proxy

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

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

相關文章

15.JUC原子類

文章目錄 JUC原子類1.JUC中的Atomic原子操作包1.1. 基本原子類&#xff08;Basic Atomic Classes&#xff09;1.2. 數組原子類&#xff08;Array Atomic Classes&#xff09;1.3. 引用原子類&#xff08;Reference Atomic Classes&#xff09;4. 字段更新原子類&#xff08;Fie…

StackQueue+泛型簡單理解

&#x1f341; 個人主頁&#xff1a;愛編程的Tom&#x1f4ab; 本篇博文收錄專欄&#xff1a;Java專欄&#x1f449; 目前其它專欄&#xff1a;c系列小游戲 c語言系列--萬物的開始_ &#x1f389; 歡迎 &#x1f44d;點贊?評論?收藏&#x1f496;三連支持一…

ddpm Denoising Diffusion Probabilistic Model 學習筆記

目錄 Stable Diffusion 文章的貢獻抽象出來就兩個 潛空間上做擴散生成 ddpm(Denoising Diffusion Probabilistic Model)學習筆記 算法原理 unet預測噪聲 unet推理過程 重參數化技巧 &#xff08;1&#xff09;利用前一時刻的 xt-1 得到任意時刻的噪聲圖片 xt&#xff…

LeetCode2215找出兩數組的不同

題目描述 給你兩個下標從 0 開始的整數數組 nums1 和 nums2 &#xff0c;請你返回一個長度為 2 的列表 answer &#xff0c;其中&#xff1a;answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整數組成的列表。answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整數組…

Linux poweroff命令教程:如何實現一鍵關機(附實例詳解和注意事項)

Linux poweroff命令介紹 poweroff命令是用來關閉系統的。當你執行這個命令時&#xff0c;它會發送一個信號給系統&#xff0c;告訴系統關閉所有的進程&#xff0c;然后關閉系統。這個命令非常有用&#xff0c;特別是在你需要遠程關閉系統&#xff0c;或者你的系統沒有圖形用戶…

Autosar架構

藍框那種叫component&#xff0c;綠框的叫function cluster。 接口 有三種接口&#xff0c;RTE跟SWC之間鏈接的叫Autosar Interface&#xff0c;RTE跟BSW的Components鏈接是Standardized Interface&#xff0c;RTE跟BSW的services鏈接的是Standardized Autosar Interface。 St…

項目部署到線上proxytable代理失效nginx報404的問題

我的項目是在vue的config文件夾中的index.js中配置了接口地址 &#xff0c;本地跑的時候都能訪問&#xff0c;放到線上就報404&#xff1b; module.exports {dev: {// PathsassetsSubDirectory: static,assetsPublicPath: /,proxyTable: {/xxx: {target: http://xxxxxxxx:xxx…

分享四種CAD圖紙加密方法,嚴防盜圖

在數字化時代&#xff0c;cad圖紙的盜用和非法傳播問題日益突出。對于企業和設計師來說&#xff0c;保護設計成果的安全性和原創性&#xff0c;采取有效的cad加密方法至關重要。本文將分享四種cad加密方法&#xff0c;幫助您嚴防盜圖&#xff0c;保護圖紙安全。 使用cad軟件內…

網絡協議的分類

1.概要 網絡協議可以分為三類&#xff1a; 封裝協議路由協議功能類協議 2.分類說明 OSPF報文直接調用_ IP協議__協議進行封裝&#xff0c;以目的地址_244.0.0.5 __發送到所有的OSPF路由器? 244.0.0.1 所有主機&#xff1b;244.0.0.2 所有路由器&#xff1b;244.0.0.6 指定…

【前端每日一題】day5

JS 實現繼承的幾種方式 在JavaScript中&#xff0c;實現繼承的幾種方式包括原型鏈繼承、構造函數繼承、組合繼承、原型式繼承、寄生式繼承和組合式繼承。 原型鏈繼承&#xff1a; function Parent() {this.name Parent; } Parent.prototype.sayHello function() {console.…

當它還是幼生期的時候,及早離開它!

當我們有豐富的精神生活時&#xff0c;充實的知識吸收儲備時&#xff0c;為自己的每一點進步而欣慰時&#xff0c;我們就不會有失敗的憂慮。也不會有孤單的自憐。 沒有人是弱者&#xff0c;每個人都有自己活著的方式&#xff0c;當你內心強大時&#xff0c;你會尊重每一個“弱者…

Vue+springboot的批量刪除功能

vue前臺 <div style"margin-bottom: 10px"><el-button type"primary" plain click"handleAdd">新增</el-button><el-button click"delBatch" type"danger" plain style"margin-left: 5px"…

Spring Cloud 背后技術詳解

Spring Cloud 是基于 Spring Boot 的一套微服務架構解決方案。它為開發者提供了一系列的工具&#xff0c;用于快速構建分布式系統中的一些常見模式&#xff08;例如配置管理、服務發現、斷路器等&#xff09;。Spring Cloud 利用 Spring Boot 的自動配置和獨立運行能力&#xf…

C語言例題41、八進制轉換為十進制

#include<stdio.h>void main() {int x;printf("請輸入一個8進制整數&#xff1a;");scanf("%o", &x);printf("轉換成十進制后的整數為%d\n", x); }運行結果&#xff1a; 本章C語言經典例題合集&#xff1a;http://t.csdnimg.cn/FK0Qg…

Java基礎(33)Java Web攔截器作用和用法

Java Web攔截器&#xff08;Interceptor&#xff09;是Java Web開發中一個重要的概念&#xff0c;它允許開發者在處理HTTP請求和響應之前或之后執行特定的代碼&#xff0c;從而實現如權限檢查、日志記錄、事務管理等功能。攔截器可以作用于Java EE的Servlet、Spring框架、Strut…

redis試題按知識點歸類(四)

十六、實戰應用 1.如何使用 Redis 存儲用戶會話&#xff1f; 2.Redis 在電子商務平臺中的應用是什么&#xff1f; 3.如何使用 Redis 進行實時數據分析&#xff1f; 十七、面試題綜合 1.描述一次你解決 Redis 性能問題的經歷。 2.你如何理解 Redis 中的“單線程”模型&…

Java入門基礎學習筆記21——Scanner

在程序中接收用戶通過鍵盤輸入的數據&#xff1a; 需求&#xff1a; 請在程序中&#xff0c;提示用戶通過鍵盤輸入自己的姓名、年齡、并能在程序中收到這些信息&#xff0c;怎么解決&#xff1f; Java已經寫好了實現程序&#xff0c;我們調用即可。 API&#xff1a;Applicat…

2024 年中國大學生程序設計競賽全國邀請賽(鄭州)暨第六屆CCPC河南省大學生程序設計競賽 problem K. 樹上問題

//先找一個美麗的樹&#xff0c;然后遍歷樹找節點,分析是否符合條件。 //畫幾個圖&#xff0c;思考下。 #include<bits/stdc.h> using namespace std; #define int long long const int n1e611; int a,b,c[n],d,l,r,k,w,an; vector<int>t[n]; void dfs(int x,int…

MLT剪輯sample

#include <framework/mlt.h> int main(int argc, char **argv) { // 初始化MLT mlt_factory factory mlt_factory_init(NULL); // 加載素材&#xff08;這里假設我們有一個名為"video.mp4"的視頻文件&#xff09; mlt_profile profile mlt_prof…

什么是頁分裂、頁合并?

數據組織方式 在InnoDB存儲引擎中&#xff0c;表數據都是根據主鍵順序組織存放的&#xff0c;這種存儲方式的表稱為索引組織表(index organized table IOT)。 行數據&#xff0c;都是存儲在聚集索引的葉子節點上的。而我們之前也講解過InnoDB的邏輯結構圖&#xff1a; 在I…