[云原生] 二進制k8s集群(下)部署高可用master節點

在上一篇文章中,就已經完成了二進制k8s集群部署的搭建,但是單機master并不適用于企業的實際運用(因為單機master中,僅僅只有一臺master作為節點服務器的調度指揮,一旦宕機。就意味著整個集群的癱瘓,所以成熟的k8s的集群一定要考慮到master的高可用。)企業的運用一般至少存在兩臺master及其以上的部署,本次將根據前面的部署,再添加一臺master(三個master或者更多,也可以根據本次添加步驟重復添加)。添加master后,我們會將借助keepalived+nginx的架構,來實現高可用的master【也可以使用haproxy+keepalived或則是keepalived+lvs(不推薦,步驟過于復雜)

本次部署的架構組件?

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?mater節點
mater01192.168.73.100kube-apiserver kube-controller-manager kube-scheduler?
master02192.168.73.130kube-apiserver kube-controller-manager kube-scheduler?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?node節點
node01192.168.73.110kubelet kube-proxy docker (容器引擎)
node02192.168.73.120kubelet kube-proxy docker (容器引擎)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? etcd? cluster集群
etcd節點1192.168.73.100(mater01)etcd
etcd節點2192.168.73.110(node01)etcd
etcd節點3192.168.73.120(node02)etcd
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? load balance(高可用調度器)
主調度器192.168.73.140nginx,keepalived
從調度器192.168.73.150nginx,keepalived

?架構說明:

  • node節點的kubelet只能對接一個master節點的apiserver,不可能同時對接多個master節點的apiserver。簡而言之,node節只能有一個master來領導。

  • kubelet和kube-proxy是通過kubelet.kubeconfig和kube-proxy.kubeconfig文件中的server參數進行對接 master節點的。

  • 所以在多master節點的環境下,需要有nginx負載均衡器來進行調度,而且需要進行keepalived高可用的構建(主從兩個節點) ,防止主節點宕機導致整個k8s集群的不可用。

?一、新master節點的搭建

1.1 對master02 進行初始化配置

#關閉防火墻
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X#關閉selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config#關閉swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab #根據規劃設置主機名
hostnamectl set-hostname master02
su
#在master添加hosts(添加到整個k8s集群的主機上,保證其他主機均有該映射)
cat >> /etc/hosts << EOF
192.168.73.105 master01
192.168.73.110 master02
192.168.73.106 node01
192.168.73.107 node02
EOF#調整內核參數
cat > /etc/sysctl.d/k8s.conf << EOF
#開啟網橋模式,可將網橋的流量傳遞給iptables鏈
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#關閉ipv6協議
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOFsysctl --system#時間同步
yum install ntpdate -y
ntpdate ntp.aliyun.com#將時間同步的操作添加到計劃性任務,確保所有節點保證時間的同步
crontab -e
*/30 * * * * /usr/sbin/ntpdate  ntp.aliyun.com
crontab -l

?

?1.2? 將master01的配置移植到master02?

 ##------------ 1、 master01節點,拷貝文件到master02 -------------------------------#從 master01 節點上拷貝證書文件、各master組件的配置文件和服務管理文件到 master02 節點scp -r etcd/ master02:`pwd`scp -r kubernetes/ master02:`pwd`scp /usr/lib/systemd/system/kube-* master02:/usr/lib/systemd/system/scp -r /root/.kube/  master02:/root/?

 ##----------- 2、 master02節點,修改配置文件并啟動相關服務-------------------------#修改配置文件kube-apiserver中的IPvim /opt/kubernetes/cfg/kube-apiserverKUBE_APISERVER_OPTS="--logtostderr=true \        #輸出日志,false表示標準錯誤不輸出到屏幕,而是輸出到日志中。true表示標準錯誤會輸出到屏幕。--v=4 \                                          #日志級別--etcd-servers=https://192.168.73.105:2379,https://192.168.73.106:2379,https://192.168.73.107:2379 \      #etcd節點的IP通信地址--bind-address=192.168.73.110 \              #修改,當前綁定的內網IP監聽的地址--secure-port=6443 \                                                                #基于HPPTS開放端口--advertise-address=192.168.73.110 \         #修改,內網通告地址,讓其他node節點地址通信......vim kube-controller-managervim kube-scheduler?#在 master02 節點上啟動各服務并設置開機自啟systemctl enable --now kube-apiserver.servicesystemctl enable --now kube-controller-manager.servicesystemctl enable --now kube-scheduler.service?#將可執行文件,創建軟鏈接ln -s /opt/kubernetes/bin/* /usr/local/bin/?#查看node節點狀態kubectl get nodeskubectl get nodes -o wide           #-o=wide:輸出額外信息;對于Pod,將輸出Pod所在的Node名#此時在master02節點查到的node節點狀態僅是從etcd查詢到的信息,而此時node節點實際上并未與master02節點建立通信連接,因此需要使用一個VIP把node節點與master節點都關聯起來

?

?

二、負載均衡的部署?

 #配置load balancer集群雙機熱備負載均衡(nginx實現負載均衡,keepalived實現雙機熱備)?#----------------- 1、兩臺負載均衡器配置nginx -------------------------------------?#配置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
EOF?yum install nginx -y?#修改nginx配置文件,配置四層反向代理負載均衡,指定k8s群集2臺master的節點ip和6443端口vim /etc/nginx/nginx.confevents {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.73.105:6443;    #master01server 192.168.73.110:6443;    #master02}server {listen 6443;proxy_pass k8s-apiserver;}}?http {......??#檢查配置文件語法nginx -t   ?#啟動nginx服務,查看已監聽6443端口systemctl start nginxsystemctl enable nginxss -lntp|grep nginx ??

?

?

 #------------------ 2、兩臺負載均衡器配置keepalived ------------------------------?#部署keepalived服務yum install keepalived -y?#修改keepalived配置文件vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id nginx_master
}vrrp_script check_nginx {script "/etc/nginx/check_nginx.sh"   #指定檢測腳本的路徑,并且該腳本充當心跳檢測腳本
}vrrp_instance VI_1 {state MASTER        #指定狀態為master節點,109為BACKUP備用節點interface ens33virtual_router_id 51priority 100    #108優先級為100 109為90,優先級決定著主備的位置advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.73.66}track_script {check_nginx        #追蹤腳本的進程}
}#將該文件 發送給備用調度器,并且將其中的配置修改為備用調度器的屬性
cd /etc/keepalived/
scp keepalived.conf  root@192.168.73.109:`pwd`??
#創建nginx狀態檢查腳本 
vim /etc/nginx/check_nginx.sh#!/bin/bash
killall -0 nginx &>/dev/null
if [ $? -ne 0 ];thensystemctl stop keepalived
fi?chmod +x /etc/nginx/check_nginx.sh  #為腳本增加執行權限#將該腳本發送給備用調度器
cd /etc/nginx
scp check_nginx.conf  root@192.168.73.109:`pwd`?#兩臺主備調度器啟動keepalived服務(一定要先啟動了nginx服務,再啟動keepalived服務)systemctl start keepalivedsystemctl enable keepalivedip addr             #查看主節點的VIP是否生成?

?nginx心跳檢測腳本說明:

killall -0 可以用來檢測程序是否執行
如果服務未執行的情況下 會進行報錯
并且 $?的返回碼 為非0值
?

vim /etc/keepalived/keepalived.conf 
scp /etc/keepalived/keepalived.conf 192.168.136.150:/etc/keepalived/
systemctl enable --now keepalived.service
systemctl status keepalived.service systemctl restart nginx keepalived.service
ip a

?

 #---------------- 3、關閉主節點的nginx服務,模擬故障,測試keepalived-----------------------?#關閉主節點lb01的Nginx服務,模擬宕機,觀察VIP是否漂移到備節點systemctl stop nginxip addrsystemctl status keepalived   #此時keepalived被腳本殺掉了   ?#備節點查看是否生成了VIPip addr    #此時VIP漂移到備節點lb02?

?

//修改所有node節點上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件為VIP[root@node01 /opt/kubernetes/cfg]#vim bootstrap.kubeconfig
[root@node01 /opt/kubernetes/cfg]#vim kubelet.kubeconfig
[root@node01 /opt/kubernetes/cfg]#vim kube-proxy.kubeconfig

//重啟node節點kubelet和kube-proxy服務
systemctl restart kubelet.service 
systemctl restart kube-proxy.service

//在 lb01 上查看 nginx 和 node 、 master 節點的連接狀態
netstat -natp | grep nginx

三、k8s的web UI界面的搭建?

