fbpx

Mirantis Kubernetes EngineとMirantis Secure RegistryをLaunchpadでVirtualbox/Vagrantにインストールしてみよう #kubernetes #k8s #mirantis #launchpad #mke #msr #docker

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

Mirantis Kubernete Engine (MKE)Mirantis Secure Registry (MSR) とは、エンタープライズ向けKubernetes/SwarmオーケストレータとHelm/Dockerレジストリ製品です。

本稿では、デプロイツールであるMirantis Launchpadを用いて、検証用にVirtualbox/VagrantにMKEとMSRをインストールしてみます。

前提条件

ホストマシンにVagrantとVirtualboxがインストール済みであり、IPアドレスは 192.168.24.201 であるとします。IPアドレスは必要に応じて適宜読み替えてください。

Vagrantfile

Vagrantfileで4台のゲストを起動します。詳細は後述しますが、各ゲストの役割は次の通りです。IPアドレスやメモリは必要があれば変更してください。

  • node1 : 192.168.123.201 : DNSサーバ 兼 Launchpad/MKE/MSRクライアント
  • node2 : 192.168.123.202 : MKEマスター
  • node3 : 192.168.123.203 : MKEワーカー
  • node4 : 192.168.123.204 : MSR
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.box_check_update = false
( 1..4 ).each do |i|
config.vm.define "node#{i}" do |cf|
cf.vm.hostname = "node#{i}"
cf.vm.network "private_network", ip: "192.168.123.20#{i}"
cf.vm.provider "virtualbox" do |vb|
vb.memory = 4096
end
end
end

これを vagrant up してゲストを4台作成します。

各ゲストの事前準備

node1でdnsmasqのインストール・設定

まず /etc/hosts に nodeX の名前解決を記述しておきます。

node1$ sudo vi /etc/hosts
node1$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.123.201 node1
192.168.123.202 node2
192.168.123.203 node3
192.168.123.204 node4

この/etc/hostsを名前解決に利用するため dnsmasq をインストールします。設定ファイル /etc/dnsmasq.conf を編集し、domain-needed と bogus-priv を有効化します。

node1$ sudo yum install -y dnsmasq
(省略)
node1$ sudo vi /etc/dnsmasq.conf
node1$ grep -vE '^(#|$)' /etc/dnsmasq.conf
domain-needed
bogus-priv
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
node1$ sudo systemctl enable dnsmasq
node1$ sudo systemctl restart dnsmasq

node1でLaunchpadのインストール・設定

Launchpadのインストールや設定は公式ドキュメントを参照します。

https://github.com/Mirantis/launchpad/releases から Launchpad バイナリの最新バージョン(本稿執筆時 1.3.0)をダウンロードし、/usr/local/bin ディレクトリ等に配置します。Launchpad を使用するにはまずユーザ登録の必要があります。 launchpad register コマンドを実行し、名前・所属・メールアドレスを入力してください。

node1$ curl -OL https://github.com/Mirantis/launchpad/releases/download/1.3.0/launchpad-linux-x64 -OL https://github.com/Mirantis/launchpad/releases/download/1.3.0/launchpad-linux-x64.sha256
(省略)
node1$ sha256sum -c launchpad-linux-x64.sha256
launchpad-linux-x64: OK
node1$ chmod +x launchpad-linux-x64
node1$ sudo mv launchpad-linux-x64 /usr/local/bin/launchpad
node1$ launchpad version
version: 1.3.0
commit: 706d2b4
node1$ launchpad register
Name XXXXXXXX XXXXXXXX
Email XXXXXXXX@creationline.com
Company CREATIOLINE,INC.
I agree to Mirantis Launchpad Software Evaluation License Agreement https://github.com/Mirantis/launchpad/blob/master/LICENSE Yes
INFO Registration completed!

Launchpadは各ゲストにsshしてデプロイを行うため、ssh-keygenコマンドでキーペアを作成します。

node1$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/vagrant/.ssh/id_rsa.
Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:id04eIcaXOXt4ZoBdAf5P0LOzStKeF5pfZnd+yGBnQg vagrant@node1
The key's randomart image is:
(省略)

node2,node3,node4の準備

node1のdnsmasqを参照するよう、node2, node3, node4 の /etc/resolv.conf を修正し、これを上書きしてしまわないよう /etc/NetworkManager/NetworkManager.conf の [main] 節に dns=none を追記します。

