I'm getting acquainted with Kubernetes, and haven't found simple solution for deploying stateful services in Kubernetes.
AFAIK the most applicable thing is Pet Set, however, it is still in alpha and can only be deleted completely; also, i don't feel i understand how persistent volumes should be managed to survive Pet Set recreation. Another option i've came up with is splitting service deployments into bootstrap-node deployment, bootstrap-node service and all-other-nodes deployment, which allows me to use bootstrap-node service as a contact point (that's not completely safe, though).
What are the popular approaches for this case and what pros and cons do they have?
If you're looking at a set number of Pods in your stateful cluster in the Kubernetes cluster, PetSets (StatefulSets I believe it is called now) is the answer... or you can define a Service per Pod to achieve the same.
For Pods to be aware of other Pods's IPs, you can use Headless Services, which provide you with the list of IPs associated with a label.
For Storage, if you use emptyDir, you have local storage but you lose it when the Pod is removed / re-scheduled.
I use Zookeeper in Kubernetes and it is a bit of a pain to setup, but Zookeeper provides a 'reconfigure' API which allows to reconfigure the cluster when a node changes, so it is fairly easy to redefine the cluster on startup of a new node when a Pod is rescheduled. I'm not sure if Consul has the same type of feature, but it probably does.