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

Kubernetes 二進(jìn)制搭建

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

一、二進(jìn)制搭建 Kubernetes v1.20

1.1 部署準(zhǔn)備

k8s集群master01:192.168.80.10	kube-apiserver kube-controller-manager kube-scheduler etcd
k8s集群master02:192.168.80.20

k8s集群node01:192.168.80.11	kubelet kube-proxy docker 
k8s集群node02:192.168.80.12

etcd集群節(jié)點(diǎn)1:192.168.80.10	etcd
etcd集群節(jié)點(diǎn)2:192.168.80.11
etcd集群節(jié)點(diǎn)3:192.168.80.12

負(fù)載均衡nginx+keepalive01(master):192.168.80.14
負(fù)載均衡nginx+keepalive02(backup):192.168.80.15

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

#關(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.80.10 master01
192.168.80.11 node01
192.168.80.12 node02
EOF

#調(diào)整內(nèi)核參數(shù)
cat > /etc/sysctl.d/k8s.conf << EOF
#開(kāi)啟網(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

sysctl --system

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

1.3 部署 etcd 集群

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

1.3.1 etcd 作為服務(wù)發(fā)現(xiàn)系統(tǒng),有以下的特點(diǎn)

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

  • 1、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ì)外為客戶(hù)端提供通訊,使用端口2380來(lái)進(jìn)行服務(wù)器間內(nèi)部通訊。
  • 2、etcd 在生產(chǎn)環(huán)境中一般推薦集群方式部署。由于etcd 的leader選舉機(jī)制,要求至少為3臺(tái)或以上的奇數(shù)臺(tái)。

1.3.2 準(zhǔn)備簽發(fā)證書(shū)環(huán)境

  • 1、CFSSL 是 CloudFlare 公司開(kāi)源的一款 PKI/TLS 工具。 CFSSL 包含一個(gè)命令行工具和一個(gè)用于簽名、驗(yàn)證和捆綁 TLS 證書(shū)的 HTTP API 服務(wù)。使用Go語(yǔ)言編寫(xiě)。
  • 2、CFSSL 使用配置文件生成證書(shū),因此自簽之前,需要生成它識(shí)別的 json 格式的配置文件,CFSSL 提供了方便的命令行生成配置文件。
  • 3、CFSSL 用來(lái)為 etcd 提供 TLS 證書(shū),它支持簽三種類(lèi)型的證書(shū):
    1.client 證書(shū),服務(wù)端連接客戶(hù)端時(shí)攜帶的證書(shū),用于客戶(hù)端驗(yàn)證服務(wù)端身份,如 kube-apiserver 訪(fǎng)問(wèn) etcd;
    2.server 證書(shū),客戶(hù)端連接服務(wù)端時(shí)攜帶的證書(shū),用于服務(wù)端驗(yàn)證客戶(hù)端身份,如 etcd 對(duì)外提供服務(wù);
    3.peer 證書(shū),相互之間連接時(shí)使用的證書(shū),如 etcd 節(jié)點(diǎn)之間進(jìn)行驗(yàn)證和通信。
    這里全部都使用同一套證書(shū)認(rèn)證。

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

#準(zhǔn)備cfssl證書(shū)生成工具
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:證書(shū)簽發(fā)的工具命令
cfssljson:將 cfssl 生成的證書(shū)(json格式)變?yōu)槲募休d式證書(shū)
cfssl-certinfo:驗(yàn)證證書(shū)的信息
cfssl-certinfo -cert <證書(shū)名稱(chēng)> #查看證書(shū)的信息

1.3.4 生成證書(shū)

//生成Etcd證書(shū) 
mkdir /opt/k8s
cd /opt/k8s/

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

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

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 配置文件,命令文件,證書(shū)的目錄
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.80.10 etcd02=https://192.168.80.11:2380,etcd03=https://192.168.80.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è)情況

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

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

//在 node01 節(jié)點(diǎn)上操作
vim /opt/etcd/cfg/etcd
#[Member]
ETCD_NAME="etcd02"											#修改
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.80.11:2380"			#修改
ETCD_LISTEN_CLIENT_URLS="https://192.168.80.11:2379"		#修改

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.80.11:2380"		#修改
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.80.11:2379"				#修改
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.80.10:2380,etcd02=https://192.168.80.11:2380,etcd03=https://192.168.80.12:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

