Skip navigation
2018

前回、Kubernetes Anywhere で Photon OS による Kubernetes クラスタを構築してみました。

vSphere に Kubernetes クラスタを構築してみる。(Kubernetes Anywhere)

 

今回は、Photon OS から Kubernetes のクライアントである kubectl を実行してみます。

kubectl のインストール先は、前回デプロイした OVA 版の Photon OS 2.0 です。

root@photon-machine [ ~ ]# cat /etc/photon-release

VMware Photon OS 2.0

PHOTON_BUILD_NUMBER=304b817

 

ファイルのダウンロードによるインストール。

まず、わりと一般的かと思われる curl コマンドでのダウンロードによるインストール方法です。

前回に構築した Kubernetes クラスタにあわせて v1.9.7 のものをダウンロードしています。

root@photon-machine [ ~ ]# curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.9.7/bin/linux/amd64/kubectl

root@photon-machine [ ~ ]# chmod +x kubectl

root@photon-machine [ ~ ]# mv kubectl /usr/local/bin/kubectl

 

kubectl のバージョンは v1.9.7 です。

※下記の例では、すでに Kubernetes クラスタのコンフィグを読み込んでいます。

root@photon-machine [ ~ ]# which kubectl

/usr/local/bin/kubectl

root@photon-machine [ ~ ]# kubectl version

Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.7", GitCommit:"dd5e1a2978fd0b97d9b78e1564398aeea7e7fe92", GitTreeState:"clean", BuildDate:"2018-04-19T00:05:56Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

 

Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.7", GitCommit:"dd5e1a2978fd0b97d9b78e1564398aeea7e7fe92", GitTreeState:"clean", BuildDate:"2018-04-18T23:58:35Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

 

RPM でのインストール。

Photon OS の YUM リポジトリには kubectl の RPM が用意されています。

root@photon-machine [ ~ ]# tdnf list kubernetes-kubectl-extras

kubernetes-kubectl-extras.x86_64            1.11.1-2.ph2        photon-updates

kubernetes-kubectl-extras.x86_64            1.10.2-10.ph2       photon-updates

kubernetes-kubectl-extras.x86_64            1.10.2-11.ph2       photon-updates

kubernetes-kubectl-extras.x86_64            1.10.2-3.ph2        photon-updates

kubernetes-kubectl-extras.x86_64            1.10.2-4.ph2        photon-updates

kubernetes-kubectl-extras.x86_64            1.10.2-5.ph2        photon-updates

kubernetes-kubectl-extras.x86_64            1.10.2-6.ph2        photon-updates

kubernetes-kubectl-extras.x86_64            1.10.2-7.ph2        photon-updates

kubernetes-kubectl-extras.x86_64            1.10.2-8.ph2        photon-updates

kubernetes-kubectl-extras.x86_64            1.10.2-9.ph2        photon-updates

kubernetes-kubectl-extras.x86_64            1.11.1-1.ph2        photon-updates

kubernetes-kubectl-extras.x86_64            1.11.1-2.ph2        photon-updates

 

tdnf でインストールします。

root@photon-machine [ ~ ]# tdnf install -y kubernetes-kubectl-extras

root@photon-machine [ ~ ]# rpm -q kubernetes-kubectl-extras

kubernetes-kubectl-extras-1.11.1-2.ph2.x86_64

 

kubernetes-kubectl-extras には、kubectl のみが含まれています。

Linux OS なので、/opt/vmware/kubernetes/linux/amd64/kubectl だけを使用します。

root@photon-machine [ ~ ]# rpm -ql kubernetes-kubectl-extras

/opt/vmware/kubernetes/darwin/amd64/kubectl

/opt/vmware/kubernetes/linux/amd64/kubectl

/opt/vmware/kubernetes/windows/amd64/kubectl.exe

 

ファイルが配置されているディレクトリに Linux コマンドのサーチパスが設定されていないので、

フルパスで実行するか、下記のように PATH 環境変数を設定することになります。

root@photon-machine [ ~ ]# export PATH=/opt/vmware/kubernetes/linux/amd64:$PATH

root@photon-machine [ ~ ]# which kubectl

/opt/vmware/kubernetes/linux/amd64/kubectl

root@photon-machine [ ~ ]# kubectl version

Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"archive", BuildDate:"2018-08-14T19:36:17Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}

 

Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.7", GitCommit:"dd5e1a2978fd0b97d9b78e1564398aeea7e7fe92", GitTreeState:"clean", BuildDate:"2018-04-18T23:58:35Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

 

