> 文章列表 > k8s部署nacos2.1.1集群

k8s部署nacos2.1.1集群

k8s部署nacos2.1.1集群

数据库准备

下载nacos二进制包,需要nacos-mysql.sql文件
https://github.com/alibaba/nacos/releases/download/2.1.1/nacos-server-2.1.1.tar.gz

use nacos;
source nacos-mysql.sql

nacos配置文件

application.properties

# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_APPLICATION_PORT:8848}
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:""}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.user=${MYSQL_SERVICE_USER}
db.password=${MYSQL_SERVICE_PASSWORD}
 The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
nacos.core.auth.enabled=${NACOS_AUTH_ENABLE:true}
 worked when nacos.core.auth.system.type=nacos
 The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
 The default token:
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}
 Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security}
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
# default current work dir
server.tomcat.basedir=file:.
## spring security config
 turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,//*.css,//*.js,//*.html,//*.map,//*.svg,//*.png,//*.ico,/console-fe/public/,/v1/auth/,/v1/console/health/,/actuator/,/v1/console/server/}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
# metrics for promethus
management.endpoints.web.exposure.include=*

Dockerfile

FROM nacos/nacos-server:v2.1.1
COPY application.properties /home/nacos/conf/

configmap

configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: nacos2-cmnamespace: release
data:mysql.host: "192.168.x.x"mysql.db.name: "nacos"mysql.port: "3306"mysql.user: "nacos"mysql.password: "nacos"

nacos-headless

eso-nacos-headless.yaml

apiVersion: v1
kind: Service
metadata:name: eso-nacos-headlessnamespace: releaselabels:app: eso-nacosannotations:service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:ports:- port: 8848name: servertargetPort: 8848- port: 9848name: client-rpctargetPort: 9848- port: 9849name: raft-rpctargetPort: 9849- port: 7848name: old-raft-rpctargetPort: 7848clusterIP: Noneselector:app: eso-nacos

nacos-statefulset

eso-nacos-statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: eso-nacosnamespace: release
spec:serviceName: eso-nacos-headlessreplicas: 3selector:matchLabels:app: eso-nacostemplate:metadata:labels:app: eso-nacosannotations:pod.alpha.kubernetes.io/initialized: "true"spec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: "app"operator: Invalues:- eso-nacostopologyKey: "kubernetes.io/hostname"containers:- name: eso-nacosimage: harbor.com.cn/library/nacos-server:2.1.1imagePullPolicy: Alwaysresources:requests:memory: "2Gi"cpu: "2000m"ports:- containerPort: 8848name: client- containerPort: 9848name: client-rpc- containerPort: 9849name: raft-rpc- containerPort: 7848name: old-raft-rpcenv:- name: NACOS_REPLICASvalue: "3"- name: MYSQL_SERVICE_HOSTvalueFrom:configMapKeyRef:name: nacos2-cmkey: mysql.host- name: MYSQL_SERVICE_DB_NAMEvalueFrom:configMapKeyRef:name: nacos2-cmkey: mysql.db.name- name: MYSQL_SERVICE_PORTvalueFrom:configMapKeyRef:name: nacos2-cmkey: mysql.port- name: MYSQL_SERVICE_USERvalueFrom:configMapKeyRef:name: nacos2-cmkey: mysql.user- name: MYSQL_SERVICE_PASSWORDvalueFrom:configMapKeyRef:name: nacos2-cmkey: mysql.password- name: MODEvalue: "cluster"- name: NACOS_SERVER_PORTvalue: "8848"- name: PREFER_HOST_MODEvalue: "hostname"- name: SPRING_DATASOURCE_PLATFORMvalue: "mysql"- name: NACOS_SERVERSvalue: "eso-nacos-0.eso-nacos-headless.release.svc.cluster.local:8848 eso-nacos-1.eso-nacos-headless.release.svc.cluster.local:8848 eso-nacos-2.eso-nacos-headless.release.svc.cluster.local:8848"

nacos-service

eso-nacos-service.yaml

apiVersion: v1
kind: Service
metadata:name: eso-nacos-servicenamespace: releaseannotations:nginx.ingress.kubernetes.io/affinity: "true"nginx.ingress.kubernetes.io/session-cookie-name: backendnginx.ingress.kubernetes.io/load-balancer-method: drr
spec:selector:app: eso-nacosports:- name: webport: 8848targetPort: 8848- name: web-clientport: 80targetPort: 8848- name: grpcport: 9848targetPort: 9848

nacos-service-grpc

eso-nacos-service-grpc.yaml

apiVersion: v1
kind: Service
metadata:name: eso-nacos-service-grpcnamespace: releaseannotations:nginx.ingress.kubernetes.io/affinity: "true"nginx.ingress.kubernetes.io/session-cookie-name: backendnginx.ingress.kubernetes.io/load-balancer-method: drr
spec:#type: NodePortselector:app: eso-nacosports:- name: grpcport: 9848targetPort: 9848#nodePort: 31001

nacos-ingress

eso-nacos-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:kubernetes.io/ingress.class: "nginx"name: eso-nacosnamespace: release
spec:rules:- host: eso-nacos.com.cnhttp:paths:- path: /pathType: ImplementationSpecificbackend:service:name: eso-nacos-serviceport: number: 8848