#啟動(dòng)etcd服務(wù)
systemctl start etcd
systemctl enable etcd
systemctl status etcd

//在 node02 節(jié)點(diǎn)上操作
vim /opt/etcd/cfg/etcd
#[Member]
ETCD_NAME="etcd03"											#修改
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.80.12:2380"			#修改
ETCD_LISTEN_CLIENT_URLS="https://192.168.80.12:2379"		#修改

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.80.12:2380"		#修改
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.80.12:2379"				#修改
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.80.10:2380,etcd02=https://192.168.80.11:2380,etcd03=https://192.168.80.12:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

#啟動(dòng)etcd服務(wù)
systemctl start etcd
systemctl enable etcd
systemctl status etcd

#檢查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.80.10:2379,https://192.168.80.11:2379,https://192.168.80.12:2379" endpoint health --write-out=table

- -cert-file:識(shí)別HTTPS端使用SSL證書(shū)文件
- -key-file:使用此SSL密鑰文件標(biāo)識(shí)HTTPS客戶(hù)端
- -ca-file:使用此CA證書(shū)驗(yàn)證啟用https的服務(wù)器的證書(shū)
- -endpoints:集群中以逗號(hào)分隔的機(jī)器地址列表
cluster-health:檢查etcd集群的運(yùn)行狀況

#查看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.80.10:2379,https://192.168.80.11:2379,https://192.168.80.12:2379" --write-out=table member list

1.4 部署 docker引擎

//所有 node 節(jié)點(diǎn)部署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.io

systemctl start docker.service
systemctl enable docker.service 

1.4.1 部署 Master 組件

//在 master01 節(jié)點(diǎn)上操作
#上傳 master.zip 和 k8s-cert.sh 到 /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證書(shū)、相關(guān)組件的證書(shū)和私鑰的目錄
mkdir /opt/k8s/k8s-cert
mv /opt/k8s/k8s-cert.sh /opt/k8s/k8s-cert
cd /opt/k8s/k8s-cert/
./k8s-cert.sh				#生成CA證書(shū)、相關(guān)組件的證書(shū)和私鑰

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

#復(fù)制CA證書(shū)、apiserver相關(guān)證書(shū)和私鑰到 kubernetes工作目錄的 ssl 子目錄中
cp ca*pem apiserver*pem /opt/kubernetes/ssl/

#上傳 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/

#創(chuàng)建 bootstrap token 認(rèn)證文件,apiserver 啟動(dòng)時(shí)會(huì)調(diào)用,然后就相當(dāng)于在集群內(nèi)創(chuàng)建了一個(gè)這個(gè)用戶(hù),接下來(lái)就可以用 RBAC 給他授權(quán)
cd /opt/k8s/
vim token.sh
#!/bin/bash
#獲取隨機(jī)數(shù)前16個(gè)字節(jié)內(nèi)容,以十六進(jìn)制格式輸出,并刪除其中空格
BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
#生成 token.csv 文件,按照 Token序列號(hào),用戶(hù)名,UID,用戶(hù)組 的格式生成
cat > /opt/kubernetes/cfg/token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF

chmod +x token.sh
./token.sh

cat /opt/kubernetes/cfg/token.csv

#二進(jìn)制文件、token、證書(shū)都準(zhǔn)備好后,開(kāi)啟 apiserver 服務(wù)
cd /opt/k8s/
./apiserver.sh 192.168.80.10 https://192.168.80.10:2379,https://192.168.80.11:2379,https://192.168.80.12:2379

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

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


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

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

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

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

#通過(guò)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

1.5 部署 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.80.11:/opt/kubernetes/bin/
scp kubelet kube-proxy root@192.168.80.12:/opt/kubernetes/bin/

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

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

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

