k8s 部署nacos 使用外部mysql的stateful.yaml 集群
时间: 2024-05-06 17:15:43 浏览: 172
如果您想在 Kubernetes 上部署 Nacos 并使用外部 MySQL 数据库,则可以使用 StatefulSet 来实现高可用性的 Nacos 集群。这里提供一个简单的示例 YAML 文件,您可以根据自己的需求进行修改:
```yaml
apiVersion: v1
kind: Service
metadata:
name: nacos-mysql
labels:
app: nacos
spec:
ports:
- port: 3306
name: mysql
selector:
app: nacos
tier: mysql
clusterIP: None
---
apiVersion: v1
kind: Service
metadata:
name: nacos
labels:
app: nacos
spec:
ports:
- name: http
port: 8848
targetPort: 8848
selector:
app: nacos
tier: server
clusterIP: None
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nacos
spec:
serviceName: nacos
replicas: 3
selector:
matchLabels:
app: nacos
tier: server
template:
metadata:
labels:
app: nacos
tier: server
spec:
containers:
- name: nacos
image: nacos/nacos-server:latest
env:
- name: MODE
value: "cluster"
- name: MYSQL_SERVICE_HOST
value: nacos-mysql
- name: MYSQL_SERVICE_PORT
value: "3306"
- name: MYSQL_DATABASE
value: "nacos"
- name: MYSQL_USER
value: "nacos"
- name: MYSQL_PASSWORD
value: "nacos"
ports:
- containerPort: 8848
name: http
volumeMounts:
- name: nacos-data
mountPath: /home/nacos/data
- name: nacos-sidecar
image: nacos/nacos-sidecar:latest
env:
- name: NACOS_SERVER_ADDR
value: "nacos:8848"
- name: NACOS_NAMESPACE
value: "nacos"
- name: NACOS_LOG_DIR
value: "/home/nacos/logs"
- name: NACOS_LOG_LEVEL
value: "info"
- name: NACOS_CONFIG_DIR
value: "/home/nacos/nacos-config"
volumeMounts:
- name: nacos-data
mountPath: /home/nacos/data
- name: nacos-config
mountPath: /home/nacos/nacos-config
- name: nacos-log
mountPath: /home/nacos/logs
- name: nacos-nginx
image: nginx:1.19.2-alpine
ports:
- containerPort: 80
name: http
volumeMounts:
- name: nginx-conf
mountPath: /etc/nginx/conf.d
- name: nacos-data
mountPath: /usr/share/nginx/html
readOnly: true
volumes:
- name: nginx-conf
configMap:
name: nginx-conf
items:
- key: nacos.conf
path: default.conf
- name: nacos-data
emptyDir: {}
- name: nacos-config
configMap:
name: nacos-config
- name: nacos-log
emptyDir: {}
volumeClaimTemplates:
- metadata:
name: nacos-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
```
上面的 YAML 文件中定义了三个部分:
- `Service`:定义了一个 `nacos-mysql` 的 MySQL 服务,使用了 `None` 类型的 ClusterIP,表示这个服务只能在 Kubernetes 集群内部被访问,不需要提供外部访问。
- `StatefulSet`:定义了一个名为 `nacos` 的 StatefulSet,使用了 `nacos-mysql` 服务作为 MySQL 数据库,并使用了三个副本实例来实现高可用性。其中的模板定义了三个容器实例:`nacos`、`nacos-sidecar` 和 `nacos-nginx`,分别用于启动 Nacos 服务、Sidecar 代理和 Nginx 反向代理。
- `ConfigMap`:定义了两个 ConfigMap,分别用于存储 Nginx 配置文件和 Nacos 配置文件。
注意,该 YAML 文件中使用了一些默认的配置参数,您需要根据自己的需求进行修改,例如 MySQL 的用户名、密码、数据库名称等。此外,还需要创建 `nginx-conf` 和 `nacos-config` 两个 ConfigMap,分别用于存储 Nginx 配置文件和 Nacos 配置文件。您可以根据自己的需求定义这两个 ConfigMap。
最后,您可以使用 `kubectl apply -f <yaml-file>` 命令来部署这个 YAML 文件,部署完毕后,您可以使用 `kubectl get pods` 和 `kubectl get svc` 命令来查看您的 Nacos 集群的状态和服务的 IP 地址。
阅读全文