器版部署Rancher避坑指南:Kubernetes管理平臺(tái)搭建)
上個(gè)月接了個(gè)活兒某單位一臺(tái)基于UOS服務(wù)器版的機(jī)器要求把Rancher部署上去用來(lái)接管后面新建的Kubernetes集群。一開(kāi)始我覺(jué)得這不算難——Rancher官方文檔寫(xiě)得很清楚Docker跑一個(gè)容器就完事。但實(shí)際動(dòng)手后發(fā)現(xiàn)UOS這套系統(tǒng)和普通的Ubuntu、CentOS還是有些不一樣的地方從軟件源到內(nèi)核參數(shù)再到內(nèi)網(wǎng)證書(shū)處處有坑。這篇文章就把我踩過(guò)的坑和最終跑通的完整路徑整理出來(lái)給要在國(guó)產(chǎn)操作系統(tǒng)上部署Rancher的朋友做個(gè)參考。先說(shuō)明一下適合誰(shuí)看如果你需要在UOS上搭一個(gè)Kubernetes管理平臺(tái)、要給業(yè)務(wù)方提供可視化的集群管理界面或者正在做內(nèi)網(wǎng)離線交付這篇文章基本可以照著操作。文中涉及的命令我都盡量給出完整版和逐參數(shù)解釋不只會(huì)告訴你“怎么跑通”還會(huì)說(shuō)清楚“為什么這么配”。1. 為什么有人要在UOS上裝Rancher先看清這個(gè)組合的價(jià)值1.1 UOS和Rancher各自解決什么問(wèn)題UOS是國(guó)產(chǎn)Linux操作系統(tǒng)服務(wù)器版主要跑在政務(wù)、金融、教育這些對(duì)自主可控有要求的場(chǎng)景里。它底層基于Debian體系用apt管理軟件包所以很多Debian系的經(jīng)驗(yàn)可以直接遷移過(guò)來(lái)但又不完全一樣軟件源是自有的內(nèi)核版本相對(duì)保守默認(rèn)啟用的安全模塊也和社區(qū)版有差異。Rancher則是Kubernetes的圖形化管理平臺(tái)。裸K8s最大的問(wèn)題就是管理門檻高裝好了還要面對(duì)一堆YAML、證書(shū)、Node節(jié)點(diǎn)狀態(tài)業(yè)務(wù)方一看就頭大。Rancher把這些東西封裝成了網(wǎng)頁(yè)操作創(chuàng)建集群、導(dǎo)入集群、部署應(yīng)用、看監(jiān)控日志、做權(quán)限隔離都能點(diǎn)鼠標(biāo)完成。把Rancher部署在UOS上等于在國(guó)產(chǎn)化的基礎(chǔ)上補(bǔ)齊了容器編排的運(yùn)維能力這在很多信創(chuàng)項(xiàng)目里是剛需。1.2 我在實(shí)際中遇到的三種部署訴求接需求的時(shí)候?qū)Ψ讲](méi)有說(shuō)得很細(xì)我在現(xiàn)場(chǎng)梳理下來(lái)大致是三類第一類先在一臺(tái)UOS上把Rancher Server跑起來(lái)后面再慢慢納管其他集群第二類整機(jī)離線機(jī)器不能上外網(wǎng)所有鏡像都得拷進(jìn)去第三類要求提供可重復(fù)執(zhí)行的部署文檔方便以后換機(jī)器重新部署。這三種訴求對(duì)應(yīng)的路徑不太一樣。第一種最簡(jiǎn)單在線拉鏡像就行第二種要花大力氣解決鏡像搬運(yùn)和私有倉(cāng)庫(kù)的問(wèn)題第三種則要求整個(gè)流程腳本化、參數(shù)化。下面我會(huì)按線上環(huán)境為主線來(lái)講離線部分單獨(dú)開(kāi)一節(jié)因?yàn)槟鞘遣瓤幼疃嗟沫h(huán)節(jié)。2. 環(huán)境準(zhǔn)備版本核對(duì)、內(nèi)核參數(shù)與容器運(yùn)行時(shí)選型2.1 先跑三個(gè)命令確認(rèn)機(jī)器底子部署前千萬(wàn)別急著裝Docker先確認(rèn)三件事系統(tǒng)版本、內(nèi)核版本、架構(gòu)。UOS服務(wù)器版常見(jiàn)的是v20系列內(nèi)核一般在4.19左右架構(gòu)通常是x86_64也有不少ARM機(jī)器。用下面三條命令看cat /etc/os-release uname -r uname -m我遇到的那臺(tái)機(jī)器是x86_64內(nèi)核4.19跑Rancher 2.7系列完全沒(méi)問(wèn)題。需要注意一點(diǎn)如果你的Rancher版本很新比如2.9、2.10開(kāi)始的部分特性對(duì)內(nèi)核和容器運(yùn)行時(shí)版本有更高要求建議先去官方release note里核對(duì)一下最低內(nèi)核版本。4.19跑老一點(diǎn)但還在維護(hù)期的2.7.x是最穩(wěn)妥的搭配。另外磁盤規(guī)劃是個(gè)容易被忽略的環(huán)節(jié)。Rancher的數(shù)據(jù)全部寫(xiě)在/var/lib/rancher目錄下包括配置、證書(shū)、etcd快照等。我習(xí)慣把數(shù)據(jù)目錄單獨(dú)掛一塊盤或者至少確保這個(gè)分區(qū)剩余空間在20GB以上。容器日志、鏡像、下游集群的kubeconfig都會(huì)堆在上面真到磁盤寫(xiě)滿的時(shí)候Rancher的表現(xiàn)是各種莫名其妙的報(bào)錯(cuò)排查起來(lái)非常被動(dòng)。2.2 Docker還是containerd單節(jié)點(diǎn)場(chǎng)景的選擇邏輯容器運(yùn)行時(shí)選哪個(gè)很多人會(huì)糾結(jié)。Rancher Server本身是作為一個(gè)容器跑起來(lái)的官方最推薦的單節(jié)點(diǎn)部署方式就是用Docker啟動(dòng)Rancher容器如果你走K3s或者RKE2的路子那用的是containerd。單節(jié)點(diǎn)部署Rancher Server我建議直接用Docker理由很實(shí)際排障簡(jiǎn)單docker logs、docker inspect這些命令大家都熟升級(jí)就是換個(gè)鏡像重新起容器邏輯直白Docker的生態(tài)和文檔也最全。containerd不是不能用只是當(dāng)你只想快速把Rancher跑起來(lái)時(shí)沒(méi)必要多繞一層。UOS上裝Docker有兩條路一是直接apt裝軟件源里的版本優(yōu)點(diǎn)是命令簡(jiǎn)單缺點(diǎn)是版本經(jīng)常偏舊可能低于Rancher要求的最低版本二是下載官方靜態(tài)包手動(dòng)安裝優(yōu)點(diǎn)是最新、可控缺點(diǎn)是要自己處理systemd服務(wù)文件。我實(shí)際用的是離線deb包方式具體操作在下一節(jié)展開(kāi)。2.3 初始化系統(tǒng)參數(shù)swap、時(shí)間同步、文件句柄裝完Docker先別急著拉鏡像有幾個(gè)系統(tǒng)參數(shù)先改了不然后面K8s集群初始化的時(shí)候會(huì)翻車。第一swap建議關(guān)掉。Kubernetes默認(rèn)要求節(jié)點(diǎn)上的swap是關(guān)閉狀態(tài)雖然這個(gè)要求主要針對(duì)下游集群的節(jié)點(diǎn)但Rancher Server所在的機(jī)器順手也關(guān)了省得后面出幺蛾子swapoff -a sed -i s/.*swap.*/#/ /etc/fstab第二開(kāi)啟IPv4轉(zhuǎn)發(fā)。容器和Pod之間的流量依賴這個(gè)參數(shù)默認(rèn)可能是0echo net.ipv4.ip_forward 1 /etc/sysctl.conf sysctl -p第三時(shí)間同步必須做。Rancher和K8s之間的通信很依賴時(shí)間一致性證書(shū)校驗(yàn)、token校驗(yàn)全都建立在時(shí)間正確的前提上。UOS服務(wù)器版一般自帶chrony但很多內(nèi)網(wǎng)機(jī)器沒(méi)配好NTP源我見(jiàn)過(guò)因?yàn)闀r(shí)間差了五分鐘導(dǎo)致Rancher頁(yè)面能開(kāi)、下游集群怎么都注冊(cè)不上的情況。建議盡早確認(rèn)chronyc sources -v date如果時(shí)間不對(duì)配好NTP源然后用systemctl restart chronyd重啟服務(wù)。這一步成本最低卻是最容易埋雷的。3. Docker單節(jié)點(diǎn)部署Rancher Server命令級(jí)拆解3.1 安裝Docker的兩種路徑與源的選擇在線環(huán)境下UOS的默認(rèn)軟件源如果已經(jīng)收錄了docker.io有些版本確實(shí)有直接apt-get update apt-get install -y docker.io systemctl enable --now docker這個(gè)方式適合快速驗(yàn)證但版本可能只有20.10左右跑Rancher 2.6及以上夠用。如果你對(duì)版本有要求也可以添加Docker官方的apt源來(lái)裝docker-ce不過(guò)這要求機(jī)器能訪問(wèn)外網(wǎng)內(nèi)網(wǎng)環(huán)境就得走離線包了。離線裝Docker的辦法是在一臺(tái)能聯(lián)網(wǎng)的同架構(gòu)機(jī)器上下載docker-ce的deb包包括containerd.io、docker-ce-cli、docker-ce這幾個(gè)依賴然后拷貝到UOS上執(zhí)行dpkg -i containerd.io_*.deb docker-ce-cli_*.deb docker-ce_*.deb依賴不全會(huì)報(bào)錯(cuò)缺什么就用apt-get install -f補(bǔ)齊。裝完驗(yàn)證一下docker version systemctl status docker這里有個(gè)實(shí)操細(xì)節(jié)UOS默認(rèn)可能啟用了AppArmor如果后面容器啟動(dòng)行為異常先看一眼dmesg | grep -i apparmor有時(shí)候需要給Docker的systemd服務(wù)額外加上容器的profile配置。不過(guò)多數(shù)情況下Rancher容器不會(huì)撞上這個(gè)先有個(gè)印象就行。3.2 啟動(dòng)Rancher的標(biāo)準(zhǔn)命令逐參數(shù)說(shuō)明Docker就緒后核心就是這一條命令docker run -d \ --name rancher \ --restartunless-stopped \ -p 80:80 \ -p 443:443 \ -v /data/rancher:/var/lib/rancher \ rancher/rancher:v2.7.9我逐個(gè)拆一下參數(shù)你就不用來(lái)回翻文檔了--name rancher容器名字后面查看日志、停止、刪除都用它。--restartunless-stopped機(jī)器重啟后容器自動(dòng)拉起除非手動(dòng)stop這是生產(chǎn)環(huán)境必須加的。-p 80:80 -p 443:443把宿主機(jī)的80和443映射到容器內(nèi)。Rancher的UI默認(rèn)走44380端口的用途是做HTTP到HTTPS的跳轉(zhuǎn)。如果你的UOS機(jī)器上已經(jīng)裝了Nginx或其他Web服務(wù)占了80/443這里要改端口比如-p 8080:80 -p 8443:443但后面訪問(wèn)地址也要跟著變。-v /data/rancher:/var/lib/rancher數(shù)據(jù)持久化。宿主機(jī)目錄建議用絕對(duì)路徑我習(xí)慣單獨(dú)建/data/rancher而不是默認(rèn)的/var/lib/rancher因?yàn)橄到y(tǒng)盤空間往往緊張單獨(dú)掛數(shù)據(jù)盤更靈活。rancher/rancher:v2.7.9鏡像名加版本標(biāo)簽。最好不要直接用latest版本固定下來(lái)升級(jí)和回滾都清楚。有些教程會(huì)加--privileged我個(gè)人不建議單節(jié)點(diǎn)Rancher Server這么干權(quán)限給太寬了出安全問(wèn)題難交代。Rancher容器本身不需要特權(quán)模式就能正常工作。3.3 初始化流程與Server URL的意義容器起來(lái)之后先看日志確認(rèn)啟動(dòng)進(jìn)度docker logs -f rancher看到類似“Rancher has been provisioned”之類字樣說(shuō)明初始化得差不多了然后瀏覽器訪問(wèn)https://UOS服務(wù)器IP/。第一次打開(kāi)會(huì)要求設(shè)置admin密碼還會(huì)彈一個(gè)Rancher Server URL的配置項(xiàng)。這個(gè)Server URL非常關(guān)鍵。它會(huì)被寫(xiě)進(jìn)kubeconfig和集群agent的連接信息里下游集群全靠這個(gè)地址回調(diào)Rancher Server。內(nèi)網(wǎng)環(huán)境就填https://IP:443或者你規(guī)劃的域名別填localhost也別填一個(gè)別人訪問(wèn)不到的內(nèi)網(wǎng)地址。我見(jiàn)過(guò)一個(gè)人填了公網(wǎng)域名結(jié)果內(nèi)網(wǎng)解析不到整整排查了一下午。初始化完成后主界面能看到“Add Cluster”、“Import Existing”等入口。到這里單節(jié)點(diǎn)的Rancher Server就算立起來(lái)了。但如果你后續(xù)要納管集群建議先做一件事把Rancher的system default registry設(shè)置好否則后面導(dǎo)入新集群時(shí)每個(gè)節(jié)點(diǎn)還要單獨(dú)配鏡像加速非常痛苦。4. 內(nèi)網(wǎng)離線部署才是重頭戲鏡像搬運(yùn)與私有倉(cāng)庫(kù)配置4.1 離線鏡像包的導(dǎo)出與導(dǎo)入很多UOS部署環(huán)境是徹底離線的服務(wù)器不能訪問(wèn)Docker Hub這時(shí)候在線拉鏡像這條路直接堵死。我的做法分兩步找一臺(tái)能聯(lián)網(wǎng)的機(jī)器做中轉(zhuǎn)把需要的鏡像打成tar包再拷進(jìn)UOS用docker load導(dǎo)入。最簡(jiǎn)單的單鏡像搬運(yùn)# 有網(wǎng)機(jī)器上 docker pull rancher/rancher:v2.7.9 docker save -o rancher-v2.7.9.tar rancher/rancher:v2.7.9 # UOS機(jī)器上 docker load -i rancher-v2.7.9.tar但生產(chǎn)環(huán)境遠(yuǎn)不止一個(gè)鏡像。當(dāng)你用Rancher建集群時(shí)它要拉一堆系統(tǒng)組件鏡像比如rancher/mirrored-pause、rancher/mirrored-coredns-coredns、各種kube-proxy、etcd的鏡像。一個(gè)個(gè)手動(dòng)pull/save不現(xiàn)實(shí)。正確做法是使用Rancher官方維護(hù)的離線鏡像清單和腳本。具體思路是在有網(wǎng)機(jī)器上拉取Rancher代碼庫(kù)里的rancher-images.txt配合官方提供的save/load腳本把所有需要的鏡像都導(dǎo)出來(lái)。大致流程是# 有網(wǎng)機(jī)器上執(zhí)行 ./rancher-save-images.sh --image-list ./rancher-images.txt # 會(huì)生成 rancher-images.tar.gz 和 rancher-images.txt然后把這兩個(gè)文件拷貝到UOS上執(zhí)行./rancher-load-images.sh --image-list ./rancher-images.txt --images rancher-images.tar.gzload腳本會(huì)自動(dòng)逐個(gè)docker load你只需要等它跑完。這個(gè)方式我實(shí)測(cè)過(guò)雖然耗時(shí)久幾十個(gè)鏡像每個(gè)都要解壓但比手動(dòng)一個(gè)個(gè)拉靠譜太多。4.2 配置私有鏡像倉(cāng)庫(kù)與registry地址離線環(huán)境只把鏡像load到本地Docker是不夠的因?yàn)镽ancher創(chuàng)建下游集群時(shí)每個(gè)K8s節(jié)點(diǎn)默認(rèn)還是會(huì)去拉公共倉(cāng)庫(kù)的鏡像離線節(jié)點(diǎn)根本拉不到。正解是搭一個(gè)私有鏡像倉(cāng)庫(kù)Harbor或者簡(jiǎn)單的registry容器都行把所有鏡像推上去然后讓Rancher的默認(rèn)拉取地址指向它。在UOS上快速起一個(gè)registry容器docker run -d --name registry \ -p 5000:5000 \ -v /data/registry:/var/lib/registry \ registry:2然后把tar包里的鏡像重新打標(biāo)簽并推送docker tag rancher/rancher:v2.7.9 內(nèi)網(wǎng)IP:5000/rancher/rancher:v2.7.9 docker push 內(nèi)網(wǎng)IP:5000/rancher/rancher:v2.7.9配置Rancher默認(rèn)registry我習(xí)慣在啟動(dòng)容器時(shí)直接注入環(huán)境變量docker run -d --name rancher \ --restartunless-stopped \ -p 80:80 -p 443:443 \ -e CATTLE_SYSTEM_DEFAULT_REGISTRY內(nèi)網(wǎng)IP:5000 \ -v /data/rancher:/var/lib/rancher \ rancher/rancher:v2.7.9每個(gè)人的鏡像命名規(guī)范不同這個(gè)環(huán)境變量主要影響Rancher系統(tǒng)組件鏡像的拉取地址前綴。如果你的私有倉(cāng)庫(kù)上鏡像路徑不是標(biāo)準(zhǔn)的rancher/mirrored-xxx結(jié)構(gòu)就需要在創(chuàng)建集群的高級(jí)設(shè)置里單獨(dú)配置。實(shí)測(cè)下來(lái)最省心的還是保持私有倉(cāng)庫(kù)路徑和官方一致只改成帶IP的完整前綴。4.3 證書(shū)處理內(nèi)網(wǎng)HTTPS信任鏈怎么搭在線部署Rancher默認(rèn)會(huì)給自己簽一個(gè)自簽證書(shū)瀏覽器第一次訪問(wèn)會(huì)跳警告這個(gè)還能接受。但內(nèi)網(wǎng)場(chǎng)景通常有企業(yè)CA或者客戶強(qiáng)制要求用正式證書(shū)這時(shí)候必須在啟動(dòng)時(shí)掛載證書(shū)。方法是在啟動(dòng)Rancher容器時(shí)把證書(shū)和私鑰放到宿主機(jī)的/data/rancher-certs目錄下命名為tls.crt和tls.key然后掛載進(jìn)去docker run -d --name rancher \ --restartunless-stopped \ -p 80:80 -p 443:443 \ -v /data/rancher-certs:/etc/rancher/ssl \ -v /data/rancher:/var/lib/rancher \ rancher/rancher:v2.7.9Rancher會(huì)優(yōu)先讀取/etc/rancher/ssl下的證書(shū)不再使用自簽證書(shū)。這里有個(gè)坑證書(shū)的Common Name一定要和訪問(wèn)的地址匹配包括IP SAN或者域名SAN否則瀏覽器照樣報(bào)錯(cuò)下游集群的agent連接也會(huì)因?yàn)樽C書(shū)校驗(yàn)失敗而注冊(cè)不上。另一個(gè)容易被忽略的是如果用的是企業(yè)內(nèi)網(wǎng)CA簽發(fā)的證書(shū)客戶端機(jī)器上要信任這個(gè)CA。UOS上操作很簡(jiǎn)單cp your-ca.crt /usr/local/share/ca-certificates/ update-ca-certificates這樣本機(jī)的curl、容器、以及其他工具訪問(wèn)Rancher時(shí)就不會(huì)因?yàn)椤癱ertificate signed by unknown authority”而中斷。這個(gè)步驟在部署文檔里經(jīng)常被漏掉但線上環(huán)境幾乎必然遇到。5. UOS特有的坑一套完整排查鏈路5.1 現(xiàn)象一頁(yè)面能開(kāi)下游集群連不上癥狀很明確Rancher頁(yè)面正常打開(kāi)但導(dǎo)入一個(gè)新集群到一半就失敗agent Pod一直Pending或者CrashLoopBackOff。先別查Node從網(wǎng)絡(luò)鏈路看起。第一步確認(rèn)UOS的防火墻狀態(tài)systemctl status firewalld ufw statusUOS服務(wù)器版可能默認(rèn)啟用了ufw也可能沒(méi)有防火墻但有些定制鏡像會(huì)在iptables層面加了限制。最直接的辦法是看443端口是否確實(shí)在監(jiān)聽(tīng)ss -tlnp | grep -E 443|80 iptables -L -n | grep 443我遇到的情況是443端口監(jiān)聽(tīng)正常但iptables FORWARD鏈默認(rèn)DROP導(dǎo)致Rancher訪問(wèn)下游集群的Pod網(wǎng)絡(luò)時(shí)被丟包。這個(gè)坑在Debian系上很典型因?yàn)镈ocker會(huì)往iptables里加規(guī)則但FORWARD鏈的默認(rèn)策略可能還是DROP。臨時(shí)改法iptables -P FORWARD ACCEPT永久生效還是在/etc/sysctl.conf里確認(rèn)net.ipv4.ip_forward1并檢查ufw如果開(kāi)著得放行ufw allow 443/tcp。5.2 現(xiàn)象二Rancher容器反復(fù)重啟這個(gè)問(wèn)題我是在離線導(dǎo)入鏡像時(shí)踩到的。表現(xiàn)為docker ps看到容器狀態(tài)一直在restarting頁(yè)面打不開(kāi)docker logs報(bào)錯(cuò)信息又不明顯。從經(jīng)驗(yàn)看優(yōu)先查三件事一是數(shù)據(jù)卷權(quán)限/data/rancher目錄的所有者必須是root如果之前用別的用戶拷過(guò)數(shù)據(jù)目錄權(quán)限不對(duì)容器起來(lái)就會(huì)崩用chown -R root:root /data/rancher修正二是磁盤空間df -h看看是不是分區(qū)滿了etcd寫(xiě)入失敗時(shí)容器會(huì)不停重啟三是內(nèi)存是否夠用UOS上如果內(nèi)存小于4GB同時(shí)跑Rancher和其他服務(wù)很容易觸發(fā)OOMdmesg | tail或者journalctl -k | grep -i oom能看出來(lái)。我之前一次部署問(wèn)題就出在離線導(dǎo)入鏡像時(shí)磁盤被解壓后的鏡像塞滿Rancher容器寫(xiě)到一半磁盤滿直接OOM。清了/var/lib/docker下沒(méi)用的鏡像和Build緩存重啟Docker再起容器就好了。5.3 現(xiàn)象三時(shí)間不同步導(dǎo)致的證書(shū)報(bào)錯(cuò)癥狀是頁(yè)面偶爾能打開(kāi)但登錄后操作很容易報(bào)401、403或者下游集群的Pod報(bào)x509: certificate has expired or is not yet valid。很多人的第一反應(yīng)是證書(shū)過(guò)期了翻來(lái)覆去找原因結(jié)果發(fā)現(xiàn)系統(tǒng)時(shí)間慢了十分鐘。這在物理機(jī)和內(nèi)網(wǎng)虛擬機(jī)上特別常見(jiàn)CMOS電池沒(méi)電、NTP沒(méi)配通都可能導(dǎo)致時(shí)間漂移。我用一條命令確認(rèn)timedatectl status如果顯示NTP service: inactive或者時(shí)間跟實(shí)際差得遠(yuǎn)立刻配chronyapt-get install -y chrony systemctl enable --now chronyd chronyc makestep等時(shí)間校準(zhǔn)后再訪問(wèn)Rancher證書(shū)問(wèn)題通常就消失了。Rancher對(duì)時(shí)間異常其實(shí)挺敏感的因?yàn)檎麄€(gè)認(rèn)證體系都是基于時(shí)間戳簽發(fā)的token時(shí)間一歪頁(yè)面和你以為的都正常但后端校驗(yàn)就是不通過(guò)。6. 部署完怎么驗(yàn)收驗(yàn)證清單與日常運(yùn)維要點(diǎn)6.1 我的驗(yàn)收清單可直接抄每次部署完我都會(huì)按下面這張清單過(guò)一遍免得交付了才發(fā)現(xiàn)漏配置檢查項(xiàng)操作方式預(yù)期結(jié)果頁(yè)面可訪問(wèn)瀏覽器打開(kāi) https://UOS_IP/出現(xiàn)登錄頁(yè)無(wú)證書(shū)告警或已信任容器穩(wěn)定docker psrancher容器運(yùn)行中無(wú)restarting日志無(wú)異常docker logs rancher --since 10m無(wú)ERROR級(jí)別刷屏數(shù)據(jù)持久化ls /data/rancher能看到配置、證書(shū)、audit日志等目錄時(shí)間同步chronyc tracking顯示已同步時(shí)間偏差小于1秒轉(zhuǎn)發(fā)已開(kāi)啟sysctl net.ipv4.ip_forward輸出1Server URL可回訪在下游節(jié)點(diǎn)curl https://UOS_IP/healthz返回200或類似健康響應(yīng)創(chuàng)建測(cè)試集群頁(yè)面上新建一個(gè)自定義集群集群節(jié)點(diǎn)狀態(tài)Active重點(diǎn)說(shuō)一下/healthz這個(gè)健康檢查路徑Rancher會(huì)返回200在下游節(jié)點(diǎn)上先curl通再去做集群導(dǎo)入能提前攔截百分之八十的網(wǎng)絡(luò)問(wèn)題。6.2 備份與升級(jí)的幾個(gè)實(shí)用經(jīng)驗(yàn)Rancher的備份我推薦在頁(yè)面上裝rancher-backup這個(gè)應(yīng)用它能把Rancher的CRD配置、RBAC、證書(shū)這些打包成壓縮文件支持上傳到S3兼容存儲(chǔ)恢復(fù)的時(shí)候也方便。但UOS離線環(huán)境要先把這個(gè)應(yīng)用的鏡像搬到私有倉(cāng)庫(kù)不然裝不上。如果不想裝應(yīng)用最低成本的備份方式是直接打包數(shù)據(jù)目錄systemctl stop docker # 或者 docker stop rancher tar -czf rancher-backup-$(date %F).tar.gz /data/rancher systemctl start docker注意備份前要么停容器要么確保數(shù)據(jù)目錄沒(méi)有并發(fā)寫(xiě)入否則etcd相關(guān)的文件可能備份出一個(gè)半成品恢復(fù)時(shí)怎么都起不來(lái)。升級(jí)Rancher就三步pull新鏡像、刪掉舊容器保留數(shù)據(jù)卷、用同一套掛載參數(shù)起新容器。官方文檔有明確的升級(jí)路徑切記不要跨大版本跳級(jí)升級(jí)。我上次從2.7升到2.8是直接換鏡像起的數(shù)據(jù)完全保留頁(yè)面提示遷移完成整個(gè)過(guò)程半小時(shí)內(nèi)搞定。當(dāng)然前提是數(shù)據(jù)目錄掛載沒(méi)變、證書(shū)沒(méi)動(dòng)、端口沒(méi)改。還有一個(gè)日常運(yùn)維細(xì)節(jié)Rancher容器所在的主機(jī)名不要隨便改它的kubeconfig和生成的證書(shū)可能包含主機(jī)名信息改完hostname可能導(dǎo)致集群狀態(tài)異常。我在UOS上就遇到過(guò)改了/etc/hostname重啟后Rancher頁(yè)面雖然能開(kāi)但內(nèi)部有些校驗(yàn)開(kāi)始報(bào)不匹配。所以主機(jī)名這種東西部署前定好部署后別動(dòng)。最后分享一個(gè)我自己的習(xí)慣每次部署UOS上的Rancher我都會(huì)先在虛擬機(jī)里完整跑一遍流程把每一步命令的輸出記錄下來(lái)包括docker run的參數(shù)、證書(shū)的路徑、私有倉(cāng)庫(kù)的地址。等上了生產(chǎn)環(huán)境基本就是照著記錄復(fù)現(xiàn)一遍很少出意外。這個(gè)習(xí)慣幫我省了不少半夜值班的麻煩建議你也試試。