9mm
Hi,
I want to get my Elixir app to run with libcluster on Google Kubernetes Engine.
I found a similar article that’s somewhat related. This article talks about how to create a “headless service” that returns all the pod IPs, which he then passes into Peerage. You can search for myapp-service-headless to find his Kubernetes YAML file.
It looks like Peerage provides the same functionality
Cluster.Strategy.Kubernetes.DNS — libcluster v3.5.0 (I think this is the one I need)
Unfortunately I don’t really understand the exact configuration with GKE + Libcluster.
I want to use the DNS A record method they mention in this doc (for some reason this doesnt match up with the docs with the same module name… maybe its out of date?). So far I DID get POD_IP and NAMESPACE properly passed into the docker container. So that step is good.
Here are my questions:
- I need a headless service right? It seems like the “DNS” method is preferable (the 2nd link). I tried making a headless service which matches that config in the article above, but it just says
0 podsand looks like it’s not working - It says I should be able to run
kubectl get endpoints -l app=myapp. I assume this is referring to the headless endpoint? Is that needed for both strategies?
Here is my headless service YAML (thats not working):
apiVersion: v1
kind: Service
metadata:
creationTimestamp: 2018-12-24T06:22:20Z
labels:
app: xyz-headless
name: xyz-headless
namespace: default
resourceVersion: "251868"
selfLink: /api/v1/namespaces/default/services/xyz-headless
uid: 12345
spec:
clusterIP: None
ports:
- port: 8080
protocol: TCP
targetPort: 8080
selector:
app: xyz-web ### this is actually my "deployment"... awsnt sure what to put here
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #ai
- #elixirconf-us
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 8- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
hlx
I’m doing a similar setup and this article helped me a lot https://engineering.dollarshaveclub.com/elixir-otp-applications-on-kubernetes-9944636b8609
repo: GitHub - dollarshaveclub/ex_cluster: Clustered Elixir OTP application on Kubernetes with Horde and LibCluster · GitHub
9mm
Thanks! I’ll check it out
sanswork
I haven’t done this in a long time but found an old app that used it.
config/prod.exs
vm.args
looking through my service files I don’t see anything interesting so I’m not sure they are relevant other than setting app name.
deployment
headless-service
service
9mm
dude awesome!!! THANK YOU!
sanswork
Just realised I forgot the deployment one.
ingress (I think this has changed in newer versions though?) so probably not helpful.
Let me know if you get it working. If not I’ll see if any other config seems relevant.
taylordowns2000
Hi all, this post was incredibly helpful for me (THANK YOU!) and I wanted to share our final configuration, in case it helps anyone else. We’re using Google Kubernetes with libcluster. The Elixir apps are accessible by the web via a load balancer that use a google managed SSL certificate. They can access each other via that headless service.
env.sh.eex
config/prod.exs
my_app.ex
kubernetes/all-together-now.yaml
ijunaidfarooq
then how you run it to deploy?
taylordowns2000
Yeah fair question
. I count just 4 moving pieces in that kubernetes YAML. The file assumes that:
gcr.io/my-gcp-project-123/my_app_otp:develop-HEAD,staging-managed-ipin this example),stagingin this example).If that’s the case, you should be able to set up a cluster with some node pools and run
kubectl apply -f ./kubernetes/all-together-now.yaml. It will create adeployment, aservice, aningress, and aheadless-service(which is the key bit to getting libcluster 'sKubernetes.DNSstrategy to work. Hope this helps.