最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Statefulset 實戰(zhàn) 1

2023-07-31 23:03 作者:阿兵云原生  | 我要投稿

上一部分與大家分享到 ?Statefulset ?與 RplicaSet 的區(qū)別,以及 Statefulset ?的特點,能做的一些事情及一些注意事項

現(xiàn)在我們來嘗試使用 Statefulset ?來部署我們的應(yīng)用,我們可以需要有應(yīng)用程序,然后有持久化卷

開始使用 Statefulset 部署應(yīng)用

Statefulset 部署應(yīng)用,我們需要完成這些資源的創(chuàng)建:

  • 制作應(yīng)用程序和鏡像

  • 編寫 Service

  • 編寫 ?Statefulset 指定 pod 模板及掛載

制作應(yīng)用程序和鏡像

編寫應(yīng)用程序

此處我們可以制作一個應(yīng)用程序,會寫數(shù)據(jù)到磁盤的某個路徑下面,現(xiàn)在就用 golang 來簡單寫一個 http 服務(wù)器

  • 監(jiān)聽 8080 端口

  • 提供 GET ?和 POST 請求

    • 收到 GET 請求的時候,讀取 ?/var/data/stateful.txt 中的內(nèi)容

    • 收到 POST 請求的時候,會將請求的內(nèi)容寫入到 ? /var/data/stateful.txt ?文件中

文件目錄是這樣的

main.go 可以分為這幾個部分

  • http 服務(wù)器部分


const?(
?filePath?=?"/var/data/stateful.txt"
?fileDir??=?"/var/data"
)

func?main()?{

?r?:=?gin.Default()
?r.GET("/",?func(c?*gin.Context)?{

??str,?err?:=?readFileContent(filePath)
??if?err?!=?nil?{
???fmt.Println("?readFileContent?err?:?",?err)
???return
??}
??//輸出json結(jié)果給調(diào)用方
??c.JSON(200,?gin.H{
???"message":?str,
??})
?})
?r.POST("/",?func(c?*gin.Context)?{
??buf?:=?make([]byte,?1024)
??n,?_?:=?c.Request.Body.Read(buf)
??fmt.Println(string(buf[0:n]))

??err?:=?writeFileContent(filePath,?buf[0:n])
??if?err?!=?nil?{
???fmt.Println("?writeFileContent?err?:?",?err)
???return
??}
??//輸出json結(jié)果給調(diào)用方
??c.JSON(http.StatusOK,?gin.H{
???"message":?string(buf[0:n]),
??})
?})

?r.Run(":8080")
}

使用了 golang 中的 gin 框架,提供一個 GET 和 一個 POST 方法,GET 方法用于讀取文件內(nèi)容,POST 方法用于寫入文件內(nèi)容

  • 寫文件部分

func?processFileErr(err?error,?file?string)?(*os.File,?error)?{
?var?f?*os.File
?if?os.IsNotExist(err)?{
??gErr?:=?os.MkdirAll(fileDir,?0775)
??if?gErr?!=?nil?{
???fmt.Println("MkdirAll?file?error?:?",?gErr)
???return?nil,?gErr
??}
??f,?gErr?=?os.Create(file)
??if?gErr?!=?nil?{
???fmt.Println("Create?file?error?:?",?gErr)
???return?nil,?gErr
??}
?}?else?{
??fmt.Println("OpenFile?file?error?:?",?err)
??return?nil,?err
?}
?return?f,?nil
}

func?writeFileContent(file?string,?content?[]byte)?error?{
?f,?err?:=?os.OpenFile(file,?os.O_RDWR|os.O_CREATE|os.O_TRUNC,?0775)
?if?err?!=?nil?{
??var?pErr?error
??f,?pErr?=?processFileErr(err,?file)
??if?pErr?!=?nil?{
???fmt.Println("processFileErr?error?:?",?pErr)
???return?pErr
??}
?}
?defer?f.Close()

?fmt.Println("Write?content?:?",?string(content))

?_,?err?=?f.Write(content)
?if?err?!=?nil?{
??fmt.Println("Write?file?error?:?",?err)
??return?err
?}
?return?nil
}

writeFileContent ?方法主要是用來寫入數(shù)據(jù)到文件中

processFileErr 會處理文件不存在的錯誤信息,同時會創(chuàng)建不存在的路徑和文件,并返回創(chuàng)建文件的文件指針

  • 讀取文件信息部分

