{"id":26513605,"url":"https://github.com/khteh/kubernetes","last_synced_at":"2025-03-21T04:29:05.184Z","repository":{"id":64285141,"uuid":"161915648","full_name":"khteh/kubernetes","owner":"khteh","description":"Kubernetes cluster","archived":false,"fork":false,"pushed_at":"2025-03-15T10:51:45.000Z","size":1231,"stargazers_count":3,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-15T11:29:26.459Z","etag":null,"topics":["aws-eks","bash","efk-k8s","ethereum","ethereum-node","horizontal-pod-autoscaler","kubernetes","load-balancer","rabbitmq","reddis"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/khteh.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-15T15:01:51.000Z","updated_at":"2025-03-15T10:51:49.000Z","dependencies_parsed_at":"2023-10-11T04:51:45.729Z","dependency_job_id":"d7b46f0b-be90-4799-b553-3c996455eb19","html_url":"https://github.com/khteh/kubernetes","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khteh%2Fkubernetes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khteh%2Fkubernetes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khteh%2Fkubernetes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khteh%2Fkubernetes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/khteh","download_url":"https://codeload.github.com/khteh/kubernetes/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244736808,"owners_count":20501542,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["aws-eks","bash","efk-k8s","ethereum","ethereum-node","horizontal-pod-autoscaler","kubernetes","load-balancer","rabbitmq","reddis"],"created_at":"2025-03-21T04:29:04.667Z","updated_at":"2025-03-21T04:29:05.176Z","avatar_url":"https://github.com/khteh.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kubernetes\n\nKubernetes cluster which consists of the following components:\n\n- RestAPI application\n- Elasticsearch cluster\n  - 3 Master nodes\n  - 2 Slave nodes\n- Redis cluster\n- RabbitMQ cluster\n- Ethereum node which consists of:\n  - Executor (GETH)\n  - Consensus (Lodestar Beacon and Validator)\n\n## Prerequisites\n\n- Install microk8s\n- Install awscli\n- Run `aws config` to set up aws configurations and credentials\n\n## Update kubeconfig\n\n- `aws eks update-kubeconfig --region \u003cregion\u003e --name \u003ccluster name\u003e`\n- The step above will update `~/.kube/config`\n- However, `microk8s.kubectl` uses the config in `/var/snap/microk8s/current/credentials/client.config`\n- So, copy the EKS config from `~/.kube/config` to `/var/snap/microk8s/current/credentials/client.config`\n\n## Set Aliases\n\n`snap alias microk8s.kubectl kubectl`\n\n## List and use contexts\n\n- `kubectl config get-contexts` will show available clusters, both local and remote:\n\n  ```\n  $ k config get-contexts\n  CURRENT   NAME        CLUSTER            AUTHINFO    NAMESPACE\n  *         mycluster   mycluster          myuser\n            microk8s    microk8s-cluster   admin\n  ```\n\n- `kubectl config use-context` to select a cluster to work with.\n\n![Kubernetes cluster](./k8s.jpg?raw=true \"Kubernetes Cluster\")\n\n```\n$ k get all\nNAME                                          READY   STATUS      RESTARTS   AGE\npod/daemonset-8s4zs                           1/1     Running     0          108m\npod/default-http-backend-5769f6bc66-tslnj     1/1     Running     0          143m\npod/elasticsearch-0                           1/1     Running     0          108m\npod/elasticsearch-1                           1/1     Running     0          108m\npod/elasticsearch-init-wl24z                  0/1     Completed   0          100m\npod/elasticsearch-master-0                    1/1     Running     0          108m\npod/elasticsearch-master-1                    1/1     Running     0          108m\npod/elasticsearch-master-2                    1/1     Running     0          108m\npod/kibana-0                                  1/1     Running     0          14m\npod/kibana-1                                  1/1     Running     0          14m\npod/mysql-0                                   1/1     Running     0          140m\npod/nginx-ingress-microk8s-controller-ppplj   1/1     Running     0          142m\npod/restapi-0                                 2/2     Running     0          49m\npod/restapi-1                                 2/2     Running     0          49m\nrabbitmq-0                         1/1     Running     0          3d6h\nrabbitmq-1                         1/1     Running     0          3d6h\nrabbitmq-2                         1/1     Running     0          3d6h\nredis-cluster-0                    1/1     Running     0          14d\nredis-cluster-1                    1/1     Running     0          14d\nredis-cluster-2                    1/1     Running     0          14d\nredis-cluster-3                    1/1     Running     0          14d\nredis-cluster-4                    1/1     Running     0          14d\nredis-cluster-5                    1/1     Running     0          14d\n\nNAME                                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE\nservice/default-http-backend          ClusterIP   10.152.183.205   \u003cnone\u003e        80/TCP              143m\nservice/kubernetes                    ClusterIP   10.152.183.1     \u003cnone\u003e        443/TCP             145m\nservice/svc-elasticsearch             ClusterIP   None             \u003cnone\u003e        9200/TCP,9300/TCP   108m\nservice/svc-elasticsearch-discovery   ClusterIP   None             \u003cnone\u003e        9300/TCP            108m\nservice/svc-kibana                    ClusterIP   None             \u003cnone\u003e        8080/TCP            14m\nservice/svc-mysql                     ClusterIP   None             \u003cnone\u003e        3306/TCP            140m\nservice/svc-restapi                   ClusterIP   None             \u003cnone\u003e        8080/TCP,8443/TCP   49m\nservice/svc-rabbitmq                     ClusterIP   None             \u003cnone\u003e        15672/TCP,5672/TCP   5d7h\nservice/svc-redis-cluster                ClusterIP   None             \u003cnone\u003e        6379/TCP,16379/TCP   61d\n\nNAME                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE\ndaemonset.apps/daemonset                           1         1         1       1            1           \u003cnone\u003e          108m\ndaemonset.apps/nginx-ingress-microk8s-controller   1         1         1       1            1           \u003cnone\u003e          143m\n\nNAME                                   READY   UP-TO-DATE   AVAILABLE   AGE\ndeployment.apps/default-http-backend   1/1     1            1           143m\n\nNAME                                              DESIRED   CURRENT   READY   AGE\nreplicaset.apps/default-http-backend-5769f6bc66   1         1         1       143m\n\nNAME                                    READY   AGE\nstatefulset.apps/elasticsearch          2/2     108m\nstatefulset.apps/elasticsearch-master   3/3     108m\nstatefulset.apps/kibana                 2/2     14m\nstatefulset.apps/mysql                  1/1     140m\nstatefulset.apps/restapi                2/2     49m\nstatefulset.apps/rabbitmq                     3/3     3d6h\nstatefulset.apps/redis-cluster                6/6     14d\n\nNAME                                              REFERENCE             TARGETS   MINPODS   MAXPODS   REPLICAS   AGE\nhorizontalpodautoscaler.autoscaling/kibana-hpa    StatefulSet/kibana    3%/75%    2         5         2          74s\nhorizontalpodautoscaler.autoscaling/restapi-hpa   StatefulSet/restapi   1%/75%    2         5         2          23m\nhorizontalpodautoscaler.autoscaling/rabbitmq-hpa  StatefulSet/rabbitmq  15%/75%   3         6         3          4d5h\n\nNAME                           COMPLETIONS   DURATION   AGE\njob.batch/elasticsearch-init   1/1           6s         100m\n```\n\n## Redis Cluster:\n\n- 3 master nodes\n- 3 slave nodes\n\n```\ncluster_state:ok\ncluster_slots_assigned:16384\ncluster_slots_ok:16384\ncluster_slots_pfail:0\ncluster_slots_fail:0\ncluster_known_nodes:6\ncluster_size:3\ncluster_current_epoch:6\ncluster_my_epoch:1\ncluster_stats_messages_ping_sent:1208\ncluster_stats_messages_pong_sent:1178\ncluster_stats_messages_sent:2386\ncluster_stats_messages_ping_received:1173\ncluster_stats_messages_pong_received:1208\ncluster_stats_messages_meet_received:5\ncluster_stats_messages_received:2386\nredis-cluster-0\nmaster\n1680\n10.1.1.80\n6379\n1680\n\nredis-cluster-1\nmaster\n1666\n10.1.1.81\n6379\n1666\n\nredis-cluster-2\nmaster\n1666\n10.1.1.79\n6379\n1666\n\nredis-cluster-3\nslave\n10.1.1.78\n6379\nconnected\n1666\n\nredis-cluster-4\nslave\n10.1.1.76\n6379\nconnected\n1680\n\nredis-cluster-5\nslave\n10.1.1.77\n6379\nconnected\n1666\n```\n\n## Elasticsearch Cluster:\n\n```\n# curl svc-elasticsearch-discovery:9200/_cluster/health?pretty\n{\n  \"cluster_name\" : \"elasticsearch\",\n  \"status\" : \"green\",\n  \"timed_out\" : false,\n  \"number_of_nodes\" : 5,\n  \"number_of_data_nodes\" : 2,\n  \"active_primary_shards\" : 16,\n  \"active_shards\" : 32,\n  \"relocating_shards\" : 0,\n  \"initializing_shards\" : 0,\n  \"unassigned_shards\" : 0,\n  \"delayed_unassigned_shards\" : 0,\n  \"number_of_pending_tasks\" : 0,\n  \"number_of_in_flight_fetch\" : 0,\n  \"task_max_waiting_in_queue_millis\" : 0,\n  \"active_shards_percent_as_number\" : 100.0\n}\n# curl svc-elasticsearch-discovery:9200/_cat/indices\ngreen open .kibana_1                      CWOkws7gRMSJTGaDEDKFOQ 1 1   5 0  50.7kb 25.3kb\ngreen open restapi.logs-2019.03.27        4GFVDwVeSAq4SNAVfG7Lzg 5 1 228 0 467.7kb  236kb\ngreen open restapi.access.logs-2019.03.27 4azKaBXmTcmIa8R3Vz9imA 5 1  11 0 140.1kb   70kb\ngreen open restapi.access.logs-2019.03.28 oZjwRZdxQIybxWQ4NBZZSw 5 1   4 0  57.2kb 28.6kb\n```\n\n## RabbitMQ Cluster:\n\n```\n# rabbitmqctl cluster_status\nCluster status of node rabbit@rabbitmq-0.svc-rabbitmq.default.svc.cluster.local ...\n[{nodes,[{disc,['rabbit@rabbitmq-0.svc-rabbitmq.default.svc.cluster.local',\n                'rabbit@rabbitmq-1.svc-rabbitmq.default.svc.cluster.local',\n                'rabbit@rabbitmq-2.svc-rabbitmq.default.svc.cluster.local']}]},\n {running_nodes,['rabbit@rabbitmq-2.svc-rabbitmq.default.svc.cluster.local',\n                 'rabbit@rabbitmq-1.svc-rabbitmq.default.svc.cluster.local',\n                 'rabbit@rabbitmq-0.svc-rabbitmq.default.svc.cluster.local']},\n {cluster_name,\u003c\u003c\"rabbit@rabbitmq-0.svc-rabbitmq.default.svc.cluster.local\"\u003e\u003e},\n {partitions,[]},\n {alarms,[{'rabbit@rabbitmq-2.svc-rabbitmq.default.svc.cluster.local',[]},\n          {'rabbit@rabbitmq-1.svc-rabbitmq.default.svc.cluster.local',[]},\n          {'rabbit@rabbitmq-0.svc-rabbitmq.default.svc.cluster.local',[]}]}]\n```\n\n## Horizontal Pod Autoscaler:\n\n```\n$ k get hpa\nNAME          REFERENCE             TARGETS   MINPODS   MAXPODS   REPLICAS   AGE\nkibana-hpa    StatefulSet/kibana    11%/75%   2         5         2          20s\nrestapi-hpa   StatefulSet/restapi   1%/75%    2         5         2          22m\nrabbitmq-hpa  StatefulSet/rabbitmq  41%/75%   3         6         3          4d5h\n```\n\n## Cluster Information:\n\n```\n$ microk8s.kubectl cluster-info\nKubernetes master is running at https://127.0.0.1:16443\nHeapster is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/heapster/proxy\nKubeDNS is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy\nMetrics-server is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy\nGrafana is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy\nInfluxDB is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/monitoring-influxdb:http/proxy\n```\n\n## Dashboard:\n\n- Point the browser to the Grafana URL given by the cluster-info above\n\n## Kibana:\n\n- Point the browser to localhost/kibana\n- Supports GeoIP\n\n## Check the application:\n\n- `curl -L localhost/restapi/greeting --http2 --insecure`\n- `curl -L localhost/restapi/greeting?name=Mickey%20Mouse --http2 --insecure`\n\n## Manifest validation\n\n- `sudo apt install -y yamllint`\n- `yamllint \u003cfilename\u003e.yml`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkhteh%2Fkubernetes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkhteh%2Fkubernetes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkhteh%2Fkubernetes/lists"}