1. 程式人生 > 其它 >helm 部署 nacos 叢集

helm 部署 nacos 叢集

資源清單

本文安裝 Nacos 依賴 K8S叢集helm ,本文不提供 K8S叢集helm 安裝方式

使用此文件部署,需要自行解決 storageClass 問題 ( NFS, ceph, openebs等 )

使用此文件部署,需要自行解決 外部資料庫問題 ( mysql 主從 )

使用此文件部署,需要自行解決 ingress nginx 問題,部署服務會定義ingress nginx ( 也可以不啟用 ingress,使用 NodePort 進行訪問 )

軟體 版本
chart 2.0.1
nacos 2.0.4
kubernetes v1.19.3
helm v3.8.1
mysql 主從 5.7.26
ingress nginx 3.15.2

helm 安裝 Nacos 叢集

1. 新增 nacos helm 倉庫

$ helm repo add ygqygq2 https://ygqygq2.github.io/charts/

2. 查詢 nacos 資源

$ helm search repo nacos
ME         	CHART VERSION	APP VERSION	DESCRIPTION                                       
ygqygq2/nacos	2.0.1        	2.0.4      	Chart for nacos, an easy-to-use dynamic service...

3. 拉取 nacos chart 到本地

$ mkdir /root/nacos && cd /root/nacos

# 拉取 chart 到本地 /root/nacos 目錄
$ helm pull ygqygq2/nacos --version 2.0.1


$ tar -xvf nacos-2.0.1.tgz
$ cp nacos/values.yaml ./values-test.yaml

# 檢視當前目錄層級
$ tree -L 2
.
├── nacos
│   ├── Chart.yaml
│   ├── LICENSE
│   ├── README.md
│   ├── templates
│   └── values.yaml
├── nacos-2.0.1.tgz
└── value-test.yaml

4. 對本地 values-test.yaml 修改

  • 檢視叢集 storageclasses
$ kubectl get storageclasses.storage.k8s.io 
NAME                   PROVISIONER           RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
openebs-jiva-default   jiva.csi.openebs.io   Delete          Immediate              true                   33d
  • 修改配置

如需定義其他配置,可以檢視 nacos/values.yaml 檔案配置,然後複製到 values-test.yaml 中進行定義

$ cat values-test.yaml 

## 全域性配置定義 storageClass: "",會使用叢集配置的 openebs 提供的 storageClass,
## 使用此文件部署,需要自行解決 storageClass 問題 (ceph, nfs, 公有云提供的 nfs)

# 副本個數
replicaCount: 3


service:
  type: ClusterIP  # 一般不用修改
  ingressPort: 8848
  ports:
    http:
      port: 8848  # Service port number for client-a port.
      protocol: TCP  # Service port protocol for client-a port.


persistentVolume:   # 是否儲存持久化
  enabled: true     # 啟用持久化儲存
  storageClass: "openebs-jiva-default"     # 設定 storageClass
  accessMode: ReadWriteOnce
  annotations: {}
    # helm.sh/resource-policy: keep
  size: 10Gi  # 大小為 10G


ingress:  # 是否使用nginx暴露域名或埠
  enabled: true     # 啟用 ingress
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  ingressClassName: ""
  path: /nacos
  pathType: ImplementationSpecific
  hosts:
    - nacos.evescn.com    # 設定域名
  tls: [] # 未啟動 https認證


mysql:
  enabled: false
  # 啟用外部儲存,而不是自建 mysql 主從
  # 可以自建 nacos 使用者,這裡此處直接使用了 root 賬戶進行 mysql 叢集登陸
  # 需要去資料庫新建 nacos 資料庫
  external:
    mysqlMasterHost: "mysql-cluster-mysql.test-middleware"
    mysqlDatabase: "nacos"
    mysqlMasterPort: "3306"
    mysqlMasterUser: "root"
    mysqlMasterPassword: "root123"
    mysqlSlaveHost: "mysql-cluster-mysql-slave.test-middleware"
    mysqlSlavePort: "3306"

5. 修改模板檔案

