DigitalOcean Kubernetesに入門した時のメモ

4 min読了の目安(約3900字TECH技術記事

流石にGKEのプリエンプティブルインスタンスとまではいかないものの、
他のマネージドK8sより安いと聞いて触ってみた時の備忘録です。


※ブログからの移行記事です。

TL;DR

  • とにかくシンプル
  • 機能は少なめ
    • Ingress Controllerは自分で入れてね(Nginx Ingressなど)という感じ
  • 比較的小〜中規模アプリ向け
  • 公式の手順でリソースのクリーンアップを行っても、LoadBalancerは自動削除されないので注意
  • CNIプラグインにCiliumを採用してるのがちょっと珍しい

検証環境

  • MacOS Catalina
  • kubectl: v1.17.2

作業録

  • アカウント作成

Sign UP->クレジットカード登録->本人確認(パスポート or 運転免許証)
という流れでした。
ちなみにパスポート写真を登録しようとしたら、撮影時に何回もglare detectedと怒られてなかなか進めなかったです。
(結局暗めの場所に移動して、画面が均一な明るさになるようにケアしたら上手く行った)

  • ダッシュボードが表示されたら、サイドバーのKubernetesタブを選択
  • <Create a Kubernetes Cluster>を選択

  • 利用したいバージョンを選択

2020年5月現在は1.16.6がlatestだったので、こちらを選択しました。

  • リージョンを選択

日本にDCがないので、最寄りのシンガポールを選択しました。

  • スペックを選択

最低スペックが1vCPU/2GB Memoryだったので、こちらを選択しました。
なお、ここで選んだWorkerノード数だけDroplets(AWSでいうEC2)が裏で構築される。
ちなみにMasterノードに対しては課金されないようです。

  • タグを選択

タグは付けなくても良いですが、ある単位でタグ付けしておくと
クラスターが増えてきたときに後で検索しやすくなります。

  • 一通り選択し終わったらクラスター作成

作成すると画面上部にプログレスバーが現れます。

  • 以下Get Startedを押す

  • kubectlとdoctlをインストール

kubectlはすでに手元のMacにインストール済みなので、doctlだけインストール。

$ brew install doctl

  • クラスターに接続
# アクセストークンを入力(今回はRead+Write権限を持ったトークンを払い出した)
$ doctl auth init
# クラスター一覧を確認
$ doctl kubernetes cluster list
ID                                      Name                                  Region    Version        Auto Upgrade    Status     Node Pools
74c5e403-9abb-4dfd-999e-d7bc082af416    k8s-1-16-6-do-2-sgp1-1588317607439    sgp1      1.16.6-do.2    false           running    pool-sfg8xa6gz
# 接続したいクラスターのContextを追加
$ doctl kubernetes cluster kubeconfig save k8s-1-16-6-do-2-sgp1-1588317607439
Notice: Adding cluster credentials to kubeconfig file found in "/Users/xxxxx/.kube/config"
Notice: Setting current-context to do-sgp1-k8s-1-16-6-do-2-sgp1-1588317607439
# ノード確認
$ kubectl get no
NAME                   STATUS   ROLES    AGE    VERSION
pool-sfg8xa6gz-38k81   Ready    <none>   136m   v1.16.6
pool-sfg8xa6gz-38k8z   Ready    <none>   134m   v1.16.6

  • サンプルアプリをデプロイ

※このタイミングでDigitalOceanのマネージドのLoadBalancerが作られるので、課金に注意

# リポジトリをクローン
git clone https://github.com/digitalocean/doks-example
# デプロイ
kubectl apply -f manifest.yaml
# Load Balancer ServiceのEXTERNAL-IPが付与されるまで待機
kubectl get svc -w

EXTERNAL-IPが付与されたらhttp://${EXTERNAL-IP}にアクセスすると、
サンプルアプリの表示が確認できます。

  • リソースのクリーンアップ

冒頭にも書きましたが、クラスターを削除しても
作成されたLoadBalancerリソースは削除されないので注意しましょう。

# クラスター削除
$ doctl k8s cluster delete k8s-1-16-6-do-2-sgp1-1588317607439
Warning: Are you sure you want to delete this Kubernetes cluster? (y/N) ? y
Notice: Cluster deleted, removing credentials
Notice: Removing cluster credentials from kubeconfig file found in "/Users/xxxxx/.kube/config"
Notice: The removed cluster was set as the current context in kubectl. Run `kubectl config get-contexts` to see a list of other contexts you can use, and `kubectl config set-context` to specify a new one.
$ doctl k8s cluster list
ID    Name    Region    Version    Auto Upgrade    Status    Node Pools
$ 

# Load Balancer削除
$ doctl compute load-balancer list --format ID
ID
4a1931ce-28a1-4f80-acc3-2b87b1009bc8
$ doctl compute load-balancer delete 4a1931ce-28a1-4f80-acc3-2b87b1009bc8
Warning: Are you sure you want to delete this load balancer? (y/N) ? y
$ doctl compute load-balancer list --format ID
ID
$