中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

公司企業(yè)文化展示墻seo交流論壇seo顧問(wèn)

公司企業(yè)文化展示墻,seo交流論壇seo顧問(wèn),做1688網(wǎng)站需要懂英語(yǔ)嗎,阿里巴巴有幾個(gè)網(wǎng)站是做外貿(mào)的Kubernetes 二進(jìn)制搭建 一、二進(jìn)制搭建 Kubernetes v1.201.1 部署準(zhǔn)備1.2 操作系統(tǒng)初始化配置1.3 部署 etcd 集群1.3.1 etcd 作為服務(wù)發(fā)現(xiàn)系統(tǒng),有以下的特點(diǎn)1.3.2 準(zhǔn)備簽發(fā)證書(shū)環(huán)境1.3.3 在 master01 節(jié)點(diǎn)上操作1.3.4 生成證書(shū) 1.4 部署 docker引擎1.4.1 部署 Maste…

Kubernetes 二進(jìn)制搭建

  • 一、二進(jìn)制搭建 Kubernetes v1.20
    • 1.1 部署準(zhǔn)備
    • 1.2 操作系統(tǒng)初始化配置
    • 1.3 部署 etcd 集群
      • 1.3.1 etcd 作為服務(wù)發(fā)現(xiàn)系統(tǒng),有以下的特點(diǎn)
      • 1.3.2 準(zhǔn)備簽發(fā)證書(shū)環(huán)境
      • 1.3.3 在 master01 節(jié)點(diǎn)上操作
      • 1.3.4 生成證書(shū)
    • 1.4 部署 docker引擎
      • 1.4.1 部署 Master 組件
    • 1.5 部署 Worker Node 組件
    • 1.6 部署 CNI 網(wǎng)絡(luò)組件
      • 1.6.1 部署 flannel
        • 1.6.1.1 Flannel udp 模式的工作原理
        • 1.6.1.2 vxlan 模式
    • 1.7 部署 Calico
      • 1.7.1 Calico 主要由三個(gè)部分組成
        • 1.7.1.1 Calico 工作原理
        • 1.7.1.2 node02 節(jié)點(diǎn)部署
    • 1.8 部署 CoreDNS
      • 1.8.1 在所有 node 節(jié)點(diǎn)上操作
      • 1.8.2 master02 節(jié)點(diǎn)部署
      • 1.8.3 負(fù)載均衡部署
      • 1.8.4 在 master01 節(jié)點(diǎn)上操作
      • 1.8.5 部署 Dashboard

一、二進(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.20k8s集群node01:192.168.80.11	kubelet kube-proxy docker 
k8s集群node02:192.168.80.12etcd集群節(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
EOFsysctl --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、快速:單實(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ì)外為客戶端提供通訊,使用端口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ū),它支持簽三種類型的證書(shū):
    1.client 證書(shū),服務(wù)端連接客戶端時(shí)攜帶的證書(shū),用于客戶端驗(yàn)證服務(wù)端身份,如 kube-apiserver 訪問(wèn) etcd;
    2.server 證書(shū),客戶端連接服務(wù)端時(shí)攜帶的證書(shū),用于服務(wù)端驗(yàn)證客戶端身份,如 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-certinfochmod +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ū)名稱> #查看證書(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.mdetcd就是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客戶端
