一、说明

本文介绍基于 Kubernetes(k8s) 环境集成阿里云 私有镜像仓库 来部署一套 Dubbo + Nacos 的微服务系统,并使用 Kubernetes DNS 以及 port-forward 的方式来打通网络访问。

二、部署 MySQL

创建配置文件 mysql-local.yaml 内容如下:

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 的副本数量,能够保证 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: 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 的参数;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 \
--docker-username=zltdiablo@163.com \
--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: 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 参数指定注册中心地址,使用 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: 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"

执行以下命令,部署 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

六、样例工程

集成 jib-maven-plugin 插件的样例 Spring Boot 工程:

扫码关注有惊喜!

基于Kubernetes(k8s)部署Dubbo+Nacos服务的更多相关文章

  1. 通过k8s部署dubbo微服务并接入ELK架构

    需要这样一套日志收集.分析的系统: 收集 -- 能够采集多种来源的日志数据 (流式日志收集器) 传输 -- 能够稳定的把日志数据传输到中央系统 (消息队列) 存储 -- 可以将日志以结构化数据的形式存 ...

  2. 微服务探索之路03篇-docker私有仓库Harbor搭建+Kubernetes(k8s)部署私有仓库的镜像

    ❝ 目录: 微服务探索之路01篇.net6.0项目本地win10系统docker到服务器liunx系统docker的贯通 微服务探索之路02篇liunx ubuntu服务器部署k8s(kubernet ...

  3. 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2

    基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2 Kubernetes实现Master-Slave分布式构建方案 传统Jenkins的Master-Slave方案的缺陷 Mas ...

  4. 基于Kubernetes/K8S构建Jenkins持续集成平台(下)

    基于Kubernetes/K8S构建Jenkins持续集成平台(下) Jenkins-Master-Slave架构图回顾: 安装和配置NFS NFS简介 NFS(Network File System ...

  5. 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-1

    基于Kubernetes/K8S构建Jenkins持续集成平台(上)-1 Jenkins的Master-Slave分布式构建 什么是Master-Slave分布式构建 Jenkins的Master-S ...

  6. 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...

  7. Dubbo入门到精通学习笔记(二):Dubbo管理控制台、使用Maven构建Dubbo的jar包、在Linux上部署Dubbo privider服务(shell脚本)、部署consumer服务

    文章目录 Dubbo管理控制台 1.Dubbo管理控制台的主要作用: 2.管理控制台主要包含: 3.管理控制台版本: 安装 Dubbo 管理控制台 使用Maven构建Dubbo服务的可执行jar包 D ...

  8. Kubernetes(k8s)部署redis-cluster集群

    Redis Cluster 提供了一种运行 Redis 安装的方法,其中数据 在多个 Redis 节点之间自动分片. Redis Cluster 还在分区期间提供了一定程度的可用性,这实际上是在某些节 ...

  9. 利用Kubernetes(K8S)部署JAVA项目

    一.jar包和war包区别 首先简单介绍一下jar包和war包区别,当时就没分清,导致部署总是傻傻分不清楚. jar包:jar包就是java的类进行编译生成的class文件就行打包的压缩包.里面是一些 ...

  10. 解读与部署(三):基于 Kubernetes 的微服务部署即代码

    在基于 Kubernetes 的基础设施即代码一文中,我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的,以及它的 ...

随机推荐

  1. web server 接口调用测试

    1.新建工程 ,鼠标右击new 2.设置web server接口访问链接,然后下一步 生成代码 3.生成客户端代码 4.创建测试类 调用服务

  2. 利用python脚本统计和删除redis key

    该脚本扫描redis中所有的key,用于分析redis内存数据的key构成,扫描并保存文件,需要python支持redis模块. #!/usr/bin/env python # -*- coding: ...

  3. source Insight 的常用设置

    1. 去除^M 的显示 "Options->Preferences->Files", 设置"Default File Format" to &quo ...

  4. c++ vtdcm对于压缩模式文档图片的读取

    //获取dcm数据结构,一下图像数据仅针对单通道8字节数据 DcmFileFormat fileformat; OFCondition oc = fileformat.loadFile(dcmPath ...

  5. vue项目浏览器ioc小图标

    1 先有一个需要图片,png .jpg ...格式都可以 2 把图片转换成 .con 格式的图标  ,http://www.bitbug.net/使用比特虫转换 ,目标尺寸:16*16 或者 32*3 ...

  6. CMD输出文本文件内容的type指令(替代Linux的cat指令)

    :: 本脚本的所有指令本身不输出到屏幕 @echo off :: 打印文本文件内容并匹配关键字,结果不输出到屏幕 type result.txt | find "error" &g ...

  7. 20200926--矩阵转置(奥赛一本通P95 8 多维数组)

    输入一个n行m列的矩阵A,输出它的转置(看下面说明) 输入:第1行包含两个整数n和m(1<=n<=100,1<=m<=100),表示矩阵A的行数和列数.接下来n行,每行m个整数 ...

  8. Verilog教程

    1. 简介 当用 Verilog 设计完成数字模块后进行仿真时,需要在外部添加激励,激励文件叫 testbench. Verilog 的主要特性: 可采用 3 种不同的方式进行设计建模:行为级描述-- ...

  9. latex常见的错误(自己经常出现的)

    1. undifned control consequence  有非法的命令---有可能没有导入对应的宏包.见latex常用的宏包. 2. See the amsmath package docum ...

  10. 更多Linux实用命令

    更多实用命令 进程相关 当程序运行在系统上时,我们称之为进程(process).想监测这些进程,需要熟悉 ps/top 等命令的用法.ps 命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许 ...