//在 master01 節點上操作
#上傳 recommended.yaml 文件到 /opt/k8s 目錄中,部署 CoreDNS 
cd /opt/k8s
vim recommended.yaml
#默認Dashboard只能集群內部訪問,修改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-dashboard#通過recommended.yaml資源配置清單,使用kubectl apply創建資源,-f指定資源配置清單文件kubectl apply -f recommended.yaml#創建service account并綁定默認cluster-admin管理員集群角色
kubectl create serviceaccount dashboard-admin -n kube-systemkubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin#獲取token值
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')#使用輸出的token登錄Dashboard,訪問node節點
https://192.168.136.110:30001

?

?

?

?

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

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

相關文章

代理技術引領出海征程

在數字娛樂的繁榮時代&#xff0c;游戲開發者和發行商們意識到&#xff0c;要在全球市場立足&#xff0c;必須邁向國際化的出海之路。然而&#xff0c;這一旅程面臨著跨越網絡壁壘、適應多元文化和提升全球連接性的巨大挑戰。本文將深入探討代理技術在游戲行業出海過程中的創新…

這才開工沒幾天收到Offer了,簡歷改的好,找工作沒煩惱。

喜報喜報 這才開工沒幾天&#xff0c;就收到了喜報&#xff01; 就像上面截圖中所說的一樣&#xff1a;簡歷改了真的有用。 我也和大家分享一下優化簡歷的技巧&#xff0c;希望對大家有幫助&#xff0c;把握住金三銀四的機會&#xff0c;都能順利上岸&#xff0c;升職加薪&am…

Leetcode日記 2583. 二叉樹中的第 K 大層和

Leetcode日記 2583. 二叉樹中的第 K 大層和 題目&#xff1a;解題思路&#xff1a;代碼實現制作不易&#xff0c;感謝三連&#xff0c;謝謝啦 題目&#xff1a; 給你一棵二叉樹的根節點 root 和一個正整數 k 。 樹中的 層和 是指 同一層 上節點值的總和。 返回樹中第 k 大的層和…

Vue2 基礎面試題

v-show 和 v-if 區別 v-show 通過 CSS display 控制顯示和隱藏v-if 通過判斷組件真實渲染和銷毀&#xff0c;而不是顯示和隱藏頻繁切換顯示狀態用 v-show&#xff0c;否則用 v-if v-if 當 v-if 與 v-for 一起使用時&#xff0c;v-for 具有比 v-if 更高的優先級&#xff0c;意…

PolarDN MISC做題筆記

cat flag 使用01打開flag.png,發現圖片尾部有padding的數據。D0 CF 11 E0 A1 B1 1A E1為office2007以前版本的文件頭。將其另存為flag.doc,打開發現提示需要密碼。&#xff08;可以注意到&#xff1a;D0CF11E0非常類似DOCFILE&#xff09; 使用john的office2john.py 提取hash …

【操作系統】處理機調度算法

實驗3 處理機管理 一、實驗目的 在多道程序或多任務系統中&#xff0c;系統中同時處于就緒態的進程有若干個&#xff0c;即能運行的進程數遠遠大于處理機個數。為了使系統中的各個進程能有條不紊的運行&#xff0c;必須按照某種調度策略&#xff0c;選擇一個進程占用處理機。…

使用puppeteer完成監聽瀏覽器下載文件并保存到自己本地或服務器上完成上傳功能

需求場景 獲取網站點擊的下載pdf&#xff0c;并把pdf重命名再上傳到COS云上面 技術使用 “puppeteer”: “^19.7.2”, “egg”: “^3.15.0”, // 服務期用egg搭的 文件服務使用COS騰訊云 核心思路 獲取瀏覽器下載事件&#xff0c;并把文件保存到本地 const session awai…

Unity3D 框架如何搭建基于純Lua的U框架與開發模式詳解

前言 Unity3D 是一款非常流行的游戲開發引擎&#xff0c;它支持C#、JavaScript和Boo等多種腳本語言。而Lua語言作為一種輕量級的腳本語言&#xff0c;也在游戲開發中得到了廣泛應用。本文將介紹如何在Unity3D框架中搭建基于純Lua的U框架&#xff0c;并詳細講解其開發模式。 對…

MYSQL--存儲過程操作

一&#xff1a;概念&#xff1a; 存儲過程實際上對標了JAVA當中的方法&#xff0c;兩者是相似的&#xff0c;同時需要注意的一點是&#xff0c;MYSQL僅僅在5.0版本之后才出現這種存儲操作的過程&#xff1b; 優點&#xff1a; 1.存儲過程能夠讓運行的速度變得更加迅速&#xff…

SpringBoot指定外部環境配置