root/nacos/nacos/secret copy.yaml 模板檔案需要修改,否則安裝會報錯

  • 直接安裝報錯資訊
$ helm  install  nacos-cluster nacos -f value-test.yaml | tee 2.log
Error: INSTALLATION FAILED: YAML parse error on nacos/templates/secret.yaml: error converting YAML to JSON: yaml: line 12: could not find expected ':'


# /root/nacos/nacos/secret.yml 模板檔案渲染報錯
  • 原模板檔案
$ cat /root/nacos/nacos/secret.yaml.copy

apiVersion: v1
kind: Secret
metadata:
  name: {{ template "nacos.fullname" . }}
  labels:
    app: {{ template "nacos.name" . }}
    chart: {{ template "nacos.chart" . }}
    release: "{{ .Release.Name }}"
    heritage: "{{ .Release.Service }}"
    {{- if .Values.labels }}
{{ toYaml .Values.labels | indent 4 }}
    {{- end }}
data:
{{- if not .Values.mysql.enabled }}
{{ toYaml .Values.mysql.external | indent 2 | b64enc }}
{{- else }}
  mysqlMasterHost: {{ (include "nacos.mysql.primaryHost" .) | b64enc | quote }}
  mysqlDatabase: {{ .Values.mysql.auth.database | b64enc | quote }}
  mysqlMasterPort: {{ "3306" | b64enc }}
  mysqlMasterUser: {{ .Values.mysql.auth.username | b64enc | quote }}
  mysqlMasterPassword: {{ .Values.mysql.auth.password | b64enc | quote }}
  mysqlSlaveHost: {{ (include "nacos.mysql.secondaryHost" .) | b64enc | quote }}
  mysqlSlavePort: {{ "3306" | b64enc }}
{{- end }}
{{- if .Values.secret.enabled }}
{{- range $key, $value := .Values.secret.data }}
  {{ $key }}: {{ $value | b64enc | quote }}
{{- end }}
{{- end }}
  • 修改後的模板檔案
$ cat /root/nacos/nacos/templates/secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: {{ template "nacos.fullname" . }}
  labels:
    app: {{ template "nacos.name" . }}
    chart: {{ template "nacos.chart" . }}
    release: "{{ .Release.Name }}"
    heritage: "{{ .Release.Service }}"
    {{- if .Values.labels }}
{{ toYaml .Values.labels | indent 4 }}
    {{- end }}
data:  # 修改了 data中 if else 配置, 對 if else 配置進行了調整
{{- if .Values.mysql.enabled }}
  mysqlMasterHost: {{ (include "nacos.mysql.primaryHost" .) | b64enc | quote }}
  mysqlDatabase: {{ .Values.mysql.auth.database | b64enc | quote }}
  mysqlMasterPort: {{ "3306" | b64enc }}
  mysqlMasterUser: {{ .Values.mysql.auth.username | b64enc | quote }}
  mysqlMasterPassword: {{ .Values.mysql.auth.password | b64enc | quote }}
  mysqlSlaveHost: {{ (include "nacos.mysql.secondaryHost" .) | b64enc | quote }}
  mysqlSlavePort: {{ "3306" | b64enc }}
{{- else }}
  mysqlMasterHost: {{ .Values.mysql.external.mysqlMasterHost | b64enc | quote }}
  mysqlDatabase: {{ .Values.mysql.external.mysqlDatabase | b64enc | quote }}
  mysqlMasterPort: {{ .Values.mysql.external.mysqlMasterPort | b64enc }}
  mysqlMasterUser: {{ .Values.mysql.external.mysqlMasterUser | b64enc | quote }}
  mysqlMasterPassword: {{ .Values.mysql.external.mysqlMasterPassword | b64enc | quote}}
  mysqlSlaveHost: {{ .Values.mysql.external.mysqlSlaveHost | b64enc | quote }}
  mysqlSlavePort: {{ .Values.mysql.external.mysqlSlavePort | b64enc }}
{{- end }}
{{- if .Values.secret.enabled }}
{{- range $key, $value := .Values.secret.data }}
  {{ $key }}: {{ $value | b64enc | quote }}
{{- end }}
{{- end }}

