helm 部署 nacos 叢集
阿新 • • 發佈:2022-05-10
資源清單
本文安裝
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