一、说明
本文介绍基于 Kubernetes(k8s) 环境集成阿里云 私有镜像仓库 来部署一套 Dubbo + Nacos 的微服务系统,并使用 Kubernetes DNS 以及 port-forward 的方式来打通网络访问。
Kubernetes基础入门
K8S集群管理平台Rancher(1):基础入门
K8S集群管理平台Rancher(2):安装与使用
二、部署 MySQL
创建配置文件 mysql-local.yaml 内容如下:
apiVersion: v1
kind: ReplicationController
metadata:name: mysql
labels:name: mysql
spec:replicas:1selector:name: mysql
template:metadata:labels:name: mysql
spec:containers:-name: mysql
image: nacos/nacos-mysql:5.7ports:-containerPort:3306volumeMounts:-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:3306targetPort:3306selector:name: mysql
ReplicationController 简称 RC 可以保证在任意时间运行 Pod 的副本数量,能够保证 Pod 总是可用的。
执行以下命令,部署 MySQL 5.7:
kubectl apply -f mysql-local.yaml
三、部署 Nacos
创建配置文件 nacos-standalone-start.yaml 内容如下:
---apiVersion: v1
kind: Service
metadata:name: nacos-standalone
labels:app: nacos-standalone
spec:type: ClusterIP
clusterIP: None
ports:-port:8848name: server
targetPort:8848-port:9848name: client-rpc
targetPort:9848-port:9849name: raft-rpc
targetPort:9849## 兼容1.4.x版本的选举端口-port:7848name: old-raft-rpc
targetPort:7848selector: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:1template: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:8848name: client
-containerPort:9848name: client-rpc
-containerPort:9849name: raft-rpc
-containerPort:7848name: 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 的参数;Nacos 通过 DNS 来访问数据库的 Service。
执行以下命令,部署 Nacos 最新版本:
kubectl apply -f nacos-standalone-start.yaml
执行以下命令,暴露 Nacos 的端口到宿主机中给外部访问:
nohup kubectl port-forward svc/nacos-standalone 8848:8848 9848:9848 9849:9849 7848:7848 --address='0.0.0.0'&
kubectl port-forward 通过端口转发映射本地端口到指定的应用端口,它将在您的计算机和 kubernetes 之间创建一条隧道;一般用于测试、实验室、故障排除,而不是长期的解决方案。
四、部署 Dubbo 服务
4.1. 创建镜像仓库的密钥
由于拉取阿里云仓库的私有镜像时需要输入账户和密码,需要用到 k8s 的 Secret 对象来管理密码秘钥等敏感信息。
执行以下命令,创建 Secret 对象:
kubectl create secret docker-registry aliyuncs \
--docker-server=registry.cn-guangzhou.aliyuncs.com \
[email protected] \
--docker-password=xxxxxx
docker-registry 指定 secret 的名称
docker-server 仓库地址
docker-username 仓库账号
docker-password 仓库密码
创建成功后,可以使用以下命令查看密钥信息:
kubectl get secret aliyuncs --output=yaml
4.2. 部署 provider 服务
创建配置文件 provider.yaml 内容如下:
---apiVersion: v1
kind: Service
metadata:name: zlt-nacos-provider
spec:clusterIP: None
selector:app: zlt-nacos-provider
ports:-protocol: TCP
port:20880targetPort:20880---apiVersion: apps/v1
kind: Deployment
metadata:name: zlt-nacos-provider
spec:replicas:1selector: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:20880env:-name: DUBBO_REGISTRY_ADDRESS
value:"nacos://nacos-standalone:8848"-name: DUBBO_IP_TO_REGISTRY
value:"zlt-nacos-provider"
DUBBO_REGISTRY_ADDRESS 参数指定注册中心地址,使用 DNS 来访问 Nacos
DUBBO_IP_TO_REGISTRY 参数指定服务注册的 IP 地址,配置自己 Service 的名称
通过 imagePullSecrets 参数来绑定登录镜像仓库所使用的 secret 名称。
执行以下命令,部署 provider 最新版本:
kubectl apply -f provider.yaml
4.3. 部署 consumer 服务
创建配置文件 consumer.yaml 内容如下:
---apiVersion: v1
kind: Service
metadata:name: zlt-nacos-consumer
spec:clusterIP: None
selector:app: zlt-nacos-consumer
ports:-name: web
port:8080targetPort:8080---apiVersion: apps/v1
kind: Deployment
metadata:name: zlt-nacos-consumer
spec:replicas:1selector: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:8080env:-name: DUBBO_REGISTRY_ADDRESS
value:"nacos://nacos-standalone:8848"-name: DUBBO_IP_TO_REGISTRY
value:"zlt-nacos-consumer"
执行以下命令,部署 consumer 最新版本:
kubectl apply -f consumer.yaml
五、测试
通过命令 kubectl get pod 查看所有创建的 pods 确保所有的状态都为 Running
执行以下命令,暴露 consumer 服务的 web 端口到宿主机中给外部访问:
nohup kubectl port-forward svc/zlt-nacos-consumer 8080:8080 --address='0.0.0.0'&
在浏览器输入以下地址进行访问:
http://宿主机IP:8080/test?name=123
版权归原作者 鹤冲天Pro 所有, 如有侵权,请联系我们删除。