跳转至

Nacos 集群化部署

nacos 集群化部署

参考文档

部署步骤

1、 从github 上clone nacos-k8s 仓库

## 创建临时目录
$ cd $(mktemp -d )

$ git clone https://github.com/nacos-group/nacos-k8s.git && cd nacos-k8s/operator

2、 执行部署命令,用于创建operator 和crd 资源

# 直接使用helm方式安装operator
helm install nacos-operator ./chart/nacos-operator 

# 如果没有helm, 使用kubectl进行安装, 默认安装在default下面
kubectl apply -f chart/nacos-operator/nacos-operator-all.yaml

3、部署完成operator 之后,开始部署nacos

单节点

$ cat >> config/samples/nacos.yaml << EOF
apiVersion: nacos.io/v1alpha1
kind: Nacos
metadata:
  name: nacos
spec:
  type: standalone
  image: nacos/nacos-server:1.4.1
  replicas: 1

EOF

# 安装demo standalone模式
$ kubectl apply -f config/samples/nacos.yaml

多节点(集群模式)

cat >>  config/samples/nacos_cluster.yaml << EOF

apiVersion: nacos.io/v1alpha1
kind: Nacos
metadata:
  name: nacos
spec:
  type: cluster
  image: nacos/nacos-server:1.4.1
  replicas: 3
EOF
$ kubectl apply -f config/samples/nacos_cluster.yaml

全部CRD配置

全部参数如下

参数 描述 参考值
spec.type 集群类型 目前支持standalone 和 cluster
spec.image 镜像地址,兼容社区镜像 nacos/nacos-server:1.4.1
spec.mysqlInitImage mysql数据初始镜像地址,mysql模式下将自动导入数据库 registry.cn-hangzhou.aliyuncs.com/shenkonghui/mysql-client
spec.replicas 实例数量 1
spec.database.type 数据库类型 目前支持mysql和embedded
spec.database.mysqlHost mysql连接地址 默认mysql
spec.database.mysqlPort mysql端口 默认3306
spec.database.mysqlUser mysql用户 默认root
spec.database.mysqlPassword mysql密码 默认123456
spec.database.mysqlDb mysq数据库 默认nacos
spec.volume.enabled 是否开启数据卷 true,如果数据库类型是embedded,请开启数据卷,否则重启pod数据丢失
spec.volume.requests.storage 存储大小 1Gi
spec.volume.storageClass 存储类 default
spec.config 其他自定义配置,自动映射到custom.propretise 格式和configmap兼容
spec.k8sWrapper 支持通用k8配置,即PodSpec对象,会自动覆盖所有内部pod对象

数据库配置

embedded数据库

apiVersion: nacos.io/v1alpha1
kind: Nacos
metadata:
  name: nacos
spec:
  type: standalone
  image: nacos/nacos-server:1.4.1
  replicas: 1
  database:
    type: embedded
  # 启动数据卷,不然重启后数据丢失
  volume:
    enabled: true
    requests:
      storage: 1Gi
    storageClass: default

mysql数据库

该模式下需要提供外部mysql连接信息,会自动创建创建nacos数据库,并执行初始化sql

apiVersion: nacos.io/v1alpha1
kind: Nacos
metadata:
  name: nacos
spec:
  type: standalone
  image: nacos/nacos-server:1.4.1
  replicas: 1
  database:
    type: mysql
    mysqlHost: mysql
    mysqlDb: nacos
    mysqlUser: root
    mysqlPort: "3306"
    mysqlPassword: "123456"

自定义配置

通过环境变量配置 兼容nacos-docker项目, https://github.com/nacos-group/nacos-docker

apiVersion: nacos.io/v1alpha1
kind: Nacos
metadata:
  name: nacos
spec:
  type: standalone
  env:
  - key: JVM_XMS
    value: 2g

集群化部署yaml

如果不想使用上述方案部署,也可以直接使用yaml 文件部署nacos 集群

apiVersion: apps/v1
kind: StatefulSet 
metadata:
  name: nacos-cluster
  namespace: prod
spec:
  serviceName: nacos-headless 
  replicas: 3
  selector:
    matchLabels:
      app: nacos-cluster
  template:
    metadata:
      labels:
        app: nacos-cluster
    spec:
      affinity:
      containers:
      - name: nacos
        image: nacos/nacos-server:v2.4.3
        env:
        - name: MODE
          value: "cluster"
        - name: NACOS_SERVERS
          value: "nacos-cluster-0.nacos-headless.prod.svc.cluster.local:8848 nacos-cluster-1.nacos-headless.prod.svc.cluster.local:8848 nacos-cluster-2.nacos-headless.prod.svc.cluster.local:8848"
        - name: SPRING_DATASOURCE_PLATFORM
          value: "mysql"
        - name: MYSQL_SERVICE_HOST
          value: "mysql.host"
        - name: MYSQL_SERVICE_PORT
          value: "3306"
        - name: MYSQL_SERVICE_DB_NAME
          value: "nacos"
        - name: MYSQL_SERVICE_USER
          value: "nacos"
        - name: MYSQL_SERVICE_PASSWORD
          value: "password"
        - name: NACOS_AUTH_ENABLE
          value: "true"  
        - name: NACOS_AUTH_IDENTITY_KEY
          value: "nacos"  
        - name: NACOS_AUTH_IDENTITY_VALUE
          value: "nacos"  
        - name: NACOS_AUTH_TOKEN
          value: "aHVpcm9uZ2tlamkxMDEwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA="
        - name: JVM_XMS
          value: "1g"
        - name: JVM_XMX
          value: "2g"
        ports:
        - containerPort: 8848
        - containerPort: 9848
        volumeMounts:
        - name: nacos-log
          mountPath: /home/nacos/logs
  volumeClaimTemplates:  
  - metadata:
      name: nacos-log
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 5Gi
      storageClassName: "pidn-cnfs-daa-02"

---
apiVersion: v1
kind: Service
metadata:
  name: nacos-headless
  namespace: prod
spec:
  clusterIP: None
  selector:
    app: nacos-cluster
  ports:
    - name: http
      port: 8848
      targetPort: 8848
    - name: grpc
      port: 9848
      targetPort: 9848

---
apiVersion: v1
kind: Service
metadata:
  name: nacos-svc
  namespace: prod
spec:
  type: ClusterIP  
  selector:
    app: nacos-cluster
  ports:
    - name: http
      port: 8848
      targetPort: 8848
    - name: grpc
      port: 9848
      targetPort: 9848