nohup java -Xms256m -Xmx512m -Dfile.encodingUTF-8 -jar /usr/local/xxxx.jar --spring.profiles.activeprod > system.log 2>&1 & --spring.profiles.activeprod修改的是多環境配置中內部application.properties里的spring.profiles.active值 -Dspring.config…

ubuntu 查詢流量使用

在Ubuntu系統中&#xff0c;可以使用nethogs命令來查看每個進程的網絡流量使用情況。這個工具可以顯示每個進程的實時網絡流量&#xff0c;從而可以找出使用流量最多的應用。 首先&#xff0c;你需要安裝nethogs。在終端中輸入以下命令&#xff1a; sudo apt install nethogs…

消息隊列MQ 保證消息不丟失(消息可靠性)

文章目錄 概述RabbitMQ 怎么避免消息丟失&#xff08;可靠傳輸&#xff09;RocketMQ 怎么確保消息不丟失Kafka 怎么保證消息不丟失activeMQ 怎么避免消息丟失MQ 宕機了消息是否會丟失線上服務宕機時&#xff0c;如何保證數據100%不丟失嗎&#xff1f;消息隊列消息持久化 概述 …

思偉老友記 | 攜手并進17年 中泰公司的穩步發展和企業傳承

17年攜手并進 合作共贏 2023年是中泰&#xff08;福建&#xff09;混凝土發展有限公司攜手思偉軟件的第17年。在這關鍵的17年間&#xff0c;我們共同經歷了一個行業的興盛發展&#xff0c;也相互見證了彼此的榮耀成長。中泰從泉州惠安洛陽江邊一個簡單的攪拌站&#xff0c;到如…

h-table(表格列表組件的全封裝)

文章目錄 概要h-table的封裝過程查詢組件封裝 h-highForm結果頁右側工具欄封裝RightToolbar結果頁列表組件h-table結果頁vue頁面使用js文件有需要的請私信博主&#xff0c;還請麻煩給個關注&#xff0c;博主不定期更新組件封裝&#xff0c;或許能夠有所幫助&#xff01;&#x…

如何做代幣分析:以 SOL 幣為例

作者&#xff1a;lesleyfootprint.network 編譯&#xff1a;cicifootprint.network 數據源&#xff1a;Solana Token Dashboard &#xff08;僅包括以太坊數據&#xff09; 在加密貨幣和數字資產領域&#xff0c;代幣分析起著至關重要的作用。代幣分析指的是深入研究與代幣…

springmvc基于springboot 的音樂播放系統 _7sdu8

這就意味著音樂播放系統的設計可以比其他系統更為出色的能力&#xff0c;可以更高效的完成最新的ymj排行榜、ymj音樂資訊等功能。 此系統設計主要采用的是JAVA語言來進行開發&#xff0c;JSP技術、采用SSM框架技術&#xff0c;框架分為三層&#xff0c;分別是控制層Controller&…

Seata的 TCC 模式

目錄 概述 使用 依賴與配置 代碼 概述 TCC 模式是一種侵入式的分布式事務解決方案&#xff0c;它不依賴于數據庫的事務&#xff0c;而是要求開發者自定義完成 預提交、提交、回滾的方法邏輯。因此&#xff0c;它是一個種偏 復雜、靈活、有侵入性 的分布式事務處理方案。 De…

針對Umi、React中遇到的 “xxxx”不能用作 JSX 組件 問題解決方案

一、處理方案 這是因為"types/react"、"types/react-dom"在子依賴中使用的版本不一致導致&#xff0c;一般情況npm會自動幫我們處理版本不一致的問題。如果npm處理不了&#xff0c;就需要我們自己手動處理在package.json中添加一項配置 {name:"test&…

Zookeeper選舉Leader源碼剖析

Zookeeper選舉Leader源碼剖析 leader選舉流程 參數說明 myid: 節點的唯一標識&#xff0c;手動設置zxid: 當前節點中最大(新)的事務idepoch-logic-clock: 同一輪投票過程中的邏輯時鐘值相同&#xff0c;每投完一次值會增加 leader選舉流程 默認投票給自己&#xff0c;優先選擇…

vue3 vuex

目錄 Vuex 是什么 什么是“狀態管理模式”&#xff1f; 什么情況下我應該使用 Vuex&#xff1f; 使用方法&#xff1a; 提交載荷&#xff08;Payload&#xff09; 對象風格的提交方式 使用常量替代 Mutation 事件類型 Mutation 必須是同步函數 在組件中提交 Mutation …