DigitalOceanでkubernetesを契約

2024年1月20日

note of digital ocean

kubernetesの勉強をしていましたがminikubeでは物足りなくなったので、
digitaloceanが安いということで、kubernetesを契約しました。

DigitalOcean Referral Badge
こちらからアカウントを作成すると有効期限が2ヶ月分の$200クレジットが付与されます。

AWSのEKSは$72+利用料で手が出ません。

今回こっそり家のクレジットカードで契約しています。。もしdigitaloceanやってみたい方は↑のリンクから登録お願い致します。

本当はOCI(Oracle Cloud Infrastructure)で無料枠インスタンスから作ろうとしましたが大阪リージョンがリソース上限で、アカウントの移動も出来ず新規インスタンス作成も出来なく問い合わせしても無視されているので。

  • アカウントの登録はgoogle認証
  • クレジットカードはpaypal

kubernetes 契約は下記構成

  • Choose a datacenter region

    • SGP1
  • Select a version

    • 1.28.2-do.0
  • Choose cluster capacity

    • Autoscale
      • spec : 2番目に低いもの(後で変更できない)
      • scale : 無し(後で変更できる)
      • cost : $18/month
  • Automate database management

    • Add database operatorにチェック(使うかはわかりません)
  • 1番低いペック、$12のものは、ingresscontroler,cert-managerを入れたら自分のpod一つも稼働出来ないでリソース不足で積みました。

    • kube-systemだけでCPUの8割使われます。

契約終了後の確認

グローバルIPアドレス

Droplets > pool-xxxxxxxx のインスタンス名の右側に出ています。

firewall

Networking > Firewalls
から確認できます。

  • publicとprivateのポリシーがあります。

  • public側のInboundルールは初回は全拒否となっています。

    • kubectlでingress-nginxをapplyしていくと勝手にポート開放されていると思います。
  • private側のInboundルールはICMPとTCP/UDP全ポートが、10.0.0.0/8,172.16.0.0/12,192.168.0.0/16から全許可となっています。

  • 諸々構築出来た後でpublic側のポートを開けると良いでしょう。

    • lb導入すると上記は不要になります。
  • internet gateway(出ていくIPアドレス)はランダムでした

install doctl

degital oceanではdoctlなるコマンドで一部cli操作します。

snap install doctl

create api key

メニューのAPI > Generate New Token から。期限はNo Expire

create Container Registry

メニューの Container Registry から、FREEプランで作成。500MBまで無料

connect Ceontainer Registry

  • minikubeをローカルで起動している場合は停止します。
    • minikube stop
    • ~/.kube/configを退避します。
      mv -i .kube/config{,.minikube}
ocarina@ab350-pro4:~$ docker login registry.digitalocean.com
Username: デジタルオーシャンに登録したメールアドレス
Password: 発行したapiキー
WARNING! Your password will be stored unencrypted in /home/ocarina/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
ocarina@ab350-pro4:~$ 

↑不要かも

ocarina@ab350-pro4:~$ doctl registry login
Error: Unable to initialize DigitalOcean API client: access token is required. (hint: run 'doctl auth init')

初回は初期化が必要のようです。

ocarina@ab350-pro4:~$ doctl auth init
Please authenticate doctl for use with your DigitalOcean account. You can generate a token in the control panel at https://cloud.digitalocean.com/account/api/tokens

❯ Enter your access token:  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

Validating token... ✔

もう一度ログインをトライ

ocarina@ab350-pro4:~$ doctl registry login
Logging Docker in to registry.digitalocean.com
Notice: Login valid for 30 days. Use the --expiry-seconds flag to set a shorter expiration or --never-expire for no expiration.
WARNING: Error loading config file: /home/ocarina/.docker/config.json: open /home/ocarina/.docker/config.json: permission denied
Warning: Using the doctl Snap? Grant access to the doctl:dot-docker plug to use this command with: sudo snap connect doctl:dot-docker
Error: open /home/ocarina/.docker/config.json3680418241: permission denied

