此部署仅作为参考,对研究过K8S的人来说这是福利。
nacos需要Mysql数据库且需要导入官方的SQL文件。
Wget https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql
SQL语句:
CREATE DATABAES nacos_confg;
USE nacos_config;
SOURCE /var/lib/mysql/nacos-mysql.sql
PS:本档案实际测试有效,加粗部分需要根据自身环境进行配置修改。
1.Mysql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc-data
namespace: pulic-service
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: rook-cephfs
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc-conf
namespace: pulic-service
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: rook-cephfs
2.Mysql-Deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mysql #为该Deployment设置key为app,value为mysql的标签
name: mysql
namespace: pulic-service
spec:
replicas: 1 #副本数量
selector: #标签选择器,与上面的标签共同作用
matchLabels: #选择包含标签app:nginx的资源
app: mysql
template: #这是选择或创建的Pod的模板
metadata: #Pod的元数据
labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
app: mysql
spec: #期望Pod实现的功能(即在pod中部署)
containers: #生成container,与docker中的container是同一种
- name: mysql
image: mysql:5.7 #使用镜像mysql: 创建container,该container默认3306端口可访问
ports:
- containerPort: 3306 # 开启本容器的3306端口可访问
env:
- name: MYSQL_ROOT_PASSWORD
value: VMware1!
volumeMounts: #挂载持久存储卷
- name: mysql-data #挂载设备的名字,与volumes[*].name 需要对应
mountPath: /var/lib/mysql #挂载到容器的某个路径下
- name: mysql-dev-conf
mountPath: /etc/mysql
volumes:
- name: mysql-data #和上面保持一致 这是本地的文件路径,上面是容器内部的路径
persistentVolumeClaim:
claimName: mysql-pvc-data
- name: mysql-dev-conf
persistentVolumeClaim:
claimName: mysql-pvc-conf
3.Mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: mysql
name: mysql
namespace: pulic-service
spec:
ports:
- port: 3306 #写nginx本身端口
name: mysql
protocol: TCP
targetPort: 3306 # 容器nginx对外开放的端口 上面的dm已经指定了
nodePort: 31090 #外网访问的端口
selector:
app: mysql #选择包含标签app:nginx的资源
type: NodePort
2.nacos-yaml
---
apiVersion: v1
kind: Service
metadata:
name: nacos-headless
namespace: pulic-service
labels:
app: nacos
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
ports:
- port: 8848
name: server
targetPort: 8848
- port: 9848
name: client-rpc
targetPort: 9848
- port: 9849
name: raft-rpc
targetPort: 9849
## 兼容1.4.x版本的选举端口
- port: 7848
name: old-raft-rpc
targetPort: 7848
clusterIP: None
selector:
app: nacos
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nacos-cm
namespace: pulic-service
data:
mysql.db.name: "nacos_config"
mysql.port: "3306"
mysql.user: "root"
mysql.password: "VMware1!"
MYSQL_SERVICE_HOST: "10.99.218.252"
SPRING_DATASOURCE_PLATFORM: "mysql"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nacos
namespace: pulic-service
spec:
serviceName: nacos-headless
replicas: 2
template:
metadata:
labels:
app: nacos
annotations:
pod.alpha.kubernetes.io/initialized: "true"
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- nacos
topologyKey: "kubernetes.io/hostname"
initContainers:
- name: peer-finder-plugin-install
image: nacos/nacos-peer-finder-plugin:1.1
imagePullPolicy: Always
volumeMounts:
- mountPath: /home/nacos/plugins/peer-finder
name: data
subPath: peer-finder
containers:
- name: nacos
imagePullPolicy: Always
image: nacos/nacos-server:latest
resources:
requests:
memory: "2Gi"
cpu: "500m"
ports:
- containerPort: 8848
name: client-port
- containerPort: 9848
name: client-rpc
- containerPort: 9849
name: raft-rpc
- containerPort: 7848
name: old-raft-rpc
env:
- name: NACOS_REPLICAS
value: "2"
- name: SERVICE_NAME
value: "nacos-headless"
- name: DOMAIN_NAME
value: "cluster.local"
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: MYSQL_SERVICE_DB_NAME
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.db.name
- name: MYSQL_SERVICE_PORT
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.port
- name: MYSQL_SERVICE_USER
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.user
- name: MYSQL_SERVICE_PASSWORD
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.password
- name: NACOS_SERVER_PORT
value: "8848"
- name: NACOS_APPLICATION_PORT
value: "8848"
- name: PREFER_HOST_MODE
value: "hostname"
- name: MYSQL_SERVICE_HOST
valueFrom:
configMapKeyRef:
name: nacos-cm
key: MYSQL_SERVICE_HOST
- name: SPRING_DATASOURCE_PLATFORM
valueFrom:
configMapKeyRef:
name: nacos-cm
key: SPRING_DATASOURCE_PLATFORM
volumeMounts:
- name: data
mountPath: /home/nacos/plugins/peer-finder
subPath: peer-finder
- name: data
mountPath: /home/nacos/data
subPath: data
- name: data
mountPath: /home/nacos/logs
subPath: logs
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteMany" ]
storageClassName: "rook-cephfs"
resources:
requests:
storage: 20Gi
selector:
matchLabels:
app: nacos
3.nacos-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nacos-headless
namespace: pulic-service
spec:
ingressClassName: nginx
rules:
- host: nacos-web.nacos-demo.com
http:
paths:
- path: /nacos
pathType: Prefix
backend:
service:
name: nacos-headless
port:
name: server