6. 建立資料庫

# 啟動一個臨時容器連線 mysql 資料庫
$ kubectl run mysql-cluster-mysql-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mysql:5.7.26 --namespace test-middleware --command -- bash

## 登陸 MySQL Master節點
$ mysql -h mysql-cluster-mysql.test-middleware -uroot -p
Enter password: # root123

mysql> create database nacos default character set utf8 collate utf8_general_ci;

7. 安裝 nacos 叢集

# 建立 test-middleware 名稱空間
$ kubectl create ns test-middleware

# 安裝 nacos 叢集
$ helm -n test-middleware install  nacos-cluster nacos -f value-test.yaml

## helm -n NAMESAPCE install SERVER_NAME FILE_NAME -f CONFIG_FILE
-n 指定 kubernetes 叢集名稱空間
-f 指定使用的配置檔案,檔案中定義的配置可以覆蓋 mysql/values.yaml 檔案中配置



NAME: nacos-cluster
LAST DEPLOYED: Mon May  9 21:26:22 2022
NAMESPACE: test-middleware
STATUS: deployed
REVISION: 1
NOTES:
The nacos has been installed.

Nacos can be accessed:

    
  * The application URL:
    http://nacos.evescn.com/nacos

  * Within your cluster, at the following DNS name at port 8848:

    nacos-cluster.test-middleware.svc

  * From outside the cluster, run these commands in the same shell:

    export POD_NAME=$(kubectl get pods --namespace test-middleware -l "app=nacos,release=nacos-cluster" -o jsonpath="{.items[0].metadata.name}")
    echo "Visit http://127.0.0.1:8848/nacos to use nacos"
    kubectl port-forward --namespace test-middleware $POD_NAME 8848:8848

    # The default user is: nacos
    # The default password is: nacos

8. 驗證 nacos 叢集

  • 檢視 pod
$ kubectl get pods --namespace test-middleware -l "app=nacos,release=nacos-cluster"
NAME                           READY   STATUS      RESTARTS   AGE
nacos-cluster-0                1/1     Running     0          24m
nacos-cluster-1                1/1     Running     0          22m
nacos-cluster-2                1/1     Running     0          18m
  • 檢視 pvc
$ kubectl -n test-middleware get pvc
NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS           AGE
data-storage-nacos-cluster-0        Bound    pvc-0438916d-7ff6-4642-acb2-703e72ddb6b5   10Gi       RWO            openebs-jiva-default   7m53s
data-storage-nacos-cluster-1        Bound    pvc-652cb7b9-1a9c-428c-be56-45dfaa3d0c88   10Gi       RWO            openebs-jiva-default   6m7s
data-storage-nacos-cluster-2        Bound    pvc-08a67a3e-8855-4a3b-b918-4de97c96cb33   10Gi       RWO            openebs-jiva-default   2m11s
  • 檢視 MySQL 資料庫

# 啟動一個臨時容器連線 mysql 資料庫
$ kubectl run mysql-cluster-mysql-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mysql:5.7.26 --namespace test-middleware --command -- bash

# 登陸 MySQL Master節點
$ mysql -h mysql-cluster-mysql.test-middleware -uroot -p
Enter password: # root123

mysql> use nacos;
mysql> show tables;
+----------------------+
| Tables_in_nacos      |
+----------------------+
| config_info          |
| config_info_aggr     |
| config_info_beta     |
| config_info_tag      |
| config_tags_relation |
| group_capacity       |
| his_config_info      |
| permissions          |
| roles                |
| tenant_capacity      |
| tenant_info          |
| users                |
+----------------------+
12 rows in set (0.00 sec)
  • 登陸 web 頁面檢視

http://nacos.evescn.com/nacos/

參考文件

https://artifacthub.io/packages/helm/ygqygq2/nacos?modal=values

# 修改 helm 模板參考文件
https://helm.sh/zh/docs/chart_template_guide/control_structures/
https://www.cnblogs.com/ssgeek/p/15511387.html