k8s部署nacos集群并使用postgresql作为存储,jdk版本21
构建镜像dockerfile
FROM nacos/nacos-server:v3.1.1
RUN mkdir -p /home/nacos/plugins/datasource
COPY nacos-postgresql-datasource-plugin-ext-1.0.0-SNAPSHOT.jar /home/nacos/plugins/datasource
COPY postgresql-42.7.3.jar /home/nacos/plugins/datasourcenacos插件下载地址
下载地址
生成NACOS_AUTH_TOKEN
openssl rand -base64 32部署yaml,nacos-cluster.yaml
---
apiVersion: v1
kind: Service
metadata:
name: nacos-headless
labels:
app: nacos-headless
spec:
type: ClusterIP
clusterIP: None
ports:
- port: 8848
name: server
targetPort: 8848
- port: 9848
name: client-rpc
targetPort: 9848
- port: 9849
name: raft-rpc
targetPort: 9849
- port: 7848
name: old-raft-rpc
targetPort: 7848
- port: 8080
name: console
targetPort: 8080
selector:
app: nacos
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nacos-cm
data:
db.url.0: "jdbc:postgresql://postgres-headless:5432/nacos"
db.user: "用户名"
db.password: "密码"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nacos
spec:
serviceName: nacos-headless
replicas: 3
selector:
matchLabels:
app: nacos
template:
metadata:
labels:
app: nacos
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "register"
operator: In
values:
- nacos
topologyKey: "kubernetes.io/hostname"
containers:
- name: nacos
imagePullPolicy: IfNotPresent
image: 上面build的镜像地址
resources:
requests:
memory: "2Gi"
cpu: "500m"
startupProbe:
initialDelaySeconds: 30
failureThreshold: 3
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 8080
timeoutSeconds: 2
livenessProbe:
initialDelaySeconds: 10
failureThreshold: 3
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 8080
timeoutSeconds: 2
readinessProbe:
initialDelaySeconds: 5
failureThreshold: 3
periodSeconds: 5
successThreshold: 1
tcpSocket:
port: 8080
timeoutSeconds: 2
ports:
- containerPort: 8848
name: client
- containerPort: 9848
name: client-rpc
- containerPort: 9849
name: raft-rpc
- containerPort: 7848
name: old-raft-rpc
- containerPort: 8080
name: console
env:
- name: NACOS_REPLICAS
value: "3"
- name: SPRING_SQL_INIT_PLATFORM
value: "postgresql"
- name: DB_NUM
value: "1"
- name: DB_URL_0
valueFrom:
configMapKeyRef:
name: nacos-cm
key: db.url.0
- name: DB_USER
valueFrom:
configMapKeyRef:
name: nacos-cm
key: db.user
- name: DB_PASSWORD
valueFrom:
configMapKeyRef:
name: nacos-cm
key: db.password
- name: DB_POOL_CONFIG_DRIVER_CLASS_NAME
value: "org.postgresql.Driver"
- name: MODE
value: "cluster"
- name: NACOS_SERVER_PORT
value: "8848"
- name: PREFER_HOST_MODE
value: "hostname"
- name: NACOS_AUTH_TOKEN
value: "上面命令生成的token"
- name: NACOS_AUTH_IDENTITY_KEY
value: "serverIdentity"
- name: NACOS_AUTH_IDENTITY_VALUE
value: "security"
- 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"部署
kubectl create -f nacos-cluster.yaml部署后截图

创建nacos后台ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nacos
annotations:
higress.io/load-balance: "least_conn"
spec:
ingressClassName: higress
tls:
- hosts:
- 域名
secretName: xxx
rules:
- host: 域名
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nacos-headless
port:
number: 8080