#RBAC授權(quán),使用戶(hù) kubelet-bootstrap 能夠有權(quán)限發(fā)起 CSR 請(qǐng)求證書(shū)
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
  • 1、kubelet 采用 TLS Bootstrapping 機(jī)制,自動(dòng)完成到 kube-apiserver 的注冊(cè),在 node 節(jié)點(diǎn)量較大或者后期自動(dòng)擴(kuò)容時(shí)非常有用。

  • 2、Master apiserver 啟用 TLS 認(rèn)證后,node 節(jié)點(diǎn) kubelet 組件想要加入集群,必須使用CA簽發(fā)的有效證書(shū)才能與 apiserver 通信,當(dāng) node 節(jié)點(diǎn)很多時(shí),簽署證書(shū)是一件很繁瑣的事情。因此 Kubernetes 引入了 TLS bootstraping 機(jī)制來(lái)自動(dòng)頒發(fā)客戶(hù)端證書(shū),kubelet 會(huì)以一個(gè)低權(quán)限用戶(hù)自動(dòng)向 apiserver 申請(qǐng)證書(shū),kubelet 的證書(shū)由 apiserver 動(dòng)態(tài)簽署。

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

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

  • 5、也就是說(shuō) kubelet 首次訪(fǎng)問(wèn) API Server 時(shí),是使用 token 做認(rèn)證,通過(guò)后,Controller Manager 會(huì)為 kubelet 生成一個(gè)證書(shū),以后的訪(fǎng)問(wèn)都是用證書(shū)做認(rèn)證了。

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

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

#通過(guò) CSR 請(qǐng)求
kubectl certificate approve node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE

#Approved,Issued 表示已授權(quán) CSR 請(qǐng)求并簽發(fā)證書(shū)
kubectl get csr
NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   2m5s kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued

#查看節(jié)點(diǎn),由于網(wǎng)絡(luò)插件還沒(méi)有部署,節(jié)點(diǎn)會(huì)沒(méi)有準(zhǔn)備就緒 NotReady
kubectl get node
NAME            STATUS     ROLES    AGE    VERSION
192.168.80.11   NotReady   <none>   108s   v1.20.11

//在 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.80.11
ps aux | grep kube-proxy

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

1.6.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 地址訪(fǎng)問(wèn)彼此的端口。

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

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

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

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

3、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ā)方式。

1.6.1.1 Flannel udp 模式的工作原理

1、數(shù)據(jù)從 node01 上 Pod 的源容器中發(fā)出后,經(jīng)由所在主機(jī)的 docker0 虛擬網(wǎng)卡轉(zhuǎn)發(fā)到 flannel.1 虛擬網(wǎng)卡,flanneld 服務(wù)監(jiān)聽(tīng)在 flannel.1 虛擬網(wǎng)卡的另外一端。
2、Flannel 通過(guò) Etcd 服務(wù)維護(hù)了一張節(jié)點(diǎn)間的路由表。源主機(jī) node01 的 flanneld 服務(wù)將原本的數(shù)據(jù)內(nèi)容封裝到 UDP 中后根據(jù)自己的路由表通過(guò)物理網(wǎng)卡投遞給目的節(jié)點(diǎn) node02 的 flanneld 服務(wù),數(shù)據(jù)到達(dá)以后被解包,然后直接進(jìn)入目的節(jié)點(diǎn)的 flannel.1 虛擬網(wǎng)卡,之后被轉(zhuǎn)發(fā)到目的主機(jī)的 docker0 虛擬網(wǎng)卡,最后就像本機(jī)容器通信一樣由 docker0 轉(zhuǎn)發(fā)到目標(biāo)容器。

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

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

1.6.1.2 vxlan 模式
  • vxlan 是一種overlay(虛擬隧道通信)技術(shù),通過(guò)三層網(wǎng)絡(luò)搭建虛擬的二層網(wǎng)絡(luò),跟 udp 模式具體實(shí)現(xiàn)不太一樣:
    1、udp模式是在用戶(hù)態(tài)實(shí)現(xiàn)的,數(shù)據(jù)會(huì)先經(jīng)過(guò)tun網(wǎng)卡,到應(yīng)用程序,應(yīng)用程序再做隧道封裝,再進(jìn)一次內(nèi)核協(xié)議棧,而vxlan是在內(nèi)核當(dāng)中實(shí)現(xiàn)的,只經(jīng)過(guò)一次協(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)起來(lái)會(huì)涉及mac地址學(xué)習(xí),arp廣播等二層知識(shí),udp模式主要關(guān)注路由

  • Flannel vxlan 模式的工作原理
    1、vxlan在內(nèi)核當(dāng)中實(shí)現(xiàn),當(dāng)數(shù)據(jù)包使用vxlan設(shè)備發(fā)送數(shù)據(jù)時(shí),會(huì)打上vlxan的頭部信息,在發(fā)送出去,對(duì)端解包,flannel.1網(wǎng)卡把原始報(bào)文發(fā)送到目的服務(wù)器。

//在 node01 節(jié)點(diǎn)上操作
#上傳 cni-plugins-linux-amd64-v0.8.6.tgz 和 flannel.tar 到 /opt 目錄中
cd /opt/
docker load -i flannel.tar

