当前位置:   article > 正文

Kubernetes(k8s)部署 MySQL+Dubbo+Nacos服务_k8s访问外部nacos

k8s访问外部nacos

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

Kubernetes基础入门
K8S集群管理平台Rancher(1):基础入门
K8S集群管理平台Rancher(2):安装与使用

二、部署 MySQL

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

  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4. name: mysql
  5. labels:
  6. name: mysql
  7. spec:
  8. replicas: 1
  9. selector:
  10. name: mysql
  11. template:
  12. metadata:
  13. labels:
  14. name: mysql
  15. spec:
  16. containers:
  17. - name: mysql
  18. image: nacos/nacos-mysql:5.7
  19. ports:
  20. - containerPort: 3306
  21. volumeMounts:
  22. - name: mysql-data
  23. mountPath: /var/lib/mysql
  24. env:
  25. - name: MYSQL_ROOT_PASSWORD
  26. value: "root"
  27. - name: MYSQL_DATABASE
  28. value: "nacos_devtest"
  29. - name: MYSQL_USER
  30. value: "nacos"
  31. - name: MYSQL_PASSWORD
  32. value: "nacos"
  33. volumes:
  34. - name: mysql-data
  35. hostPath:
  36. path: /var/lib/mysql
  37. ---
  38. apiVersion: v1
  39. kind: Service
  40. metadata:
  41. name: mysql
  42. labels:
  43. name: mysql
  44. spec:
  45. ports:
  46. - port: 3306
  47. targetPort: 3306
  48. selector:
  49. name: mysql

ReplicationController 简称 RC 可以保证在任意时间运行 Pod 的副本数量,能够保证 Pod 总是可用的。

执行以下命令,部署 MySQL 5.7:

kubectl apply -f mysql-local.yaml

三、部署 Nacos

创建配置文件 nacos-standalone-start.yaml 内容如下:

  1. ---
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: nacos-standalone
  6. labels:
  7. app: nacos-standalone
  8. spec:
  9. type: ClusterIP
  10. clusterIP: None
  11. ports:
  12. - port: 8848
  13. name: server
  14. targetPort: 8848
  15. - port: 9848
  16. name: client-rpc
  17. targetPort: 9848
  18. - port: 9849
  19. name: raft-rpc
  20. targetPort: 9849
  21. ## 兼容1.4.x版本的选举端口
  22. - port: 7848
  23. name: old-raft-rpc
  24. targetPort: 7848
  25. selector:
  26. app: nacos
  27. ---
  28. apiVersion: v1
  29. kind: ConfigMap
  30. metadata:
  31. name: nacos-cm
  32. data:
  33. mysql.host: "mysql"
  34. mysql.db.name: "nacos_devtest"
  35. mysql.port: "3306"
  36. mysql.user: "nacos"
  37. mysql.password: "nacos"
  38. ---
  39. apiVersion: apps/v1
  40. kind: Deployment
  41. metadata:
  42. name: nacos
  43. spec:
  44. replicas: 1
  45. template:
  46. metadata:
  47. labels:
  48. app: nacos
  49. annotations:
  50. pod.alpha.kubernetes.io/initialized: "true"
  51. spec:
  52. affinity:
  53. podAntiAffinity:
  54. requiredDuringSchedulingIgnoredDuringExecution:
  55. - labelSelector:
  56. matchExpressions:
  57. - key: "app"
  58. operator: In
  59. values:
  60. - nacos
  61. topologyKey: "kubernetes.io/hostname"
  62. containers:
  63. - name: nacos
  64. imagePullPolicy: Always
  65. image: nacos/nacos-server:latest
  66. resources:
  67. requests:
  68. memory: "1Gi"
  69. cpu: "500m"
  70. ports:
  71. - containerPort: 8848
  72. name: client
  73. - containerPort: 9848
  74. name: client-rpc
  75. - containerPort: 9849
  76. name: raft-rpc
  77. - containerPort: 7848
  78. name: old-raft-rpc
  79. env:
  80. - name: SPRING_DATASOURCE_PLATFORM
  81. value: "mysql"
  82. - name: MYSQL_SERVICE_HOST
  83. valueFrom:
  84. configMapKeyRef:
  85. name: nacos-cm
  86. key: mysql.host
  87. - name: MYSQL_SERVICE_DB_NAME
  88. valueFrom:
  89. configMapKeyRef:
  90. name: nacos-cm
  91. key: mysql.db.name
  92. - name: MYSQL_SERVICE_PORT
  93. valueFrom:
  94. configMapKeyRef:
  95. name: nacos-cm
  96. key: mysql.port
  97. - name: MYSQL_SERVICE_USER
  98. valueFrom:
  99. configMapKeyRef:
  100. name: nacos-cm
  101. key: mysql.user
  102. - name: MYSQL_SERVICE_PASSWORD
  103. valueFrom:
  104. configMapKeyRef:
  105. name: nacos-cm
  106. key: mysql.password
  107. - name: MODE
  108. value: "standalone"
  109. - name: NACOS_SERVER_PORT
  110. value: "8848"
  111. - name: PREFER_HOST_MODE
  112. value: "hostname"
  113. selector:
  114. matchLabels:
  115. 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 对象:

  1. kubectl create secret docker-registry aliyuncs \
  2. --docker-server=registry.cn-guangzhou.aliyuncs.com \
  3. --docker-username=zltdiablo@163.com \
  4. --docker-password=xxxxxx

