上一篇文章我們構建了微服務的 Docker 鏡像,接下來我們將鏡像部署到K8S中,
完整代碼:
https://github.com/Justin02180218/micro-kit
部署架構

每個微服務啟動2個 pod 注冊到 consul 上,網關也啟動2個 pod 從 consul 上獲取微服務的一個 pod 實體來訪問介面,
在 ingress 上配置了4個域名轉發:
-
api.library.com: 訪問 api 網關
-
consul.library.com: 訪問 consul ui 頁面
-
zipkin.library.com: 訪問 zipkin 頁面
-
hystrix.library.com: 訪問 hystrix dashboard 頁面
撰寫 K8S apply 檔案
創建 deploy/k8s 目錄,在此目錄下撰寫 k8s apply 檔案,如圖:

鏡像倉庫
在撰寫 k8s apply 檔案前,先把我們構建好的 Docker 鏡像上傳到鏡像倉庫上,鏡像倉庫采用Harbor,Harbor是由VMware公司開源的企業級的Docker Registry管理專案,它包括權限管理(RBAC)、LDAP、日志審核、管理界面、自我注冊、鏡像復制和中文支持等功能,

安裝 consul
$ helm repo add hashicorp https://helm.releases.hashicorp.com
$ helm install consul hashicorp/consul
撰寫 user deployment
創建 k8s-user-deployment.yaml 檔案,代碼如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-service
labels:
svc: user
app: service
spec:
replicas: 2
selector:
matchLabels:
svc: user
app: service
template:
metadata:
labels:
svc: user
app: service
spec:
containers:
- name: user-service
image: harbor.justin.com/micro-kit/user-service:latest
imagePullPolicy: Always
ports:
- containerPort: 10086
resources:
requests:
memory: 64Mi
cpu: 250m
limits:
memory: 64Mi
cpu: 250m
撰寫 book deployment
創建 k8s-book-deployment.yaml 檔案,代碼如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: book-service
labels:
svc: book
app: service
spec:
replicas: 2
selector:
matchLabels:
svc: book
app: service
template:
metadata:
labels:
svc: book
app: service
spec:
containers:
- name: book-service
image: harbor.justin.com/micro-kit/book-service:latest
imagePullPolicy: Always
ports:
- containerPort: 10087
resources:
requests:
memory: 64Mi
cpu: 250m
limits:
memory: 64Mi
cpu: 250m
撰寫 book rpc deployment
創建 k8s-book-rpc-deployment.yaml 檔案,代碼如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: book-rpc-service
labels:
svc: book-rpc
app: service
spec:
replicas: 2
selector:
matchLabels:
svc: book-rpc
app: service
template:
metadata:
labels:
svc: book-rpc
app: service
spec:
containers:
- name: book-rpc-service
image: harbor.justin.com/micro-kit/book-rpc-service:latest
imagePullPolicy: Always
ports:
- containerPort: 10088
resources:
requests:
memory: 64Mi
cpu: 250m
limits:
memory: 64Mi
cpu: 250m
撰寫 apigateway service
創建 k8s-apigateway-service.yaml 檔案,代碼如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: library-apigateway
labels:
svc: library
app: apigateway
spec:
replicas: 2
selector:
matchLabels:
svc: library
app: apigateway
template:
metadata:
labels:
svc: library
app: apigateway
spec:
containers:
- name: library-apigateway
image: harbor.justin.com/micro-kit/apigateway:latest
imagePullPolicy: Always
ports:
- containerPort: 80
resources:
requests:
memory: 64Mi
cpu: 250m
limits:
memory: 64Mi
cpu: 250m
---
apiVersion: v1
kind: Service
metadata:
name: library-apigateway
spec:
ports:
- port: 80
selector:
svc: library
app: apigateway
撰寫 zipkin service
創建 k8s-zipkin-service.yaml 檔案,代碼如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: zipkin-server
spec:
replicas: 1
selector:
matchLabels:
app: zipkin-server
template:
metadata:
labels:
app: zipkin-server
spec:
containers:
- name: zipkin-server
image: openzipkin/zipkin
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9411
---
apiVersion: v1
kind: Service
metadata:
name: zipkin-server
spec:
ports:
- port: 9411
selector:
app: zipkin-server
撰寫 hystrix dashboard service
創建 k8s-hystrixdashboard-service.yaml 檔案,代碼如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hystrix-dashboard
spec:
replicas: 1
selector:
matchLabels:
app: hystrix-dashboard
template:
metadata:
labels:
app: hystrix-dashboard
spec:
containers:
- name: hystrix-dashboard
image: mlabouardy/hystrix-dashboard
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9002
---
apiVersion: v1
kind: Service
metadata:
name: hystrix-dashboard
spec:
ports:
- port: 9002
selector:
app: hystrix-dashboard
撰寫 ingress
創建 k8s-ingress.yaml 檔案,代碼如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: apigateway-ingress
spec:
rules:
- host: api.library.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: library-apigateway
port:
number: 80
- host: consul.library.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: consul-ui
port:
number: 80
- host: zipkin.library.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: zipkin-server
port:
number: 9411
- host: hystrix.library.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hystrix-dashboard
port:
number: 9002
執行命令
進入專案目錄下,執行以下命令部署到 K8S:
kubectl apply -f deploy/k8s/k8s-zipkin-service.yaml
kubectl apply -f deploy/k8s/k8s-hystrixdashboard-service.yaml
kubectl apply -f deploy/k8s/k8s-book-rpc-deployment.yaml
kubectl apply -f deploy/k8s/k8s-book-deployment.yaml
kubectl apply -f deploy/k8s/k8s-user-deployment.yaml
kubectl apply -f deploy/k8s/k8s-apigateway-service.yaml
kubectl apply -f deploy/k8s/k8s-ingress.yaml
查看 Pod
所有的 pod 都部署成功且正常運行:

查看 Service
所有的 service 都部署成功且正常運行:

查看 Ingress

驗證
注冊到 consul 成功:

介面呼叫成功:

查看 zipkin 呼叫鏈路:

查看 Hystrix dashboard:

完整代碼:
https://github.com/Justin02180218/micro-kit
更多【分布式專輯】【架構實戰專輯】系列文章,請關注公眾號

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/321168.html
標籤:其他
上一篇:jq命令使用curl給出無效負載