mkdir /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin

//在 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 -n kube-system
NAME                    READY   STATUS    RESTARTS   AGE
kube-flannel-ds-hjtc7   1/1     Running   0          7s

kubectl get nodes
NAME            STATUS   ROLES    AGE   VERSION
192.168.80.11   Ready    <none>   81m   v1.20.11

1.7 部署 Calico

  • k8s 組網(wǎng)方案對(duì)比

  • flannel方案
    需要在每個(gè)節(jié)點(diǎn)上把發(fā)向容器的數(shù)據(jù)包進(jìn)行封裝后,再用隧道將封裝后的數(shù)據(jù)包發(fā)送到運(yùn)行著目標(biāo)Pod的node節(jié)點(diǎn)上。目標(biāo)node節(jié)點(diǎn)再負(fù)責(zé)去掉封裝,將去除封裝的數(shù)據(jù)包發(fā)送到目標(biāo)Pod上。數(shù)據(jù)通信性能則大受影響。

  • calico方案
    Calico不使用隧道或NAT來(lái)實(shí)現(xiàn)轉(zhuǎn)發(fā),而是把Host當(dāng)作Internet中的路由器,使用BGP同步路由,并使用iptables來(lái)做安全訪(fǎng)問(wèn)策略,完成跨Host轉(zhuǎn)發(fā)來(lái)。

1.7.1 Calico 主要由三個(gè)部分組成

1、Calico CNI插件:主要負(fù)責(zé)與kubernetes對(duì)接,供kubelet調(diào)用使用。
2、Felix:負(fù)責(zé)維護(hù)宿主機(jī)上的路由規(guī)則、FIB轉(zhuǎn)發(fā)信息庫(kù)等。
3、BIRD:負(fù)責(zé)分發(fā)路由規(guī)則,類(lèi)似路由器。
4、Confd:配置管理組件。

1.7.1.1 Calico 工作原理

1、Calico 是通過(guò)路由表來(lái)維護(hù)每個(gè) pod 的通信。Calico 的 CNI 插件會(huì)為每個(gè)容器設(shè)置一個(gè) veth pair 設(shè)備, 然后把另一端接入到宿主機(jī)網(wǎng)絡(luò)空間,由于沒(méi)有網(wǎng)橋,CNI 插件還需要在宿主機(jī)上為每個(gè)容器的 veth pair 設(shè)備配置一條路由規(guī)則,用于接收傳入的IP包。
2、有了這樣的 veth pair 設(shè)備以后,容器發(fā)出的IP包就會(huì)通過(guò) veth pair 設(shè)備到達(dá)宿主機(jī),然后宿主機(jī)根據(jù)路由規(guī)則的下一跳地址, 發(fā)送給正確的網(wǎng)關(guān),然后到達(dá)目標(biāo)宿主機(jī),再到達(dá)目標(biāo)容器。
3、這些路由規(guī)則都是 Felix 維護(hù)配置的,而路由信息則是 Calico BIRD 組件基于 BGP 分發(fā)而來(lái)。calico 實(shí)際上是將集群里所有的節(jié)點(diǎn)都當(dāng)做邊界路由器來(lái)處理,他們一起組成了一個(gè)全互聯(lián)的網(wǎng)絡(luò),彼此之間通過(guò) BGP 交換路由,這些節(jié)點(diǎn)我們叫做 BGP Peer。

小結(jié):目前比較常用的時(shí)flannel和calico,flannel的功能比較簡(jiǎn)單,不具備復(fù)雜的網(wǎng)絡(luò)策略配置能力,calico是比較出色的網(wǎng)絡(luò)管理插件,但具備復(fù)雜網(wǎng)絡(luò)配置能力的同時(shí),往往意味著本身的配置比較復(fù)雜,所以相對(duì)而言,比較小而簡(jiǎn)單的集群使用flannel,考慮到日后擴(kuò)容,未來(lái)網(wǎng)絡(luò)可能需要加入更多設(shè)備,配置更多網(wǎng)絡(luò)策略,則使用calico更好。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-634201.html

