公开redis群集-将kubernetes状态设置为internet

公开redis群集-将kubernetes状态设置为internet,kubernetes,redis,devops,kubernetes-statefulset,Kubernetes,Redis,Devops,Kubernetes Statefulset,我创建了一个statefulset,它将redis映像部署到kubernetes上的GCP。我面临的挑战是使用单个域名公开它。这样可以按以下顺序访问POD-redis.com/first、redis.com/second、redis.com/third 这是YAML文件 状态集 kind: StatefulSet metadata: name: app-redis spec: selector: matchLabels: app: apprenticeship-re

我创建了一个statefulset,它将redis映像部署到kubernetes上的GCP。我面临的挑战是使用单个域名公开它。这样可以按以下顺序访问POD-redis.com/first、redis.com/second、redis.com/third

这是YAML文件

状态集

kind: StatefulSet
metadata:
  name: app-redis
spec:
  selector:
    matchLabels:
      app: apprenticeship-redis
  serviceName: 'redis-service'
  replicas: 3
  template:
    metadata:
      labels:
        app: app-redis
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: app-redis
          image: redis
          args:
            - /etc/redis/redis.conf
          volumeMounts:
            - mountPath: /etc/redis
              name: redis-config
              readOnly: false
            - name: redis-storage
              mountPath: /data
              readOnly: false
          resources:
            requests:
              cpu: 50m
              memory: 128Mi
            limits:
              cpu: 150m
              memory: 256Mi
          ports:
            - containerPort: 6379
              name: redis
          livenessProbe:
            exec:
              command: ['redis-cli', 'ping']
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 2
      volumes:
        - name: redis-config
          configMap:
            name: redis-config
  volumeClaimTemplates:
    - metadata:
        name: redis-storage
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi
无头服务

apiVersion: v1
kind: Service
metadata:
  labels:
    app: app-redis
  name: redis-service
  namespace: default
spec:
  ports:
    - name: server-port
      port: 80
      protocol: TCP
      targetPort: 6379
  clusterIP: None
  selector:
    statefulset.kubernetes.io/pod-name: app-redis-0
负载平衡器

apiVersion: v1
kind: Service
metadata:
  labels:
    app: redis-service
  name: app-redis
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 80
    protocol: TCP
    targetPort: 6379
  selector:
    app: app-redis
  type: LoadBalancer
  loadBalancerIP: xx.xx.xx.xxx
status:
  loadBalancer:
    ingress:
    - ip: xx.xx.xx.xxx

配置图

apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-config
  namespace: default
data:
  redis.conf: |
    dbfilename "dump.rdb"
    dir /data
    save 3600 1
    save 300 10
    save 60 100
    appendonly yes
    appendfilename "appendonly.aof"
存储类

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: redis-storage
provisioner: kubernetes.io/gce-pd
入口

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: redis-ingress
  annotations:
    kubernetes.io/ingress.class: 'nginx'
    nginx.ingress.kubernetes.io/force-ssl-redirect: 'false'
spec:
  rules:
    - host: app-redis.tk
      http:
        paths:
          - path: /
            backend:
              serviceName: app-redis
              servicePort: 80



statefolset
中的每个
pod
都需要有一个
服务链接到它

此服务需要通过以下方式创建:

  selector:
    statefulset.kubernetes.io/pod-name: <POD_NAME>

您可以阅读并

分享您迄今为止所做的工作吗?你能分享部署吗?我已经更新了@Crou@DavidEssien这回答了你的问题吗?
...
spec:
  rules:
  - http:
      paths:
        - path: /app-redis-0
          backend:
            serviceName: redis-service-0
            servicePort: 6379
        - path: /app-redis-1
          backend:
            serviceName: redis-service-1
            servicePort: 6379
        - path: /app-redis-2
          backend:
            serviceName: redis-service-2
            servicePort: 6379            
...