julismz

julismz

Creating a cluster with libcluster and Kubernetes

I’m having problems creating a cluster with libcluster and K8S…

The error I’m having is:

`[warning] [libcluster:k8s] unable to connect to :"foo@10.244.2.106": not part of network

These are my kubernetes configs:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo
spec:
  replicas: 4
  selector:
    matchLabels:
      app: foo
  template:
    metadata:
      labels:
        app: foo
    spec:
      serviceAccountName: foo-account
      containers:
        - name: foo
          image: full_node:latest
          args: ["--name", "foo@$(MY_POD_IP)", "--cookie", "foo-cookie"]
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 4000
          env:
            - name: MY_POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP

---

apiVersion: v1
kind: Service
metadata:
  name: foo-service
  namespace: default
spec:
  selector:
    app: foo
  ports:
    - protocol: TCP
      name: api
      port: 4000
      targetPort: 4000
    - protocol: TCP
      name: web
      port: 4001
      targetPort: 4001
  type: LoadBalancer

---
apiVersion: v1
kind: Service
metadata:
  name: foo-nodes
  namespace: default
spec:
  type: ClusterIP
  clusterIP: None
  selector:
    app: foo
  ports:
    - name: epmd
      port: 4369

---

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: pod-reader
rules:
  - apiGroups: [""]
    resources: ["pods", "endpoints"]
    verbs: ["get", "watch", "list"]

---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-pods
  namespace: default
subjects:
  - kind: ServiceAccount
    name: foo-account
    namespace: default
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

---

apiVersion: v1
kind: ServiceAccount
metadata:
  name: foo-account
  namespace: default

The libcluster config:

topologies = [
      k8s: [
        strategy: Cluster.Strategy.Kubernetes.DNS,
        config: [
          service: "foo-nodes",
          application_name: "foo"
        ]
      ]
    ]

Communication between pods are fine. Endpoints

kubectl get endpoints
NAME           ENDPOINTS                                                           AGE
foo-nodes     10.244.2.100:4369,10.244.2.101:4369,10.244.2.102:4369 + 1 more...   15m

Services

kubectl get services
NAME           TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
foo-nodes     ClusterIP      None            <none>        4369/TCP                        37m
foo-service   LoadBalancer   10.101.190.19   <pending>     4000:31343/TCP,4001:32461/TCP   4h53m

I followed several tutorials like this: Connecting Elixir Nodes with libcluster, locally and on Kubernetes Read the docu: Cluster.Strategy.Kubernetes.DNS — libcluster v3.5.0 I don’t know what else I can try…

Any though?

Marked As Solved

mruoss

mruoss

What is the command that is executed in the container? --name and --cookie are arguments to the elixir or iex command. If you built a release try working with env vars instead of args:

          env:
            - name: MY_POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: RELEASE_DISTRIBUTION
              value: name
            - name: RELEASE_NODE
              value: foo@$(MY_POD_IP)
            - name: RELEASE_COOKIE
              value: foo-cookie

Last Post!

julismz

julismz

Thanks, it worked!

Where Next?

Popular in Questions Top

hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" =&gt; #BSON.ObjectId&lt;58eb1a7a9ad169198c3dXXXX&gt;, "email" =&gt; ...
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New

Other popular topics Top

minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
985 44532 311
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement