ハトネコエ Web がくしゅうちょう

プログラミングやサーバー・Web制作、チームマネジメントなど得た技術のまとめ

Vultr で Kubernetes ノード立ててみたのでメモ

Kubernetes 初心者として、まずはカンタンに始めようと思って、
Vultr でマネージドな Kubernetes を始めてみることにしたのでメモ書き。

1. ノードの立ち上げ

https://my.vultr.com/kubernetes 内の「Add Cluster」からノードを作成します。

Cluster Name はとりあえず適当な感じで

Cluster Location は Tokyo で

Vultr のよくないところとして、
デフォルトでは値段高めのインスタンスを作成させようとする ので、
Node Pool Type を「Optimized Cloud」から 「Regular Cloud Compute」 の方に変更します。

デフォルトだと 135ドル/月 のプランにさせようとしてきます……

この設定で 20ドル/月 のプランにできます

2. Kubernetes ダッシュボードを見られるようにする

右上の Download Configuration から YAML ファイルをダウンロード。

まだ kubectl コマンドが使える状態になっていなかったので、Homebrew を使ってインストールしました。

brew install kubectl

そうしたら kubectl コマンドが動くことをいったん確認。

kubectl --kubeconfig vke-xxxxxxxxxxxxx.yaml get nodes

NAME                       STATUS   ROLES    AGE   VERSION
test-label-2a1617d0261a   Ready    <none>   15m   v1.28.3
test-label-b5a69dff50c2   Ready    <none>   15m   v1.28.3

https://kubernetes.io/ja/docs/tasks/access-application-cluster/web-ui-dashboard/ を参考に、
ダッシュボードの作成をおこないます。

kubectl --kubeconfig vke-xxxxxxxxxxxxx.yaml apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

ダッシュボードの作成が終わったら

kubectl --kubeconfig vke-xxxxxxxxxxxxxxxxxx.yaml proxy

を実行し、 Starting to serve on 127.0.0.1:8001 と表示されるのを待ちます。

そうすると、
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
にアクセスしてログイン画面を見ることができます。

「Kubeconfig」のほうを選択して、
さっきダウンロードした YAML ファイルを指定して「サインイン」できるかと思いきや、できませんでした。

いろいろ調べた挙げ句、
https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.mdを参考に
以下のような YAML ファイルを dashboard-admin-user.yml として作成しました。

# Creating a Service Account
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
# Creating a ClusterRoleBinding (管理者権限を付与)
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: v1
kind: Secret
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/service-account.name: "admin-user"
type: kubernetes.io/service-account-token

その後、

kubectl --kubeconfig vke-xxxxxxxxxxxxx.yaml -f dashboard-admin-user.yaml apply

で適用し、強い権限を持った admin-user を作成。その後、

kubectl --kubeconfig vke-xxxxxxx.yaml get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d

トークンを作成し、そのトークンを入力して「サインイン」したら
無事にダッシュボードに入れました。

最初、上のように「Cron ジョブ」や「イングレス」の項を
権限不足で読み込めない症状があって困りました。

これは

kubectl --kubeconfig vke-xxxxxxxxxxxxx.yaml apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

v2.7.0 のところを、ドキュメント通りに古い v2.0.0 を指定していたためでした。

最新版のダッシュボードだと問題が起こりませんでした! よかった。

3. Pod の立ち上げ

右上の「+(プラス)」ボタンから Pod の作成ができます。

https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/ に書かれている
YAML ファイルの内容を記載し、nginx の Pod を立ち上げてみました。

上のように記載し「アップロード」ボタンを押すと……

このようにデプロイされました。

これでいったん Kubernetes に入門できた気がします。