node2$ sudo vi /etc/resolv.conf
node2$ cat /etc/resolv.conf
nameserver 192.168.123.201
node2$ sudo vi /etc/NetworkManager/NetworkManager.conf
node2$ grep -vE '^(#|$)' /etc/NetworkManager/NetworkManager.conf
[main]
dns=none
[logging]
node2$ sudo systemctl restart NetworkManager
node3$ sudo vi /etc/resolv.conf
node3$ cat /etc/resolv.conf
nameserver 192.168.123.201
node3$ sudo vi /etc/NetworkManager/NetworkManager.conf
node3$ grep -vE '^(#|$)' /etc/NetworkManager/NetworkManager.conf
[main]
dns=none
[logging]
node3$ sudo systemctl restart NetworkManager
node4$ sudo vi /etc/resolv.conf
node4$ cat /etc/resolv.conf
nameserver 192.168.123.201
node4$ sudo vi /etc/NetworkManager/NetworkManager.conf
node4$ grep -vE '^(#|$)' /etc/NetworkManager/NetworkManager.conf
[main]
dns=none
[logging]
node4$ sudo systemctl restart NetworkManager

さらに、node1 で作成したキーペアのうち ~/.ssh/id_rsa.pub を node2, node3, node4 の ~/.ssh/authorized_keys の末尾に追記します。追記できたら、node1 からsshログインできるか確認しましょう。

node2$ cat >> .ssh/authorized_keys
ssh-rsa (省略) vagrant@node1
node3$ cat >> .ssh/authorized_keys
ssh-rsa (省略) vagrant@node1
node4$ cat >> .ssh/authorized_keys
ssh-rsa (省略) vagrant@node1
node1$ ssh node2 hostname
The authenticity of host 'node2 (192.168.123.202)' can't be established.
ECDSA key fingerprint is SHA256:ujqnmLCEyGWhu/01GUGCvVBGcqcHWCCZuQo8LKGnqls.
ECDSA key fingerprint is MD5:34:6c:6b:11:ea:58:c8:04:b2:21:ce:a3:57:7c:85:fd.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node2,192.168.123.202' (ECDSA) to the list of known hosts.
node2
node1$ ssh node3 hostname
The authenticity of host 'node3 (192.168.123.203)' can't be established.
ECDSA key fingerprint is SHA256:SVcyAMwtY8CJtr9Wx1wxy7bsq0VBzuhpaoRQy8uPrHc.
ECDSA key fingerprint is MD5:95:6e:44:5a:2d:df:21:dc:c4:54:d8:b1:ca:08:70:2f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node3,192.168.123.203' (ECDSA) to the list of known hosts.
node3
node1$ ssh node4 hostname
The authenticity of host 'node4 (192.168.123.204)' can't be established.
ECDSA key fingerprint is SHA256:JTAEve92zO6D9FDvsi9jZA5T+KUwIq42KzKgVeTgEH0.
ECDSA key fingerprint is MD5:87:3a:5b:8f:f4:d7:00:28:3d:dd:5a:e8:74:92:c7:fa.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node4,192.168.123.204' (ECDSA) to the list of known hosts.
node4

MKEとMSRデプロイ

次に、launchpad init コマンドを実行し、デプロイ用設定ファイルの雛形を生成します。今回はMKEだけでなくMSRも一緒にデプロイするので、--kind mke+msr オプションを付与します。

生成されたYAMLファイルはあくまで雛形なので、IPアドレスはもちろんのこと、今回の環境に合わせて変更しましょう。

  • privateInterface: Virtualboxの内部ネットワーク用ネットワークインターフェイスを自動検出しないように、ネットワークインターフェイスを明示的に指定します(参照: KubernetesをVirtualboxにVagrantとKubeadmでインストールしてみよう)。
  • spec.mke.adminUsername: MKEとMSRの管理者ユーザ名です。
  • spec.mke.dminPassword: MKEとMSRの管理者パスワードです。
  • spec.mke.installFlags
    • --force-minimums: メモリ4GBでは若干足りないので、エラーを無視するように指定します。可能であればVagrantfileの時点で増やしてください。
    • --default-node-orchestrator: デフォルトで使用するオーケストレータを設定します。
    • --pod-cidr: Podに割り当てるIPアドレス範囲を指定します。
    • --san: node2がMKEマスターなので、証明書のSANにnode2のホスト名とIPアドレスを指定します。
  • spec.msr.installFlags
    • --dtr-external-url: node4がMSRなので、node4のIPアドレスを指定します。
    • --ucp-insecure-tls: 自動生成される自己署名証明書を使用するので、危険性を無視するオプションを指定します。
    • --ucp-url: node2がMKEマスターなので、node2のIPアドレスでURLを指定します。

デフォルトとの差分はこちら、