docker-registry 指定 secret 的名称
docker-server 仓库地址
docker-username 仓库账号
docker-password 仓库密码
创建成功后,可以使用以下命令查看密钥信息:

kubectl get secret aliyuncs --output=yaml

4.2. 部署 provider 服务

创建配置文件 provider.yaml 内容如下:

  1. ---
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: zlt-nacos-provider
  6. spec:
  7. clusterIP: None
  8. selector:
  9. app: zlt-nacos-provider
  10. ports:
  11. - protocol: TCP
  12. port: 20880
  13. targetPort: 20880
  14. ---
  15. apiVersion: apps/v1
  16. kind: Deployment
  17. metadata:
  18. name: zlt-nacos-provider
  19. spec:
  20. replicas: 1
  21. selector:
  22. matchLabels:
  23. app: zlt-nacos-provider
  24. template:
  25. metadata:
  26. labels:
  27. app: zlt-nacos-provider
  28. spec:
  29. imagePullSecrets:
  30. - name: aliyuncs
  31. containers:
  32. - name: server
  33. image: registry.cn-guangzhou.aliyuncs.com/zlt-test/nacos-provider:1.0-SNAPSHOT
  34. imagePullPolicy: IfNotPresent
  35. ports:
  36. - containerPort: 20880
  37. env:
  38. - name: DUBBO_REGISTRY_ADDRESS
  39. value: "nacos://nacos-standalone:8848"
  40. - name: DUBBO_IP_TO_REGISTRY
  41. 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 内容如下:

  1. ---
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: zlt-nacos-consumer
  6. spec:
  7. clusterIP: None
  8. selector:
  9. app: zlt-nacos-consumer
  10. ports:
  11. - name: web
  12. port: 8080
  13. targetPort: 8080
  14. ---
  15. apiVersion: apps/v1
  16. kind: Deployment
  17. metadata:
  18. name: zlt-nacos-consumer
  19. spec:
  20. replicas: 1
  21. selector:
  22. matchLabels:
  23. app: zlt-nacos-consumer
  24. template:
  25. metadata:
  26. labels:
  27. app: zlt-nacos-consumer
  28. spec:
  29. imagePullSecrets:
  30. - name: aliyuncs
  31. containers:
  32. - name: server
  33. image: registry.cn-guangzhou.aliyuncs.com/zlt-test/nacos-consumer:1.0-SNAPSHOT
  34. imagePullPolicy: IfNotPresent
  35. ports:
  36. - containerPort: 8080
  37. env:
  38. - name: DUBBO_REGISTRY_ADDRESS
  39. value: "nacos://nacos-standalone:8848"
  40. - name: DUBBO_IP_TO_REGISTRY
  41. 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

 

 

 


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/169536
推荐阅读
相关标签
  

闽ICP备14008679号