Vultr Kubernetes Engineを試してみた

こんにちは!久しぶりの技術ネタです。先月からVultr Kubernetes Engine (VKE)のBetaが始まっているようでして、早速と言うほど早いわけではないですが試してみました。

Vultr Kubernetes Engine Beta Is Now Available in New Jersey – Vultr.com

基本的には以下のガイドに沿っていく感じです。

Vultr Kubernetes Engine – Vultr.com

管理画面に入るとProductsの中にKubernetesがありますので開いています。まだクラスタを作成していなければ以下のような画面のはずですのでAdd Clusterを押します。

クラスタがない状態のVKEクラスタ一覧画面

クラスタの作成画面になりますので、必要事項を入力します。今回はクラスタ名はtest、ロケーションは日本に近そうなLos Angelesとし、プールは名前だけtest-pool0とし他は初期状態のままとしました。ロケーションについては、この記事執筆時点ではLos AngelesとNew York (NJ)のみという感じで、日本はまだですね。ちなみに初期状態で1vCPU、2GB RAMのノードが3台で月30ドル、コントロールプレーンの費用は発生しないということです。右下のDeploy Nowでクラスタが作成されます。

VKEクラスタ作成画面

一覧画面に戻ってきてInstallingということでクラスタを作成しているところです。

クラスタ作成直後のVKEクラスタ一覧画面

ちなみにInstancesを見るとVKEクラスタ用のインスタンスが出ていますね。

VKEクラスタ用のインスタンスを含むインスタンス一覧画面

ほんの数分でクラスタの作成が完了し、クラスタ一覧でもRunningとなります。

クラスタ作成完了後のVKEクラスタ一覧画面

作成したクラスタを選択すると詳細が表示されますので、右上のDownload Configurationを押してkubectlで使用する接続情報を含むファイルをダウンロードします。

VKEクラスタ詳細画面

あとはダウンロードしたファイルを使用していつもどおりkubectlを叩くだけですね。ガイドのとおりcluster-infoを叩いてみましょう。

$ kubectl --kubeconfig=kube_config.yaml cluster-info
Kubernetes master is running at https://*****.vultr-k8s.com:6443
CoreDNS is running at https://*****.vultr-k8s.com:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

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

ノードの一覧もちゃんと出ますね。

$ kubectl --kubeconfig=kube_config.yaml get nodes
NAME               STATUS   ROLES    AGE   VERSION
test-pool0-*****   Ready    <none>   27m   v1.20.0
test-pool0-*****   Ready    <none>   26m   v1.20.0
test-pool0-*****   Ready    <none>   27m   v1.20.0

一応動いてはいるっぽいですが、ロードバランサの試用も兼ねてnginxを動かしてみます。以下の内容でnginx.yamlを作成します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/vultr-loadbalancer-protocol: "http"
  name: vultr-lb-http
spec:
  type: LoadBalancer
  selector:
    app: nginx
  ports:
    - port: 80
      name: "http"

そしてapply。

$ kubectl --kubeconfig=kube_config.yaml apply -f nginx.yaml
deployment.apps/nginx-deployment created
service/vultr-lb-http created

get podsしてpodの作成を確認します。良い感じです。

$ kubectl --kubeconfig=kube_config.yaml get pods
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-*********-*****   1/1     Running   0          42s
nginx-deployment-*********-*****   1/1     Running   0          42s

get servicesしてロードバランサの作成状況とIPアドレスを確認します。EXTERNAL-IPが出ていますね。

$ kubectl --kubeconfig=kube_config.yaml get services
NAME            TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP      **.**.**.**   <none>        443/TCP        36m
vultr-lb-http   LoadBalancer   **.**.**.**   **.**.**.**   80:32608/TCP   4m31s

http://<EXTERNAL-IP>/にアクセスするとnginxの初期状態のメッセージが表示され、問題なく動いていることが分かります。

VKE上で動くnginx

ちなみにロードバランサですが、VKEクラスタとは別料金です。管理画面のLoad Balancersに連携して作成されたロードバランサが表示されています。

VKEと連携して作成されたロードバランサを含むロードバランサ一覧画面

またVKEクラスタの詳細画面からも関連するロードバランサとして表示できますね。

当該VKEクラスタに関連するロードバランサ一覧画面

以上、VKEを軽く試してみた話でした。手動で作ると結構大変なクラスタ作成も少しの情報入力と数クリックで完了しますし、やはりマネージドk8sは素晴らしいですね。しかもお手頃な価格から始められるということで、使いやすいのではないでしょうか。また他にもブロックストレージや証明書マネージャ、DNSの連携がありますので、そのあたりも試していきたいなと思っています。特にLet’s Encryptとの連携を検証しなければいろいろ移行できないので、そのあたりやりたいですね。それでは!


コメントを残す

メールアドレスが公開されることはありません。