{"id":43724055,"url":"https://github.com/julienbalestra/openstack_kubernetes","last_synced_at":"2026-02-05T08:35:30.767Z","repository":{"id":95658510,"uuid":"68122108","full_name":"JulienBalestra/openstack_kubernetes","owner":"JulienBalestra","description":"Deploy a Fleet Rktnetes cluster over OpenStack","archived":false,"fork":false,"pushed_at":"2016-09-28T12:28:43.000Z","size":567,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-01-28T21:11:24.513Z","etag":null,"topics":["etcd","fleet","heat","kubernetes","openstack"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JulienBalestra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2016-09-13T15:37:40.000Z","updated_at":"2020-12-10T13:27:17.000Z","dependencies_parsed_at":"2023-03-30T10:17:17.556Z","dependency_job_id":null,"html_url":"https://github.com/JulienBalestra/openstack_kubernetes","commit_stats":{"total_commits":18,"total_committers":1,"mean_commits":18.0,"dds":0.0,"last_synced_commit":"b85a0a318ffb40d7c8523faf26ea898f93052689"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JulienBalestra/openstack_kubernetes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulienBalestra%2Fopenstack_kubernetes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulienBalestra%2Fopenstack_kubernetes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulienBalestra%2Fopenstack_kubernetes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulienBalestra%2Fopenstack_kubernetes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JulienBalestra","download_url":"https://codeload.github.com/JulienBalestra/openstack_kubernetes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulienBalestra%2Fopenstack_kubernetes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29117211,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T05:31:32.482Z","status":"ssl_error","status_checked_at":"2026-02-05T05:31:29.075Z","response_time":65,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["etcd","fleet","heat","kubernetes","openstack"],"created_at":"2026-02-05T08:35:29.683Z","updated_at":"2026-02-05T08:35:30.756Z","avatar_url":"https://github.com/JulienBalestra.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Openstack Juno\n\nNote: Some improvement to do with the Liberty for etcd add / remove members field.\n\nThe image used is a Ubuntu 16.04 server.\nThe fleet stack also works with Debian Jessie.\n\n# Fleet Only\n\n## Stages\n\n### Image\n\nFirst, *easily* generate an image with `make instance`, this will produced this output:\n\n    ...\n    2016-09-13 16:10:21Z [random]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:10:21Z [generate_userdata]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:10:22Z [random]: CREATE_COMPLETE  state changed\n    2016-09-13 16:10:22Z [generate_userdata]: CREATE_COMPLETE  state changed\n    2016-09-13 16:10:22Z [generate_securitygroup]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:10:23Z [network]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:10:24Z [generate_securitygroup]: CREATE_COMPLETE  state changed\n    2016-09-13 16:10:24Z [network]: CREATE_COMPLETE  state changed\n    2016-09-13 16:10:24Z [subnet]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:10:26Z [subnet]: CREATE_COMPLETE  state changed\n    2016-09-13 16:10:26Z [port]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:10:26Z [router]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:10:28Z [port]: CREATE_COMPLETE  state changed\n    2016-09-13 16:10:28Z [router]: CREATE_COMPLETE  state changed\n    2016-09-13 16:10:28Z [interface]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:10:30Z [interface]: CREATE_COMPLETE  state changed\n    2016-09-13 16:10:30Z [instance]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:10:32Z [floating]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:10:34Z [floating]: CREATE_COMPLETE  state changed\n    2016-09-13 16:11:54Z [instance]: CREATE_COMPLETE  state changed\n    +---------------------+------------------------------------------------------------------+\n    | Field               | Value                                                            |\n    +---------------------+------------------------------------------------------------------+\n    | id                  | 00000000-aaaa-bbbb-cccc-999999999999                             |\n    | stack_name          | instance                                                         |\n    | description         | All in one to prepare image for Fleet and Kubernetes main stacks |\n    |                     |                                                                  |\n    | creation_time       | 2016-09-13T16:10:21Z                                             |\n    | updated_time        | None                                                             |\n    | stack_status        | CREATE_COMPLETE                                                  |\n    | stack_status_reason | Stack CREATE completed successfully                              |\n    +---------------------+------------------------------------------------------------------+\n\n \nThe instance will shutting down and write a healthy result over the console.\nEnsure with `make is_instance_finished_well` and `make is_instance_off`\n\nThen, `make image`\n\n    Server snapshotting... 25% complete\n    ...\n    Server snapshotting... 100% complete\n    Finished\n\nRemove the current image with\n\n    make iclean\n    2016-09-13 16:32:39Z [instance]: DELETE_IN_PROGRESS  state changed\n    2016-09-13 16:32:40Z [floating]: DELETE_IN_PROGRESS  state changed\n    2016-09-13 16:32:43Z [floating]: DELETE_COMPLETE  state changed\n    2016-09-13 16:32:49Z [instance]: DELETE_COMPLETE  state changed\n    2016-09-13 16:32:49Z [port]: DELETE_IN_PROGRESS  state changed\n    2016-09-13 16:32:49Z [generate_userdata]: DELETE_IN_PROGRESS  state changed\n\n### Fleet    \n    \nOnce the fleet image is done, you're ready to launch a fleet cluster.\n\n    make fleet\n    \n    2016-09-13 16:22:06Z [router]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:22:07Z [router]: CREATE_COMPLETE  state changed\n    2016-09-13 16:22:07Z [etcd_static]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:25:03Z [etcd_static]: CREATE_COMPLETE  state changed\n    2016-09-13 16:25:03Z [worker_statefull]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:28:17Z [worker_statefull]: CREATE_COMPLETE  state changed\n    2016-09-13 16:28:17Z [worker_stateless]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 16:30:09Z [worker_stateless]: CREATE_COMPLETE  state changed\n    +---------------------+------------------------------------------------------------------------------------------+\n    | Field               | Value                                                                                    |\n    +---------------------+------------------------------------------------------------------------------------------+\n    | id                  | 00000000-aaaa-bbbb-cccc-999999999999                                                     |\n    | stack_name          | fleet                                                                                    |\n    | description         | Fleet cluster over etcd static cluster, with Flannel, Kafka + ELK access over Traefik RP |\n    |                     |                                                                                          |\n    | creation_time       | 2016-09-13T16:22:06Z                                                                     |\n    | updated_time        | None                                                                                     |\n    | stack_status        | CREATE_COMPLETE                                                                          |\n    | stack_status_reason | Stack CREATE completed successfully                                                      |\n    +---------------------+------------------------------------------------------------------------------------------+\n\n\nNow, the following infrastructure is ready:\n\n![fleet](docs/fleet.png)\n\nThe stateless instance expose two services, Kibana and Inventory\n\nYou can import the kibana/sample.json dashboard to visualize this:\n\n![fleet](docs/kibana.png)\n\n\n### Technologies\n\n* ResourceGroup of 3 instances of etcd members\n* AutoScalingGroup of 3 instances marked as stateful\n* AutoScalingGroup of 2 instances marked as stateless\n\n#### Etcd static\n\n* Etcd member (as static bootstrap)\n* Flannel\n* Fleet\n* SkyDNS\n* Journald Stream to Kafka\n\n#### Stateful\n\n* Etcd proxy\n* Flannel\n* Fleet\n* SkyDNS\n* Journald Stream to Kafka\n* Torus (inactive)\n* Elasticsearch\n* Zookeeper\n* Kafka\n\n#### Stateless\n\n* Etcd proxy\n* Flannel\n* Fleet\n* SkyDNS\n* Journald Stream to Kafka\n* Traefik\n* Logstash\n* Kibana\n\n# Fleet for Kubernetes - Rktnetes\n\nBased on the Fleet stack, this stack append:\n\n* AutoScalingGroup of 3 Kubemaster (api-server) \n* AutoScalingGroup of 2 Kubenode (kubelet)\n\nUsing the Makefile:\n\n    make kubernetes\n    \n    2016-09-14 14:52:43Z [router]: CREATE_IN_PROGRESS  state changed\n    2016-09-14 14:52:45Z [router]: CREATE_COMPLETE  state changed\n    2016-09-14 14:52:45Z [etcd_static]: CREATE_IN_PROGRESS  state changed\n    2016-09-14 14:54:47Z [etcd_static]: CREATE_COMPLETE  state changed\n    2016-09-14 14:54:47Z [worker_statefull]: CREATE_IN_PROGRESS  state changed\n    2016-09-14 14:56:44Z [worker_statefull]: CREATE_COMPLETE  state changed\n    2016-09-14 14:56:44Z [worker_stateless]: CREATE_IN_PROGRESS  state changed\n    2016-09-14 14:58:40Z [worker_stateless]: CREATE_COMPLETE  state changed\n    2016-09-14 14:58:40Z [kubemaster]: CREATE_IN_PROGRESS  state changed\n    2016-09-14 15:00:45Z [kubemaster]: CREATE_COMPLETE  state changed\n    2016-09-14 15:00:45Z [kubenode]: CREATE_IN_PROGRESS  state changed\n    2016-09-14 15:02:47Z [kubenode]: CREATE_COMPLETE  state changed\n    +---------------------+-------------------------------------------------------------------------------------------------------------------------+\n    | Field               | Value                                                                                                                   |\n    +---------------------+-------------------------------------------------------------------------------------------------------------------------+\n    | id                  | 00000000-aaaa-bbbb-cccc-999999999999                                                                                    |\n    | stack_name          | kubernetes                                                                                                              |\n    | description         | Fleet cluster over etcd static cluster, with Flannel, Kafka + ELK access over Traefik RP to deploy a Kubernetes cluster |\n    |                     |                                                                                                                         |\n    | creation_time       | 2016-09-14T14:52:43Z                                                                                                    |\n    | updated_time        | None                                                                                                                    |\n    | stack_status        | CREATE_COMPLETE                                                                                                         |\n    | stack_status_reason | Stack CREATE completed successfully                                                                                     |\n    +---------------------+-------------------------------------------------------------------------------------------------------------------------+\n\n### Deployed\n\nNow, the following infrastructure is ready:\n\n![kubernetes](docs/kubernetes.png)\n\nWith a quick overview of the machine deployment:\n\n![kubernetes](docs/machines.png)\n\nWith, as example, the following network distribution:\n\n![kubernetes](docs/interfaces.png)\n\nChecking the network connectivity and latency (express in milliseconds) between each host accross differents networks (Regular, Flannel)\n\n![kubernetes](docs/connections.png)\n\nOf course, the Kibana is available over the FloatingIP of the stateless group.\n\n### Using Kubernetes\n\nFinally, you can run the kubectl against the Kubemaster's FloatingIP as follow:\n\n\n    kubectl -s kubeMaster0,kubeMaster1,kubeMaster2 get cs\n    NAME                 STATUS    MESSAGE              ERROR\n    controller-manager   Healthy   ok                   \n    scheduler            Healthy   ok                   \n    etcd-0               Healthy   {\"health\": \"true\"}  \n    \n    kubectl -s kubeMaster0,kubeMaster1,kubeMaster2 get no\n    NAME                   STATUS    AGE\n    kube-node-achruumzsn   Ready     1m\n    kube-node-yvkndqjpbm   Ready     1m\n\nThe Kubernetes cluster point to http://127.0.0.1:2379 for service discovery, who's a proxy to the static etcd cluster, see Under the Hood for more details about etcd.\n \n\n## Under the hood\n\n### Etcd management\n\n    etcdctl cluster-health\n    member 1eeb69136ece2e20 is healthy: got healthy result from http://192.168.1.10:2379\n    member 761d10027054fc0a is healthy: got healthy result from http://192.168.1.12:2379\n    member 9e2fef28ec9ef1b0 is healthy: got healthy result from http://192.168.1.11:2379\n    cluster is healthy\n\nTo add an extra etcd member in the cluster (fleet, kubernetes):\n\n    make fleet_add_extra_member\n    # Will produce the following stdout:\n    \n    subnet=\"00000000-aaaa-bbbb-cccc-999999999999\"\n    network=\"00000000-aaaa-bbbb-cccc-999999999999\"\n    key_name=\"ubuntu\"\n    image=\"fleet\"\n    etcd_initial_cluster_ip=\"http://192.168.1.10:2379,http://192.168.1.11:2379,http://192.168.1.12:2379\"\n    etcd_initial_cluster=\"static0=http://192.168.1.10:2380,static1=http://192.168.1.11:2380,static2=http://192.168.1.12:2380\"\n    prefix=\"192.168.1.1\"\n    anti_affinity=\"00000000-aaaa-bbbb-cccc-999999999999\"\n    etcd_initial_cluster_token=\"iTRDy5eNvi\"\n    security_group=\"00000000-aaaa-bbbb-cccc-999999999999\"\n    flavor=\"m1.medium\"\n    name=\"static\"\n    ...\n    2016-09-13 17:02:19Z [port]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 17:02:20Z [userdata]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 17:02:21Z [userdata]: CREATE_COMPLETE  state changed\n    2016-09-13 17:02:21Z [port]: CREATE_COMPLETE  state changed\n    2016-09-13 17:02:21Z [instance]: CREATE_IN_PROGRESS  state changed\n    2016-09-13 17:05:09Z [instance]: CREATE_COMPLETE  state changed\n    +---------------------+---------------------------------------+\n    | Field               | Value                                 |\n    +---------------------+---------------------------------------+\n    | id                  | 00000000-aaaa-bbbb-cccc-999999999999  |\n    | stack_name          | etcd_static-3-iTRDy5eNvi              |\n    | description         | Etcd instance for static Etcd cluster |\n    |                     |                                       |\n    | creation_time       | 2016-09-13T17:02:19Z                  |\n    | updated_time        | None                                  |\n    | stack_status        | CREATE_COMPLETE                       |\n    | stack_status_reason | Stack CREATE completed successfully   |\n    +---------------------+---------------------------------------+\n    \n    etcdctl cluster-health\n    member 1eeb69136ece2e20 is healthy: got healthy result from http://192.168.1.10:2379    \n    member 761d10027054fc0a is healthy: got healthy result from http://192.168.1.12:2379\n    member 9e2fef28ec9ef1b0 is healthy: got healthy result from http://192.168.1.11:2379\n    member 2b271486cef2a7b4 is healthy: got healthy result from http://192.168.1.13:2379\n    cluster is healthy\n    \nAnd delete the latest extra member\n    \n    make fleet_delete_extra_member\n    2016-09-13 17:06:52Z [instance]: DELETE_IN_PROGRESS  state changed\n    2016-09-13 17:07:18Z [instance]: DELETE_COMPLETE  state changed\n    2016-09-13 17:07:18Z [port]: DELETE_IN_PROGRESS  state changed\n    \n    etcdctl cluster-health\n    member 1eeb69136ece2e20 is healthy: got healthy result from http://192.168.1.10:2379\n    failed to check the health of member 2b271486cef2a7b4 on http://192.168.1.13:2379: Get http://192.168.1.13:2379/health: dial tcp 192.168.1.13:2379: getsockopt: no route to host\n    member 2b271486cef2a7b4 is unreachable: [http://192.168.1.13:2379] are all unreachable\n    member 761d10027054fc0a is healthy: got healthy result from http://192.168.1.12:2379\n    member 9e2fef28ec9ef1b0 is healthy: got healthy result from http://192.168.1.11:2379\n    cluster is healthy\n\n\nThen, re-add one\n\n    make fleet_add_extra_member\n    ...\n    \n    etcdctl cluster-health\n    member 1eeb69136ece2e20 is healthy: got healthy result from http://192.168.1.10:2379\n    member 73d3ac441595fb2c is healthy: got healthy result from http://192.168.1.13:2379\n    member 761d10027054fc0a is healthy: got healthy result from http://192.168.1.12:2379\n    member 9e2fef28ec9ef1b0 is healthy: got healthy result from http://192.168.1.11:2379\n    cluster is healthy\n\n\nAgain, delete all extra **members**\n\n    make fleet_delete_extra_members # memberS\n\n\nPeriodic *etcd-gc.timer* will store any missing member in /var/lib/etcd/losts\n\n    Sep 14 15:05:56 static-2-j9cjctlpec etcd-gc[3097]: /bin/cat: /var/lib/etcd/losts: No such file or directory\n    Sep 14 15:06:02 static-2-j9cjctlpec etcd-gc[3120]: bc887d297aeffc9d\n    Sep 14 15:06:02 static-2-j9cjctlpec systemd[1]: Started Purge orphan Etcd Members.\n    \nIf a missing member stored in /var/lib/etcd/losts still missing, *etcd-gc.timer* remove it\n    \n    Sep 14 16:05:57 static-2-j9cjctlpec systemd[1]: Starting Purge orphan Etcd Members...\n    Sep 14 16:05:57 static-2-j9cjctlpec etcd-gc[3272]: bc887d297aeffc9d\n    Sep 14 16:06:03 static-2-j9cjctlpec etcd-gc[3275]: Actual losts: bc887d297aeffc9d\n    Sep 14 16:06:03 static-2-j9cjctlpec etcd-gc[3275]: Checking bc887d297aeffc9d\n    Sep 14 16:06:21 static-2-j9cjctlpec etcd-gc[3275]: PING 192.168.1.13 (192.168.1.13) 56(84) bytes of data.\n    Sep 14 16:06:21 static-2-j9cjctlpec etcd-gc[3275]: --- 192.168.1.13 ping statistics ---\n    Sep 14 16:06:21 static-2-j9cjctlpec etcd-gc[3275]: 3 packets transmitted, 0 received, 100% packet loss, time 2015ms\n    Sep 14 16:06:21 static-2-j9cjctlpec etcd-gc[3275]: Member is lost: bc887d297aeffc9d\n    Sep 14 16:06:22 static-2-j9cjctlpec etcd-gc[3275]: Removed member bc887d297aeffc9d from cluster\n    Sep 14 16:06:26 static-2-j9cjctlpec systemd[1]: Started Purge orphan Etcd Members.\n\n    \n## Add a Kibana\n    \n    dig @localhost kibana.skydns.local +short\n    10.1.56.2\n    \n    systemctl start fleet-kibana@1\n    dig @localhost kibana.skydns.local +short\n    10.1.56.2\n    10.1.47.2\n  \n    \n## Add a Logstash\n    \n    dig @localhost logstash.skydns.local +short\n    10.1.14.2\n    \n    systemctl start fleet-logstash@1\n    dig @localhost logstash.skydns.local +short\n    10.1.14.2\n    10.1.105.3\n\n    \n# Setup steps\n\nThis stack is design to works behind corporate proxies and use local object store as cache\n\n#### Python eggs\n    pip install python-openstackclient\n    pip install python-heatclient\n    \n#### Common packages\n    curl jq\n    \n#### ACI builders\n    docker2aci\n    \n    \n#### Environment\n    cp -v environment.template environment\n    # FILL-IT\n    # ...\n    \n    source environment\n    make check\n    \n#### Versions\n    cat image/versions\n    \nAll versions listed above have to be stored in public dedicated Swift Buckets (aka containers) \n\n    swift list \n    # Will produce this stdout:\n    \n    calico\n    cni\n    confd\n    docker\n    etcd\n    flannel\n    fleet\n    inventory\n    kubernetes\n    netenv\n    rkt\n    torus\n\n### ACI\n\nAll ACIs have to be stored like this:\n    \n    swift list aci \n    # Will produce this stdout:\n    \n    calico-node.aci\n    elasticsearch.aci\n    etcd.aci\n    hyperkube.aci\n    jds_kafka.aci\n    kafka.aci\n    kibana.aci\n    logstash.aci\n    skydns.aci\n    stage1-coreos.aci\n    traefik.aci\n    zookeeper.aci\n\n### Checks\n\nBe sure by running: \n\n    make check_versions","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulienbalestra%2Fopenstack_kubernetes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjulienbalestra%2Fopenstack_kubernetes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulienbalestra%2Fopenstack_kubernetes/lists"}