k8s部署nacos

  • 环境信息
1.AWS环境
2.kubernetes
3.数据库aws  rds
4.istio ingress
  • 参考文档
https://github.com/foxiswho/k8s-nacos-sentinel-rocketmq-zipkin-elasticsearch-redis-mysql
  • 准备
1.首先AWS开通RDS数据库,准备好初始化数据库的表结构,否则会出现问题
2.准备好k8s环境
3.istio ingress进行出网域➜  nacos cat nacos-no-pvc.yaml

➜  nacos ll
total 56
-rw-r--r--  1 zzy  staff   412B  1 20 18:08 ingress-ap.yaml
-rw-r--r--  1 zzy  staff   123B  1 20 18:02 ingress-denyall.yaml
-rw-r--r--  1 zzy  staff   2.8K  1 21 18:00 nacos-no-pvc.yaml
-rw-r--r--  1 zzy  staff   3.0K  1 21 17:49 nacos-no-pvc.yaml.bad
-rw-r--r--  1 zzy  staff   2.7K  1 21 17:12 nacos-no-pvc.yaml20220120
-rw-r--r--  1 zzy  staff   639B  1 21 19:24 nacos-test-ingress.yaml
-rw-r--r--  1 zzy  staff   374B  1 21 17:35 ubuntu.yaml
➜  nacos cat nacos-no-pvc.yaml20220120
#GG##使用自建数据库;使用Ingress发布配置后台###
---
apiVersion: v1
kind: Service
metadata:
  name: nacos-headless
  labels:
    app: nacos-headless
spec:
  ports:
    - port: 8848
      name: server
      targetPort: 8848
  selector:
    app: nacos
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nacos-cm
data:
  mysql.host: "xxxxxxxx.ap-southeast-1.rds.amazonaws.com"  ##AWS数据库地址
  mysql.db.name: "nacos"   ##数据库名称
  mysql.port: "3306"      ##数据库端口
  mysql.user: "mysqluser"  ##数据库用户
  mysql.password: "123456"  ##数据库用户密码
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nacos
spec:
  serviceName: nacos-headless
  replicas: 3
  template:
    metadata:
      labels:
        app: nacos
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                      - nacos-headless
              topologyKey: "kubernetes.io/hostname"
      containers:
        - name: k8snacos
          imagePullPolicy: Always
          image: nacos/nacos-server:latest
          resources:
            requests:
              memory: "2Gi"
              cpu: "1000m"
          ports:
            - containerPort: 8848
              name: client
          env:
            - name: NACOS_REPLICAS
              value: "3"
            - 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: "cluster"
            - name: NACOS_SERVER_PORT
              value: "8848"
            - name: PREFER_HOST_MODE
              value: "hostname"
            - name: NACOS_SERVERS
              value: "nacos-0.nacos-headless.default.svc.cluster.local:8848 nacos-1.nacos-headless.default.svc.cluster.local:8848 nacos-2.nacos-headless.default.svc.cluster.local:8848"
  selector:
    matchLabels:
      app: nacos

###值得注意的是
- name: NACOS_SERVERS 部分的值一定要修改为你部署的namespace,不让会在部署java任务的时候报错,一定要注意!!!!!!!!!!巨坑


  • istio部署ingress暴露
➜  nacos cat nacos-test-ingress.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: nacos-headless
  namespace: default
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "nacos-test.XXX.com"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: nacos-headless
  namespace: default
spec:
  hosts:
  - "nacos-test.XXX.com"
  gateways:
  - nacos-headless
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: nacos-headless
        port:
          number: 8848
➜  nacos
  • 验证配置
➜  nacos kubectl get vs -nnacos
NAME               GATEWAYS             HOSTS                       AGE
nacos-headless     ["nacos-headless"]   ["nacos.XXX.com"]        3d11h
nacos-headless-2   ["nacos-headless"]   ["nacos-test.XXX.com"]   3d11h
➜  nacos kubectl get gw -nnacos
NAME             AGE
nacos-headless   3d11h

 

 

默认的nacos账号密码是:nacos/nacos
  • 坑!!!!

1.数据库初始化导入数据库使用标准的数据格式。

2.- name: NACOS_SERVERS 部分的值一定要修改为你部署的namespace,不让会在部署java任务的时候报错,一定要注意!!!!!!!!!!巨坑

3.nacos数据库修改密码

默认的nacos账号密码都是nacos
但是导入带有数据的数据库时会出现登录用户密码错误的问题
解决办法:
直接连接数据库进行修改user的表
密码是被加密的可以使用一下的密码明文为admin
$2a$10$YrC76q2zs2zLLlUljW5MzubUS0L2hKtMYfjDQCmtWkNLFjFTCf9zO

 

 注意:修改完数据库需要重新apply一下,这时候登录nacos报密码错误时,修改密码,再次重启nacos,才能登录

 

posted @ 2022-01-25 11:15  B_en′Pǎo  阅读(341)  评论(0)    收藏  举报