LoginSignup
22
14

More than 5 years have passed since last update.

GKE でアドオンを削ったクラスタを起動する

Last updated at Posted at 2017-03-26

GKE のクラスタを普通に作ると初期状態で起動する Pod がいくつかある。
それらをクラスタ作成時のオプションでどこまで減らせるかを確認する。

環境情報

  • Kubernetes 1.5.3
  • Google Cloud SDK 147.0.0

デフォルトのクラスタ

普通にクラスタを作って接続する。

$ gcloud container clusters create --machine-type=g1-small --num-nodes=1 normal-cluster
Creating cluster normal-cluster...done.
Created [https://container.googleapis.com/v1/projects/apstndb-sandbox/zones/asia-northeast1-a/clusters/normal-cluster].
kubeconfig entry generated for normal-cluster.
NAME            ZONE               MASTER_VERSION  MASTER_IP       MACHINE_TYPE  NODE_VERSION  NUM_NODES  STATUS
normal-cluster  asia-northeast1-a  1.5.3           35.187.194.255  g1-small      1.5.3         1          RUNNING

$ gcloud container clusters get-credentials normal-cluster
Fetching cluster endpoint and auth data.
kubeconfig entry generated for normal-cluster.

Node のリソースを確認する。

$ kubectl top node
NAME                                            CPU(cores)   CPU%      MEMORY(bytes)   MEMORY%
gke-normal-cluster-default-pool-eb4f0dc0-xjf1   48m          4%        855Mi           50%

作成したばかりなのに既に g1-small の 1.7GB の RAM の半分を使っている。
キャッシュに使われている部分もあると思うが心もとない。

内訳

起動している Pod を確認する。

$ kubectl top pod --all-namespaces
NAMESPACE     NAME                                                                  CPU(cores)   MEMORY(bytes)
kube-system   l7-default-backend-2001230086-njh1p                                   0m           0Mi
kube-system   kubernetes-dashboard-3968242289-515z6                                 0m           13Mi
kube-system   kube-dns-702851989-d1gnc                                              1m           17Mi
kube-system   kube-dns-autoscaler-1193130908-9772h                                  0m           4Mi
kube-system   fluentd-cloud-logging-gke-normal-cluster-default-pool-eb4f0dc0-xjf1   6m           86Mi
kube-system   heapster-v1.2.0.1-1244163626-4pd74                                    0m           15Mi
kube-system   kube-proxy-gke-normal-cluster-default-pool-eb4f0dc0-xjf1              14m          8Mi

これらの用途は下記のようなものだ。

名前
l7-default-backend Ingress のデフォルトバックエンド
kubernetes-dashboard Kubernetes ダッシュボード
kube-dns Kubernetes の Pod, Service の名前によるアクセス
kube-dns-autoscaler kube-dns のオートスケール
fluentd-cloud-logging Cloud Logging 連携
heapster Kubernetes のリソース監視
kube-proxy Kubernetes の Service へのルーティング

この中だと fluentd-cloud-logging が相対的に大きく、仮に 0.6 GB しか RAM のない f1-micro マシンタイプだとしたらかなり圧迫することになるだろう。
他がほぼ Go 製なのに対して Ruby 製なのと無関係ではないと考えられる。

作成時に各拡張を無効化したクラスタ

一通りの無効化できそうなものを無効化したクラスタを作ってみよう。

$ gcloud container clusters create --machine-type=g1-small --num-nodes=1 minimal-cluster \
    --no-enable-cloud-endpoints \
    --no-enable-cloud-logging \
    --no-enable-cloud-monitoring \
    --disable-addons=HttpLoadBalancing,HorizontalPodAutoscaling
Creating cluster minimal-cluster...done.
Created [https://container.googleapis.com/v1/projects/apstndb-sandbox/zones/asia-northeast1-a/clusters/minimal-cluster].
kubeconfig entry generated for minimal-cluster.
NAME             ZONE               MASTER_VERSION  MASTER_IP      MACHINE_TYPE  NODE_VERSION  NUM_NODES  STATUS
minimal-cluster  asia-northeast1-a  1.5.3           104.198.91.96  g1-small      1.5.3         1          RUNNING
$ gcloud container clusters get-credentials minimal-cluster
Fetching cluster endpoint and auth data.
kubeconfig entry generated for minimal-cluster.

もはや heapstar が起動していないので kubectl top サブコマンドは使えない。
kubectl get pod で起動している Pod を確認する。

$ kubectl get pod --all-namespaces
NAMESPACE     NAME                                                       READY     STATUS    RESTARTS   AGE
kube-system   kube-dns-702851989-k886h                                   4/4       Running   0          2m
kube-system   kube-dns-autoscaler-1193130908-wjh4f                       1/1       Running   0          2m
kube-system   kube-proxy-gke-minimal-cluster-default-pool-238257ab-b9h8   1/1       Running   0          3m
kube-system   kubernetes-dashboard-3968242289-wr78s                      1/1       Running   0          2m

一通りのオプションを指定したが、今回削れたのは下記の3つだ。

Pod 削除方法
l7-default-backend --disable-addons=HttpLoadBalancing
fluentd-cloud-logging --no-enable-cloud-logging
heapster --no-enable-cloud-monitoring

残ったものも kube-dnskube-proxy 以外は Deployment を消せば止められそうだが、制御するオプションはないので、 Node を作り直したりする際に復活する可能性がある。

追記

kube-dns-autoscaler, kubernetes-dashboard ともに、 kubectl delete deployment で削除しても自動的に復活することを確認した。よって、今のところこの記事の内容が最小構成だと思われる。

参考

22
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
14