微服務架構(gòu)系統(tǒng)中,程序的穩(wěn)定運行的前提是需要保證每一個服務節(jié)點正產(chǎn)運行。此時,k8s容器技術(shù)就顯得尤為重要了。
首先,k8s中有幾大組件:
1,pod :應用運行容器,我們的業(yè)務服務就在pod里運行
2,deployment: 容器管理組件,控制pod的運行。
3,svc:容器暴露方式:clusterIP,nodePort。指容器需要如何對外暴露
4,pv:PersistentVolume,文件存儲服務,一般與nfs配合使用持久化存儲于本地
5,pvc:PersistentVolumeClaim 文件存儲申明服務,提供給存儲應用使用如minio
6,ingress:服務集群的代理,通常使用域名綁定svc的方式把pod暴露給容器外訪問。
通常一個服務的發(fā)布流程為:
引入自己的服務打包成docker鏡像
>docker push 到鏡像倉庫
>書寫deployment.yaml,在里面引入自己的鏡像和啟動參數(shù)
>運行kubectl create -f deployment.yaml
>創(chuàng)建svc暴露服務
通常在k8s自動部署的平臺中,會借助2個工具來實現(xiàn)自動化部署:
1,git-runner
2,Dockerfile
2,helm chart
具體的流程如圖:
當代碼提交時,觸發(fā)gitlab-ci.yml
>gitlab.ci中執(zhí)行mvn clean package,
>docker build Dockerfile -t 打成鏡像tag
>docker push 把鏡像上傳到鏡像倉庫
>最后執(zhí)行chart_build
chart_build大概做了如下事情:
在values.yaml維護tag最新上傳的鏡像
>在chart中按需添加svc,ingress等信息
>通過values.yaml信息注入到deployment.yaml中,生成一個合法的deployment
>手動點擊部署環(huán)境則會進行deployment,svc,ingress等組件的生成
k8s常用指令有如下:
查看組件:kubectl get (pod,svc,ingress,deployment,pv,pvc) -n namespace
查看pod的日志:kubectl logs -f podName -n namespace
查看deployment的配置:kubectl get deployment name -n namespace -o yaml
編輯deployment的配置:kubectl edit deployment name -n namespace -o yaml
進入pod:kubectl exec -it <runner pod> -n namespace bash
退出pod:exit
k8s ingress報錯:413 Request Entity Too 解決方式:
在一級節(jié)點為metadata的二級節(jié)點annotations下添加:
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: 200m
如果是nginx直接配置,則添加:
client_max_body_size 200m;