kubectl での Kubernetes へのアクセス。

Kubernetes に接続するためのコンフィグファイルは、

前回の投稿で  Docker ホスト(今回 kubectl を実行する Linux)に退避したものを使用します。

下記のように退避したので、kubectl を実行する Linux には $HOME/tmp/kubeconfig.json ファイルとして保存されています。

[container]:/opt/kubernetes-anywhere> cp phase1/vsphere/kubernetes/kubeconfig.json /tmp/

 

kubectl が読み込むディレクトリ(ホームディレクトリの .kube/ 直下)にファイルをコピーします。

root@photon-machine [ ~ ]# mkdir ~/.kube

root@photon-machine [ ~ ]# cp ./tmp/kubeconfig.json ~/.kube/config

 

kubectl でクラスタにアクセスできるようになります。

root@photon-machine [ ~ ]# kubectl get nodes

NAME                STATUS                     ROLES     AGE       VERSION

kubernetes-master   Ready,SchedulingDisabled   <none>    12m       v1.9.7

kubernetes-node1    Ready                      <none>    12m       v1.9.7

kubernetes-node2    Ready                      <none>    12m       v1.9.7

kubernetes-node3    Ready                      <none>    12m       v1.9.7

kubernetes-node4    Ready                      <none>    12m       v1.9.7

root@photon-machine [ ~ ]# kubectl cluster-info

Kubernetes master is running at https://10.0.3.121

Heapster is running at https://10.0.3.121/api/v1/namespaces/kube-system/services/heapster/proxy

KubeDNS is running at https://10.0.3.121/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

 

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

 

RPM は用意されていますが、1ファイルのパッケージでファイルの配置ディレクトリも微妙なので、

Photon OS の RPM 使用するか、ダウンロードしたものを使用するかは

使用したい kubectl のバージョンによって選択すればよいかなと思います。

 

以上、Photon OS で kubectl を実行してみる話でした。

vSphere 6.7 に Kubernetes クラスタを構築してみます。

今回のクラスタは、うちでの勉強のために作成するので

「Kubernetes Anywhere」を利用しています。

GitHub - kubernetes/kubernetes-anywhere: {concise,reliable,cross-platform} turnup of Kubernetes clusters

 

今回の環境。

Kubernetes クラスタを展開する環境のソフトウェア構成は下記です。

  • vSphere 6.7(vCenter 6.7 / ESXi 6.7。vSphere の DRS クラスタ構成ずみ)
  • Kubernetes v1.9.7(Kubernetes Anywhere でデプロイ)
  • vSAN 6.7(Kubernetes VM のデータストアとして利用)
  • NSX for vSphere 6.4.1(NSX Edge の DHCP サービスと論理スイッチを利用)

 

Kubernetes Anywhere で、Docker コンテナを利用した Kubernetes クラスタのデプロイをします。

実行する Docker ホストのソフトウェア構成は下記です。

  • VMware Photon OS 2.0
  • Docker 17.06.0-ce

 

今回の Kubernetes クラスタのデプロイは、下記のようなイメージです。

K8s-Anywhere-on-vSphere_deploy-image.png

 

1. Kubernetes Anywhere 用の OVA のデプロイ。

Kubernetes Anywhere on vSphere むけの Photon OS の OVA ファイル

「KubernetesAnywhereTemplatePhotonOS.ova」が、下記で提供されています。

kubernetes-anywhere/README.md at master · kubernetes/kubernetes-anywhere · GitHub

 

ファイルへの直接リンクは下記です。

https://storage.googleapis.com/kubernetes-anywhere-for-vsphere-cna-storage/KubernetesAnywhereTemplatePhotonOS.ova

 

デプロイ時のデフォルトの VM 名は長いので、今回は

03-Template という VM フォルダを作成し、その直下に

k8s-anywhere-ova という名前でデプロイしています。

 

DHCP によるアドレス取得の都合により、

この OVA はデプロイ後にパワーオンしないようにしておきます。

 

2. Kubernetes Anywhere の Docker ホストの準備。

Docker Host の Photon OS は、OVA 版を利用しています。

まず、下記から Photon OS 2.0 GA の OVA をダウンロードして、ESXi にデプロイします。

Photon OS 2.0 GA Binaries

OVA with virtual hardware v13 (ESX 6.5 and above)