func?readFileContent(file?string)?(string,?error)?{
?f,?err?:=?os.OpenFile(file,?os.O_RDWR|os.O_CREATE,?0775)
?if?err?!=?nil?{
??var?pErr?error
??f,?pErr?=?processFileErr(err,?file)
??if?pErr?!=?nil?{
???fmt.Println("processFileErr?error?:?",?pErr)
???return?"",?pErr
??}
?}

?defer?f.Close()

?buf?:=?make([]byte,?1024)
?n,?err?:=?f.Read(buf)
?if?err?==?io.EOF?{
??return?"",?nil
?}
?if?err?!=?nil?{
??fmt.Println("Read?file?error?:?",?err)
?}
?fmt.Println("read?content?:?",?string(buf))
?return?string(buf[0:n]),?nil
}

讀取文件部分,同樣需要使用 processFileErr 處理文件不存在的錯誤信息,主要是從傳入的文件中讀取文件內(nèi)容,以字符串的形式作為函數(shù)返回值

制作鏡像

Dockerfile:

myhttp 可執(zhí)行程序加入到鏡像中

FROM?node:7
ADD?myhttp?/myhttp
ENTRYPOINT?["./myhttp"]

執(zhí)行如下指令制作鏡像:

看到這里的兄弟,請將鏡像傳到你自己的賬號下面,記得登錄哦

docker?build?-t?xiaomotong888/sta-kubia?.
docker?push?xiaomotong888/sta-kubia

上傳鏡像之后,我們可以通過 docker search 賬號名 來查看自己的鏡像列表,看到如下內(nèi)容,說明可以往下繼續(xù)完成其他步驟了

編寫 Service

接下來便是編寫 Service 部分的清單了,我們在玩 Statefulset 管理 pod 的時候,咱們創(chuàng)建的是有狀態(tài)的 pod,咱們還需要創(chuàng)建一個 headless Service 來給 pod 之間提供網(wǎng)絡(luò)標(biāo)識

例如,我們可以這樣來創(chuàng)建

sta-service.yaml

apiVersion:?v1
kind:?Service
metadata:
??name:?sta-kubia
spec:
??clusterIP:?None
??selector:
????app:?sta-kubia
??ports:
??-?name:?http
????port:?80

創(chuàng)建的一個 Service

  • 名稱為 sta-kubia

  • 選擇的 pod 標(biāo)簽是 ?sta-kubia

  • svc 集群內(nèi)部的端口是 80

這里需要注意的是,我們之前寫 Service 清單的時候,如果不指定 type,那么 Service 默認(rèn)是 clusterIP,但是現(xiàn)在我們是連 clusterIP 都不想要,我們需要將 clusterIP 置為 None

通過 kubectl create -f sta-service.yaml 創(chuàng)建一個 Service ,可以看到 CLUSTER-IP 一欄為 None 即為正確創(chuàng)建好 Service

curl?localhost:8001/api/v1/namespaces/default/pods/sta-kubia-0/proxy/

curl??-X?POST?-d?'helloworld?sta-kubia-0'?localhost:8001/api/v1/namespaces/default/pods/sta-kubia-0/proxy/

今天就到這里,學(xué)習(xí)所得,若有偏差,還請斧正

歡迎點贊,關(guān)注,收藏

朋友們,你的支持和鼓勵,是我堅持分享,提高質(zhì)量的動力

好了,本次就到這里

技術(shù)是開放的,我們的心態(tài),更應(yīng)是開放的。擁抱變化,向陽而生,努力向前行。

我是阿兵云原生,歡迎點贊關(guān)注收藏,下次見~


Statefulset 實戰(zhàn) 1的評論 (共 條)

分享到微博請遵守國家法律
溧阳市| 盐池县| 罗定市| 翁牛特旗| 花垣县| 清新县| 军事| 东阿县| 贵溪市| 广东省| 潮安县| 禹州市| 拉萨市| 高尔夫| 新民市| 砀山县| 剑河县| 灵台县| 石渠县| 自治县| 理塘县| 商丘市| 海盐县| 赞皇县| 德令哈市| 洛扎县| 乌苏市| 砚山县| 商都县| 教育| 扎囊县| 突泉县| 宜阳县| 曲周县| 滨海县| 奉节县| 石泉县| 罗源县| 当雄县| 潞城市| 枣庄市|