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

nodejs前端項(xiàng)目部署到k8s,導(dǎo)致線上故障的排查與解決方法

這篇具有很好參考價(jià)值的文章主要介紹了nodejs前端項(xiàng)目部署到k8s,導(dǎo)致線上故障的排查與解決方法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


前言

因我們的前后端項(xiàng)目都部署在k8s集群中,前端項(xiàng)目采用npm和node管理

事故背景: 某天前端同事在測(cè)試環(huán)境更新完一個(gè)前端服務(wù)后,訪問(wèn)正常,然后按照正常流程上線到生產(chǎn)環(huán)境,但是,在生產(chǎn)環(huán)境更新完成后,測(cè)試同事反饋訪問(wèn)報(bào)502錯(cuò)誤,我就去服務(wù)器排查剛才發(fā)布的服務(wù),檢查pod狀態(tài)是RUNNING狀態(tài),更新時(shí)間也是幾分鐘前,從表面看沒(méi)有問(wèn)題,由此,趕緊回滾鏡像,停止上線,拉開(kāi)問(wèn)題排查與解決之路~


一、從測(cè)試環(huán)境開(kāi)始排查

與前端同事溝通,該前端服務(wù)啟動(dòng)后會(huì)有一個(gè)3001端口

使用命令進(jìn)入到剛才更新的pod中
	kubectl exec -it k8s-xxx-xxx-1960-0 -- /bin/bash
	netstat -lntp |grep 3001
	ps -ef

nodejs前端項(xiàng)目部署到k8s,導(dǎo)致線上故障的排查與解決方法,docker與kubernetes,前端,kubernetes,容器
由上圖所示,測(cè)試環(huán)境的服務(wù)啟動(dòng)后,有對(duì)應(yīng)的端口及進(jìn)程服務(wù),因此我猜測(cè)生產(chǎn)環(huán)境該服務(wù)并未完全啟動(dòng)導(dǎo)致更新后報(bào)502問(wèn)題

二、生產(chǎn)環(huán)境排查

1.復(fù)制對(duì)應(yīng)服務(wù)的deployment、svc、ingress的 yaml文件,修改服務(wù)名、鏡像,然后手動(dòng)進(jìn)行發(fā)布

2. 發(fā)布之后訪問(wèn)還是502,然后采用測(cè)試環(huán)境的排查方法,最終確認(rèn)該服務(wù)pod啟動(dòng)后,對(duì)應(yīng)的端口、進(jìn)程都沒(méi)啟動(dòng),懷疑是假啟動(dòng),但是pod是RUNNING的,給人造成了迷惑

3.進(jìn)入到該容器中

	kubectl exec -it k8s-xxx-xxx-2360-0 -- /bin/bash
	netstat -lntp |grep 3001
	ps -ef

發(fā)現(xiàn)服務(wù)并未啟動(dòng),也沒(méi)有相關(guān)進(jìn)程

4.在容器中手動(dòng)執(zhí)行啟動(dòng)命令

FROM node:12.19.0
WORKDIR /output
COPY ./output /output
EXPOSE 3001
ENV NODE_ENV=production
CMD nohup npm run start >out.log 2>&1 && tail -f out.log
根據(jù)dockerfile找到對(duì)應(yīng)的啟動(dòng)命令,手動(dòng)啟動(dòng)
	npm run start
	再次檢查,發(fā)現(xiàn)服務(wù)能正常啟動(dòng),且訪問(wèn)正常

至此,已確認(rèn)問(wèn)題: 生產(chǎn)環(huán)境502問(wèn)題是因?yàn)榉?wù)啟動(dòng)造成的,那么具體未啟動(dòng)的原因是什么?請(qǐng)看下面描述

經(jīng)過(guò)在網(wǎng)上查找相關(guān)問(wèn)題、以及問(wèn)其他前端同事,最終確認(rèn)是因?yàn)閜m2導(dǎo)致環(huán)境變量過(guò)多引起的。K8S啟動(dòng)時(shí)會(huì)給容器注入環(huán)境變量,K8S集群中的項(xiàng)目數(shù)越多,環(huán)境變量也就越多。使用PM2進(jìn)行node進(jìn)程的管理會(huì)在啟動(dòng)時(shí)會(huì)導(dǎo)入系統(tǒng)中的環(huán)境變量,當(dāng)環(huán)境變量數(shù)量過(guò)多時(shí),就會(huì)導(dǎo)致服務(wù)啟動(dòng)失敗。

