<p>I am trying to deploy Kong in GKE as per the documentation <a href="https://github.com/Kong/kong-dist-kubernetes" rel="nofollow noreferrer">https://github.com/Kong/kong-dist-kubernetes</a></p>

<p>I noticed <a href="https://github.com/Kong/kong-dist-kubernetes/blob/master/cassandra.yaml" rel="nofollow noreferrer">cassandra</a> is available as StatefulSet but <a href="https://github.com/Kong/kong-dist-kubernetes/blob/master/postgres.yaml" rel="nofollow noreferrer">Postgres</a> as ReplicationController. Can I understand the difference? Also can anyone suggest how to choose between these 2?</p>

<p><a href="https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/" rel="nofollow noreferrer">ReplicationControllers</a> predates StatefulSets. It was a way to manage your pod replicas. The 'newer' approach to manage your replicas is <a href="https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/" rel="nofollow noreferrer">ReplicaSets</a> which is used by <a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/" rel="nofollow noreferrer">Deployments</a>.</p>

<p><a href="https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/" rel="nofollow noreferrer">StatefulSets</a> is meant for applications that require your pods to start in an ordered way together with some sort of data stored on disk. So it's very suitable for master/slave datastore or ring topology datastores like Cassandra. I would strongly recommend using StatefulSets for these types of workloads.</p>
