k8s部署nacos小记
k8s部署nacos小记背景创建数据库并授权提供文件存储一个,可直接按照本文的nfs方式挂载,云厂商提供的静态挂载方式未必兼容,或者使用storageclass动态挂载也可。创建pv创建pvc创建configmap创建StatefulSet创建service nacos-hs配置,用于集群内网访问创建service nacos-ig配置,用于腾讯云ingress外网访问背景官方文档项目使用Naco
·
k8s部署nacos小记
背景
官方文档
Nacos采用的是Distro协议和Raft协议。对于非临时数据,Nacos采用的是Raft协议,而临时数据Nacos采用的是Distro协议。简单说一下Distro,Distro协议被定位为临时数据的一致性协议(阿里设计的):该类型协议不需要把数据存储到磁盘或者数据库,因为临时数据通常和服务器保持一个session会话,该会话只要存在,数据就不会丢失。
使用Nacos作为服务注册中心和配置管理中心。
本文主要用到了外置mysql和文件存储,提前准备好即可。
Nacos是部署在k8s中的,我们部署的版本1.3.2,下载地址:https://github.com/alibaba/nacos/releases/download/1.3.2/nacos-server-1.3.2.zip
创建数据库并授权
create database nacos default charset 'utf8' collate 'utf8_bin';
grant all on nacos.* to 'nacos'@'%' identified by 'xxxxxx';
flush privileges;
创建数据库 nacos, 从下载安装包中找到conf/nacos-mysql.sql,执行。
提供文件存储一个,可直接按照本文的nfs方式挂载,云厂商提供的静态挂载方式未必兼容,或者使用storageclass动态挂载也可。
创建pv
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nacos-1
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 50Gi
mountOptions:
- hard
- nfsvers=4
nfs:
path: /logs
server: 文件存储地址
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nacos-2
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 50Gi
mountOptions:
- hard
- nfsvers=4
nfs:
path: /data
server: 文件存储地址
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nacos-3
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 50Gi
mountOptions:
- hard
- nfsvers=4
nfs:
path: /plugindir
server: 文件存储地址
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
创建pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: claim-nacos-1
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Gi
storageClassName: ""
volumeMode: Filesystem
volumeName: nacos-1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: claim-nacos-2
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Gi
storageClassName: ""
volumeMode: Filesystem
volumeName: nacos-2
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: claim-nacos-3
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Gi
storageClassName: ""
volumeMode: Filesystem
volumeName: nacos-3
创建configmap
apiVersion: v1
data:
mysql.db.name: nacos
mysql.password: xxxxxx
mysql.port: "3306"
mysql.user: nacos
kind: ConfigMap
metadata:
name: nacos-cm
namespace: default
创建StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nacos
namespace: default
spec:
podManagementPolicy: OrderedReady
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
app.kubernetes.io/instance: nacos
app.kubernetes.io/name: nacos
serviceName: nacos-hs
template:
metadata:
creationTimestamp: null
labels:
app.kubernetes.io/instance: nacos
app.kubernetes.io/name: nacos
spec:
containers:
- env:
- name: NACOS_REPLICAS
value: "3"
- name: SERVICE_NAME
value: nacos-hs
- name: DOMAIN_NAME
value: cluster.local
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: PREFER_HOST_MODE
value: hostname
- name: MYSQL_SERVICE_HOST
value: mysql数据库地址
- name: MYSQL_SERVICE_DB_NAME
valueFrom:
configMapKeyRef:
key: mysql.db.name
name: nacos-cm
- name: MYSQL_SERVICE_PORT
valueFrom:
configMapKeyRef:
key: mysql.port
name: nacos-cm
- name: MYSQL_SERVICE_USER
valueFrom:
configMapKeyRef:
key: mysql.user
name: nacos-cm
- name: MYSQL_SERVICE_PASSWORD
valueFrom:
configMapKeyRef:
key: mysql.password
name: nacos-cm
- name: NACOS_SERVER_PORT
value: "8848"
- name: NACOS_APPLICATION_PORT
value: "8848"
image: nacos/nacos-server:1.3.2
imagePullPolicy: Always
name: nacos
ports:
- containerPort: 8848
name: http
protocol: TCP
- containerPort: 7848
name: rpc
protocol: TCP
resources:
requests:
cpu: 500m
memory: 2Gi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /home/nacos/plugins/peer-finder
name: plugindir
- mountPath: /home/nacos/data
name: datadir
- mountPath: /home/nacos/logs
name: logdir
dnsPolicy: ClusterFirst
initContainers:
- image: nacos/nacos-peer-finder-plugin:1.0
imagePullPolicy: Always
name: peer-finder-plugin-install
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /home/nacos/plugins/peer-finder
name: plugindir
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: plugindir
persistentVolumeClaim:
claimName: claim-nacos-3
- name: datadir
persistentVolumeClaim:
claimName: claim-nacos-2
- name: logdir
persistentVolumeClaim:
claimName: claim-nacos-1
updateStrategy:
rollingUpdate:
partition: 0
type: RollingUpdate
创建service nacos-hs配置,用于集群内网访问
apiVersion: v1
kind: Service
metadata:
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
name: nacos-hs
namespace: default
spec:
clusterIP: None
ports:
- name: http
port: 8848
protocol: TCP
targetPort: http
- name: rpc
port: 7848
protocol: TCP
targetPort: 7848
selector:
app.kubernetes.io/instance: nacos
app.kubernetes.io/name: nacos
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
创建service nacos-ig配置,用于腾讯云ingress外网访问
apiVersion: v1
kind: Service
metadata:
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
service.cloud.tencent.com/direct-access: "false"
name: nacos-ig
namespace: default
spec:
externalTrafficPolicy: Cluster
ports:
- name: http
nodePort: 30000
port: 8848
protocol: TCP
targetPort: 8848
- name: rpc
nodePort: 30107
port: 7848
protocol: TCP
targetPort: 7848
selector:
app.kubernetes.io/instance: nacos
app.kubernetes.io/name: nacos
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
更多推荐
已为社区贡献14条内容
所有评论(0)