nodejs前端項(xiàng)目部署到k8s,導(dǎo)致線上故障的排查與解決方法,docker與kubernetes,前端,kubernetes,容器

5.檢查測(cè)試環(huán)境與生產(chǎn)環(huán)境該服務(wù)中的環(huán)境變量個(gè)數(shù)

5.1、進(jìn)入測(cè)試環(huán)境該服務(wù)的容器中,執(zhí)行 env |grep wc -l命令,如下圖所示,總共396個(gè)環(huán)境變量,比較少

nodejs前端項(xiàng)目部署到k8s,導(dǎo)致線上故障的排查與解決方法,docker與kubernetes,前端,kubernetes,容器

5.2、進(jìn)入生產(chǎn)環(huán)境該服務(wù)的容器中,執(zhí)行 env |grep wc -l命令,如下圖所示,共有2594個(gè)環(huán)境變量

nodejs前端項(xiàng)目部署到k8s,導(dǎo)致線上故障的排查與解決方法,docker與kubernetes,前端,kubernetes,容器

6.解決方法

方法一、

和研發(fā)確認(rèn)不相干的環(huán)境變量,然后修改啟動(dòng)腳本,添加要取消掉的相關(guān)變量 A_BJ01|B_BJ01|EXPO_|10,如下所示 在pm2啟動(dòng)前清除系統(tǒng)中的環(huán)境變量

#!/bin/sh
cd "$(dirname $0)"/.. || exit 1
echo "$(dirname $0)"
PROC_NAME='xxx'

help(){
    echo "${0} <start|stop|restart|status>"
    exit 1
}

status(){
    wcx=`ps -eo "command" | grep PM2 | wc -l`
    if [ $wcx == 1 ]; then
        status="offline"
    else
        status="online"
    fi
    echo $status
    if [ X"$status" == X"online" ]; then
        return 0
    else
        return 1
    fi
}

start(){
#修改A_BJ01|B_BJ01|EXPO_|10此處變量即可
    for i in `env | grep -E -i 'A_BJ01|B_BJ01|EXPO_|10' | sed 's/=.*//'` ; do
       unset $i
    done
    NODE_ENV=production
    pm2 start
    sleep 3
    status
}

請(qǐng)根據(jù)自己環(huán)境中的變量進(jìn)行修改,不可直接粘貼使用
讓研發(fā)同事將該腳本上傳到對(duì)應(yīng)的代碼倉(cāng)庫(kù),重新進(jìn)行CICD操作,然后檢查對(duì)應(yīng)的服務(wù)端口和進(jìn)程以及環(huán)境變量,發(fā)現(xiàn)啟動(dòng)成功,完美解決問(wèn)題。

方法二、

在報(bào)錯(cuò)服務(wù)的deployment.spec.template.spec模塊下添加如下內(nèi)容,其中enableServiceLinks 表示是否將 Service 的相關(guān)信息注入到 Pod 的環(huán)境變量中,默認(rèn)是 true:
enableServiceLinks: false


總結(jié)

以上就是今天要分享的內(nèi)容,也是第一次遇到這個(gè)問(wèn)題,主要是不熟悉前端node和pm2,解決方法也是網(wǎng)上找方案及問(wèn)同事,不過(guò)最終還是有用。在解決完上線問(wèn)題后,前端同事本地調(diào)試pm2,打印打console.log,也發(fā)現(xiàn)是環(huán)境變量參數(shù)的長(zhǎng)度異常,最終定位是process.env會(huì)獲取操作系統(tǒng)的所有變量,造成process.env多達(dá)70000以上字節(jié)長(zhǎng)度。占了99%的process.env長(zhǎng)度,并且皆為無(wú)用變量。因此,為了避免生產(chǎn)和測(cè)試環(huán)境再次出現(xiàn)該問(wèn)題,對(duì)每個(gè)服務(wù)都進(jìn)行了環(huán)境變量的篩選,通過(guò)腳本的方式在pm2啟動(dòng)前進(jìn)行沒(méi)用的環(huán)境變量清理,確保后續(xù)服務(wù)發(fā)版順利!!!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-782412.html

