k8s部署微服务项目
之前用docker-compose部署微服務項目,但是只能單節點的(那你用微服務架構干啥?),所以想搞一下k8s集群,網上找了下資料沒有視頻專門講這一塊,自己找了很多資料,搞了蠻長時間的,所以記錄一下
1.安裝k8s和管理界面kuboard
高版本的k8s已經拋棄了docker,容器使用的話要安裝1.19版本的 鏈接地址
安裝好之后執行命令查看所有node節點
訪問ip:30080 進入kuboard管理界面 登錄進去
2.概念
namespace:命名空間,所有操作都要先選擇一個命名空間
ingress:nginx做了一層封裝,用域名代替ip訪問
service:暴露給外網訪問的端口(Nodeport),因為創建的應用只能集群內訪問到
deployment:應用負載,下面有多個pod,一個pod宕機了,可以立馬創建新的pod,也可以擴縮容
pod:容器組,里面可以創建多個容器
3.命令
kubectl 動詞 類別 名稱
例如 創建命名空間 kubectl create namespace namespace名
后面的操作部署都是指定yml文件運行 kubectl apply -f yml文件名 (用的最多的命令,項目部署都是用yml文件)
4.部署應用
三個簡單服務 nginx gateway , order , product 注冊中心nacos 數據庫mysql,redis
mysql ,nacos,redis這些有狀態的應用放到k8s外部 ,gateway , order , product這三個服務放k8s中部署
4.1 將jar包打成鏡像傳到harbor倉庫中(可以在idea中使用docker-maven-plugin插件打包上傳鏡像),Dockerfile以gateway為例
FROM moxm/java:1.8-fullMAINTAINER leviEXPOSE 38080ARG JAR_FILE=target/k8s-gateway.jarCOPY $JAR_FILE app.jarENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"CMD java -jar app.jar $JAVA_OPTS三個鏡像都上傳上去之后,開始編寫三個服務的yml文件進行部署
gateway.yml gateway創建了service,可以被外網訪問到
apiVersion: apps/v1 kind: Deployment metadata:namespace: testname: gateway-dplabels:app: gateway-dp spec:replicas: 3selector:matchLabels:app: gateway-dptemplate:metadata:labels:app: gateway-dpspec:containers:- name: gatewayimage: 192.168.3.152/test/k8s-gateway:1.0.0--- #暴露service apiVersion: v1 kind: Service metadata:namespace: testname: gateway-dp #service的名稱labels:app: gateway-dp #標簽 spec:selector:app: gateway-dp #選擇的deployports:- nodePort: 30008 #配置可以外網訪問的端口port: 38080 #集群內訪問的端口 protocol: TCPtargetPort: 38080 #pod容器內的端口type: NodePortorder.yml
apiVersion: apps/v1 kind: Deployment metadata:namespace: testname: order-dplabels:app: order #為該Deployment設置key為app,value為order的標簽 spec:replicas: 2 #指定集群數,即pod的數量selector: #標簽選擇器,與上面的標簽共同作用matchLabels: #選擇包含標簽app:order的資源app: ordertemplate: #這是選擇或創建的Pod的模板metadata: #Pod的元數據labels: #Pod的標簽,上面的selector即選擇包含標簽app:order的Podapp: orderspec: #期望Pod實現的功能(即在pod中部署)containers: #如果要創建多個容器,繼續往下面加-name- name: k8s-order #容器名稱image: 192.168.3.152/test/k8s-order:1.0.0 #鏡像product.yml
apiVersion: apps/v1 kind: Deployment metadata:namespace: testname: product-dplabels:app: product #為該Deployment設置key為app,value為product的標簽 spec:replicas: 2 #指定集群數,即pod的數量selector: #標簽選擇器,與上面的標簽共同作用matchLabels: #選擇包含標簽app:product的資源app: producttemplate: #這是選擇或創建的Pod的模板metadata: #Pod的元數據labels: #Pod的標簽,上面的selector即選擇包含標簽app:product的Podapp: productspec: #期望Pod實現的功能(即在pod中部署)containers: #如果要創建多個容器,繼續往下面加-name- name: k8s-product #容器名稱image: 192.168.3.152/test/k8s-product:1.0.0 #鏡像nginx.yml nginx創建deployment ,service和ingress
注意nginx掛載的目錄和文件要在worker節點上提前創建好,因為到時候容器會運行在worker節點上
目錄如下
idnex.html里面隨便寫點內容
nginx.conf配置文件內容如下
使用 kubectl apply -f yml文件名稱 啟動所有的yml,可以在kuboard界面上看到
點k8s-nginx-dp進去,選擇服務,黃色的就是對外暴露的端口號
查看容器組
把levi.nginx.com 配到電腦hosts里面
使用apifox訪問
總結
以上是生活随笔為你收集整理的k8s部署微服务项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue中使用微信JSDK实现图片上传
- 下一篇: keil5的暗色配色方案