kubenetes 部署nacos叢集
阿新 • • 發佈:2022-05-30
儲存
本文件使用nfs儲存,nfs的搭建參考文件:https://www.cnblogs.com/pgy674477230/p/16326880.html
建立pvc
cat nacos-pvc-headless.yml
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nacos-pvc-headless namespace: test03 annotations: pv.kubernetes.io/bind-completed: 'yes' pv.kubernetes.io/bound-by-controller: 'yes' volume.beta.kubernetes.io/storage-provisioner: k8s-sigs.io/nfs-subdir-external-provisioner spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi volumeName: pvc-770acf2a-b03b-463b-9b44-d8a90d8c6862 storageClassName: managed-nfs-storage volumeMode: Filesystem status: phase: Bound accessModes: - ReadWriteMany capacity: storage: 5Gi
建立服務
cat nacos-service-headless.yml
apiVersion: v1 kind: Service metadata: name: nacos-headless 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
使用nodeport提供外部web訪問 或者使用ingress,本文使用nodeport方式,建立暴露服務
cat nacos-web.yml
kind: Service apiVersion: v1 metadata: name: nacos-web namespace: test03 spec: ports: - name: http protocol: TCP port: 8848 targetPort: 8848 nodePort: 31848 selector: app: nacos clusterIP: 10.2.202.97 clusterIPs: - 10.2.202.97 type: NodePort sessionAffinity: None externalTrafficPolicy: Cluster
建立配置
cat nacos-cm.yml
apiVersion: v1
kind: ConfigMap
metadata:
name: nacos-cm
data:
mysql.db.name: "nacos_devtest"
mysql.port: "3306"
mysql.user: "nacos"
mysql.password: "nacos"
mysql.host: "mysql"
建立StatefulSet 部署叢集
cat nacos-headless.yml
kind: StatefulSet
apiVersion: apps/v1
metadata:
name: nacos
namespace: test03
spec:
replicas: 3
selector:
matchLabels:
app: nacos
template:
metadata:
creationTimestamp: null
labels:
app: nacos
annotations:
kubectl.kubernetes.io/restartedAt: '2022-05-30T06:13:58.528Z'
pod.alpha.kubernetes.io/initialized: 'true'
spec:
volumes:
- name: nacos-pvc-headless
persistentVolumeClaim:
claimName: nacos-pvc-headless
initContainers:
- name: peer-finder-plugin-install
image: nacos/nacos-peer-finder-plugin:1.1
resources: {}
volumeMounts:
- name: nacos-pvc-headless
mountPath: /home/nacos/plugins/peer-finder
subPath: peer-finder
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
securityContext:
capabilities: {}
seLinuxOptions: {}
containers:
- name: nacos
image: nacos/nacos-server:v2.0.4
ports:
- name: client-port
containerPort: 8848
protocol: TCP
- name: client-rpc
containerPort: 9848
protocol: TCP
- name: raft-rpc
containerPort: 9849
protocol: TCP
- name: old-raft-rpc
containerPort: 7848
protocol: TCP
env:
- name: NACOS_REPLICAS
value: '3'
- 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: MYSQL_SERVICE_HOST
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.host
- name: NACOS_SERVER_PORT
value: '8848'
- name: NACOS_APPLICATION_PORT
value: '8848'
- name: PREFER_HOST_MODE
value: hostname
resources:
requests:
cpu: 500m
memory: 2Gi
volumeMounts:
- name: nacos-pvc-headless
mountPath: /home/nacos/plugins/peer-finder
subPath: peer-finder
- name: nacos-pvc-headless
mountPath: /home/nacos/data
subPath: data
- name: nacos-pvc-headless
mountPath: /home/nacos/logs
subPath: logs
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: Always
securityContext:
capabilities: {}
seLinuxOptions: {}
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
securityContext:
seLinuxOptions: {}
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nacos
topologyKey: kubernetes.io/hostname
schedulerName: default-scheduler
dnsConfig: {}
serviceName: nacos-headless
podManagementPolicy: OrderedReady
updateStrategy:
type: RollingUpdate
revisionHistoryLimit: 10