apiVersion: apps/v1 kind: Deployment metadata: name: flask labels: app: flask spec: replicas: 4 strategy: rollingUpdate: maxSurge: 0 maxUnavailable: 1 type: RollingUpdate selector: matchLabels: app: flask template: metadata: labels: app: flask spec: containers: - name: flask securityContext: allowPrivilegeEscalation: false image: clemenko/flask_simple ports: - containerPort: 5000 imagePullPolicy: Always --- apiVersion: apps/v1 kind: Deployment metadata: name: redis labels: app: redis spec: replicas: 1 selector: matchLabels: app: redis template: metadata: labels: app: redis spec: containers: - name: redis image: redis args: ["--appendonly", "yes"] securityContext: allowPrivilegeEscalation: false seLinuxOptions: level: "s0:c123,c456" ports: - containerPort: 6379 volumeMounts: - name: redis-data mountPath: /data subPath: volumes: - name: redis-data persistentVolumeClaim: claimName: redis --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: redis labels: app: redis spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi --- apiVersion: v1 kind: Service metadata: labels: name: flask kubernetes.io/name: "flask" name: flask spec: selector: app: flask ports: - name: flask protocol: TCP port: 5000 targetPort: 5000 --- apiVersion: v1 kind: Service metadata: labels: name: redis kubernetes.io/name: "redis" name: redis spec: selector: app: redis ports: - name: redis protocol: TCP port: 6379 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: flask annotations: kubernetes.io/ingress.class: "nginx" spec: rules: - host: flask.example.com http: paths: - path: / pathType: Prefix backend: service: name: flask port: number: 5000