国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

二進(jìn)制安裝K8S(單Master集群架構(gòu))

這篇具有很好參考價(jià)值的文章主要介紹了二進(jìn)制安裝K8S(單Master集群架構(gòu))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


一、安裝K8S

1、單Master集群架構(gòu)

二進(jìn)制安裝K8S(單Master集群架構(gòu))

k8s集群master01:192.168.154.10 kube-apiserver kube-controller-manager kube-scheduler etcd

k8s集群node01:192.168.154.11 kubelet kube-proxy docker
k8s集群node02:192.168.154.12

etcd集群節(jié)點(diǎn)1:192.168.154.10 etcd

2、操作系統(tǒng)初始化配置

#所有節(jié)點(diǎn),關(guān)閉防火墻規(guī)則,關(guān)閉selinux,關(guān)閉swap交換
#關(guān)閉防火墻
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

#關(guān)閉selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

#關(guān)閉swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 

#根據(jù)規(guī)劃設(shè)置主機(jī)名
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02

#在master添加hosts
cat >> /etc/hosts << EOF
192.168.154.10 master01
192.168.154.11 node01
192.168.154.12 node02
EOF

#調(diào)整內(nèi)核參數(shù)
cat > /etc/sysctl.d/k8s.conf << EOF
#開啟網(wǎng)橋模式,可將網(wǎng)橋的流量傳遞給iptables鏈
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#關(guān)閉ipv6協(xié)議
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF

#生效參數(shù)
sysctl --system

#時(shí)間同步
yum install ntpdate -y
ntpdate time.windows.com

3、部署docker引擎

#所有節(jié)點(diǎn)安裝docker 
#安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2 
--------------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux內(nèi)核中支持邏輯卷管理的通用設(shè)備映射機(jī)制,它為實(shí)現(xiàn)用于存儲(chǔ)資源管理的塊設(shè)備驅(qū)動(dòng)提供了一個(gè)高度模塊化的內(nèi)核架構(gòu)。
device mapper存儲(chǔ)驅(qū)動(dòng)程序需要 device-mapper-persistent-data 和 lvm2。
--------------------------------------------------------------------------------------------

#設(shè)置阿里云鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

#安裝 Docker-CE并設(shè)置為開機(jī)自動(dòng)啟動(dòng)
yum install -y docker-ce docker-ce-cli containerd.io

cd /etc/docker/
cat  > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
      "max-size": "500m","max-file": "3"
   }
}
EOF

systemctl start docker.service
systemctl enable docker.service 

二進(jìn)制安裝K8S(單Master集群架構(gòu))

4、部署 etcd 集群

etcd是CoreOS團(tuán)隊(duì)于2013年6月發(fā)起的開源項(xiàng)目,它的目標(biāo)是構(gòu)建一個(gè)高可用的分布式鍵值(key-value)數(shù)據(jù)庫。etcd內(nèi)部采用raft協(xié)議作為一致性算法,etcd是go語言編寫的。

etcd 作為服務(wù)發(fā)現(xiàn)系統(tǒng),有以下的特點(diǎn):
簡(jiǎn)單:安裝配置簡(jiǎn)單,而且提供了HTTP API進(jìn)行交互,使用也很簡(jiǎn)單
安全:支持SSL證書驗(yàn)證
快速:?jiǎn)螌?shí)例支持每秒2k+讀操作
可靠:采用raft算法,實(shí)現(xiàn)分布式系統(tǒng)數(shù)據(jù)的可用性和一致性

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

//在 master01 節(jié)點(diǎn)上操作

#準(zhǔn)備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

chmod +x /usr/local/bin/cfssl*
------------------------------------------------------------------------------------------
cfssl:證書簽發(fā)的工具命令
cfssljson:將 cfssl 生成的證書(json格式)變?yōu)槲募休d式證書
cfssl-certinfo:驗(yàn)證證書的信息
cfssl-certinfo -cert <證書名稱>			#查看證書的信息
------------------------------------------------------------------------------------------

### 生成Etcd證書 ###
mkdir /opt/k8s
cd /opt/k8s/

#上傳 etcd-cert.sh 和 etcd.sh 到 /opt/k8s/ 目錄中
chmod +x etcd-cert.sh etcd.sh

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

ls
ca-config.json  ca-csr.json  ca.pem        server.csr       server-key.pem
ca.csr          ca-key.pem   etcd-cert.sh  server-csr.json  server.pem

#上傳 etcd-v3.4.9-linux-amd64.tar.gz 到 /opt/k8s 目錄中,啟動(dòng)etcd服務(wù)
cd /opt/k8s/
tar zxvf etcd-v3.4.9-linux-amd64.tar.gz
ls etcd-v3.4.9-linux-amd64
Documentation  etcd  etcdctl  README-etcdctl.md  README.md  READMEv2-etcdctl.md
------------------------------------------------------------------------------------------
etcd就是etcd 服務(wù)的啟動(dòng)命令,后面可跟各種啟動(dòng)參數(shù)
etcdctl主要為etcd 服務(wù)提供了命令行操作
------------------------------------------------------------------------------------------

