写在最前
1. docker 部署
2. kubernetes 部署
2.1 service
kind: Service
apiVersion: v1
metadata:
name: redis-cluster
namespace: bx
labels:
app: redis-cluster
annotations:
kubesphere.io/creator: admin
spec:
ports:
- name: redis
protocol: TCP
port: 6379
targetPort: 6379
- name: election
protocol: TCP
port: 16379
targetPort: 16379
selector:
app: redis-cluster
clusterIP: None
clusterIPs:
- None
type: ClusterIP
sessionAffinity: None
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
internalTrafficPolicy: Cluster
2.2 configmap
kind: ConfigMap
apiVersion: v1
metadata:
name: redis-config
namespace: bx
annotations:
kubesphere.io/creator: admin
data:
redis-cluster.conf: |
daemonize no
supervised no
protected-mode no
bind 0.0.0.0
port 6379
cluster-announce-bus-port 16379
cluster-enabled yes
appendonly yes
cluster-node-timeout 5000
dir /data
cluster-config-file /data/nodes.conf
requirepass xxxxxxxxxx
masterauth xxxxxxxxxx
2.3 statefulset
kind: StatefulSet
apiVersion: apps/v1
metadata:
name: redis-cluster
namespace: bx
annotations:
kubesphere.io/creator: admin
spec:
replicas: 6
selector:
matchLabels:
app: redis-cluster
template:
metadata:
creationTimestamp: null
labels:
app: redis-cluster
annotations:
kubesphere.io/creator: admin
kubesphere.io/imagepullsecrets: '{}'
logging.kubesphere.io/logsidecar-config: '{}'
spec:
volumes:
- name: redis-config
configMap:
name: redis-config
items:
- key: redis-cluster.conf
path: redis-cluster.conf
defaultMode: 420
containers:
- name: redis-cluster
image: 'harbor.bx.crpharm.com/k8s/arm64/redis:7.2.6'
args:
- /etc/redis/redis-cluster.conf
- '--cluster-announce-ip "$(POD_NAME).$(POD_SERVICE_NAME)"'
ports:
- name: redis
containerPort: 6379
protocol: TCP
- name: election
containerPort: 16379
protocol: TCP
env:
- name: TZ
value: Asia/Shanghai
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: POD_SERVICE_NAME
value: redis-cluster.bx
resources:
limits:
cpu: '1'
memory: 2Gi
requests:
cpu: 500m
memory: 1Gi
volumeMounts:
- name: data
mountPath: /data
- name: redis-config
readOnly: true
mountPath: /etc/redis/redis-cluster.conf
subPath: redis-cluster.conf
livenessProbe:
tcpSocket:
port: redis
initialDelaySeconds: 16
timeoutSeconds: 1
periodSeconds: 3
successThreshold: 1
failureThreshold: 2
readinessProbe:
tcpSocket:
port: redis
initialDelaySeconds: 16
timeoutSeconds: 1
periodSeconds: 3
successThreshold: 1
failureThreshold: 2
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
securityContext: {}
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- redis-cluster
topologyKey: kubernetes.io/hostname
schedulerName: default-scheduler
volumeClaimTemplates:
- kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: data
namespace: bx
creationTimestamp: null
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: nfs-client
volumeMode: Filesystem
status:
phase: Pending
serviceName: redis-cluster
podManagementPolicy: OrderedReady
updateStrategy:
type: RollingUpdate
rollingUpdate:
partition: 0
revisionHistoryLimit: 10
persistentVolumeClaimRetentionPolicy:
whenDeleted: Retain
whenScaled: Retain
2.4 初始化集群
redis-cli -a xxxxxxxxxx \
--cluster create \
--cluster-replicas 1 \
redis-cluster-0.redis-cluster.bx.svc.cluster.local:6379 \
redis-cluster-1.redis-cluster.bx.svc.cluster.local:6379 \
redis-cluster-2.redis-cluster.bx.svc.cluster.local:6379 \
redis-cluster-3.redis-cluster.bx.svc.cluster.local:6379 \
redis-cluster-4.redis-cluster.bx.svc.cluster.local:6379 \
redis-cluster-5.redis-cluster.bx.svc.cluster.local:6379
写在最后
评论