2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VMware Kubernetes Engine (VKE)によるk8sクラスターの利用方法

Last updated at Posted at 2018-09-18

VKEとは

VMware Kubernetes Engine(VKE)はVMwareが提供するKaaS(Kubernetes as a Service)です。AWSインフラ上で提供されています。Master/WorkerノードともVMwareのサービスとして提供されるため、インスタンスはすべてVMwareのVPC内で起動します。2018年9月現在ベータ版として提供されています。

VKEの特徴

  • AWS上でネイティブに起動し、VMC on AWSやvSphereハイパーバイザーは利用していない
  • 複数のAWSリージョン(現在はOregon/Virginia/Ireland)で利用可能
  • 将来的にAzureへの対応も予定
  • グローバルで一貫したポリシーによる管理が可能
  • Kubernetesの認証に適合
  • VKE Connectionを利用することによりAWSサービスとのインテグレーションが可能

VKEの機能

VMware Smart Cluster

VKEのk8sクラスターはSmart Clusterと呼ばれます。Smart Clusterはコンピュートリソースを最適化し、可用性とコスト削減を実現します。コンピュートリソース(workerノード)は、必要に応じて増減するため、クラスターやサイジングが不要です。また、利用されていない場合はコンピュートノードが自動的に削除されるため、費用対効果に優れたスケーラブルなKubernetesクラスタの運用が可能です。また、クラスターのノードに対しては定期的なヘルスチェックが行われ、自己修復機能により高可用性が提供されます。

VKE Connection

VKEによって作成されるk8sクラスターはVMware管理のVPCに作成されるため、利用者のVPCと直接通信することができません。VKE ConnectionはAWSのVPC Peeringを利用して、VMwareのk8sクラスターと利用者のVPCを接続することが可能です。

VKEの使い方

Smart Clusterの作成

VKE管理画面からSmart Clusterを作成することが可能です。Smart ClusterにはDevelopment ClusterとProduction Clusterの2種類があり、Development Clusterはシングルノードで提供され、VKE Connectionを利用することはできません。VKEのすべての機能を利用するには、Production Clusterを選択する必要があります。現在、k8sのバージョンとして 1.10.2-62と1.10.2-67 を選択できます。

Kobito.3zIYoV.png

クラスターを作成するAWSのリージョンを選択して、クラスターの名前を決めることができます。

Kobito.SjHRsY.png

クラスターが作成されると、管理画面上で確認することができます。

Kobito.0XmAz1.png

Smart Clusterの実体

Smart Clusterのオートスケール機能は、cluster-autoscalerが利用されているようです。また、ネットワーク機能はCanalが利用されているようです。

$ kubectl get pods -o wide --all-namespaces
NAMESPACE    NAME                                                  READY     STATUS    RESTARTS   AGE       IP             NODE
vke-system   canal-node-1-10-2-67-7q5pb                            3/3       Running   0          13m       10.1.188.108   master-469d98e4-b865-11e8-bee9-025cd8439484
vke-system   canal-node-1-10-2-67-8d2ww                            3/3       Running   0          13m       10.1.205.56    master-469d989e-b865-11e8-bee9-025cd8439484
vke-system   canal-node-1-10-2-67-c2dhw                            3/3       Running   0          13m       10.1.117.171   master-469d98c6-b865-11e8-bee9-025cd8439484
vke-system   cluster-autoscaler-1-10-2-67-7fd67485c-fp687          1/1       Running   0          13m       10.2.2.4       master-469d98c6-b865-11e8-bee9-025cd8439484
vke-system   kube-dns-1-10-2-67-68659d4fd8-h9zmm                   3/3       Running   0          13m       10.2.1.4       master-469d989e-b865-11e8-bee9-025cd8439484
vke-system   kubernetes-dashboard-1-10-2-67-55d99bf649-rrt58       2/2       Running   0          13m       10.2.1.5       master-469d989e-b865-11e8-bee9-025cd8439484
vke-system   nginx-ingress-deployment-1-10-2-67-67c87d9bd6-5tpjq   1/1       Running   0          13m       10.2.2.5       master-469d98c6-b865-11e8-bee9-025cd8439484
vke-system   node-monitor-ds-1-10-2-67-6bscc                       1/1       Running   0          13m       10.2.0.2       master-469d98e4-b865-11e8-bee9-025cd8439484
vke-system   node-monitor-ds-1-10-2-67-79kfm                       1/1       Running   0          13m       10.2.1.2       master-469d989e-b865-11e8-bee9-025cd8439484
vke-system   node-monitor-ds-1-10-2-67-pcjgz                       1/1       Running   0          13m       10.2.2.3       master-469d98c6-b865-11e8-bee9-025cd8439484
vke-system   update-controller-ds-1-10-2-67-4fhj9                  1/1       Running   0          13m       10.2.2.2       master-469d98c6-b865-11e8-bee9-025cd8439484
vke-system   update-controller-ds-1-10-2-67-7j44z                  1/1       Running   0          13m       10.2.0.3       master-469d98e4-b865-11e8-bee9-025cd8439484
vke-system   update-controller-ds-1-10-2-67-84r5v                  1/1       Running   0          13m       10.2.1.3       master-469d989e-b865-11e8-bee9-025cd8439484

vke cli

VKE管理画面からvke cliをダウンロードして利用することができます。vkeコマンドによりスマートクラスターの作成や管理が可能です。

ログイン

vkeコマンドを利用するには、VMware Cloud ServiceのOrganization IDとRefresh Tokenが必要です。Organization IDとRefresh TokenはVMware Cloud Serviceのポータルから参照することができます。

$ vke account login --organization 3cf52fc8-bc7d-4755-983a-XXXXXXXXXXXX --reflesh-token 2d208834-6e0a-4f58-879a-yyyyyyyyyyyy

k8sクラスターの作成

vke cliによりクラスターを作成することも可能です。

$ vke cluster create --name k8s-01 --service-level ENTERPRISE ¥
  --display-name my-vke --region us-west-2 ¥
  --folder "SharedFolder" --project "SharedProject" --version 1.10.2-62

$ vke cluster show my1st-cluster
Creating Cluster:
  Name: k8s-01
  Region: us-west-2
  Service Level: ENTERPRISE
  Pod Network CIDR: 10.2.0.0/16
  Version: 1.10.2-62
CreateKubernetesCluster completed for 'Cluster' entity 8da04a92-af06-11e8-a0f0-061a39cd6d80

$ vke cluster list
      NAME      | DISPLAY NAME  |  REGION   |   FOLDER NAME   |   PROJECT NAME
+---------------+---------------+-----------+-----------------+-------------------+
  my1st-cluster | my1st-cluster | us-west-2 | m-nara830171651 | masanara830172013

vke cluster show my1st-cluster
Name:                   my1st-cluster
Health:                 HEALTHY
Display Name:           my1st-cluster
Folder Name:            m-nara830171651
Project Name:           masanara830172013
Region:                 us-west-2
Service Level:          ENTERPRISE
Network Tenancy:        DEDICATED
Cluster Network:        10.1.0.0/16
Pod Network:            10.2.0.0/16
Service Network:        10.0.0.0/24
Version:                1.10.2-67
Cluster ID:             82f8f410-b864-11e8-bee9-025cd8439484
Autoscale:              true
VCPU:                   2
Memory in GB:           8
Maximum VCPU:           240
Maximum Memory in GB:   960
Minimum VCPU:           0
Minimum Memory in GB:   0
State:                  READY
Address:                my1st-cluster-82f8f410-b864-11e8-bee9-025cd8439484.3cf52fc8-bc7d-4755-983a-bbdca41a768d.vke-user.com
UI URL:                 https://ui.my1st-cluster-82f8f410-b864-11e8-bee9-025cd8439484.3cf52fc8-bc7d-4755-983a-bbdca41a768d.vke-user.com:443
API URL:                https://api.my1st-cluster-82f8f410-b864-11e8-bee9-025cd8439484.3cf52fc8-bc7d-4755-983a-bbdca41a768d.vke-user.com:443
OIDC Client ID:         78590775-226a-4a07-9ea0-c8497cc8e121
OIDC Issuer URL:        https://lightwave.vke.cloud.vmware.com/openidconnect/3cf52fc8-bc7d-4755-983a-bbdca41a768d
Worker Count:           0
Kubectl URLs:
  Linux, 64-bit:        https://storage.googleapis.com:443/kubernetes-release/release/v1.10.2/bin/linux/amd64/kubectl
  Linux, 32-bit:        https://storage.googleapis.com:443/kubernetes-release/release/v1.10.2/bin/linux/386/kubectl
  Mac:                  https://storage.googleapis.com:443/kubernetes-release/release/v1.10.2/bin/darwin/amd64/kubectl
  Windows, 64-bit:      https://storage.googleapis.com:443/kubernetes-release/release/v1.10.2/bin/windows/amd64/kubectl.exe
  Windows, 32-bit:      https://storage.googleapis.com:443/kubernetes-release/release/v1.10.2/bin/windows/386/kubectl.exe

k8s contextの作成

vkeコマンドによりkubectlのcontextを生成し、kubectlでクラスターに接続することが可能です。

$ vke cluster get-kubectl-auth --configfile k8s-config my1st-cluster
Export KUBECONFIG to k8s-config to access the cluster
$ cat k8s-config >> ~/.kube/config
kubectl config get-contexts
CURRENT   NAME                    CLUSTER         AUTHINFO              NAMESPACE
*         my1st-cluster-context   my1st-cluster   masanara

$ kubectl config use-context my1st-cluster-context
Switched to context "my1st-cluster-context".

$ kubectl get nodes -o wide
NAME                                          STATUS    ROLES     AGE       VERSION   EXTERNAL-IP   OS-IMAGE                 KERNEL-VERSION   CONTAINER-RUNTIME
master-469d989e-b865-11e8-bee9-025cd8439484   Ready     master    13m       v1.10.2   <none>        VMware Photon OS/Linux   4.9.124-1.ph2    docker://17.6.0
master-469d98c6-b865-11e8-bee9-025cd8439484   Ready     master    13m       v1.10.2   <none>        VMware Photon OS/Linux   4.9.124-1.ph2    docker://17.6.0
master-469d98e4-b865-11e8-bee9-025cd8439484   Ready     master    13m       v1.10.2   <none>        VMware Photon OS/Linux   4.9.124-1.ph2    docker://17.6.0

kubernetes dashboard

Smart Clusterにはk8s dashboardがデプロイされており、VKE管理画面からVMware Cloud Serviceが提供する認証を利用してダッシュボードを開くことが可能です。

Kobito.tGSxFQ.png

kubernetes dashboardにはVMware Cloud Serviceによって認証されるため、VMware Cloud Serviceへのログインが必要です。

Kobito.iVgubp.png

kubernetesの利用

nginx podを作成して、LoadBalancerで外部に公開してみます。

# kubectl create -f nginx.yaml

workerノードが存在しないため、podはPending状態となりますが、しばらくすると自動的にworkerノードが追加され、Podが起動します。

# kubectl get pods
NAME                        READY     STATUS    RESTARTS   AGE
my-nginx-77f56b88c8-fsf27   0/1       Pending   0          2m
my-nginx-77f56b88c8-vd2gg   0/1       Pending   0          2m

# kubectl get node
NAME                                          STATUS     ROLES     AGE       VERSION
master-469d989e-b865-11e8-bee9-025cd8439484   Ready      master    17m       v1.10.2
master-469d98c6-b865-11e8-bee9-025cd8439484   Ready      master    17m       v1.10.2
master-469d98e4-b865-11e8-bee9-025cd8439484   Ready      master    17m       v1.10.2
worker-b086758a-b867-11e8-85a1-0661c054e624   NotReady   worker    7s        v1.10.2

# kubectl get pods
NAME                        READY     STATUS    RESTARTS   AGE
my-nginx-77f56b88c8-fsf27   1/1       Running   0          5m
my-nginx-77f56b88c8-vd2gg   1/1       Running   0          5m

Podが作成されるとGUI上でComputeリソースの利用状況を確認することが可能です。

Kobito.jfKZVu.png

Smart Cluster上では予めnginxのIngress Controllerが構成されているため、Ingressを利用することも可能です。
Ingressに利用することができるFQDNはvke cluster show [クラスター名]で確認することが可能です。

$ vke cluster show my1st-cluster | grep Address
Address:                my1st-cluster-82f8f410-b864-11e8-bee9-025cd8439484.3cf52fc8-bc7d-4755-983a-bbdca41a768d.vke-user.com
ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
   name: my-vke-ingress
   annotations:
     nginx.org/rewrites: "serviceName=my-nginx rewrite=/"

spec:
  rules:
  - host: my1st-cluster-82f8f410-b864-11e8-bee9-025cd8439484.3cf52fc8-bc7d-4755-983a-bbdca41a768d.vke-user.com
    http:
     paths:
      - path: /nginx
        backend:
          serviceName: my-nginx
          servicePort: 80
$ kubectl create -f ingress.yaml
$ kubectl get svc -o wide
NAME         TYPE           CLUSTER-IP   EXTERNAL-IP                                                                                                     PORT(S)        AGE       SELECTOR
kubernetes   ClusterIP      10.0.0.1     <none>                                                                                                          443/TCP        21m       <none>
my-nginx     LoadBalancer   10.0.0.232   my-nginx.my1st-cluster-82f8f410-b864-11e8-bee9-025cd8439484.3cf52fc8-bc7d-4755-983a-bbdca41a768d.vke-user.com   80:30405/TCP   6m        run=my-nginx

Connectionの作成

ClusterのActionメニューから「New Network Connection」を選択します。

Kobito.KICwnB.png

ピアリング先のVPCに関する情報(アカウントID、VPC ID、VPC CIDR、VPC Region)を入力します。

Kobito.ImkoGi.png

Clusterのネットワークタブを確認すると、Statusが「Pending aceptance」状態になります。

Kobito.gCxnz6.png

AWS ConsoleのVPCダッシュボードの「ピアリング接続」で確認すると指定したVPCに対してClusterのVPCからピア接続のリクエストが承諾待ちの状態になっています。

Kobito.CIeoSE.png

ピア接続を承諾して、ルートテーブルにCluster向けのスタティックルートを追加します。

Kobito.yWJlKf.png

Kobito.AlqfsD.png

Clusterの管理画面ではNetworkが「Active」状態になり、クラスター上のPodから接続したVPC内のリソースへのアクセスが可能になります。

Kobito.6wiEyo.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?