Downloading Photon OS · vmware/photon Wiki · GitHub

 

root / changeme でログインして初期パスワードを変更します。

tdnf コマンドで RPM パッケージをアップデートしたうえで、OS を再起動しておきます。

root@photon-machine [ ~ ]# cat /etc/photon-release

VMware Photon OS 2.0

PHOTON_BUILD_NUMBER=304b817

root@photon-machine [ ~ ]# tdnf update -y

root@photon-machine [ ~ ]# reboot

 

Docker はあらかじめインストールされているので、

サービスを有効化 / 起動します。

root@photon-machine [ ~ ]# systemctl enable docker

root@photon-machine [ ~ ]# systemctl start docker

 

3. Kubernetes Anywhere コンテナのダウンロード~起動。

kubernetes-anywhere のコンテナイメージをダウンロードします。

root@photon-machine [ ~ ]# docker pull cnastorage/kubernetes-anywhere:v2

 

コンテナを起動します。

今回は、Docker ホストのカレントディレクトリ直下の tmp ディレクトリを、

コンテナの /tmp に割り当てています。

起動してそのままコンテナの中に入っているため

プロンプトが「[container]:/opt/kubernetes-anywhere>」になります。

root@photon-machine [ ~ ]# mkdir tmp

root@photon-machine [ ~ ]# docker run -it -v `pwd`/tmp:/tmp --rm --env="PS1=[container]:\w> " --net=host cnastorage/kubernetes-anywhere:v2 /bin/bash

[container]:/opt/kubernetes-anywhere>

 

Kubernetes をデプロイするためのコンフィグを作成します。

[container]:/opt/kubernetes-anywhere> make config

 

今回は、下記のように実行しました。

赤字部分が入力部分です。

パラメータを入力した直後には Enter キーも押していますが、

ただ Enter キーを押した個所はわかりにくいため「 Enterキー」と記載しています。

できるだけデフォルト値を採用していますが、

じつは今回は Blockchain on Kubernetes(BoK)検証むけの

Kubernetes クラスタを作成しようとしているため一部の設定値は BoK むけに調整しています。

  • CPU、メモリを増加。
  • Kubernetes のバージョンは BoK のガイドにある v1.9.7 に決め打ち。
  • 同様に phase2.installer_container もガイドにあるイメージを指定。

 

このラボ環境むけのパラメータ指定もあります。

  • phase1.vSphere.username はラボにあるユーザを指定。
    (administrator@vsphere.local などでもよい)
  • データストアでは vSAN データストア(vsanDatastore)を指定。
  • vSphere のクラスタで DRS を有効化し、リソースプール(kube-pool-01)を事前作成してある。
  • VM フォルダ(02-Lab/lab-k8s-01)を指定しているが、これらは事前作成してある。
    02-Lab/lab-k8s-01 は、VM フォルダを2階層にしている。
  • ポートグループ(vxw-dvs-30-virtualwire-14-sid-10003-ls-lab-k8s-003)は、NSX 論理スイッチのバッキングとなっている分散ポートグループを指定。
    この論理スイッチでは、NSX Edge の DHCP サービスを利用して、インターネット接続できるようネットワーク設定をしている。
    (DHCP は Kubernetes Anywhere のデプロイで必要)
  • Kubernetes ノードのテンプレートになる VM は配置している VM フォルダも併せて指定(03-Template/k8s-anywhere-ova)。

[container]:/opt/kubernetes-anywhere> make config

CONFIG_="." kconfig-conf Kconfig

*

* Kubernetes Minimal Turnup Configuration

*

*

* Phase 1: Cluster Resource Provisioning

*

number of nodes (phase1.num_nodes) [4] (NEW) Enterキー

kubernetes cluster name (phase1.cluster_name) [kubernetes] (NEW) Enterキー

SSH user to login to OS for provisioning (phase1.ssh_user) [] (NEW) Enterキー

*

* cloud provider: gce, azure or vsphere

*

cloud provider: gce, azure or vsphere (phase1.cloud_provider) [vsphere] (NEW) Enterキー

  *

  * vSphere configuration

  *

  vCenter URL Ex: 10.192.10.30 or myvcenter.io (without https://) (phase1.vSphere.url) [] (NEW) infra-vc-01.go-lab.jp

  vCenter port (phase1.vSphere.port) [443] (NEW) Enterキー

  vCenter username (phase1.vSphere.username) [] (NEW) gowatana

  vCenter password (phase1.vSphere.password) [] (NEW) パスワード

  Does host use self-signed cert (phase1.vSphere.insecure) [Y/n/?] (NEW) Enterキー

  Datacenter (phase1.vSphere.datacenter) [datacenter] (NEW) infra-dc-01

  Datastore (phase1.vSphere.datastore) [datastore] (NEW) vsanDatastore

  Deploy Kubernetes Cluster on 'host' or 'cluster' (phase1.vSphere.placement) [cluster] (NEW) Enterキー

    vsphere cluster name. Please make sure that all the hosts in the cluster are time-synchronized otherwise some of the nodes can remain in pending state for ever due to expired certificate (phase1.vSphere.cluster) [] (NEW) infra-cluster-01

  Do you want to use the existing resource pool on the host or cluster? [yes, no] (phase1.vSphere.useresourcepool) [no] (NEW) yes

    Name of the existing Resource Pool. If Resource pool is enclosed within another Resource pool, specify pool hierarchy as ParentResourcePool/ChildResourcePool (phase1.vSphere.resourcepool) [] (NEW) kube-pool-01

  VM Folder name or Path (e.g kubernetes, VMFolder1/dev-cluster, VMFolder1/Test Group1/test-cluster). Folder path will be created if not present (phase1.vSphere.vmfolderpath) [kubernetes] (NEW) 02-Lab/lab-k8s-01

  Number of vCPUs for each VM (phase1.vSphere.vcpu) [1] (NEW) 2

  Memory for VM (phase1.vSphere.memory) [2048] (NEW) 4096

  Network for VM (phase1.vSphere.network) [VM Network] (NEW) vxw-dvs-30-virtualwire-14-sid-10003-ls-lab-k8s-003

  Name of the template VM imported from OVA. If Template file is not available at the destination location specify vm path (phase1.vSphere.template) [KubernetesAnywhereTemplatePhotonOS.ova] (NEW) 03-Template/k8s-anywhere-ova

  Flannel Network (phase1.vSphere.flannel_net) [172.1.0.0/16] (NEW) Enterキー

*

* Phase 2: Node Bootstrapping

*

kubernetes version (phase2.kubernetes_version) [v1.6.5] (NEW) v1.9.7

bootstrap provider (phase2.provider) [ignition] (NEW) Enterキー

  installer container (phase2.installer_container) [docker.io/cnastorage/k8s-ignition:v2] (NEW) docker.io/cnastorage/k8s-ignition:v1.8-dev-release

  docker registry (phase2.docker_registry) [gcr.io/google-containers] (NEW) Enterキー

*

* Phase 3: Deploying Addons

*

Run the addon manager? (phase3.run_addons) [Y/n/?] (NEW) Enterキー

  Run kube-proxy? (phase3.kube_proxy) [Y/n/?] (NEW) Enterキー

  Run the dashboard? (phase3.dashboard) [Y/n/?] (NEW) Enterキー

  Run heapster? (phase3.heapster) [Y/n/?] (NEW) Enterキー

  Run kube-dns? (phase3.kube_dns) [Y/n/?] (NEW) Enterキー

  Run weave-net? (phase3.weave_net) [N/y/?] (NEW) Enterキー

#

# configuration written to .config

#

[container]:/opt/kubernetes-anywhere>

 

上記の入力により、コンフィグファイル「.config」は下記のように作成されます。

make config を実行せず、下記のファイルを直接作成してもデプロイ可能です。

#

# Automatically generated file; DO NOT EDIT.

# Kubernetes Minimal Turnup Configuration

#

 

#

# Phase 1: Cluster Resource Provisioning

#

.phase1.num_nodes=4

.phase1.cluster_name="kubernetes"

.phase1.ssh_user=""

.phase1.cloud_provider="vsphere"

 

#

# vSphere configuration

#

.phase1.vSphere.url="infra-vc-01.go-lab.jp"

.phase1.vSphere.port=443

.phase1.vSphere.username="gowatana"

.phase1.vSphere.password="パスワード"

.phase1.vSphere.insecure=y

.phase1.vSphere.datacenter="infra-dc-01"

.phase1.vSphere.datastore="vsanDatastore"

.phase1.vSphere.placement="cluster"

.phase1.vSphere.cluster="infra-cluster-01"

.phase1.vSphere.useresourcepool="yes"

.phase1.vSphere.resourcepool="kube-pool-01"

.phase1.vSphere.vmfolderpath="02-Lab/lab-k8s-01"

.phase1.vSphere.vcpu=2

.phase1.vSphere.memory=4096

.phase1.vSphere.network="vxw-dvs-30-virtualwire-14-sid-10003-ls-lab-k8s-003"

.phase1.vSphere.template="03-Template/k8s-anywhere-ova"

.phase1.vSphere.flannel_net="172.1.0.0/16"

 

#

# Phase 2: Node Bootstrapping

#

.phase2.kubernetes_version="v1.9.7"

.phase2.provider="ignition"

.phase2.installer_container="docker.io/cnastorage/k8s-ignition:v1.8-dev-release"

.phase2.docker_registry="gcr.io/google-containers"

 

#

# Phase 3: Deploying Addons

#

.phase3.run_addons=y

.phase3.kube_proxy=y

.phase3.dashboard=y

.phase3.heapster=y

.phase3.kube_dns=y

# .phase3.weave_net is not set

 

設定が完了したら、デプロイします。

[container]:/opt/kubernetes-anywhere> make deploy

 

デプロイが完了したら、kubectl で Kubernetes クラスタの状態を確認します。

環境変数 KUBECONFIG を設定して、クラスタの情報を確認します。

Kubernetes master が起動(running)していることや、Kubernetes ノードの状態が確認できます。

今回は、Worker が 4ノードです。

[container]:/opt/kubernetes-anywhere> export KUBECONFIG=phase1/vsphere/kubernetes/kubeconfig.json

[container]:/opt/kubernetes-anywhere> kubectl cluster-info

Kubernetes master is running at https://10.0.3.121

Heapster is running at https://10.0.3.121/api/v1/namespaces/kube-system/services/heapster/proxy

KubeDNS is running at https://10.0.3.121/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

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

[container]:/opt/kubernetes-anywhere> kubectl get nodes

NAME                STATUS                     ROLES     AGE       VERSION

kubernetes-master   Ready,SchedulingDisabled   <none>    1m        v1.9.7

kubernetes-node1    Ready                      <none>    1m        v1.9.7

kubernetes-node2    Ready                      <none>    1m        v1.9.7

kubernetes-node3    Ready                      <none>    1m        v1.9.7

kubernetes-node4    Ready                      <none>    1m        v1.9.7

[container]:/opt/kubernetes-anywhere>

 

kubeconfig.json ファイルはコンテナを停止すると削除されてしまうので、

Docker ホストのディレクトリを割り当てている /tmp にコピーしておきます。

[container]:/opt/kubernetes-anywhere> cp phase1/vsphere/kubernetes/kubeconfig.json /tmp/

 

これで勉強用 Kubernetes が手ごろに作成できるかなと思います。

 

以上、vSphere に Kubernetes をデプロイしてみる話でした。

 

続きはこちら。

VMware Photon OS 2.0 から Kubernetes の kubectl を実行してみる。

vCenter Server Appliance(VCSA)は、GUI からだけでなく CLI でもデプロイすることができます。

 

以前に下記のような投稿をしましたが・・・

VCSA 6.5 U1 を CLI デプロイしてみる。(vCenter + embedded-PSC)

VCSA 6.0 を CLI Install してみる。(External PSC + vCenter)

 

今回は VCSA 6.7 を CLI デプロイしてみます。

  • VCSA は vCenter Server 6.7.0a (Build 8546234)を利用しています。
  • Enhanced Linked Mode(ELM)で 2台を vCenter をデプロイします。

 

ISO イメージ ファイルのマウント。

デプロイを実行する OS で、VCSA の ISO イメージファイルをマウントします。

今回は Windows 10 の PowerShell から実行しています。

ISO イメージファイルは下記を使用しました。

  • VMware-VCSA-all-6.7.0-8546234.iso

 

Dドライブとしてマウントした場合は、下記フォルダに vcsa-deploy.exe があります。

PS> D:

PS> cd  vcsa-cli-installer/win32/

 

JSON ファイルの作成。(1台目)

デプロイ パラメータを指定した JSON ファイルを作成します。

JSON ファイルのサンプルのファイルが、ISO ファイルの vcsa-cli-installer/templates/install フォルダに

「embedded_vCSA_~.json」という名前で用意されています。

今回は ESXi にデプロイする「_on_ESXi.json」を利用しました。

PS> ls D:\vcsa-cli-installer\templates\install | select Name

 

 

Name

----

PSC_first_instance_on_ESXi.json

PSC_first_instance_on_VC.json

PSC_replication_on_ESXi.json

PSC_replication_on_VC.json

embedded_vCSA_on_ESXi.json

embedded_vCSA_on_VC.json

embedded_vCSA_replication_on_ESXi.json

embedded_vCSA_replication_on_VC.json

vCSA_on_ESXi.json

vCSA_on_VC.json

 

1台目の vCenter は、下記のように JSON を作成しました。

以前の VCSA のパラメータは deployment.option といった ドット区切りでしたが、

deployment_option のような「_」区切りになっています。

 

JSON 内で指定するホスト名(FQDN)は、あらかじめ DNS サーバに登録して

名前解決できるようにしておきます。

指定しているホスト名や IP アドレスなどのパラメータは、うちのラボのものです。

パスワードをファイル内で指定しない場合は、install 実行の途中で対話的な入力になります。

 

C:\work\lab-vc-01.json

lab-vc-01.json · GitHub

{

    "__version": "2.13.0",

    "__comments": "deploy a VCSA with an embedded-PSC on an ESXi host.",

    "new_vcsa": {

        "esxi": {

            "hostname": "infra-esxi-06.go-lab.jp",

            "username": "root",

            "password": "VMware1!",

            "deployment_network": "dvpg-vc-deploy-0000",

            "datastore": "vsanDatastore"

        },

        "appliance": {

            "thin_disk_mode": true,

            "deployment_option": "tiny",

            "name": "lab-vc-01"

        },

        "network": {

            "ip_family": "ipv4",

            "mode": "static",

            "ip": "192.168.10.11",

            "dns_servers": [

                "192.168.1.101",

                "192.168.1.102"

            ],

            "prefix": "24",

            "gateway": "192.168.10.1",

            "system_name": "lab-vc-01.go-lab.jp"

        },

        "os": {

            "password": "VMware1!",

            "ntp_servers": [

                "192.168.1.101",

                "192.168.1.102"

            ],

            "ssh_enable": true

        },

        "sso": {

            "password": "VMware1!",

            "domain_name": "vsphere.local"

        }

    },

    "ceip": {

        "settings": {

            "ceip_enabled": false

        }

    }

}

 

JSON ファイルの作成。(2台目)

2台目の vCenter は、下記のように JSON を作成しました。

ELM の2台目なので、1台目とは、VM 名やネットワーク設定以外に赤字の部分で違いがあります。

 

C:\work\lab-vc-02.json

lab-vc-02.json · GitHub

{

    "__version": "2.13.0",

    "__comments": "deploy a VCSA with an embedded-PSC as a replication partner to another embedded-VCSA, on an ESXi host.",

    "new_vcsa": {

        "esxi": {

            "hostname": "infra-esxi-06.go-lab.jp",

            "username": "root",

            "password": "VMware1!",

            "deployment_network": "dvpg-vc-deploy-0000",

            "datastore": "vsanDatastore"

},

        "appliance": {

            "thin_disk_mode": true,

            "deployment_option": "tiny",

            "name": "lab-vc-02"

        },

        "network": {

            "ip_family": "ipv4",

            "mode": "static",

            "ip": "192.168.10.12",

            "dns_servers": [

                "192.168.1.101",

                "192.168.1.102"

            ],

            "prefix": "24",

            "gateway": "192.168.10.1",

            "system_name": "lab-vc-02.go-lab.jp"

        },

        "os": {

            "password": "VMware1!",

            "ntp_servers": [

                "192.168.1.101",

                "192.168.1.102"

            ],

            "ssh_enable": true

        },

        "sso": {

        "password": "VMware1!",

            "domain_name": "vsphere.local",

            "first_instance": false,

            "replication_partner_hostname": "lab-vc-01.go-lab.jp",

            "sso_port": 443

        }

    },

    "ceip": {

        "settings": {

            "ceip_enabled": false

        }

    }

}

 

VCSA のデプロイ。(1台目)

作成した JSON ファイルを指定して、vcsa-deploy.exe を実行します。

ちなみに・・・

  • vCenter 登録ずみで DRS が有効な ESXi にデプロイする場合は、
    処理中に DRS で VCSA が移動されてしまうと失敗するので
    ESXi ではなく vCenter にむけてデプロイするか、アフィニティ ルールで工夫する必要があります。
  • vDS / 分散ポートグループを指定してデプロイする場合は、
    分散ポートグループのポートバインドを「短期」にしておきます。

 

確認をしておきます。

以前のバージョンとはオプションが異なり「--verify-only 」ではなく「--precheck-only」で確認をします。

「--accept-eula」も必要になりました。

PS> .\vcsa-deploy.exe install --no-esx-ssl-verify --accept-eula --precheck-only C:\work\lab-vc-01.json

 

デプロイします。

PS> .\vcsa-deploy.exe install --no-esx-ssl-verify --accept-eula C:\work\lab-vc-01.json

 

VCSA のデプロイ。(2台目)

確認をしておきます。

この時点で 1台目の VCSA がないとエラーになります。

PS> .\vcsa-deploy.exe install --no-esx-ssl-verify --accept-eula --precheck-only C:\work\lab-vc-02.json

 

デプロイします。

このとき、1台目の VCSA のスナップショットを取得しておくと

失敗した時の再試行が簡単になります。

PS> .\vcsa-deploy.exe install --no-esx-ssl-verify --accept-eula C:\work\lab-vc-02.json

 

これで、ELM の vCenter が利用できるようになります。

すでに 1台目の VCSA の vSphere Client / vSphere Web Client にログインしている場合は、

ログインしなおすと VCSA が2つ見えるようになります。

vcsa67-elm.png

 

VCSA 6.7 では embedded-PSC(PSC と vCenter を 1つの VM に含む)での

ELM が推奨となったので、その検証環境の作成などに便利かなと思います。

 

以上、VCSA 6.7 の CLI インストールでした。

PowerCLI で、VM を構成するファイルの情報を取得することができます。

そして、VM の定義情報が記載されている .vmx ファイルのパスも取得できます。

ここでは、.vmx ファイルのパスを取得して

ついでにそのパスをもとに ESXi に VM の再登録をしてみます。

 

今回は「vm01」という名前の VM を対象とします。

vm01 という VM 名は PowerCLI で接続している vCenter のインベントリで重複しないようにしてあります。

コマンドラインで都度 VM 名を変更しなくてよいように、$vm_name という変数で扱います。

PowerCLI> $vm_name = "vm01"

 

あらかじめ Connect-VIServer で vCenter に接続してあります。

PowerCLI から 複数の vCenter への接続は下記のような感じになります。(古い投稿ですが)

PowerCLI から複数の vCenter に接続する方法。

 

VM は hv-d01.go-lab.jp という ESXi ホストでパワーオン状態です。

PowerCLI> Get-VM $vm_name | select Name,ResourcePool,Folder,VMHost,PowerState | fl

 

Name         : vm01

ResourcePool : Resources

Folder       : vm

VMHost       : hv-d01.go-lab.jp

PowerState   : PoweredOn

 

 

PowerCLI から見た VM のファイル。

VM のファイルは、下記のように情報を確認できます。

.vmx ファイルは Type が「config」になっています。

ちなみに、.vmx や .vmdk といった VM を構成するファイルだけでなく

VM のログファイル(vmware.log)の情報も含まれていることがわかります。

PowerCLI> (Get-VM $vm_name).ExtensionData.LayoutEx.File | select Key,Type,Size,Name | ft -AutoSize

 

 

Key Type                 Size Name

--- ----                 ---- ----

  0 config               2998 [ds-nfs-repo-01] vm01/vm01.vmx

  1 nvram                8684 [ds-nfs-repo-01] vm01/vm01.nvram

  2 snapshotList            0 [ds-nfs-repo-01] vm01/vm01.vmsd

  3 diskDescriptor        549 [ds-nfs-repo-01] vm01/vm01_2.vmdk

  4 diskExtent     1609957376 [ds-nfs-repo-01] vm01/vm01_2-flat.vmdk

  5 log                231426 [ds-nfs-repo-01] vm01/vmware-1.log

  6 log                233220 [ds-nfs-repo-01] vm01/vmware.log

  7 swap                    0 [ds-nfs-repo-01] vm01/vm01-a5ede08e.vswp

  8 uwswap                  0 [ds-nfs-repo-01] vm01/vmx-vm01-2783830158-1.vswp

 

 

コマンドラインを工夫すれば、複数の VM の .vmx のパスを一覧することもできます。

ホストの障害対応や、vSphere の移行作業などで VM の格納先を記録しておく際に利用できます。

PowerCLI> Get-VM test*,vm* | select Name,@{N="vmx_path";E={($_.ExtensionData.LayoutEx.File | where {$_.Type -eq "config"}).Name}} | Sort-Object Name

 

 

Name        vmx_path

----        --------

test-web-01 [vsanDatastore] 532a455b-a477-02ce-4958-f44d3065d53c/test-web-01.vmx

test-web-02 [vsanDatastore] 8f2a455b-6c94-6930-3200-f44d3065d53c/test-web-02.vmx

vm01        [ds-nfs-repo-01] vm01/vm01.vmx

 

 

vm01 の .vmx ファイルのパスだけ取得して、これ以降は変数 $vmx_path で扱います。

PowerCLI> $vmx_path = (Get-VM $vm_name).ExtensionData.LayoutEx.File | where {$_.Type -eq "config"} | %{$_.Name}

PowerCLI> $vmx_path

[ds-nfs-repo-01] vm01/vm01.vmx

 

vCenter / ESXi への VM 再登録。

VM の再登録で、vCenter をまたいだ VM の移動をしてみます。

  • 移動先の ESXi への VM 登録の際に、New-VM コマンドで .vmx ファイルのパスを指定します。
  • 移動元 / 先の ESXi には、ds-nfs-repo-01 という名前で同一の NFS データストアをマウントしています。

 

ds-nfs-repo-01 データストアをマウントしている ESXi は、下記のように確認できます。

  • ここでの「Name」は ESXi の名前です。
  • 元 / 先 NFS データストアの構成確認は今回は省略して、データストア名のみをもとにしています。
  • vm01 のいる hv-d01.go-lab.jp だけが独立した vCenter「vc-sv01.go-lab.jp」の ESXi 6.5 配下にいて、
    それ以外の ESXi 6.7 は vCenter「infra-vc-01.go-lab.jp」の配下にいます。

PowerCLI> Get-Datastore ds-nfs-repo-01 | Get-VMHost | Sort-Object Name | select @{N="vCenter";E={$_.Uid -replace ".*@|:.

*",""}},Name,ConnectionState,Version

 

 

vCenter               Name                    ConnectionState Version

-------               ----                    --------------- -------

vc-sv01.go-lab.jp     hv-d01.go-lab.jp              Connected 6.5.0

infra-vc-01.go-lab.jp infra-esxi-01.go-lab.jp       Connected 6.7.0

infra-vc-01.go-lab.jp infra-esxi-02.go-lab.jp       Connected 6.7.0

infra-vc-01.go-lab.jp infra-esxi-03.go-lab.jp       Connected 6.7.0

infra-vc-01.go-lab.jp infra-esxi-04.go-lab.jp       Connected 6.7.0

infra-vc-01.go-lab.jp infra-esxi-05.go-lab.jp       Connected 6.7.0

infra-vc-01.go-lab.jp infra-esxi-06.go-lab.jp       Connected 6.7.0

 

 

それでは vm01 を停止して、移動元 vCenter のインベントリから削除します。

VM のファイル自体を削除しないように、Remove-VM には「-DeletePermanently」を付与しないで実行ます。

PowerCLI> Get-VM $vm_name | Stop-VM -Confirm:$false

PowerCLI> Get-VM $vm_name | Remove-VM -Confirm:$false

 

移動先 vCenter のインベントリの ESXi のうちの 1台に(infra-esxi-06.go-lab.jp)に VM を登録します。

ついでに登録先の リソースプールと、「-Location」でVM のフォルダを指定しています

PowerCLI> New-VM -Name $vm_name -VMFilePath $vmx_path -VMHost "infra-esxi-06.go-lab.jp" -Location "lab-vms-01" -ResourcePool "rp-02-lab"

 

そして VM を起動します。

※VM 起動時に「コピー」と「移動」どちらかの質問メッセージがでた場合は「移動」を選択します。

PowerCLI> Get-VM $vm_name | Start-VM

 

これで VM の移動ができました。

PowerCLI> Get-VM $vm_name | select Name,ResourcePool,Folder,VMHost,PowerState | fl

 

Name         : vm01

ResourcePool : rp-02-lab

Folder       : lab-vms-01

VMHost       : infra-esxi-06.go-lab.jp

PowerState   : PoweredOn

 

 

vSphere 6.x では Cross-vCenter での vMotion も可能ですが、

実行するための前提条件で引っかかったりする場合には

このような VM の移動もできたりします。

 

以上、PowerCLI で .vmx ファイルの情報を取得して利用する話でした。