到了這里,關(guān)于nodejs前端項(xiàng)目部署到k8s,導(dǎo)致線上故障的排查與解決方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(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)文章

  • 【k8s完整實(shí)戰(zhàn)教程4】使用kubesphere部署項(xiàng)目到k8s

    【k8s完整實(shí)戰(zhàn)教程4】使用kubesphere部署項(xiàng)目到k8s

    系列文章:這個(gè)系列已完結(jié),如對(duì)您有幫助,求點(diǎn)贊收藏評(píng)論。 讀者寄語(yǔ): 再小的帆,也能遠(yuǎn)航! 【k8s完整實(shí)戰(zhàn)教程0】前言 【k8s完整實(shí)戰(zhàn)教程1】源碼管理-Coding 【k8s完整實(shí)戰(zhàn)教程2】騰訊云搭建k8s托管集群 【k8s完整實(shí)戰(zhàn)教程3】k8s集群部署kubesphere 【k8s完整實(shí)戰(zhàn)教程4】使用

    2023年04月18日
    瀏覽(65)
  • k8s 部署Jenkins項(xiàng)目

    k8s 部署Jenkins項(xiàng)目

    要求:當(dāng)前集群配置了storageClass,并已指定默認(rèn)的storageClass,一般情況下,創(chuàng)建的storageClass即為默認(rèn)類 指定默認(rèn)storageClass的方式 1.1 部署helm 1.2 部署jenkins 1.3 檢查 jenkins 1.4 配置訪問(wèn) 3.1 準(zhǔn)備ruoyi數(shù)據(jù) 3.2 準(zhǔn)備k8s證書(shū) 3.3 準(zhǔn)備maven配置文件 3.4 配置釘釘插件 在系統(tǒng)管理的下方有未

    2024年01月21日
    瀏覽(57)
  • K8s部署PHP項(xiàng)目

    ? ? ? ? 前端時(shí)間PHP項(xiàng)目部署升級(jí)需要 ,需要把Laravel開(kāi)發(fā)的項(xiàng)目部署K8s上,下面以laravel項(xiàng)目為例,講解采用yaml文件方式部署項(xiàng)目。 一、部署步驟 Dockerfile是一個(gè)用來(lái)構(gòu)建鏡像的文本文件,在容器運(yùn)行時(shí),需要把項(xiàng)目文件和項(xiàng)目運(yùn)行所必須的組件安裝其中。 Kubernetes使用命名

    2024年02月05日
    瀏覽(18)
  • k8s部署微服務(wù)項(xiàng)目

    k8s部署微服務(wù)項(xiàng)目

    之前用docker-compose部署微服務(wù)項(xiàng)目,但是只能單節(jié)點(diǎn)的(那你用微服務(wù)架構(gòu)干啥?),所以想搞一下k8s集群,網(wǎng)上找了下資料沒(méi)有視頻專門(mén)講這一塊,自己找了很多資料,搞了蠻長(zhǎng)時(shí)間的,所以記錄一下 1.安裝k8s和管理界面kuboard 高版本的k8s已經(jīng)拋棄了docker,容器使用的話要安裝1

    2023年04月22日
    瀏覽(16)
  • k8s集群部署springboot項(xiàng)目

    k8s集群部署springboot項(xiàng)目

    本篇,我們將基于k8s集群,模擬一個(gè)比較接近實(shí)際業(yè)務(wù)的使用場(chǎng)景,使用k8s集群部署一個(gè)springboot的項(xiàng)目,我們的需求是: 部署SpringBoot項(xiàng)目到阿里云服務(wù)器?; 基于容器打包,推送私有鏡像倉(cāng)庫(kù) ; 采用K8S集群部署,對(duì)外暴露服務(wù),pod副本擴(kuò)容,公網(wǎng)可以訪問(wèn) ; 基于阿里云服

    2024年02月02日
    瀏覽(25)
  • 【Go】K8s 管理系統(tǒng)項(xiàng)目[Jenkins Pipeline K8s環(huán)境–應(yīng)用部署]

    【Go】K8s 管理系統(tǒng)項(xiàng)目[Jenkins Pipeline K8s環(huán)境–應(yīng)用部署]

    考慮到實(shí)際工作中前后端可能是不同的同學(xué)完成,一般Api部分完成后改動(dòng)會(huì)比較小,web部分改動(dòng)會(huì)比較頻繁.于是將api和web分了2個(gè)pipeline實(shí)現(xiàn) docker目錄存放鏡像構(gòu)建相關(guān)文件 k8s-plantform-api 存放api部分代碼 Jenkinsfile用作pipeline配置 yaml用作生成k8s下k8s-plantform-api相關(guān)資源 1.1.1 docker目

    2023年04月08日
    瀏覽(38)
  • k8s的jenkins部署java項(xiàng)目到k8s集群cicd持續(xù)集成

    k8s的jenkins部署java項(xiàng)目到k8s集群cicd持續(xù)集成

    k8s1.16.0-k8s的jenkins部署java項(xiàng)目到k8s集群cicd(ci成,cd手動(dòng)部署的) 注意: 本文檔只是實(shí)現(xiàn)了ci,cd是通過(guò)ci生成的鏡像,再手工再k8s-master執(zhí)行的部署(只因pod部署的jenkins連接k8s的認(rèn)證不知怎么操作,若jenkins是單獨(dú)部署在k8s-master機(jī)器上,能直接在master執(zhí)行kubectl命令就沒(méi)這個(gè)問(wèn)題了

    2024年02月03日
    瀏覽(37)
  • k8s+docker部署前后端分離項(xiàng)目

    k8s+docker部署前后端分離項(xiàng)目

    目錄 環(huán)境準(zhǔn)備 1、k8s集群 2、harbor遠(yuǎn)程倉(cāng)庫(kù) 部署前后端分離項(xiàng)目 生成vue鏡像(所有子節(jié)點(diǎn)都需要操作) 1、將前端vue項(xiàng)目打包得到dist.zip 2、創(chuàng)建nginx的配置文件default.conf 3、創(chuàng)建Dockerfile文件 4、生成vue鏡像 5、打標(biāo)簽 6、推到harbor倉(cāng)庫(kù) 7、查看生成的鏡像 生成jar包鏡像(所有子

    2023年04月08日
    瀏覽(21)
  • 原生K8S部署pig微服務(wù)項(xiàng)目

    原生K8S部署pig微服務(wù)項(xiàng)目

    項(xiàng)目地址:碼云 Pig微服務(wù)項(xiàng)目 基于 Spring Cloud 2021 、Spring Boot 2.7、 OAuth2 的 RBAC 權(quán)限管理系統(tǒng) 基于數(shù)據(jù)驅(qū)動(dòng)視圖的理念封裝 element-plus,即使沒(méi)有 vue 的使用經(jīng)驗(yàn)也能快速上手 提供對(duì)常見(jiàn)容器化支持 Docker、Kubernetes、Rancher2 支持 提供 lambda 、stream api 、webflux 的生產(chǎn)實(shí)踐 pig-ui –

    2024年02月03日
    瀏覽(20)
  • 阿里云K8S部署Go+Vue項(xiàng)目

    阿里云K8S部署Go+Vue項(xiàng)目

    ????????Kubernetes是一個(gè)可以移植、可擴(kuò)展的開(kāi)源平臺(tái),使用聲明式的配置并依據(jù)配置信息自動(dòng)地執(zhí)行容器化應(yīng)用程序的管理。在所有的容器編排工具中(類似的還有 docker swarm / mesos等),Kubernetes的生態(tài)系統(tǒng)更大、增長(zhǎng)更快,有更多的支持、服務(wù)和工具可供用戶選擇。 優(yōu)勢(shì)

    2024年01月16日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包