snapで入れたdoctlのため下記が必要とのこと

ocarina@ab350-pro4:~$ sudo snap connect doctl:dot-docker
[sudo] ocarina のパスワード: 
ocarina@ab350-pro4:~$ doctl registry login
Logging Docker in to registry.digitalocean.com
Notice: Login valid for 30 days. Use the --expiry-seconds flag to set a shorter expiration or --never-expire for no expiration.
ocarina@ab350-pro4:~$ 
ocarina@ab350-pro4:~$ cat .docker/config.json 
{
    "auths": {
        "registry.digitalocean.com": {
            "auth": "**********************************************************************"
        }
    }
}
ocarina@ab350-pro4:~$ 

Integrating with Kubernetes(Kubernetesとの統合)

デジタルオーシャンコンソールのContainer Registryのところでチェックするだけっぽい。

  • Integrate all clusterにチェック
  • Save & continue

Connecting and managing this cluster

ocarina@ab350-pro4:~$ doctl kubernetes cluster kubeconfig save ***************************
Warning: Using the doctl Snap? Grant access to the doctl:kube-config plug to use this command with: sudo snap connect doctl:kube-config
Error: error loading config file "/home/ocarina/.kube/config": open /home/ocarina/.kube/config: permission denied
ocarina@ab350-pro4:~$ sudo snap connect doctl:kube-config
ocarina@ab350-pro4:~$ doctl kubernetes cluster kubeconfig save ***************************
Warning: Using the doctl Snap? Grant access to the doctl:kube-config plug to use this command with: sudo snap connect doctl:kube-config
Error: error loading config file "/home/ocarina/.kube/config": open /home/ocarina/.kube/config: permission denied
ocarina@ab350-pro4:~$ unlink ~/.kube/config
ocarina@ab350-pro4:~$ doctl kubernetes cluster kubeconfig save ***************************
Notice: Adding cluster credentials to kubeconfig file found in "/home/ocarina/.kube/config"
Notice: Setting current-context to do-sgp1-k8s-1-28-2-do-0-sgp1-1703995798740
ocarina@ab350-pro4:~$ mv -i ~/.kube/config{,.doks} 
ocarina@ab350-pro4:~$ ln -s ~/.kube/config{.doks,} 

ocarina@ab350-pro4:~$ kubectl get nodes
NAME                   STATUS   ROLES    AGE     VERSION
pool-15ef8usof-x44tj   Ready    <none>   2m41s   v1.28.2
ocarina@ab350-pro4:~$ 

接続確認

ocarina@ab350-pro4:~$ kubectl config get-contexts
CURRENT   NAME                                         CLUSTER                                      AUTHINFO                                           NAMESPACE
*         do-sgp1-k8s-1-28-2-do-0-sgp1-1703995798740   do-sgp1-k8s-1-28-2-do-0-sgp1-1703995798740   do-sgp1-k8s-1-28-2-do-0-sgp1-1703995798740-admin   
ocarina@ab350-pro4:~$ 

ocarina@ab350-pro4:~$ kubectl cluster-info
Kubernetes control plane is running at https://***************************.k8s.ondigitalocean.com
CoreDNS is running at https://***************************.k8s.ondigitalocean.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

空きリソース確認

ocarina@ab350-pro4:~$ kubectl describe node | grep cpu\ 
  cpu                802m (42%)        0 (0%)
ocarina@ab350-pro4:~$ 

1cpuのスペックのときはデフォルトで84%利用していたので、だいぶ余裕が出来た。

これで、ローカル環境からコンテナレジストリとkubernetesへ接続出来ました。

Deploy a workload or sample app

次は、k8sの環境にwordpressを構築してみます。

費用の問題で若干構成を変える予定です(切実)

https://github.com/digitalocean/container-blueprints/tree/main/DOKS-Wordpress#installing-and-configuring-the-openebs-dynamic-nfs-provisioner

Posted by ocarina