//在 master01 節(jié)點(diǎn)上操作
#上傳 calico.yaml 文件到 /opt/k8s 目錄中,部署 CNI 網(wǎng)絡(luò)
cd /opt/k8s
vim calico.yaml
#修改里面定義Pod網(wǎng)絡(luò)(CALICO_IPV4POOL_CIDR),與前面kube-controller-manager配置文件指定的cluster-cidr網(wǎng)段一樣
    - name: CALICO_IPV4POOL_CIDR
      value: "192.168.0.0/16"
  
kubectl apply -f calico.yaml

kubectl get pods -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-659bd7879c-4h8vk   1/1     Running   0          58s
calico-node-nsm6b                          1/1     Running   0          58s
calico-node-tdt8v                          1/1     Running   0          58s

#等 Calico Pod 都 Running,節(jié)點(diǎn)也會(huì)準(zhǔn)備就緒
kubectl get nodes
1.7.1.2 node02 節(jié)點(diǎn)部署
//在 node01 節(jié)點(diǎn)上操作
cd /opt/
scp kubelet.sh proxy.sh root@192.168.80.12:/opt/
scp -r /opt/cni root@192.168.80.12:/opt/

//在 node02 節(jié)點(diǎn)上操作
#啟動(dòng)kubelet服務(wù)
cd /opt/
chmod +x kubelet.sh
./kubelet.sh 192.168.80.12

//在 master01 節(jié)點(diǎn)上操作
kubectl get csr
NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-BbqEh6LvhD4R6YdDUeEPthkb6T_CJDcpVsmdvnh81y0   10s  kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Pending
node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   85m  kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued

#通過(guò) CSR 請(qǐng)求
kubectl certificate approve node-csr-BbqEh6LvhD4R6YdDUeEPthkb6T_CJDcpVsmdvnh81y0

kubectl get csr
NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-BbqEh6LvhD4R6YdDUeEPthkb6T_CJDcpVsmdvnh81y0   23s  kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued
node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   85m  kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued

#加載 ipvs 模塊
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.sh腳本啟動(dòng)proxy服務(wù)
cd /opt/
chmod +x proxy.sh
./proxy.sh 192.168.80.12

#查看群集中的節(jié)點(diǎn)狀態(tài)
kubectl get nodes

1.8 部署 CoreDNS

1.8.1 在所有 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

#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.
/ # nslookup kubernetes
Server:    10.0.0.2
Address 1: 10.0.0.2 kube-dns.kube-system.svc.cluster.local

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

1.8.2 master02 節(jié)點(diǎn)部署

//從 master01 節(jié)點(diǎn)上拷貝證書(shū)文件、各master組件的配置文件和服務(wù)管理文件到 master02 節(jié)點(diǎn)
scp -r /opt/etcd/ root@192.168.80.20:/opt/
scp -r /opt/kubernetes/ root@192.168.80.20:/opt
scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.80.20:/usr/lib/systemd/system/

//修改配置文件kube-apiserver中的IP
vim /opt/kubernetes/cfg/kube-apiserver
KUBE_APISERVER_OPTS="--logtostderr=true \
--v=4 \
--etcd-servers=https://192.168.80.10:2379,https://192.168.80.11:2379,https://192.168.80.12:2379 \
--bind-address=192.168.80.20 \				#修改
--secure-port=6443 \
--advertise-address=192.168.80.20 \			#修改
......

//在 master02 節(jié)點(diǎn)上啟動(dòng)各服務(wù)并設(shè)置開(kāi)機(jī)自啟
systemctl start kube-apiserver.service
systemctl enable kube-apiserver.service
systemctl start kube-controller-manager.service
systemctl enable kube-controller-manager.service
systemctl start kube-scheduler.service
systemctl enable kube-scheduler.service

//查看node節(jié)點(diǎn)狀態(tài)
ln -s /opt/kubernetes/bin/* /usr/local/bin/
kubectl get nodes
kubectl get nodes -o wide			#-o=wide:輸出額外信息;對(duì)于Pod,將輸出Pod所在的Node名
//此時(shí)在master02節(jié)點(diǎn)查到的node節(jié)點(diǎn)狀態(tài)僅是從etcd查詢(xún)到的信息,而此時(shí)node節(jié)點(diǎn)實(shí)際上并未與master02節(jié)點(diǎn)建立通信連接,因此需要使用一個(gè)VIP把node節(jié)點(diǎn)與master節(jié)點(diǎn)都關(guān)聯(lián)起來(lái)

1.8.3 負(fù)載均衡部署

  • 配置load balancer集群雙機(jī)熱備負(fù)載均衡(nginx實(shí)現(xiàn)負(fù)載均衡,keepalived實(shí)現(xiàn)雙機(jī)熱備)
在lb01、lb02節(jié)點(diǎn)上操作 
//配置nginx的官方在線(xiàn)yum源,配置本地nginx的yum源
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
EOF

yum install nginx -y

//修改nginx配置文件,配置四層反向代理負(fù)載均衡,指定k8s群集2臺(tái)master的節(jié)點(diǎn)ip和6443端口
vim /etc/nginx/nginx.conf
events {
    worker_connections  1024;
}

#添加
stream {
    log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
    
	access_log  /var/log/nginx/k8s-access.log  main;

    upstream k8s-apiserver {
        server 192.168.80.10:6443;
        server 192.168.80.20:6443;
    }
    server {
        listen 6443;
        proxy_pass k8s-apiserver;
    }
}

http {
......


//檢查配置文件語(yǔ)法
nginx -t   

//啟動(dòng)nginx服務(wù),查看已監(jiān)聽(tīng)6443端口
systemctl start nginx
systemctl enable nginx
netstat -natp | grep nginx 


//部署keepalived服務(wù)
yum install keepalived -y

//修改keepalived配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   # 接收郵件地址
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   # 郵件發(fā)送地址
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX_MASTER	#lb01節(jié)點(diǎn)的為 NGINX_MASTER,lb02節(jié)點(diǎn)的為 NGINX_BACKUP
}

#添加一個(gè)周期性執(zhí)行的腳本
vrrp_script check_nginx {
    script "/etc/nginx/check_nginx.sh"	#指定檢查nginx存活的腳本路徑
}

vrrp_instance VI_1 {
    state MASTER			#lb01節(jié)點(diǎn)的為 MASTER,lb02節(jié)點(diǎn)的為 BACKUP
    interface ens33			#指定網(wǎng)卡名稱(chēng) ens33
    virtual_router_id 51	#指定vrid,兩個(gè)節(jié)點(diǎn)要一致
    priority 100			#lb01節(jié)點(diǎn)的為 100,lb02節(jié)點(diǎn)的為 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.80.100/24	#指定 VIP
    }
    track_script {
        check_nginx			#指定vrrp_script配置的腳本
    }
}


//創(chuàng)建nginx狀態(tài)檢查腳本 
vim /etc/nginx/check_nginx.sh
#!/bin/bash
#egrep -cv "grep|$$" 用于過(guò)濾掉包含grep 或者 $$ 表示的當(dāng)前Shell進(jìn)程ID
count=$(ps -ef | grep nginx | egrep -cv "grep|$$")

if [ "$count" -eq 0 ];then
    systemctl stop keepalived
fi


chmod +x /etc/nginx/check_nginx.sh

//啟動(dòng)keepalived服務(wù)(一定要先啟動(dòng)了nginx服務(wù),再啟動(dòng)keepalived服務(wù))
systemctl start keepalived
systemctl enable keepalived
ip a				#查看VIP是否生成

//修改node節(jié)點(diǎn)上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件為VIP
cd /opt/kubernetes/cfg/
vim bootstrap.kubeconfig 
server: https://192.168.80.100:6443
                      
vim kubelet.kubeconfig
server: https://192.168.80.100:6443
                        
vim kube-proxy.kubeconfig
server: https://192.168.80.100:6443

//重啟kubelet和kube-proxy服務(wù)
systemctl restart kubelet.service 
systemctl restart kube-proxy.service

//在 lb01 上查看 nginx 和 node 、 master 節(jié)點(diǎn)的連接狀態(tài)
netstat -natp | grep nginx
tcp        0      0 0.0.0.0:6443            0.0.0.0:*               LISTEN      44904/nginx: master 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      44904/nginx: master 
tcp        0      0 192.168.80.100:6443     192.168.80.12:46954     ESTABLISHED 44905/nginx: worker 
tcp        0      0 192.168.80.14:45074     192.168.80.10:6443      ESTABLISHED 44905/nginx: worker 
tcp        0      0 192.168.80.14:53308     192.168.80.20:6443      ESTABLISHED 44905/nginx: worker 
tcp        0      0 192.168.80.14:53316     192.168.80.20:6443      ESTABLISHED 44905/nginx: worker 
tcp        0      0 192.168.80.100:6443     192.168.80.11:48784     ESTABLISHED 44905/nginx: worker 
tcp        0      0 192.168.80.14:45070     192.168.80.10:6443      ESTABLISHED 44905/nginx: worker 
tcp        0      0 192.168.80.100:6443     192.168.80.11:48794     ESTABLISHED 44905/nginx: worker 
tcp        0      0 192.168.80.100:6443     192.168.80.12:46968     ESTABLISHED 44905/nginx: worker 

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

//測(cè)試創(chuàng)建pod
kubectl run nginx --image=nginx

//查看Pod的狀態(tài)信息
kubectl get pods
NAME                    READY   STATUS              RESTARTS   AGE
nginx-dbddb74b8-nf9sk   0/1     ContainerCreating   0          33s   #正在創(chuàng)建中

kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
nginx-dbddb74b8-nf9sk   1/1     Running   0          80s  			#創(chuàng)建完成,運(yùn)行中

kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE
nginx-dbddb74b8-26r9l   1/1     Running   0          10m   172.17.36.2   192.168.80.15   <none>
//READY為1/1,表示這個(gè)Pod中有1個(gè)容器

//在對(duì)應(yīng)網(wǎng)段的node節(jié)點(diǎn)上操作,可以直接使用瀏覽器或者curl命令訪(fǎng)問(wèn)
curl 172.17.36.2

//這時(shí)在master01節(jié)點(diǎn)上查看nginx日志,發(fā)現(xiàn)沒(méi)有權(quán)限查看
kubectl logs nginx-dbddb74b8-nf9sk

1.8.5 部署 Dashboard

  • Dashboard 介紹
    儀表板是基于Web的Kubernetes用戶(hù)界面??梢允褂脙x表板將容器化應(yīng)用程序部署到Kubernetes集群,對(duì)容器化應(yīng)用程序進(jìn)行故障排除,并管理集群本身及其伴隨資源。您可以使用儀表板來(lái)概述群集上運(yùn)行的應(yīng)用程序,以及創(chuàng)建或修改單個(gè)Kubernetes資源(例如部署,作業(yè),守護(hù)進(jìn)程等)。例如,可以使用部署向?qū)U(kuò)展部署,啟動(dòng)滾動(dòng)更新,重新啟動(dòng)Pod或部署新應(yīng)用程序。儀表板還提供有關(guān)群集中Kubernetes資源狀態(tài)以及可能發(fā)生的任何錯(cuò)誤的信息。
//在 master01 節(jié)點(diǎn)上操作
#上傳 recommended.yaml 文件到 /opt/k8s 目錄中
cd /opt/k8s
vim recommended.yaml
#默認(rèn)Dashboard只能集群內(nèi)部訪(fǎng)問(wèn),修改Service為NodePort類(lèi)型,暴露到外部:
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001     #添加
  type: NodePort          #添加
  selector:
    k8s-app: kubernetes-dashboard

kubectl apply -f recommended.yaml

#創(chuàng)建service account并綁定默認(rèn)cluster-admin管理員集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

#使用輸出的token登錄Dashboard
https://NodeIP:30001

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

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(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ò)配置 三、問(wèn)題 1.etcd 報(bào)錯(cuò) 2.安裝etcd問(wèn)題 3.系

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

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

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

    2024年02月06日
    瀏覽(26)
  • [云原生案例2.1 ] Kubernetes的部署安裝 【單master集群架構(gòu) ---- (二進(jìn)制安裝部署)】節(jié)點(diǎn)部分

    [云原生案例2.1 ] Kubernetes的部署安裝 【單master集群架構(gòu) ---- (二進(jìn)制安裝部署)】節(jié)點(diǎn)部分

    Minikube是一個(gè)工具,可以在本地快速運(yùn)行一個(gè)單節(jié)點(diǎn)微型K8S,僅用于學(xué)習(xí)、預(yù)覽K8S的一些特性使用。 Kubeadm也是一個(gè)工具,提供kubeadm init和kubeadm join,用于快速部署K8S集群,相對(duì)簡(jiǎn)單。 生產(chǎn)首選,從官方下載發(fā)行版的二進(jìn)制包,手動(dòng)部署每個(gè)組件和自簽TLS證書(shū),組成K8S集群,

    2024年02月05日
    瀏覽(48)
  • 二進(jìn)制搭建Kubernetes集群(一)——部署etcd集群和單master

    二進(jìn)制搭建Kubernetes集群(一)——部署etcd集群和單master

    注意:生產(chǎn)環(huán)境中,etcd集群和master、node節(jié)點(diǎn)都應(yīng)該部署在不同的機(jī)器上,此處為了實(shí)驗(yàn)方便,將三臺(tái)etcd節(jié)點(diǎn)分別部署在了master和node節(jié)點(diǎn)上了 k8s集群master01:192.168.126.27?? ?kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02:192.168.80.21 k8s集群node01:192.168.80.11?? ?

    2024年02月10日
    瀏覽(30)
  • 二進(jìn)制搭建 Kubernetes+部署網(wǎng)絡(luò)組件+部署CornDNS+負(fù)載均衡部署+部署Dashboard

    二進(jìn)制搭建 Kubernetes+部署網(wǎng)絡(luò)組件+部署CornDNS+負(fù)載均衡部署+部署Dashboard

    在master添加hosts 調(diào)整內(nèi)核參數(shù)(master) 配置時(shí)間同步(所有主機(jī)節(jié)點(diǎn)) etcd是CoreOS團(tuán)隊(duì)于2013年6月發(fā)起的開(kāi)源項(xiàng)目,它的目標(biāo)是構(gòu)建一個(gè)高可用的分布式鍵值(key-value)數(shù)據(jù)庫(kù)。etcd內(nèi)部采用raft協(xié)議作為一致性算法,etcd是go語(yǔ)言編寫(xiě)的。 etcd 作為服務(wù)發(fā)現(xiàn)系統(tǒng),有以下的特點(diǎn):

    2024年02月08日
    瀏覽(66)
  • Kubernetes二進(jìn)制部署方案

    Kubernetes二進(jìn)制部署方案

    目錄 一、環(huán)境準(zhǔn)備 2.1、主機(jī)配置 2.2、安裝 Docker 2.3、生成通信加密證書(shū) 2.3.1、生成 CA 證書(shū)(所有主機(jī)操作) 2.3.2、生成 Server 證書(shū)(所有主機(jī)) 2.3.3、生成 admin 證書(shū)(所有主機(jī)) 2.3.4、生成 proxy 證書(shū) 三、部署 Etcd 集群 3.1、在 k8s-master主機(jī)上部署 Etcd 節(jié)點(diǎn) 3.2、在k8s-node01 、k8

    2024年02月12日
    瀏覽(31)
  • Kubernetes高可用集群二進(jìn)制部署(六)Kubernetes集群節(jié)點(diǎn)添加

    Kubernetes高可用集群二進(jìn)制部署(六)Kubernetes集群節(jié)點(diǎn)添加

    Kubernetes概述 使用kubeadm快速部署一個(gè)k8s集群 Kubernetes高可用集群二進(jìn)制部署(一)主機(jī)準(zhǔn)備和負(fù)載均衡器安裝 Kubernetes高可用集群二進(jìn)制部署(二)ETCD集群部署 Kubernetes高可用集群二進(jìn)制部署(三)部署api-server Kubernetes高可用集群二進(jìn)制部署(四)部署kubectl和kube-controller-man

    2024年02月14日
    瀏覽(18)
  • Kubernetes v1.20 二進(jìn)制部署

    Kubernetes v1.20 二進(jìn)制部署

    k8s集群master01:192.168.80.101?? ?kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02:192.168.80.102 k8s集群node01:192.168.80.103?? ?kubelet kube-proxy docker? k8s集群node02:192.168.80.104 etcd集群節(jié)點(diǎn)1:192.168.80.105?? ?etcd etcd集群節(jié)點(diǎn)2:192.168.80.106 etcd集群節(jié)點(diǎn)3:192.168.80.107 負(fù)載均衡

    2024年02月14日
    瀏覽(21)
  • 二進(jìn)制部署kubernetes(1.20)

    二進(jìn)制部署kubernetes(1.20)

    ??作者簡(jiǎn)介:一名運(yùn)維工作人員。 ??宣言:人生就是B(birth)和D(death)之間的C(choise),做好每一個(gè)選擇。 ??創(chuàng)作不易,動(dòng)動(dòng)小手給個(gè)點(diǎn)贊加關(guān)注吧,有什么意見(jiàn)評(píng)論區(qū)告訴我,一起學(xué)習(xí)。? 生產(chǎn)環(huán)境中有兩種部署k8s的方法: ? ? ? ? kubeadm Kubeadm是一個(gè)K8s部署工具,提

    2024年02月11日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包