自称フルスタックエンジニアのぶろぐ。

pythonやreactや、gcpやawsなどなどについて書いていこうかと思います。

GCP GKE(k8s) kubernetes Tips

GKE Tips

ノードプールを指定してPodを実行する方法

メニューの [Kubernetes Engine] から [クラスタ] を選択。

下記のようにノードプールが表示されているので、指定するノードプールの名前を確認する。

f:id:murabo408:20180807190227p:plain

manifestのDeploymentの場合、

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: test-app
spec:
  template:
    metadata:
      labels:
        app: test-app
    spec:
      nodeSelector:
        cloud.google.com/gke-nodepool: default-pool
     ...

specの中に、nodeSelector を定義して cloud.google.com/gke-nodepool: [ノードプール名] と記載するだけ。

クラスターのマシンタイプ変更(移行)する方法

# gcloudコマンドでノードプールを作成する machine-typeとnum-nodesでスペックと数を指定する。
  gcloud container node-pools create [任意のノードプール名] --cluster [クラスタ名] --machine-type=custom-4-10240 --num-nodes=3 --zone [クラスタのゾーン名]


# 下記コマンドで各ノードをスケジュール不可にします。
  for node in $(kubectl get nodes -l cloud.google.com/gke-nodepool=default-pool -o=name); do kubectl cordon "$node"; done


# kubectl drain コマンドを実行して各ノードのポッドを正常にドレイン(ノードからpodを強制排除)します。
  for node in $(kubectl get nodes -l cloud.google.com/gke-nodepool=default-pool -o=name); do   kubectl drain --force --ignore-daemonsets --delete-local-data --grace-period=10 "$node"; done


# 上記コマンドが完了すると、ポッドが larger-pool ノードで実行されます。


# 不要となったノードプールを削除する。
  gcloud container node-pools delete [削除したいノードプール名]  --cluster [クラスタ名]  --zone [クラスタのゾーン名]

参考URL: https://cloud.google.com/kubernetes-engine/docs/tutorials/migrating-node-pool?hl=ja

murabo.hatenablog.com

murabo.hatenablog.com