#創(chuàng)建用于存放 etcd 配置文件,命令文件,證書的目錄
mkdir -p /opt/etcd/{cfg,bin,ssl}

cd /opt/k8s/etcd-v3.4.9-linux-amd64/
mv etcd etcdctl /opt/etcd/bin/
cp /opt/k8s/etcd-cert/*.pem /opt/etcd/ssl/

cd /opt/k8s/
./etcd.sh etcd01 192.168.154.10 etcd02=https://192.168.154.11:2380,etcd03=https://192.168.154.12:2380
#進(jìn)入卡住狀態(tài)等待其他節(jié)點(diǎn)加入,這里需要三臺(tái)etcd服務(wù)同時(shí)啟動(dòng),如果只啟動(dòng)其中一臺(tái)后,服務(wù)會(huì)卡在那里,直到集群中所有etcd節(jié)點(diǎn)都已啟動(dòng),可忽略這個(gè)情況

#可另外打開一個(gè)窗口查看etcd進(jìn)程是否正常
ps -ef | grep etcd

#把etcd相關(guān)證書文件、命令文件和服務(wù)管理文件全部拷貝到另外兩個(gè)etcd集群節(jié)點(diǎn)
scp -r /opt/etcd/ root@192.168.154.11:/opt/
scp -r /opt/etcd/ root@192.168.154.12:/opt/
scp /usr/lib/systemd/system/etcd.service root@192.168.154.11:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@192.168.154.12:/usr/lib/systemd/system/

二進(jìn)制安裝K8S(單Master集群架構(gòu))

//在 master01 節(jié)點(diǎn)上操作
cd /opt
ls -R etcd/
scp -r etcd/ node01:/opt
scp -r etcd/ node02:/opt
cd /usr/lib/systemd/system
ls etcd.service
scp etcd.service node01:`pwd`
scp etcd.service node02:`pwd`

二進(jìn)制安裝K8S(單Master集群架構(gòu))
二進(jìn)制安裝K8S(單Master集群架構(gòu))
二進(jìn)制安裝K8S(單Master集群架構(gòu))

在node01節(jié)點(diǎn)上操作
cd /opt/etcd/cfg
vim etcd

#[Member]
ETCD_NAME="etcd02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.154.11:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.154.11:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.154.11:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.154.11:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.154.10:2380,etcd02=https://192.168.154.11:2380,etcd03=https://192.168.154.12:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

#啟動(dòng)etcd服務(wù)
systemctl daemon-reload
systemctl enable --now etcd.service
systemctl status etcd.service

二進(jìn)制安裝K8S(單Master集群架構(gòu))

在node02節(jié)點(diǎn)上操作

cd /opt/etcd/cfg
vim etcd
#[Member]
ETCD_NAME="etcd03"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.154.12:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.154.12:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.154.12:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.154.12:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.154.10:2380,etcd02=https://192.168.154.11:2380,etcd03=https://192.168.154.12:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

#啟動(dòng)etcd服務(wù)
systemctl daemon-reload
systemctl enable --now etcd.service
systemctl status etcd.service

二進(jìn)制安裝K8S(單Master集群架構(gòu))

#檢查etcd群集狀態(tài)
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.154.10:2379,https://192.168.154.11:2379,https://192.168.154.12:2379" endpoint health --write-out=table

二進(jìn)制安裝K8S(單Master集群架構(gòu))

ETCDCTL_API=3 /opt/etcd/bin/etcdctl --endpoints="https://192.168.154.10:2379,https://192.168.154.11:2379,https://192.168.154.12:2379" --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem  --write-out=table endpoint status

二進(jìn)制安裝K8S(單Master集群架構(gòu))

ETCDCTL_API=3 /opt/etcd/bin/etcdctl --endpoints="https://192.168.154.10:2379,https://192.168.154.11:2379,https://192.168.154.12:2379" --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem  --write-out=table member list

二進(jìn)制安裝K8S(單Master集群架構(gòu))

實(shí)現(xiàn)etcd的備份操作

cd 
mkdir etcd/backup -p
cd etcd/

ETCDCTL_API=3 /opt/etcd/bin/etcdctl --endpoints="https://192.168.154.10:2379" --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem  snapshot save /root/etcd-snapshot.db

二進(jìn)制安裝K8S(單Master集群架構(gòu))
二進(jìn)制安裝K8S(單Master集群架構(gòu))

恢復(fù)etcd的操作

//查看etcd-snapshot.db的文件
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --endpoints="https://192.168.154.10:2379" --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem  snapshot status ./etcd-snapshot.db --write-out=table

二進(jìn)制安裝K8S(單Master集群架構(gòu))

//恢復(fù)etcd
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --endpoints="https://192.168.154.10:2379" --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem  snapshot restore ./etcd-snapshot.db 

二進(jìn)制安裝K8S(單Master集群架構(gòu))

5、部署 Master 組件

//在 master01 節(jié)點(diǎn)上操作
#上傳 master.zip 和 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s 目錄中,解壓 master.zip 壓縮包
cd /opt/k8s/
unzip master.zip
chmod +x *.sh

#創(chuàng)建kubernetes工作目錄
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

#創(chuàng)建用于生成CA證書、相關(guān)組件的證書和私鑰的目錄
mkdir /opt/k8s/k8s-cert
mv /opt/k8s/k8s-cert.sh /opt/k8s/k8s-cert
cd /opt/k8s/k8s-cert/
vim k8s-cert.sh     #改地址
./k8s-cert.sh				#生成CA證書、相關(guān)組件的證書和私鑰

ls *pem
admin-key.pem  apiserver-key.pem  ca-key.pem  kube-proxy-key.pem  
admin.pem      apiserver.pem      ca.pem      kube-proxy.pem

二進(jìn)制安裝K8S(單Master集群架構(gòu))

#復(fù)制CA證書、apiserver相關(guān)證書和私鑰到 kubernetes工作目錄的 ssl 子目錄中
cp kube-apiserver kube-controller-manager kube-scheduler kubectl /opt/kubernetes/bin/

#上傳 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目錄中,解壓 kubernetes 壓縮包
cd /opt/k8s/
tar zxvf kubernetes-server-linux-amd64.tar.gz

#復(fù)制master組件的關(guān)鍵命令文件到 kubernetes工作目錄的 bin 子目錄中
cd /opt/k8s/kubernetes/server/bin
cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/
ln -s /opt/kubernetes/bin/* /usr/local/bin/

二進(jìn)制安裝K8S(單Master集群架構(gòu))

#創(chuàng)建 bootstrap token 認(rèn)證文件,apiserver 啟動(dòng)時(shí)會(huì)調(diào)用,然后就相當(dāng)于在集群內(nèi)創(chuàng)建了一個(gè)這個(gè)用戶,接下來就可以用 RBAC 給他授權(quán)
cd /opt/k8s/
vim token.csv
cfe2bd4ece1251173600ff7fd6b02410,kubelet-bootstrap,10001,"system:kubelet-bootstrap"

mv token.csv /opt/kubernetes/cfg/
chmod +x *.sh
vim apiserver.sh
./apiserver.sh 192.168.154.10 https://192.168.154.10:2379,https://192.168.154.11:2379,https://192.168.154.12:2379

#檢查進(jìn)程是否啟動(dòng)成功
ps aux | grep kube-apiserver

netstat -natp | grep 6443   #安全端口6443用于接收HTTPS請(qǐng)求,用于基于Token文件或客戶端證書等認(rèn)證

二進(jìn)制安裝K8S(單Master集群架構(gòu))
二進(jìn)制安裝K8S(單Master集群架構(gòu))

#啟動(dòng) controller-manager 服務(wù)
./controller-manager.sh
ps aux | grep kube-controller-manager

#啟動(dòng) scheduler 服務(wù)
cd /opt/k8s/
./scheduler.sh
ps aux | grep kube-scheduler

二進(jìn)制安裝K8S(單Master集群架構(gòu))
二進(jìn)制安裝K8S(單Master集群架構(gòu))

#生成kubectl連接集群的kubeconfig文件
./admin.sh

#綁定默認(rèn)cluster-admin管理員集群角色,授權(quán)kubectl訪問集群
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

#通過kubectl工具查看當(dāng)前集群組件狀態(tài)
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

二進(jìn)制安裝K8S(單Master集群架構(gòu))
二進(jìn)制安裝K8S(單Master集群架構(gòu))

6、部署 Worker Node 組件

//在所有 node 節(jié)點(diǎn)上操作
#創(chuàng)建kubernetes工作目錄
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

#上傳 node.zip 到 /opt 目錄中,解壓 node.zip 壓縮包,獲得kubelet.sh、proxy.sh
cd /opt/
unzip node.zip
chmod +x kubelet.sh proxy.sh

//在 master01 節(jié)點(diǎn)上操作
#把 kubelet、kube-proxy 拷貝到 node 節(jié)點(diǎn)
cd /opt/k8s/kubernetes/server/bin
scp kubelet kube-proxy root@192.168.154.11:/opt/kubernetes/bin/
scp kubelet kube-proxy root@192.168.154.12:/opt/kubernetes/bin/

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

cd /opt/k8s/kubeconfig
chmod +x kubeconfig.sh
./kubeconfig.sh 192.168.154.10 /opt/k8s/k8s-cert/

#把配置文件 bootstrap.kubeconfig、kube-proxy.kubeconfig 拷貝到 node 節(jié)點(diǎn)
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.154.11:/opt/kubernetes/cfg/
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.154.12:/opt/kubernetes/cfg/

#RBAC授權(quán),使用戶 kubelet-bootstrap 能夠有權(quán)限發(fā)起 CSR 請(qǐng)求證書
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

------------------------------------------------------------------------------------------
kubelet 采用 TLS Bootstrapping 機(jī)制,自動(dòng)完成到 kube-apiserver 的注冊(cè),在 node 節(jié)點(diǎn)量較大或者后期自動(dòng)擴(kuò)容時(shí)非常有用。
Master apiserver 啟用 TLS 認(rèn)證后,node 節(jié)點(diǎn) kubelet 組件想要加入集群,必須使用CA簽發(fā)的有效證書才能與 apiserver 通信,當(dāng) node 節(jié)點(diǎn)很多時(shí),簽署證書是一件很繁瑣的事情。因此 Kubernetes 引入了 TLS bootstraping 機(jī)制來自動(dòng)頒發(fā)客戶端證書,kubelet 會(huì)以一個(gè)低權(quán)限用戶自動(dòng)向 apiserver 申請(qǐng)證書,kubelet 的證書由 apiserver 動(dòng)態(tài)簽署。

kubelet 首次啟動(dòng)通過加載 bootstrap.kubeconfig 中的用戶 Token 和 apiserver CA 證書發(fā)起首次 CSR 請(qǐng)求,這個(gè) Token 被預(yù)先內(nèi)置在 apiserver 節(jié)點(diǎn)的 token.csv 中,其身份為 kubelet-bootstrap 用戶和 system:kubelet-bootstrap 用戶組;想要首次 CSR 請(qǐng)求能成功(即不會(huì)被 apiserver 401 拒絕),則需要先創(chuàng)建一個(gè) ClusterRoleBinding,將 kubelet-bootstrap 用戶和 system:node-bootstrapper 內(nèi)置 ClusterRole 綁定(通過 kubectl get clusterroles 可查詢),使其能夠發(fā)起 CSR 認(rèn)證請(qǐng)求。

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

也就是說 kubelet 首次訪問 API Server 時(shí),是使用 token 做認(rèn)證,通過后,Controller Manager 會(huì)為 kubelet 生成一個(gè)證書,以后的訪問都是用證書做認(rèn)證了。

TLS bootstrapping 機(jī)制
有master的組件自動(dòng)給kubelet簽發(fā)證書
1)kubelet首次訪問apiserver,是通過bootstrap.kubeconfig的token來認(rèn)證的
2)kubelet會(huì)以一個(gè)低權(quán)限用戶(token.csv里的kubelet-bootstrap)向apiserver發(fā)起CSR請(qǐng)求申請(qǐng)證書
3)如果apiserver通過CSR請(qǐng)求后,會(huì)由controller-manager根據(jù)配置文件生成證書,并通過apiserver發(fā)給kubelet
4) kubelet以后再訪問apiserver就會(huì)使用簽發(fā)的證書來做認(rèn)證

------------------------------------------------------------------------------------------

二進(jìn)制安裝K8S(單Master集群架構(gòu))

//在 node01 節(jié)點(diǎn)上操作
//啟動(dòng) kubelet 服務(wù)
cd /opt/
./kubelet.sh 192.168.154.11
ps aux | grep kubelet

//在 master01 節(jié)點(diǎn)上操作,通過 CSR 請(qǐng)求
//檢查到 node01 節(jié)點(diǎn)的 kubelet 發(fā)起的 CSR 請(qǐng)求,Pending 表示等待集群給該節(jié)點(diǎn)簽發(fā)證書
kubectl get csr
NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-x-o7xwAYtP0-Cxemis_3WpGD5DFOadHldFQTK4UegTw   50s  kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Pending

//通過 CSR 請(qǐng)求
kubectl certificate approve node-csr-x-o7xwAYtP0-Cxemis_3WpGD5DFOadHldFQTK4UegTw

//Approved,Issued 表示已授權(quán) CSR 請(qǐng)求并簽發(fā)證書
kubectl get csr

//查看節(jié)點(diǎn),由于網(wǎng)絡(luò)插件還沒有部署,節(jié)點(diǎn)會(huì)沒有準(zhǔn)備就緒 NotReady
kubectl get nodes


//在 node01 節(jié)點(diǎn)上操作
//加載 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

//啟動(dòng)proxy服務(wù)
cd /opt/
./proxy.sh 192.168.154.11
ps aux | grep kube-proxy

ls kubernetes/ssl/

二進(jìn)制安裝K8S(單Master集群架構(gòu))

二進(jìn)制安裝K8S(單Master集群架構(gòu))

二進(jìn)制安裝K8S(單Master集群架構(gòu))
二進(jìn)制安裝K8S(單Master集群架構(gòu))

//自動(dòng)批準(zhǔn) CSR 請(qǐng)求
//在Master01主節(jié)點(diǎn)
kubectl create clusterrolebinding node-autoapprove-bootstrap --clusterrole=system:certificates.k8s.io:certificatesigningrequests:nodeclient --user=kubelet-bootstrap

kubectl create clusterrolebinding node-autoapprove-certificate-rotation --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeclient --user=kubelet-bootstrap

二進(jìn)制安裝K8S(單Master集群架構(gòu))

//在node01節(jié)點(diǎn)
cd /opt
scp kubelet.sh proxy.sh 192.168.154.12:/opt

//在node01節(jié)點(diǎn)
cd /opt
./kubelet.sh 192.168.154.12
ps aux | grep kubelet
ls kubernetes/ssl/

二進(jìn)制安裝K8S(單Master集群架構(gòu))
再回Master主節(jié)點(diǎn)查看

kubectl get nodes

在這里插入圖片描述

7、部署 CNI 網(wǎng)絡(luò)組件

7.1 部署 flannel

K8S 中 Pod 網(wǎng)絡(luò)通信:
●Pod 內(nèi)容器與容器之間的通信
在同一個(gè) Pod 內(nèi)的容器(Pod 內(nèi)的容器是不會(huì)跨宿主機(jī)的)共享同一個(gè)網(wǎng)絡(luò)命令空間,相當(dāng)于它們?cè)谕慌_(tái)機(jī)器上一樣,可以用 localhost 地址訪問彼此的端口。

●同一個(gè) Node 內(nèi) Pod 之間的通信
每個(gè) Pod 都有一個(gè)真實(shí)的全局 IP 地址,同一個(gè) Node 內(nèi)的不同 Pod 之間可以直接采用對(duì)方 Pod 的 IP 地址進(jìn)行通信,Pod1 與 Pod2 都是通過 Veth 連接到同一個(gè) docker0 網(wǎng)橋,網(wǎng)段相同,所以它們之間可以直接通信。

●不同 Node 上 Pod 之間的通信
Pod 地址與 docker0 在同一網(wǎng)段,docker0 網(wǎng)段與宿主機(jī)網(wǎng)卡是兩個(gè)不同的網(wǎng)段,且不同 Node 之間的通信只能通過宿主機(jī)的物理網(wǎng)卡進(jìn)行。
要想實(shí)現(xiàn)不同 Node 上 Pod 之間的通信,就必須想辦法通過主機(jī)的物理網(wǎng)卡 IP 地址進(jìn)行尋址和通信。因此要滿足兩個(gè)條件:Pod 的 IP 不能沖突;將 Pod 的 IP 和所在的 Node 的 IP 關(guān)聯(lián)起來,通過這個(gè)關(guān)聯(lián)讓不同 Node 上 Pod 之間直接通過內(nèi)網(wǎng) IP 地址通信。

Overlay Network:
疊加網(wǎng)絡(luò),在二層或者三層基礎(chǔ)網(wǎng)絡(luò)上疊加的一種虛擬網(wǎng)絡(luò)技術(shù)模式,該網(wǎng)絡(luò)中的主機(jī)通過虛擬鏈路隧道連接起來(類似于VPN)。

VXLAN:
將源數(shù)據(jù)包封裝到UDP中,并使用基礎(chǔ)網(wǎng)絡(luò)的IP/MAC作為外層報(bào)文頭進(jìn)行封裝,然后在以太網(wǎng)上傳輸,到達(dá)目的地后由隧道端點(diǎn)解封裝并將數(shù)據(jù)發(fā)送給目標(biāo)地址。

Flannel:
Flannel 的功能是讓集群中的不同節(jié)點(diǎn)主機(jī)創(chuàng)建的 Docker 容器都具有全集群唯一的虛擬 IP 地址。
Flannel 是 Overlay 網(wǎng)絡(luò)的一種,也是將 TCP 源數(shù)據(jù)包封裝在另一種網(wǎng)絡(luò)包里面進(jìn)行路由轉(zhuǎn)發(fā)和通信,目前支持 udp、vxlan、 host-GW 3種數(shù)據(jù)轉(zhuǎn)發(fā)方式。

7.2 Flannel udp 模式的工作原理

二進(jìn)制安裝K8S(單Master集群架構(gòu))

1、數(shù)據(jù)從主機(jī)A 上的 Pod 的源容器中發(fā)出后,經(jīng)由所在主機(jī)的 cni0/docker0 (安裝了網(wǎng)絡(luò)插件后就不在是docker0而是cni0網(wǎng)卡)網(wǎng)橋轉(zhuǎn)發(fā)到 flannel0 接口,flanneld 服務(wù)監(jiān)聽在 flannel0 接口的另外一端。
2、發(fā)送給 flannel0 接口的IP 包信息將被 flanneld 進(jìn)程接收,flanneld 進(jìn)程接收 IP 包后在原有的基礎(chǔ)上進(jìn)行 UDP 封包(UDP報(bào)文里包含源Pod的數(shù)據(jù)包)
3、Flannel 通過 etcd(包含所有的Pod的ip以及所對(duì)應(yīng)的node主機(jī)的地址) 服務(wù)維護(hù)了一張節(jié)點(diǎn)間的路由表。目標(biāo)容器所在宿主機(jī)(node節(jié)點(diǎn))的 IP 地址,flanneld 通過查詢 etcd 很容易就能得到
4、flanneld 將封裝好的 UDP 報(bào)文通過物理網(wǎng)卡轉(zhuǎn)發(fā)出去,主機(jī)B 收到 UDP 報(bào)文后,Linux 內(nèi)核通過 8285 端口將包交給正在監(jiān)聽的 flanneld 進(jìn)程
5、運(yùn)行在主機(jī)B 上的 flanneld 將 UDP 包解包后得到的原始 IP 包,內(nèi)核通過查詢本機(jī)路由表將該 IP 包轉(zhuǎn)發(fā)給 cni0 網(wǎng)橋
6、cni0 網(wǎng)橋?qū)?IP 包轉(zhuǎn)發(fā)給連接在網(wǎng)橋上的目標(biāo)Pod。至此整個(gè)流程結(jié)束。回程報(bào)文將按照上面的數(shù)據(jù)流原路返回

ETCD 之 Flannel 提供說明:
存儲(chǔ)管理Flannel可分配的IP地址段資源
監(jiān)控 ETCD 中每個(gè) Pod 的實(shí)際地址,并在內(nèi)存中建立維護(hù) Pod 節(jié)點(diǎn)路由表

由于 udp 模式是在用戶態(tài)做轉(zhuǎn)發(fā),會(huì)多一次報(bào)文隧道封裝,因此性能上會(huì)比在內(nèi)核態(tài)做轉(zhuǎn)發(fā)的 vxlan 模式差。

vxlan 模式:
vxlan 是一種overlay(虛擬隧道通信)技術(shù),通過三層網(wǎng)絡(luò)搭建虛擬的二層網(wǎng)絡(luò),跟 udp 模式具體實(shí)現(xiàn)不太一樣:
(1)udp模式是在用戶態(tài)實(shí)現(xiàn)的,數(shù)據(jù)會(huì)先經(jīng)過tun網(wǎng)卡,到應(yīng)用程序,應(yīng)用程序再做隧道封裝,再進(jìn)一次內(nèi)核協(xié)議棧,而vxlan是在內(nèi)核當(dāng)中實(shí)現(xiàn)的,只經(jīng)過一次協(xié)議棧,在協(xié)議棧內(nèi)就把vxlan包組裝好
(2)udp模式的tun網(wǎng)卡是三層轉(zhuǎn)發(fā),使用tun是在物理網(wǎng)絡(luò)之上構(gòu)建三層網(wǎng)絡(luò),屬于ip in udp,vxlan模式是二層實(shí)現(xiàn), overlay是二層幀,屬于mac in udp
(3)vxlan由于采用mac in udp的方式,所以實(shí)現(xiàn)起來會(huì)涉及mac地址學(xué)習(xí),arp廣播等二層知識(shí),udp模式主要關(guān)注路由

7.3 Flannel vxlan 模式的工作原理

二進(jìn)制安裝K8S(單Master集群架構(gòu))

1、數(shù)據(jù)幀從主機(jī)A 上 Pod 的源容器中發(fā)出后,經(jīng)由所在主機(jī)的 cin0 網(wǎng)絡(luò)接口轉(zhuǎn)發(fā)到 flannel.1 接口
2、flannel.1 收到數(shù)據(jù)幀后添加 VXLAN 頭部,封裝成 VXLAN UDP 報(bào)文
3、主機(jī)A 通過物理網(wǎng)卡發(fā)送封包到主機(jī)B 的物理網(wǎng)卡中
4、通過 VXLAN 8472 端口, VXLAN 包被轉(zhuǎn)發(fā)到 flannel.1 接口進(jìn)行解封裝
5、根據(jù)解包后得到原始報(bào)文中的目的IP,內(nèi)核將原始報(bào)文發(fā)送給 cni0,最后由 cni0 發(fā)送給連接在此接口上的 PodB

//在 node01 節(jié)點(diǎn)上操作
//上傳 cni-plugins-linux-amd64-v0.8.6.tgz 和 flannel.tar 到 /opt 目錄中
cd /opt/
mkdir flannel
mv flannel-v0.21.5.zip flannel/
cd flannel/
unzip flannel-v0.21.5.zip

docker load -i flannel.tar
docker load -i flannel-cni-plugin.tar

二進(jìn)制安裝K8S(單Master集群架構(gòu))

cd /opt
mkdir -p /opt/cni/bin
cd flannel/
tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin
cd /opt
scp -r cni/ flannel/ 192.168.154.12:/opt

二進(jìn)制安裝K8S(單Master集群架構(gòu))

//node2節(jié)點(diǎn)上操作
cd /opt
cd flannel/
docker load -i flannel.tar
docker load -i flannel-cni-plugin.tar

二進(jìn)制安裝K8S(單Master集群架構(gòu))
二進(jìn)制安裝K8S(單Master集群架構(gòu))

//在node01節(jié)點(diǎn)上操作
cd /opt/flannel/
scp kube-flannel.yml 192.168.154.10:/opt/k8s

//在 master01 節(jié)點(diǎn)上操作
//上傳 kube-flannel.yml 文件到 /opt/k8s 目錄中,部署 CNI 網(wǎng)絡(luò)
cd /opt/k8s
kubectl apply -f kube-flannel.yml 

kubectl get pods -A
NAMESPACE      NAME                    READY   STATUS    RESTARTS   AGE
kube-flannel   kube-flannel-ds-6md78   1/1     Running   0          3s
kube-flannel   kube-flannel-ds-mbsvh   1/1     Running   0          3s


kubectl get nodes
NAME             STATUS   ROLES    AGE   VERSION
192.168.154.11   Ready    <none>   46h   v1.20.15
192.168.154.12   Ready    <none>   46h   v1.20.15

二進(jìn)制安裝K8S(單Master集群架構(gòu))

8、部署 CoreDNS

coreDNS: CoreDNS是 Kbernetes 的默認(rèn) DNS 實(shí)現(xiàn)。可以為集群中的 service 資源創(chuàng)建一個(gè)資源名稱 與 CLusterIP 的對(duì)應(yīng)關(guān)系解析
Kubernetes 可以選擇使用 DNS 水避免將服務(wù)的集群 IP 地址硬編碼到您的應(yīng)用程序中。

//在所有 node 節(jié)點(diǎn)上操作
//上傳 coredns.tar 到 /opt 目錄中
cd /opt
docker load -i coredns.tar

//在 master01 節(jié)點(diǎn)上操作
//上傳 coredns.yaml 文件到 /opt/k8s 目錄中,部署 CoreDNS 
cd /opt/k8s
kubectl apply -f coredns.yaml

kubectl get pods -n kube-system 
NAME                          READY   STATUS    RESTARTS   AGE
coredns-5ffbfd976d-j6shb      1/1     Running   0          32s

//在 master01 節(jié)點(diǎn)上操作
cd /opt/k8s
vim test.yaml
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
      
kubectl apply -f test.yaml

二進(jìn)制安裝K8S(單Master集群架構(gòu))

//DNS 解析測(cè)試
kubectl run -it --rm dns-test --image=busybox:1.28.4 sh
If you don't see a command prompt, try pressing enter.
/ # vi /etc/resolv.conf
復(fù)制default.svc.cluster.local
/ # nslookup my-service.default.svc.cluster.local

Name:      kubernetes
Address 1: 10.0.0.1 kubernetes.default.svc.cluster.local

二進(jìn)制安裝K8S(單Master集群架構(gòu))

二進(jìn)制安裝K8S(單Master集群架構(gòu))

二進(jìn)制安裝K8S(單Master集群架構(gòu))
二進(jìn)制安裝K8S(單Master集群架構(gòu))文章來源地址http://www.zghlxwxcb.cn/news/detail-497703.html

到了這里,關(guān)于二進(jìn)制安裝K8S(單Master集群架構(gòu))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 云原生Kubernetes:二進(jìn)制部署K8S單Master架構(gòu)(二)

    云原生Kubernetes:二進(jìn)制部署K8S單Master架構(gòu)(二)

    目錄 ?一、理論 1.K8S單Master架構(gòu) 2.部署 master 組件 3.部署 Woker Node 組件 4.在master1節(jié)點(diǎn)上操作 5.在 node01 節(jié)點(diǎn)上操作 6.在 master01 節(jié)點(diǎn)上操作? 7.在 node01 節(jié)點(diǎn)上操作 8.node02 節(jié)點(diǎn)部署(方法一) 二、實(shí)驗(yàn) 1.環(huán)境 ?2.部署 master 組件 3.部署 Woker Node 組件 4.在master1節(jié)點(diǎn)上操作 5.在 nod

    2024年02月10日
    瀏覽(97)
  • 云原生Kubernetes:二進(jìn)制部署K8S單Master架構(gòu)(一)

    云原生Kubernetes:二進(jìn)制部署K8S單Master架構(gòu)(一)

    目錄 一、理論 1.K8S單Master架構(gòu) 2.??etcd 集群 3.CNI 4.Flannel網(wǎng)絡(luò) 5.K8S單Master架構(gòu)環(huán)境部署 6.部署 etcd 集群 7.部署 docker 引擎 8.flannel網(wǎng)絡(luò)配置 二、實(shí)驗(yàn) 1.二進(jìn)制部署K8S單Master架構(gòu) 2.?環(huán)境部署 3.部署 etcd 集群 4.部署 docker 引擎 5.flannel網(wǎng)絡(luò)配置 三、問題 1.etcd 報(bào)錯(cuò) 2.安裝etcd問題 3.系

    2024年02月10日
    瀏覽(89)
  • K8s集群部署(二進(jìn)制安裝部署詳細(xì)手冊(cè))

    K8s集群部署(二進(jìn)制安裝部署詳細(xì)手冊(cè))

    ? ?一、簡(jiǎn)介 K8s部署主要有兩種方式: 1、Kubeadm Kubeadm是一個(gè)K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 2、二進(jìn)制 ? 從github下載發(fā)行版的二進(jìn)制包,手動(dòng)部署每個(gè)組件,組成Kubernetes集群。 ?本文通過二進(jìn)制安裝部署的方式在centos7上搭建kubernetes集群

    2024年02月15日
    瀏覽(20)
  • 第3關(guān) 二進(jìn)制形式安裝K8s高可用生產(chǎn)級(jí)集群

    第3關(guān) 二進(jìn)制形式安裝K8s高可用生產(chǎn)級(jí)集群

    ------ 課程視頻同步分享在今日頭條和B站 大家好,我是博哥愛運(yùn)維,下面是這次安裝k8s集群相關(guān)系統(tǒng)及組件的詳細(xì)版本號(hào) Ubuntu 22.04.3 LTS k8s: v1.27.5 containerd: 1.6.23 etcd: v3.5.9 coredns: 1.11.1 calico: v3.24.6 下面是此次虛擬機(jī)集群安裝前的IP等信息規(guī)劃(完全模擬一個(gè)中小型企業(yè)K8S集群)

    2024年02月04日
    瀏覽(56)
  • k8s1.23.15集群二進(jìn)制部署

    k8s1.23.15集群二進(jìn)制部署

    一、前言 ? ? 二進(jìn)制部署1.23.15版本k8s集群,etcd集群部署與k8s集群節(jié)點(diǎn)復(fù)用,手動(dòng)頒發(fā)集群證書 ? ? 主機(jī)信息如下 主機(jī)名稱 ip地址 服務(wù) k8s-master01 10.1.60.125 docker、etcd、kube-apiserver、kube-schduler、kube-controller-manage、kubelet、kube-proxy k8s-node01 10.1.60.126 docker、etcd、kubelet、kube-proxy

    2024年03月13日
    瀏覽(23)
  • K8S二進(jìn)制部署詳解,一文教會(huì)你部署高可用K8S集群

    Pod網(wǎng)段: 10.0.0.0/16 Service網(wǎng)段: 10.255.0.0/16 集群角色 ip 主機(jī)名 安裝組件 控制節(jié)點(diǎn) 10.10.0.10 master01 apiserver、controller-manager、scheduler、etcd、docker、keepalived、nginx 控制節(jié)點(diǎn) 10.10.0.11 master02 apiserver、controller-manager、scheduler、etcd、docker、keepalived、nginx 控制節(jié)點(diǎn) 10.10.0.12 master03 apiser

    2024年04月28日
    瀏覽(29)
  • [kubernetes]二進(jìn)制部署k8s集群-基于containerd

    k8s從1.24版本開始不再直接支持docker,但可以自行調(diào)整相關(guān)配置,實(shí)現(xiàn)1.24版本后的k8s還能調(diào)用docker。其實(shí)docker自身也是調(diào)用containerd,與其k8s通過docker再調(diào)用containerd,不如k8s直接調(diào)用containerd,以減少性能損耗。 除了containerd,比較流行的容器運(yùn)行時(shí)還有podman,但是podman官方安裝

    2024年02月12日
    瀏覽(30)
  • 二進(jìn)制搭建 Kubernetes與k8s集群搭建(一)

    二進(jìn)制搭建 Kubernetes與k8s集群搭建(一)

    目錄 二進(jìn)制搭建 Kubernetes v1.20 ? ? 操作系統(tǒng)初始化配置 部署 docker引擎 部署 etcd 集群 準(zhǔn)備簽發(fā)證書環(huán)境 在 master01 節(jié)點(diǎn)上操作 ? ?? 生成Etcd證書 在 node01 節(jié)點(diǎn)上操作 在 node02 節(jié)點(diǎn)上操作 部署 Master 組件 在 master01 節(jié)點(diǎn)上操作 部署 Worker Node 組件 在所有 node 節(jié)點(diǎn)上操作 在 mas

    2024年02月06日
    瀏覽(26)
  • k8s1.27.2版本二進(jìn)制高可用集群部署

    k8s1.27.2版本二進(jìn)制高可用集群部署

    說明:本次實(shí)驗(yàn)共有5臺(tái)主機(jī),3臺(tái)master節(jié)點(diǎn)同時(shí)又是worker,os128、os129、os130 節(jié)點(diǎn)主機(jī)容器運(yùn)行時(shí)用的containerd,worker131、worker132主機(jī)的用的docker 主機(jī)名 IP 組件 系統(tǒng) os128 192.168.177.128 etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy、containerd CentOS7.9 os129 192.16

    2024年01月22日
    瀏覽(72)
  • 【云原生】二進(jìn)制部署k8s集群(中)搭建node節(jié)點(diǎn)

    【云原生】二進(jìn)制部署k8s集群(中)搭建node節(jié)點(diǎn)

    在上文已經(jīng)成功部署了etcd分布式數(shù)據(jù)庫、master01節(jié)點(diǎn), 本文將承接上文的內(nèi)容,繼續(xù)部署Kubernetes集群中的 worker node 節(jié)點(diǎn)和 CNI 網(wǎng)絡(luò)插件 kubelet 采用 TLS Bootstrapping 機(jī)制,自動(dòng)完成到 kube-apiserver 的注冊(cè),在 node 節(jié)點(diǎn)量較大或者后期自動(dòng)擴(kuò)容時(shí)非常有用。 ? Master apiserver 啟用 T

    2024年02月09日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包