DigitalOceanでkubernetesを契約
note of digital ocean
kubernetesの勉強をしていましたがminikubeでは物足りなくなったので、
digitaloceanが安いということで、kubernetesを契約しました。
こちらからアカウントを作成すると有効期限が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
- Autoscale
-
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を構築してみます。
費用の問題で若干構成を変える予定です(切実)