一、說明
本文介紹基于 Kubernetes(k8s)
環(huán)境集成阿里云 私有鏡像倉庫 來部署一套 Dubbo
+ Nacos
的微服務(wù)系統(tǒng),并使用 Kubernetes DNS
以及 port-forward
的方式來打通網(wǎng)絡(luò)訪問。
- k8s環(huán)境搭建參考文章《基于minikube快速搭建kubernetes單節(jié)點環(huán)境》 中在阿里云鏡像倉庫構(gòu)建的鏡像來進行部署。
- 基于《基于jib-maven-plugin快速構(gòu)建微服務(wù)docker鏡像》 中在阿里云鏡像倉庫構(gòu)建的鏡像來進行部署。
?
二、部署 MySQL
創(chuàng)建配置文件 mysql-local.yaml
內(nèi)容如下:
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql
labels:
name: mysql
spec:
replicas: 1
selector:
name: mysql
template:
metadata:
labels:
name: mysql
spec:
containers:
- name: mysql
image: nacos/nacos-mysql:5.7
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "root"
- name: MYSQL_DATABASE
value: "nacos_devtest"
- name: MYSQL_USER
value: "nacos"
- name: MYSQL_PASSWORD
value: "nacos"
volumes:
- name: mysql-data
hostPath:
path: /var/lib/mysql
---
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
name: mysql
spec:
ports:
- port: 3306
targetPort: 3306
selector:
name: mysql
ReplicationController 簡稱 RC 可以保證在任意時間運行 Pod 的副本數(shù)量,能夠保證 Pod 總是可用的。
執(zhí)行以下命令,部署 MySQL 5.7:
kubectl apply -f mysql-local.yaml
?
三、部署 Nacos
創(chuàng)建配置文件 nacos-standalone-start.yaml
內(nèi)容如下:
---
apiVersion: v1
kind: Service
metadata:
name: nacos-standalone
labels:
app: nacos-standalone
spec:
type: ClusterIP
clusterIP: None
ports:
- port: 8848
name: server
targetPort: 8848
- port: 9848
name: client-rpc
targetPort: 9848
- port: 9849
name: raft-rpc
targetPort: 9849
## 兼容1.4.x版本的選舉端口
- port: 7848
name: old-raft-rpc
targetPort: 7848
selector:
app: nacos
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nacos-cm
data:
mysql.host: "mysql"
mysql.db.name: "nacos_devtest"
mysql.port: "3306"
mysql.user: "nacos"
mysql.password: "nacos"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nacos
spec:
replicas: 1
template:
metadata:
labels:
app: nacos
annotations:
pod.alpha.kubernetes.io/initialized: "true"
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- nacos
topologyKey: "kubernetes.io/hostname"
containers:
- name: nacos
imagePullPolicy: Always
image: nacos/nacos-server:latest
resources:
requests:
memory: "1Gi"
cpu: "500m"
ports:
- containerPort: 8848
name: client
- containerPort: 9848
name: client-rpc
- containerPort: 9849
name: raft-rpc
- containerPort: 7848
name: old-raft-rpc
env:
- name: SPRING_DATASOURCE_PLATFORM
value: "mysql"
- name: MYSQL_SERVICE_HOST
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.host
- name: MYSQL_SERVICE_DB_NAME
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.db.name
- name: MYSQL_SERVICE_PORT
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.port
- name: MYSQL_SERVICE_USER
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.user
- name: MYSQL_SERVICE_PASSWORD
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.password
- name: MODE
value: "standalone"
- name: NACOS_SERVER_PORT
value: "8848"
- name: PREFER_HOST_MODE
value: "hostname"
selector:
matchLabels:
app: nacos
使用
ConfigMap
對象來配置 MySQL 的參數(shù);Nacos
通過DNS
來訪問數(shù)據(jù)庫的Service
。
執(zhí)行以下命令,部署 Nacos 最新版本:
kubectl apply -f nacos-standalone-start.yaml
執(zhí)行以下命令,暴露 Nacos 的端口到宿主機中給外部訪問:
nohup kubectl port-forward svc/nacos-standalone 8848:8848 9848:9848 9849:9849 7848:7848 --address='0.0.0.0' &
kubectl port-forward 通過端口轉(zhuǎn)發(fā)映射本地端口到指定的應(yīng)用端口,它將在您的計算機和 kubernetes 之間創(chuàng)建一條隧道;一般用于測試、實驗室、故障排除,而不是長期的解決方案。
?
四、部署 Dubbo 服務(wù)
4.1. 創(chuàng)建鏡像倉庫的密鑰
由于拉取阿里云倉庫的私有鏡像時需要輸入賬戶和密碼,需要用到 k8s 的 Secret
對象來管理密碼秘鑰等敏感信息。
執(zhí)行以下命令,創(chuàng)建 Secret 對象:
kubectl create secret docker-registry aliyuncs \
--docker-server=registry.cn-guangzhou.aliyuncs.com \
--docker-username=zltdiablo@163.com \
--docker-password=xxxxxx
- docker-registry 指定 secret 的名稱
- docker-server 倉庫地址
- docker-username 倉庫賬號
- docker-password 倉庫密碼
創(chuàng)建成功后,可以使用以下命令查看密鑰信息:
kubectl get secret aliyuncs --output=yaml
?
4.2. 部署 provider 服務(wù)
創(chuàng)建配置文件 provider.yaml
內(nèi)容如下:
---
apiVersion: v1
kind: Service
metadata:
name: zlt-nacos-provider
spec:
clusterIP: None
selector:
app: zlt-nacos-provider
ports:
- protocol: TCP
port: 20880
targetPort: 20880
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: zlt-nacos-provider
spec:
replicas: 1
selector:
matchLabels:
app: zlt-nacos-provider
template:
metadata:
labels:
app: zlt-nacos-provider
spec:
imagePullSecrets:
- name: aliyuncs
containers:
- name: server
image: registry.cn-guangzhou.aliyuncs.com/zlt-test/nacos-provider:1.0-SNAPSHOT
imagePullPolicy: IfNotPresent
ports:
- containerPort: 20880
env:
- name: DUBBO_REGISTRY_ADDRESS
value: "nacos://nacos-standalone:8848"
- name: DUBBO_IP_TO_REGISTRY
value: "zlt-nacos-provider"
DUBBO_REGISTRY_ADDRESS 參數(shù)指定注冊中心地址,使用
DNS
來訪問Nacos
DUBBO_IP_TO_REGISTRY 參數(shù)指定服務(wù)注冊的 IP 地址,配置自己
Service
的名稱
通過
imagePullSecrets
參數(shù)來綁定登錄鏡像倉庫所使用的secret
名稱。
執(zhí)行以下命令,部署 provider 最新版本:
kubectl apply -f provider.yaml
?
4.3. 部署 consumer 服務(wù)
創(chuàng)建配置文件 consumer.yaml
內(nèi)容如下:
---
apiVersion: v1
kind: Service
metadata:
name: zlt-nacos-consumer
spec:
clusterIP: None
selector:
app: zlt-nacos-consumer
ports:
- name: web
port: 8080
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: zlt-nacos-consumer
spec:
replicas: 1
selector:
matchLabels:
app: zlt-nacos-consumer
template:
metadata:
labels:
app: zlt-nacos-consumer
spec:
imagePullSecrets:
- name: aliyuncs
containers:
- name: server
image: registry.cn-guangzhou.aliyuncs.com/zlt-test/nacos-consumer:1.0-SNAPSHOT
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
env:
- name: DUBBO_REGISTRY_ADDRESS
value: "nacos://nacos-standalone:8848"
- name: DUBBO_IP_TO_REGISTRY
value: "zlt-nacos-consumer"
執(zhí)行以下命令,部署 consumer 最新版本:
kubectl apply -f consumer.yaml
?
五、測試
通過命令 kubectl get pod
查看所有創(chuàng)建的 pods 確保所有的狀態(tài)都為 Running
執(zhí)行以下命令,暴露 consumer 服務(wù)的 web 端口到宿主機中給外部訪問:
nohup kubectl port-forward svc/zlt-nacos-consumer 8080:8080 --address='0.0.0.0' &
在瀏覽器輸入以下地址進行訪問:
http://宿主機IP:8080/test?name=123
?文章來源:http://www.zghlxwxcb.cn/news/detail-780981.html
六、樣例工程
集成 jib-maven-plugin
插件的樣例 Spring Boot
工程:文章來源地址http://www.zghlxwxcb.cn/news/detail-780981.html
- https://gitee.com/zlt2000_admin/zlt-dubbo-samples/tree/master/dubbo-nacos
- https://github.com/zlt2000/zlt-dubbo-samples/tree/master/dubbo-nacos
到了這里,關(guān)于基于Kubernetes(k8s)部署Dubbo+Nacos服務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!