- -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.iosystemctl 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è)用戶,接下來(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),用戶名,UID,用戶組 的格式生成
cat > /opt/kubernetes/cfg/token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOFchmod +x token.sh
./token.shcat /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-apiservernetstat -natp | grep 6443   #安全端口6443用于接收HTTPS請(qǐng)求,用于基于Token文件或客戶端證書(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訪問(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 地址),客戶端參數(shù)(上面生成的證書(shū)和私鑰),集群 context 上下文參數(shù)(集群名稱、用戶名)。Kubenetes 組件(如 kubelet、kube-proxy)通過(guò)啟動(dòng)時(shí)指定不同的 kubeconfig 文件可以切換到不同的集群,連接到 apiserver。
mkdir /opt/k8s/kubeconfigcd /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),使用戶 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ā)客戶端證書(shū),kubelet 會(huì)以一個(gè)低權(quán)限用戶自動(dòng)向 apiserver 申請(qǐng)證書(shū),kubelet 的證書(shū)由 apiserver 動(dòng)態(tài)簽署。

  • 3、kubelet 首次啟動(dòng)通過(guò)加載 bootstrap.kubeconfig 中的用戶 Token 和 apiserver CA 證書(shū)發(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 綁定(通過(guò) kubectl get clusterroles 可查詢),使其能夠發(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 首次訪問(wèn) API Server 時(shí),是使用 token 做認(rèn)證,通過(guò)后,Controller Manager 會(huì)為 kubelet 生成一個(gè)證書(shū),以后的訪問(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 地址訪問(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)行尋址和通信。因此要滿足兩個(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)(類似于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 模式是在用戶態(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模式是在用戶態(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.tarmkdir /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          7skubectl 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)做安全訪問(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ī)則,類似路由器。
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更好。

//在 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_CIDRvalue: "192.168.0.0/16"kubectl apply -f calico.yamlkubectl 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_CJDcpVsmdvnh81y0kubectl 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.yamlkubectl 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.localName:      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查詢到的信息,而此時(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的官方在線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
EOFyum 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 keepalivedglobal_defs {# 接收郵件地址notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}# 郵件發(fā)送地址notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_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)的為 BACKUPinterface ens33			#指定網(wǎng)卡名稱 ens33virtual_router_id 51	#指定vrid,兩個(gè)節(jié)點(diǎn)要一致priority 100			#lb01節(jié)點(diǎn)的為 100,lb02節(jié)點(diǎn)的為 90advert_int 1authentication {auth_type PASSauth_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 ];thensystemctl stop keepalived
fichmod +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:6443vim kubelet.kubeconfig
server: https://192.168.80.100:6443vim 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命令訪問(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用戶界面。可以使用儀表板將容器化應(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)部訪問(wèn),修改Service為NodePort類型,暴露到外部:
kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:ports:- port: 443targetPort: 8443nodePort: 30001     #添加type: NodePort          #添加selector:k8s-app: kubernetes-dashboardkubectl 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
http://www.risenshineclean.com/news/2276.html

相關(guān)文章:

  • 代運(yùn)營(yíng)公司怎么找客戶安卓系統(tǒng)優(yōu)化app
  • 做網(wǎng)站的大小seo網(wǎng)站有優(yōu)化培訓(xùn)嗎
  • 免費(fèi)學(xué)校網(wǎng)站系統(tǒng)競(jìng)價(jià)托管推廣多少錢
  • 廊坊網(wǎng)站排名優(yōu)化公司saascrm國(guó)內(nèi)免費(fèi)pdf
  • 做網(wǎng)站最主要是那個(gè)一類商標(biāo)如何快速收錄一個(gè)網(wǎng)站的信息
  • 網(wǎng)站手機(jī)端做app開(kāi)發(fā)工具創(chuàng)建網(wǎng)站的流程
  • 公司轉(zhuǎn)讓交易平臺(tái)app紹興seo排名
  • 網(wǎng)站開(kāi)發(fā)所需經(jīng)費(fèi)網(wǎng)站維護(hù)中
  • 住房城鄉(xiāng)建設(shè)部門戶網(wǎng)站主頁(yè)微信公眾號(hào)營(yíng)銷
  • 深圳外貿(mào)公司網(wǎng)站建設(shè)公司排名推廣運(yùn)營(yíng)怎么做
  • 東莞朝陽(yáng)網(wǎng)站建設(shè)手機(jī)百度下載免費(fèi)
  • 仿珠寶首飾網(wǎng)站開(kāi)發(fā)推廣平臺(tái)怎么做
  • 網(wǎng)站建設(shè)維護(hù)協(xié)議建站abc
  • 太原市萬(wàn)柏林區(qū)疫情防控最新消息專業(yè)seo培訓(xùn)學(xué)校
  • 專業(yè)做企業(yè)活動(dòng)的趴網(wǎng)站全網(wǎng)自媒體平臺(tái)
  • 淄博高端網(wǎng)站建設(shè)網(wǎng)絡(luò)推廣什么做
  • 做包子網(wǎng)站營(yíng)銷軟件哪個(gè)好
  • 郵箱網(wǎng)址查詢百度刷排名seo
  • 八方資源網(wǎng)做網(wǎng)站優(yōu)化怎么樣群排名優(yōu)化軟件
  • 如何做配音網(wǎng)站問(wèn)卷調(diào)查網(wǎng)站
  • 六盤水南寧網(wǎng)站建設(shè)seo服務(wù)靠譜嗎
  • 網(wǎng)站后臺(tái)模板html優(yōu)化大師優(yōu)化項(xiàng)目有
  • 動(dòng)態(tài)網(wǎng)站系統(tǒng)的5個(gè)組成部分代哥seo
  • wordpress資訊站臨沂seo整站優(yōu)化廠家
  • 杭州富陽(yáng)做網(wǎng)站百度云網(wǎng)盤資源搜索
  • 給別人做網(wǎng)站去掉版權(quán)日本比分預(yù)測(cè)
  • 迪奧生物做圖網(wǎng)站寧波seo優(yōu)化公司排名
  • 做網(wǎng)站怎么融資2345網(wǎng)址導(dǎo)航大全
  • 自助建站亞馬遜關(guān)鍵詞排名查詢工具
  • 給自己的網(wǎng)站做鏡像網(wǎng)站外貿(mào)網(wǎng)站模板