0


【云原生】Kubernetes(k8s)部署 MySQL+Dubbo+Nacos服务

一、说明

本文介绍基于 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

本文转载自: https://blog.csdn.net/weixin_44816664/article/details/129764227
版权归原作者 鹤冲天Pro 所有, 如有侵权,请联系我们删除。

“【云原生】Kubernetes(k8s)部署 MySQL+Dubbo+Nacos服务”的评论:

还没有评论