nacos-k8s

nacos-k8s 是Nacos官方维护的项目,可以使用 helm 直接在 k8s 集群中部署 nacos 集群(包含公有云)

部署步骤

找到数据库表结构

在你要安装的版本号的配置中找到 SQL 文件进行创建库操作,例如 github.com/alibaba/nacos/tree/2.4.1/distribution/conf

自定义 helm 资源和配置

在公有云上部署,还需要修改下对应资源的类型,例如建立 LB

service

增加了自动获取 gcp 预留的 IP,和service改为LB类型

yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
service:
  #type: ClusterIP
  #type: NodePort
  type: LoadBalancer
  port: 8848
  nodePort: 30000
  # 这样可以使用静态IP
  loadBalancerIP: 192.168.0.1
  annotations:
    # 这个annotation 原自官方创建 load-balancer的方式
    cloud.google.com/load-balancer-type: Internal
  labels: {}

cloud.google.com/load-balancer-type GKE 的 service LB 类型的参数 [1]

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: “intranet” ACK 的 service LB 类型的参数 [2]

template

yaml
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
# cat templates/service.yaml
# 集群模式建立 headless service
{{- if and (eq .Values.global.mode "cluster") }}
apiVersion: v1
kind: Service
metadata:
  name: nacos-hs
  namespace: {{ .Values.namespace }}
spec:
  clusterIP: None
  publishNotReadyAddresses: true
  ports:
    - port: {{ .Values.service.port }}
      targetPort: {{ .Values.nacos.serverPort }}
      protocol: TCP
      name: http
    - port: {{ add .Values.service.port 1000}}
      name: client-rpc
      targetPort: {{add .Values.nacos.serverPort 1000}}
    - port: {{add .Values.service.port 1001}}
      name: raft-rpc
      targetPort: {{add .Values.nacos.serverPort 1001}}
    ## 兼容1.4.x版本的选举端口
    - port: 7848
      name: old-raft-rpc
      targetPort: 7848
      protocol: TCP
  selector:
    app.kubernetes.io/name: {{ include "nacos.name" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
---
{{- if and (eq .Values.global.mode "cluster") }}
apiVersion: v1
kind: Service
metadata:
  name: nacos-hs-internal
  namespace: {{ .Values.namespace }}
  annotations:
  {{- range $key, $value := .Values.service.annotations }}
    {{ $key }}: {{ $value | quote }}
  {{- end }}
spec:
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilyPolicy: SingleStack
  {{- if .Values.service.loadBalancerIP }}
  loadBalancerIP: {{ .Values.service.loadBalancerIP }}
  {{- end }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: {{ .Values.nacos.serverPort }}
      protocol: TCP
      name: http
    - port: {{ add .Values.service.port 1000}}
      name: client-rpc
      targetPort: {{add .Values.nacos.serverPort 1000}}
    - port: {{add .Values.service.port 1001}}
      name: raft-rpc
      targetPort: {{add .Values.nacos.serverPort 1001}}
    ## 兼容1.4.x版本的选举端口
    - port: 7848
      name: old-raft-rpc
      targetPort: 7848
      protocol: TCP
  selector:
    app.kubernetes.io/name: {{ include "nacos.name" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
  type: {{ .Values.service.type }}
  {{- end }}
---
# 单机模式使用cs,不增加 LB
{{- if and (eq .Values.global.mode "standalone") }}
apiVersion: v1
kind: Service
metadata:
  name: nacos-cs
  namespace: {{ .Values.namespace }}
  labels:
  {{- toYaml .Values.service.labels | nindent 4 }}
  annotations:
  {{- range $key, $value := .Values.service.annotations }}
    {{ $key }}: {{ $value | quote }}
  {{- end }}
spec:
  type: {{ .Values.service.type }}
  {{- if .Values.service.loadBalancerIP }}
  loadBalancerIP: {{ .Values.service.loadBalancerIP }}
  {{- end }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: {{ .Values.nacos.serverPort }}
      protocol: TCP
      name: http
    - port: {{ add .Values.service.port 1000}}
      name: client-rpc
      targetPort: {{add .Values.nacos.serverPort 1000}}
    - port: {{add .Values.service.port 1001}}
      name: raft-rpc
      targetPort: {{add .Values.nacos.serverPort 1001}}
    ## 兼容1.4.x版本的选举端口
    - port: 7848
      name: old-raft-rpc
      targetPort: 7848
      protocol: TCP
      {{- if eq .Values.service.type "NodePort" }}
      nodePort: {{ .Values.service.nodePort }}
  {{- end }}
  selector:
    app.kubernetes.io/name: {{ include "nacos.name" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

最后直接使用 helm 安装即可

bash
1
helm upgrade nacos . -f values.yaml --install --create-namespace -n nacos --dry-run

Reference