2024-04-14 分類: 網(wǎng)站建設(shè)
近期由于工作原因,在項(xiàng)目支持的過(guò)程中,進(jìn)行了一次K8S的基礎(chǔ)環(huán)境部署,云平臺(tái)一直是公司的重要底座,而我由于一系列原因,一直沒(méi)有親自嘗試,通過(guò)本次的機(jī)會(huì),讓我重新做了一遍,也找到了和以前部署傳統(tǒng)環(huán)境一樣的感覺(jué),雖然還有些生疏和不解,但是邁出了這一步,也算是深入學(xué)習(xí)的開(kāi)始。
環(huán)境部署是作為公司技術(shù)人員,必須要掌握的,我們的產(chǎn)品都是基于這個(gè)基本條件下進(jìn)行搭建使用的,因此對(duì)于環(huán)境的了解,原理的學(xué)習(xí),對(duì)于我們后續(xù)問(wèn)題排查,產(chǎn)品問(wèn)題定位都是有所幫助的。
集群架構(gòu)其核心思想是讓 K8S master 節(jié)點(diǎn)中的各類組件具備高可用性,消除單點(diǎn)故障。
1.kube-apiserver:對(duì)外暴露了 K8S API,是整個(gè)集群的訪問(wèn)入口。由于 apiserver 本身無(wú)狀態(tài),可以通過(guò)啟動(dòng)多個(gè)實(shí)例并結(jié)合負(fù)載均衡器實(shí)現(xiàn)高可用。
2.etcd:用于存儲(chǔ) K8S 集群的網(wǎng)絡(luò)配置和對(duì)象的狀態(tài)信息,是整個(gè)集群的數(shù)據(jù)中心??梢酝ㄟ^(guò)啟動(dòng)奇數(shù)個(gè) etcd 實(shí)例建立一個(gè)冗余的,可靠的數(shù)據(jù)存儲(chǔ)層。
3.kube-scheduler:為新創(chuàng)建的 pod 選擇一個(gè)供他們運(yùn)行的節(jié)點(diǎn)。一個(gè)集群只能有一個(gè)活躍的 kube-scheduler 實(shí)例,可以同時(shí)啟動(dòng)多個(gè) kube-scheduler 并利用領(lǐng)導(dǎo)者選舉功能實(shí)現(xiàn)高可用。
4.kube-controller-manager:集群內(nèi)部的管理控制中心。一個(gè)集群只能有一個(gè)活躍的 kube-controller-manager 實(shí)例,可以同時(shí)啟動(dòng)多個(gè) kube-controller-manager 并利用領(lǐng)導(dǎo)者選舉功能實(shí)現(xiàn)高可用。
另外,構(gòu)建集群時(shí)還需要注意下列問(wèn)題。
1)節(jié)點(diǎn)上 K8S 進(jìn)程的可靠性。需要讓 kubelet、kube-scheduler、kube-controller-manager 等進(jìn)程在出現(xiàn)故障后能自動(dòng)重啟。
2)為 worker node 中的非 pod 進(jìn)程預(yù)留資源,防止他們將與 pod 爭(zhēng)奪資源導(dǎo)致節(jié)點(diǎn)資源短缺。
部署架構(gòu)目前提供了5臺(tái)服務(wù)器,供開(kāi)發(fā)和測(cè)試環(huán)境使用,具體分配情況已經(jīng)使用情況如如下:
進(jìn)行配置前一些必要內(nèi)容的處理,包括主機(jī)名的修改,網(wǎng)絡(luò)調(diào)整、以及系統(tǒng)配置、安全策略等的調(diào)整,保證后續(xù)安裝過(guò)程中的順利進(jìn)行。
1.協(xié)調(diào)虛擬IP
部署高可用環(huán)境,需要兩個(gè)虛擬IP的支持,一個(gè)用作內(nèi)部集群的使用,另一個(gè)是用作外部集群使用,因此在與客戶交互之初,就要協(xié)調(diào)好虛擬IP的網(wǎng)絡(luò)情況,以便后續(xù)我們可以直接使用。
我們這邊拿到的兩個(gè)IP分別為122和123,整理我用122作為了內(nèi)部集群,123為外部的集群。
2.修改主機(jī)名稱
設(shè)置主機(jī)名,添加主機(jī)名與IP對(duì)應(yīng)關(guān)系,如下:
修改5臺(tái)虛擬機(jī)的hosts文件:
3.修改安全策略
安全策略的處理包括兩個(gè)位置,一個(gè)是關(guān)閉selinux,一個(gè)是調(diào)整防火墻的策略,保證系統(tǒng)訪問(wèn)安全,同時(shí)保證后續(xù)部署過(guò)程中不會(huì)受到安全限制。
> > > > 關(guān)閉selinux
> > > > 防火墻處理
調(diào)整防火墻的端口,如下:
防火墻白名單添加,如下:
上述調(diào)整完成之后,將防火墻進(jìn)行重啟:
4.修改網(wǎng)絡(luò)映射
將橋接的IPv4流量傳遞到iptables的鏈:
添加完畢后執(zhí)行生效,如下:
5.其他系統(tǒng)配置
調(diào)整關(guān)閉swap,方法如下:
同時(shí)調(diào)整時(shí)間同步,啟動(dòng)chronyd系統(tǒng)服務(wù)(需要檢查客戶給出的服務(wù)器時(shí)間是否一致,不一致要進(jìn)行調(diào)整),方法如下:
針對(duì)不是容器里面處理的產(chǎn)品,我們要進(jìn)行部署,因?yàn)閁MC產(chǎn)品是需要部署到容器外的,所以支持UMC的相關(guān)中間件也是要部署到環(huán)境上的,包括redis、nginx以及keepalived。
1.redis部署
> > > > 前置條件
1.更新linux自帶的gcc 與make。
安裝完成后會(huì)有提示“完畢!”并自動(dòng)返回到命令行。
2.如果wget提示無(wú)此命令,安裝wget。
1)檢查wget是否安裝:
如下顯示則已經(jīng)安裝:
如果沒(méi)有顯示則表示沒(méi)有安裝,需要通過(guò)以下命令安裝;
> > > > 安裝步驟
安裝命令如下:
注意:其他服務(wù)器安裝方式和這個(gè)相同。
> > > > 配置Redis
1.在server1機(jī)器上 /usr/local/redis-5.0.4 目錄下創(chuàng)建 redis_cluster 目錄。
命令如下:
2.在 redis_cluster 目錄下,創(chuàng)建名為7000、7001的目錄,并將 redis.conf 拷貝到這三個(gè)目錄中。
命令如下:
上方使用的是絕對(duì)路徑進(jìn)行復(fù)制,也可使用相對(duì)路徑進(jìn)行復(fù)制命令(需要在新建的redis_cluster目錄下進(jìn)行操作)如下:
3.分別修改這三個(gè)配置文件,修改如下內(nèi)容。
注意備份:cp /usr/local/redis-5.0.4/redis_cluster/7000/redis.conf /usr/local/redis-5.0.4/redis_cluster/7000/redis.conf.bak
注意:其他服務(wù)器于此部署類似。
> > > > 啟動(dòng)Redis
全部修改完畢后,在第一臺(tái)機(jī)器上執(zhí)行,啟用Redis節(jié)點(diǎn),以下命令:
注意:如果關(guān)閉xshell后redis進(jìn)程停止了,則用下命命令啟動(dòng):
第二臺(tái)機(jī)器上執(zhí)行,啟用Redis節(jié)點(diǎn),以下命令:
第三臺(tái)機(jī)器上執(zhí)行,啟用Redis節(jié)點(diǎn),以下命令:
> > > > Redis集群
在server1上執(zhí)行。
> > > > Redis驗(yàn)證
server1執(zhí)行:
之后左側(cè)變成“XXX.XXX.X.241:7000>”表示進(jìn)入了Redis的節(jié)點(diǎn)之后:
回顯顯示設(shè)置值成功:
同樣在server2執(zhí)行。
查看Redis中的信息。
同時(shí)可以通過(guò)確認(rèn)集群信息也可以在這里執(zhí)行:
cluster info //查看集群信息。
cluster nodes //查看節(jié)點(diǎn)信息。
如果集群報(bào)錯(cuò),可以通過(guò)在每個(gè)節(jié)點(diǎn)下做以下兩個(gè)命令;然后重新創(chuàng)建集群。
flushall //清空
cluster reset //重置集群
2.nginx部署
> > > > 前置條件
Nginx需要很多前置包,所以在安裝nginx前需要更新前置安裝包。
> > > > 步驟說(shuō)明
1.將nginx安裝包上傳到,/usr/local目錄中,如下:
2.解壓這三個(gè)安裝包:
3.接著進(jìn)入 nginx-1.14.2目錄中;
進(jìn)行編譯安裝:
編譯:
這樣代表nginx已經(jīng)編譯安裝完成。
可以通過(guò)以下命令檢測(cè)Nginx是否安裝完成:
> > > > 啟動(dòng)nginx
重啟命令:
3.keepalived部署
> > > > 安裝步驟
1.通過(guò)以下命令安裝Keepalived。
2.設(shè)置為系統(tǒng)服務(wù)。
修改keepalived配置,主從機(jī)不同的地方通過(guò)黃色高亮顯示:
注意備份:cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
根據(jù)下文進(jìn)行配置:
注意:5臺(tái)都要部署,分為兩組,一組為master1、master2、master3組成的一個(gè)虛擬IP,一組是由worker1、woeker2組成的一個(gè)虛擬IP。
> > > > 啟停服務(wù)
開(kāi)啟:systemctl start keepalived.service。
軟件安裝部分,特指部署K8S所涉及的相關(guān)軟件內(nèi)容,通過(guò)部署這些軟件內(nèi)容,實(shí)現(xiàn)K8S的功能建立實(shí)現(xiàn)。
1.安裝haproxy
1.安裝。
2.修改haproxy配置。
黃色:服務(wù)器機(jī)器名
綠色:服務(wù)器ip
3.開(kāi)機(jī)默認(rèn)啟動(dòng)haproxy,開(kāi)啟服務(wù)。
4.檢查服務(wù)端口情況。
查看haproxy狀態(tài):
注意:如果出現(xiàn)啟動(dòng)失敗情況,顯示不能綁定IP,系統(tǒng)文件處理添加如下:
注意:所有master服務(wù)器都要進(jìn)行部署配置。
2.安裝Docker
注意:所有服務(wù)器都要進(jìn)行部署。
3.添加阿里云UUM軟件源
在/etc/yum.repos.d目錄下vi kubernetes.repo
復(fù)制如下代碼直接執(zhí)行即可。
注意:所有服務(wù)器都要安裝。
4.安裝kubeadm、kubelet、kubectl
> > > > 安裝方法
5.修改Cgroup Driver
修改cgroup driver是為了消除初始化集群時(shí)提示的告警:
查看:
docker info | grep Cgroup
編輯service文件:
追加下方紅色字體代碼:
重新加載docker:
再次查看:
docker info | grep Cgroup
以下內(nèi)容主要就是針對(duì)master和worker的加入,構(gòu)建內(nèi)部集群。
1.部署Master
在master1上,準(zhǔn)備集群配置文件,在/opt目錄下創(chuàng)建kubeadm-config.yaml。
1.kubernetes拉取鏡像。
注意:如果服務(wù)器斷網(wǎng),需要提前加載鏡像包,上傳服務(wù)器之后,通過(guò)
的方式加載鏡像,鏡像列表如下(可以通過(guò):docker images命令查詢)。
2.執(zhí)行節(jié)點(diǎn)初始化。
3.Master初始化完畢后最下面這個(gè)必須記錄下來(lái),后面node服務(wù)器加入需要用到。
按提示執(zhí)行命令:
4.查看:
kubectl get nodes
kubectl get pods -n kube-system
注意:node現(xiàn)在是NotReady狀態(tài),pod中coredns是Pending狀態(tài),是因?yàn)镃NI網(wǎng)絡(luò)插件未安裝,繼續(xù)以下步驟。
2.CNI網(wǎng)絡(luò)插件
安裝flannel:
安裝結(jié)果:
查看pods:
kubectl get pods -n kube-system
如果網(wǎng)絡(luò)不通,使用flanneld-v0.12.0-amd64.docker手動(dòng)在所有節(jié)點(diǎn)安裝:
安裝所需要的文件如下:
3.加入master節(jié)點(diǎn)
在master2和master3上執(zhí)行,向集群添加新master節(jié)點(diǎn),執(zhí)行在kubeadm init輸出的kubeadm join命令:這個(gè)在master init初始化時(shí)會(huì)有提示,更換為自己的IP和token。
查看:
可以看到,集群中已經(jīng)有3臺(tái)master節(jié)點(diǎn)了。
4.加入node節(jié)點(diǎn)
在woker1和worker2執(zhí)行,向集群添加新節(jié)點(diǎn),執(zhí)行在kubeadm init輸出的kubeadm join命令:這個(gè)在master init初始化時(shí)會(huì)有提示,更換為自己的IP和token。
到master節(jié)點(diǎn)查看node狀態(tài),都顯示ready:
5.配置Ingress-nginx
> > > > 鏡像上傳
把nginx-ingress.tar上傳到各個(gè)master上,路徑自己能找到就行(如果下面的mandatory.yaml里配置指定master,這里可以只放到指定的master就可以),導(dǎo)入鏡像:
> > > > YAML修改
1)編輯添加212行,表示使用主機(jī)網(wǎng)絡(luò)。
hostNetwork: true
關(guān)于上面yaml文件中寫(xiě)入的“hostNetwork: true”具體解釋:如果添加了此字段,意味著pod中運(yùn)行的應(yīng)用可以直接使用node節(jié)點(diǎn)端口,這樣node節(jié)點(diǎn)主機(jī)所在網(wǎng)絡(luò)的其他主機(jī),就可以通過(guò)訪問(wèn)該端口來(lái)訪問(wèn)此應(yīng)用。(類似于docker映射到宿主機(jī)的端口。)
2)編輯221行,修改鏡像版本,改成上面導(dǎo)入的0.29.0。
上傳到master服務(wù)器,路徑自己能找到就行。
3)設(shè)置pod時(shí)間,通常情況云服務(wù)器的時(shí)區(qū)為世界標(biāo)準(zhǔn)時(shí)間,和中國(guó)標(biāo)準(zhǔn)時(shí)間相差8個(gè)小時(shí)。
加入紅框部分,如下圖:
參考模板文件如下:
> > > > 允許master節(jié)點(diǎn)部署pod
因?yàn)閕ngress-controller我們需要部署到master服務(wù)器上,而默認(rèn)master不允許部署pod,所以使用如下方法解決:
輸出如下:
node “K8S” untainted
輸出error: taint “node-role.kubernetes.io/master:” not found錯(cuò)誤忽略。
> > > > 執(zhí)行mandatory.yaml
kubectl apply -f mandatory.yaml
> > > > 確認(rèn)Ingress-nginx容器
確認(rèn)Ingress-nginx容器正常運(yùn)行:
kubectl get pod -n ingress-nginx -o wide
> > > > 開(kāi)啟指定變量
上傳文件configmap.yaml,然后調(diào)整相應(yīng)參數(shù),在該目錄下執(zhí)行以下命令
kubectl apply -f configmap.yaml。
1.內(nèi)部ingress-nginx,data參數(shù)說(shuō)明:
1)proxy-add-original-uri-header: "true"
作用:獲取到ingress的完整路徑。
2)enable-underscores-in-headers: "true"
作用:允許ingress支持自定義變量。
3)use-forwarded-headers: "true"
作用:獲取X-Forwarded-Proto,如https。
6.drdb高可用
> > > > 安裝相關(guān)支撐程序
在master1和master2安裝
到 http://oss.linbit.com/drbd 下載drbd-9.0.19-1.tar.gz、drbd-utils-9.12.1.tar.gz,再將drbd-9.0.19-1.tar.gz、drbd-utils-9.12.2.tar.gz上傳到虛擬機(jī)/usr/local目錄,再裝一些支撐軟件。
安裝po4a-translate,編譯drbd-utils的rpm包的時(shí)候,需要有命令【po4a-translate】的支持,但是系統(tǒng)上并沒(méi)有這個(gè)命令。
> > > > 編譯drbd-utils
> > > > 編譯drbd
> > > > 安裝drbd模塊
> > > > 查看drbd版本及路徑
> > > > 新磁盤(pán)分區(qū)
> > > > 配置drbd資源文件
vi /etc/drbd.d/drbd.res
> > > > 配置資源
> > > > 設(shè)置主節(jié)點(diǎn)
強(qiáng)制設(shè)置為主節(jié)點(diǎn),在任一節(jié)點(diǎn)上執(zhí)行:
再次查看:
drbdadm status
看到此時(shí)數(shù)據(jù)的狀態(tài)為UpToDate(數(shù)據(jù)正在同步,單未完全同步),且已經(jīng)同步42.28
主:
副:
> > > > 格式化新分區(qū)并掛載
查看:
lsblk
> > > > 設(shè)置drbd開(kāi)機(jī)啟動(dòng)
7.NFS配置
針對(duì)NFS進(jìn)行服務(wù)端和客戶端的處理,通過(guò)客戶端和服務(wù)端的關(guān)系,保證客戶端可以訪問(wèn)服務(wù)端。
> > > > NFS服務(wù)端配置
1.安裝NFS和rpc:
2.啟動(dòng)服務(wù)和設(shè)置開(kāi)啟啟動(dòng):
3.建立共享文件夾:
4.設(shè)置共享:
5.啟動(dòng)NFS:
6.查看2049端口是否打開(kāi):
> > > > NFS客戶端配置
1.在worker1和worker2也安裝nfs,確保每個(gè)節(jié)點(diǎn)安裝nfs(客戶端上不需要啟動(dòng)nfs服務(wù),只是為了使用showmount工具):
2.查看掛載配置:
3.在worker1上測(cè)試掛載是否成功:
掛載失敗提示如下:
取消掛載:
4.在客戶端創(chuàng)建目錄,并掛載共享目錄:
5.檢查(有就行,和順序無(wú)關(guān)):
8.鏡像庫(kù)搭建
鏡像庫(kù)主要進(jìn)行存儲(chǔ)鏡像信息,
文章題目:cp網(wǎng)站搭建(cp網(wǎng)站搭建開(kāi)發(fā))
瀏覽地址:http://jinyejixie.com/news22/323522.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、定制網(wǎng)站、服務(wù)器托管、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容