4 ms·
Redis in docker, Kubernetes is almost zero config as it is. For small stuff anyway. For big stuff, would it not be a massive drag not having it proximal to you
by roomey 5y ago
Redis in docker, Kubernetes is almost zero config as it is. For small stuff anyway.
For big stuff, would it not be a massive drag not having it proximal to your app serve we a?
- deleted 5y ago[deleted]
- JoshGlazebrook 5y agoIn what world is Kubernetes zero config?
- OJFord 5y agoI think GP means adding a redis container to an existing k8s cluster. Which I suppose, especially without persistence or HA, is not much more than specifying the image.
- freedomben 5y agoGP is saying adding a Redis container to docker/k8s is (nearly) zero config, and they are correct, with the caveat that only if you don't need persistence features.
- roomey 5y agoHi, I'm actually really sorry I don't post too much and I think when I do I am making the comments a bit short and its causing confusion. I hope this clears things up and is a bit helpful. To explain the context, I find there seems to be a lack of clarity around K8s. Lets just say, for this post's purposes, I am a _user_ of k8s. That is, I don't actually run the cluster at all, I don't manage its storage, I am operating as a User without full admin access. I also work in VMware who has the whole Tanzu thing going on so what happened was internal IT set up a K8s cluster for production hosting (maybe it was dogfooding or something I'm not really involved with that team, user only as I said). I got frustrated when figuring out how to use it however. A bunch of online material is about setting up the K8s infrastructure/cluster, rather than using it as a Dev. I hope this makes a bit more sense when I said redis was practically zero config. To explain the setup. I code a python app, and I use docker compose and a single docker-compose.YAML. This YAML gives the build instructions for my app, and minimally (by this I mean with absolute minimal config options) also sets up a postgresDB, RabbitMQ and Redis. Here's what I mean by minimal: redis: image: XXXXXXX.YYYYYY.com/dockerhub-proxy-cache/library/redis restart: always container_name: redis command: redis-server --requirepass XXXXXXX ports: - 6379:6379 environment: - REDIS_REPLICATION_MODE=master labels: kompose.volume.storage-class-name: 1XXXXUUIDProvidedByPlatformXXXX1 kompose.volume.size: 1Gi volumes: - ~/.docker-conf/redis/data/:/data/ deploy: resources: limits: cpus: '0.5' memory: 2G reservations: cpus: '.1' memory: 20M I consider this minimal as most of it is boiler plate and I'm just configuring its resources. So for dev when I want a local spin up I docker-compose build, docker-compose up. As you can see above, volumes: - ~/.docker-conf/redis/data/:/data/ Gives it persistent storage across builds and deploys. So to my mind this was pretty easy so far. Then I looked at what was needed to deploy on K8S and I nearly puked. Sorry there is no way I was touching that mess of yaml. So I just use kompose-convert which uses the single docker-compose.yaml to auto generate all the little yaml babies needed for deploying to staging and prod (the K8S cluster). Script is essentially: docker-compose build docker push corpImageLibrary/App:mar-felly2022(version) cd ./kubernetes-deploy-files && kompose convert -f ../docker-compose.yml That's it. Regarding persistent storage which I use, I define that with the docker Kompose label in the main docker-compose.yaml. The goal just being a single file to config everything. When I kill the deployment I just don't kill the persistent disks, and then deploy all the auto generated yamls at once (including the persistent disks, which wont overwrite them if they exist) Deploy script: #!/bin/bash cd ./kubernetes-deploy-files kubectl --kubeconfig ../Kubeconfig apply -f \ db-claim0-persistentvolumeclaim.yaml,\ db-deployment.yaml,\ db-service.yaml,\ fluentd-config.yml,\ rabbitmq-deployment.yaml,\ rabbitmq-service.yaml,\ redis-claim0-persistentvolumeclaim.yaml,\ redis-deployment.yaml,\ redis-service.yaml,\ MYAPP-deployment.yaml,\ MYAPP-service.yaml Kill script: #!/bin/bash cd ./kubernetes-deploy-files kubectl --kubeconfig ../Kubeconfig delete -f \ db-deployment.yaml,\ db-service.yaml,\ rabbitmq-deployment.yaml,\ rabbitmq-service.yaml,\ redis-deployment.yaml,\ redis-service.yaml,\ MYAPP-deployment.yaml,\ MYAPP-service.yaml (note I haven't made any edits on any of these yamls they are all auto-generated) To me this is minimal config compared to trying to integrate with a third party outside of my app network (needing corporate firewall exceptions etc etc). But yea there is internal hosted redis offerings I think but even then I made a pass as the above is just very easy and neat. Also the persistent disks are all backed up in the background. I guess it's minimal config when you already have a nice K8S setup ready to use would be a fairer statement :) Hope this is useful to someone just trying to get a dam app running!
- colesantiago 5y agoK8S is an infrastructure jungle of YAML files, I am very sure and completely guarantee one can build a $1M/ARR SaaS tech business without that.