-
Notifications
You must be signed in to change notification settings - Fork 65
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
support multiple replicas for linstor-controller #73
support multiple replicas for linstor-controller #73
Conversation
2a9141e
to
4c8a83a
Compare
We can get this merged now that we are no longer in an RC phase. Rebase needed, and the Helm keys need to be added to the new docs. |
4c8a83a
to
627cb7c
Compare
627cb7c
to
707a117
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm a little unsure about dumping a shell script in the middle of a long go function, but separating it out would be messy because it is a format string...
I need to check if environment variables are passed to the ExecProbe. Then we could maybe find a cleaner solution |
69802cb
to
76b0b9f
Compare
So environment variables are available in ExecProbe During testing I noticed a few additional issues:
The second issue can be traced to the way we (ab-)use the |
db6f6f0
to
066a083
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good. Just waiting for internal tests to succeed.
I want to polish our documentation a bit |
066a083
to
092803b
Compare
092803b
to
2df767c
Compare
2df767c
to
67600ca
Compare
67600ca
to
02304a2
Compare
02304a2
to
6c43999
Compare
Running multiple replicas requires special support from the linstor controller. The controller container will start a leader election process when it detects the presence of the K8S_AWAIT_ELECTION_* variables. The election process determines which pod is allowed to start the linstor-controller process. Only this pod will be added as endpoint for the controller service. Should the leader crash or the node its running on goes offline, a new leader will be elected and allowed to start the controller process. Note: in case the full node goes offline, the old pod will still be marked as ready. By using ClusterIP: "" on our service, we ensure we create an actual proxy (which automatically chooses the responding pod) instead of each client having to try multiple DNS responses.
6c43999
to
1d526e1
Compare
@JoelColledge I think this is finally ready |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me. Just waiting for internal tests to pass before merging.
🎉 |
Running multiple replicas requires special support from the linstor
controller. The controller container will start a leader election
process when it detects the presence of the
K8S_AWAIT_ELECTION_*
variables.
The election process determines which pod is allowed to start the
linstor-controller process. Only this pod will be marked as ready
and will receive traffic from the k8s service object.
Should the leader crash or the node its running on goes offline,
a new leader will be elected and allowed to start the controller process.
Note: in case the full node goes offline, the old pod will still be marked
as ready. By using
ClusterIP: ""
on our service, we ensure we create an actualproxy (which automatically chooses a responding pod) instead of each client
having to deal with multiple DNS responses which may or may not respond.
See also: