K8S 1.28 使用Helm 安装Nacos 集群
Mysql的param后面最好加上:&serverTimezone=UTC。群集的随便一个IP xxx.xxx.xx.xx:31804/nacos。2.2.1版本后Nacos的鉴权默认是关闭的,需要自己开启。上图看到service对外映射的端口是:31804。出现这个问题,我感觉是Nacos的一个bug。replicaCount:副本数量。注:登陆还是要使用数据库配置的密码。type:选用Mysq
前提条件
已经安装了Helm Helm 3.14.2 安装
我的Helm版本3.14.2
从github上面下载下来nacos-k8s 项目
方法一
git clone https://github.com/nacos-group/nacos-k8s.git
方法二
下载压缩包
解压、进入文件夹
# 解压文件
unzip nacos-k8s-master.zip
# 进入helm目录
cd nacos-k8s-master/helm
# 备份原文件
cp values.yaml values-original.yaml
# 编辑文件
vim values.yaml
编辑文件
# Default values for nacos.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
global:
# mode: standalone
mode: cluster # 集群模式
############################nacos###########################
namespace: nacos # 命名空间
nacos:
image:
repository: nacos/nacos-server
tag: v2.2.3 # nacos 版本 注:2.2.1版本后Nacos的鉴权默认是关闭的,需要自己开启
pullPolicy: IfNotPresent # 拉取策略
plugin: # 插件
enable: true
image:
repository: nacos/nacos-peer-finder-plugin # 用于服务间节点发现
tag: 1.1
pullPolicy: IfNotPresent
replicaCount: 3 # 副本数量
podManagementPolicy: Parallel # pod 管理策略, 默认是根据编号顺序管理增添,Parallel 表示可以同时进行
domainName: cluster.local # 指定集群内Pod的DNS域名
preferhostmode: hostname # Pod调度策略
serverPort: 8848 # 服务端口号
health:
enabled: true # 是否开启健康检查
storage:
# type: embedded
type: mysql # 数据存储 目前只支持 embedded和mysql
db: # 数据库链接信息
host: mysql-primary.mysql # 数据库的主机,我这里mysql-primary代表mysql的service名称,mysql代表命名空间,mysql我搭建的是一个主从复制,这里的service要选择有写操作权限的
name: nacos_config # 数据库名称
port: "3306" # 数据库端口,集群内部端口即可
username: root # 账号
password: "123123" # 密码
param: characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&serverTimezone=UTC # 连接参数
# 以下默认即可
persistence: # 持久化
enabled: false # 默认关闭
data:
accessModes:
- ReadWriteOnce
storageClassName: manual
resources:
requests:
storage: 5Gi
service:
#type: ClusterIP
type: NodePort
port: 8848
nodePort: 30000
...
注意事项
mode: cluster
namespace: nacos
tag:你想接取的版本
replicaCount:副本数量
type:选用Mysql
Mysql的param后面最好加上:&serverTimezone=UTC
安装nacos
# 创建命令空间
kubectl create ns nacos
# 在helm目录下执行
helm install nacos . -n nacos
可能出错(没有就忽略)Error: UPGRADE FAILED: failed to create resource: ConfigMap in version "v1" cannot be handled as a ConfigMap: json: cannot unmarshal number into Go struct field ConfigMap.data of type string
出现这个问题,我感觉是Nacos的一个bug
解决办法是:
# 进入templates文件夹
cd templates
# 编辑configmap资源文件
vim configmap.yaml
# 文件内容 Start
{{- if eq .Values.nacos.storage.type "mysql"}}
apiVersion: v1
kind: ConfigMap
metadata:
name: nacos-cm
namespace: {{ .Values.namespace }}
data:
{{- with .Values.nacos.storage.db }}
mysql.db.host: "{{.host}}" # 加上双引号
mysql.db.name: "{{ .name }}" # 加上双引号
mysql.port: "{{ .port | default 3306}}" # 加上双引号
mysql.user: "{{ .username }}" # 加上双引号
mysql.password: "{{ .password }}" # 加上双引号
mysql.param: "{{ .param | default "characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false" }}" # 加上双引号
{{- end }}
{{- end }}
# 文件内容 End
# 在helm目录下执行更新操作
helm upgrade nacos . -n nacos
# 我建议最好删掉重新安装
helm delete nacos -n nacos
helm install nacos . -n nacos
查看容器运行状况
# 查看nacos命名空间下的pod、service、statefulset资源
kubectl get all -n nacos
NAME READY STATUS RESTARTS AGE
pod/nacos-0 1/1 Running 0 50m
pod/nacos-1 1/1 Running 0 50m
pod/nacos-2 1/1 Running 0 50m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nacos-cs NodePort 10.106.217.14 <none> 8848:31804/TCP,9848:31249/TCP,9849:32202/TCP,7848:30000/TCP 50m
service/nacos-hs ClusterIP None <none> 8848/TCP,9848/TCP,9849/TCP,7848/TCP 50m
NAME READY AGE
statefulset.apps/nacos 3/3 50m
浏览器访问
上图看到service对外映射的端口是:31804
群集的随便一个IP xxx.xxx.xx.xx:31804/nacos
没有登陆页面怎么办
2.2.1版本后Nacos的鉴权默认是关闭的,需要自己开启
开启如下
# 进入templates目录
cd templates
# 编辑statefulset资源
vim statefulset.yaml
# 找到窗口的环境变量env 添加下面的内容,注意和原有的变量保持同级
env:
- name: NACOS_AUTH_ENABLE # 开启鉴权
value: "true"
- name: NACOS_AUTH_IDENTITY_KEY # 账号
value: "nacos"
- name: NACOS_AUTH_IDENTITY_VALUE # 密码
value: "nacos"
- name: NACOS_AUTH_TOKEN # token
value: "Ym1GamIzTWdhWE1nZG1WeWVTQm5iMjlrSUhOdlpuUjNZWEpsQ2c9PQo="
# 在helm目录下执行更新操作
helm upgrade nacos . -n nacos
# 我建议最好删掉重新安装
helm delete nacos -n nacos
helm install nacos . -n nacos
再次访问页面
注:登陆还是要使用数据库配置的密码
Ingress对外暴露
上面的访问每当集群重启后对应的NodePort端口也会跟着变,所以可以采用ingress暴露对应的服务
注:前提需要安装对应的ingress-controller控制器 K8S 1.28 安装ingress-controller控制器-CSDN博客
注:nacos-k8s上面也有对应的ingress资源,但是我看好像只能设置对应的host,我这里用的是路径匹配,所以自己写了一个yaml
创建nacos-ingress.yaml文件
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nacos-ingress # ingress名称
namespace: nacos # 命令空间
annotations:
# nginx.ingress.kubernetes.io/rewrite-target: / # 重写请求,类似nginx。我这里给注释了
spec:
ingressClassName: nginx # ingress 的控制器,选用nginx
rules:
- http:
paths:
- path: /nacos # 匹配路径
pathType: Prefix # 模糊匹配
backend:
service:
name: nacos-cs # 映射service名称
port:
number: 8848 # 映射service端口
创建ingress
# 创建ingress
kubectl create -f nacos-ingress.yaml
# 查看ingress
kubectl get ingress -n nacos
kubectl describe ingress nacos-ingress -n nacos
访问页面
ingress-controller安装节点+匹配路径,
比如我ingress-controller安装在192.168.66.89上面
访问:192.168.66.89/nacos/index.html
更多推荐
所有评论(0)