You can have multiple deployments, however if you are in need of uniqueness between the pods, you should consider statefulsets over deployments. However, deciding between statefulset and deployment is mostly decided by the type of the application and it is a major decision. so, using statefulset may not fit in as a 100% replacement for a deployment.
In statefulsets each pod get its unique but non-random identity via its hostname.
For example, you can create a mysql statefulset using following:
apiVersion: apps/v1
kind: StatefulSet
metadata:
creationTimestamp: null
labels:
app: foo
name: foo
spec:
serviceName: mysql
replicas: 3
selector:
matchLabels:
app: foo
template:
metadata:
creationTimestamp: null
labels:
app: foo
spec:
containers:
- image: mysql
name: mysql
containers:
- env:
- name: MYSQL_ROOT_PASSWORD
value: root
image: mysql
name: mysql
This would create three replicas of the pod:
k get pod -l app=foo
NAME READY STATUS RESTARTS AGE
foo-0 1/1 Running 0 5m17s
foo-1 1/1 Running 0 5m14s
foo-2 1/1 Running 0 5m10s
Now you can fetch the hostname of the pods, the first pod will be always suffixed with 0 and 2nd with 1 and so on.
exec -it foo-0 -- hostname
foo-0
k exec -it foo-1 -- hostname
foo-1
k exec -it foo-2 -- hostname
foo-2
you can use hostname as selector do decide what action is required on which pod. Here is one very good read on this.