node1$ launchpad init --kind mke+msr > launchpad.yaml.orig
node1$ cp launchpad.yaml.orig launchpad.yaml
node1$ vi launchpad.yaml
node1$ diff -u launchpad.yaml.orig launchpad.yaml
--- launchpad.yaml.orig 2021-08-23 13:17:19.838551937 +0900
+++ launchpad.yaml 2021-08-23 14:35:40.448647769 +0900
@@ -5,28 +5,43 @@
spec:
hosts:
- ssh:
- address: 10.0.0.1
- user: root
+ address: 192.168.123.202
+ user: vagrant
port: 22
keyPath: ~/.ssh/id_rsa
role: manager
+ privateInterface: eth1
- ssh:
- address: 10.0.0.2
- user: root
+ address: 192.168.123.203
+ user: vagrant
port: 22
keyPath: ~/.ssh/id_rsa
role: worker
+ privateInterface: eth1
- ssh:
- address: 10.0.0.2
- user: root
+ address: 192.168.123.204
+ user: vagrant
port: 22
keyPath: ~/.ssh/id_rsa
role: msr
+ privateInterface: eth1
mke:
version: 3.4.5
+ adminUsername: admin
+ adminPassword: adminadmin
+ installFlags:
+ - --force-minimums
+ - --default-node-orchestrator=kubernetes
+ - --pod-cidr 172.31.0.0/16
+ - --san=node2
+ - --san=192.168.123.202
msr:
version: 2.9.4
replicaIDs: sequential
+ installFlags:
+ - --dtr-external-url 192.168.123.204
+ - --ucp-insecure-tls
+ - --ucp-url https://192.168.123.202
mcr:
version: 20.10.0
cluster:

YAMLファイル全体はこちらです。

apiVersion: launchpad.mirantis.com/mke/v1.4
kind: mke+msr
metadata:
name: my-mke-cluster
spec:
hosts:
- ssh:
address: 192.168.123.202
user: vagrant
port: 22
keyPath: ~/.ssh/id_rsa
role: manager
privateInterface: eth1
- ssh:
address: 192.168.123.203
user: vagrant
port: 22
keyPath: ~/.ssh/id_rsa
role: worker
privateInterface: eth1
- ssh:
address: 192.168.123.204
user: vagrant
port: 22
keyPath: ~/.ssh/id_rsa
role: msr
privateInterface: eth1
mke:
version: 3.4.5
adminUsername: admin
adminPassword: adminadmin
installFlags:
- --force-minimums
- --default-node-orchestrator=kubernetes
- --pod-cidr 172.31.0.0/16
- --san=node2
- --san=192.168.123.202
msr:
version: 2.9.4
replicaIDs: sequential
installFlags:
- --dtr-external-url 192.168.123.204
- --ucp-insecure-tls
- --ucp-url https://192.168.123.202
mcr:
version: 20.10.0
cluster:
prune: false

ではMKEとMSRをデプロイしましょう。launchpad.yamlのあるディレクトリでlaunchpad applyコマンドを実行します。30分以上かかるので気長に待ちましょう。途中で思いがけずエラー中断している可能性もあるので、たまに様子を見ることもお忘れなく。

node1$ launchpad apply
(中略)
INFO ==> Running phase: MKE cluster info
INFO Cluster is now configured.
INFO MKE cluster admin UI: https://192.168.123.202/
INFO MSR cluster admin UI: https://192.168.123.204/
INFO You can download the admin client bundle with the command 'launchpad client-config'

このような表示となれば、MKEとMSRのデプロイ成功です。

MKEとMSRへのGUIアクセス

デプロイ成功メッセージに表示された URL にブラウザでアクセスしましょう。まずはMKE、ここでは https://192.168.123.202/ を開きます。

launchpad.yamlで設定した管理者ユーザ名とパスワードを入力し、「Sign In」ボタンを押します。

ライセンスのアップロードを求められます。ここではフリートライアルライセンスを取得するか、スキップを選択します。

フリートライアルライセンスを適用するかスキップすると、このようにMKEのダッシュボードが表示されるはずです。ひとまず左のナビゲーションバーから Shared Resources → Containers を開き、左上の歯車をクリックして Show system resources のチェックボックスにチェックを入れます。表示されるほとんどのコンテナの STATUS が Up ならば正常に動作しているはずです。Exited や Error が多くあると、デプロイに失敗している可能性があるため、調査が必要です。

次は MSR にブラウザでアクセスしましょう。ここでは https://192.168.123.204/ を開きます。

MKEにログインしたユーザ(ここでは管理者)のレポジトリが見えるはずです。現時点ではまだ何もレポジトリを作っていないため、空となっています。

後で利用するために、 admin/hello-world レポジトリを作成しておきます。右上の「New Repository」ボタンをクリックし、レポジトリ作成画面に移動します。repository欄でadminを選択してhello-worldを入力し、他はそのままにして下の「Create」ボタンをクリックします。

これで admin/hello-world レポジトリが作成できました。

MKEへのCLIアクセス

MKEへはCLIでのアクセスも可能です。launchpad にはクライアントを設定する機能はないので、別途手動でインストールする必要があります。node1にて、Docker Enginekubectlの手順に従い、インストールを行いましょう。詳細な手順と実行ログはここでは省略します。

Docker Engineとkubectlのインストールが終わったら、先のデプロイ成功時のメッセージにあったように launchpad client-config コマンドを実行します。

node1$ launchpad client-config
(省略)
INFO ==> Running phase: Download Client Bundle
INFO Successfully wrote client bundle to /home/vagrant/.mirantis-launchpad/cluster/my-mke-cluster/bundle/admin
INFO ==> Running phase: Close Connection
INFO [ssh] 192.168.123.202:22: disconnected

client bunleがダウンロードできました。これはMKEに管理者ユーザでアクセスするための設定ファイルやキーペアを含んだファイル群です。client bundleが配置されたディレクトリに移動し、設定ファイルを読み込みます。

node1$ cd /home/vagrant/.mirantis-launchpad/cluster/my-mke-cluster/bundle/admin
node1$ source env.sh
Cluster "ucp_192.168.123.202:6443_admin" set.
User "ucp_192.168.123.202:6443_admin" set.
Context "ucp_192.168.123.202:6443_admin" created.

client bundleを読み込んだら、dockerコマンドとkubectlコマンドでMKEにアクセスしてみます。次のようにnode2,node3,node4で構成されたSwarmクラスタとKubernetesクラスタが確認できるはずです。

node1$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
q9fr204f3iiy018brr4lm34gg * node2 Ready Active Leader 20.10.0
0sz2ib2zedax1vw8k69emxiq7 node3 Ready Active 20.10.0
t45owm7e4cgd58z83v0bamgei node4 Ready Active 20.10.0
node1$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
node2 Ready master 21h v1.20.8-mirantis-2
node3 Ready 20h v1.20.8-mirantis-2
node4 Ready 20h v1.20.8-mirantis-2

デモアプリケーションとしてSock Shopをデプロイします。MKEではNodePort範囲に制限がかけられているため、修正してからapplyします。

node1$ curl -OL https://raw.githubusercontent.com/microservices-demo/microservices-demo/master/deploy/kubernetes/complete-demo.yaml
node1$ cp -a complete-demo.yaml complete-demo.yaml.orig
node1$ vi complete-demo.yaml
node1$ diff -u complete-demo.yaml.orig complete-demo.yaml
--- complete-demo.yaml.orig 2021-08-24 16:11:05.735948708 +0900
+++ complete-demo.yaml 2021-08-24 16:12:07.820602783 +0900
@@ -314,7 +314,7 @@
ports:
- port: 80
targetPort: 8079
- nodePort: 30001
+ nodePort: 32768
selector:
name: front-end
node1$ kubectl apply -f complete-demo.yaml

しばらく待ち、ローカルPCのブラウザで http://192.168.123.202:32768 あるいは http://192.168.123.203:32768 または http://192.168.123.204:32768 にアクセスし、Sock ShopのUIが表示されれば正常に動作しています。

MKEのGUIからも次のようにPodの動作状況がわかります。

MSRへのCLIアクセス

client bundleを読み込むとMSRにもアクセス可能です。任意のDockerイメージをDocker Hubかプルし、MSRにプッシュしてみましょう。

node1$ docker image pull hello-world
(省略)
node1$ docker image tag hello-world 192.168.123.204/admin/hello-world
node1$ docker image push 192.168.123.204/admin/hello-world
Using default tag: latest
The push refers to repository [192.168.123.204/admin/hello-world]
f22b99068db9: Pushed
latest: digest: sha256:1b26826f602946860c279fce658f31050cff2c596583af237d971f4629b57792 size: 525

MSRのGUIを見ると、イメージがプッシュできたことがわかります。

まとめ

本稿では、MKEとMSRのデプロイツールであるLaunchpadを用いて、Virtualboxにインストールを行い、簡単な動作確認を行ってみました。生成される雛形YAMLを少々修正するだけで、ワンコマンドで手軽にMKEとMSRをデプロイすることができます。
今回はインストールと動作確認に焦点を絞ったので紹介するGUI画面は最低限のものとなりましたが、このようにMKEとMSRではGUIを用いてKubernetesやイメージレジストリの運用・管理を行うことができます。是非一度お試しください。

製品に関する質問や価格、ライセンス体系などにつきましてはこちらからお問い合わせください。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA