nomad
でdemocratic-csiを利用して、Synology
のNASから動的にiscsi
の領域を確保して、マウントして、コンテナのストレージとして利用できるようにしてみました。ノードを跨いで、ステートを保持できるようになるよ。
Kubernetes
やnomad
のようなコンテナオーケストレーションツールを利用している際に、ストレージをどのように手配するかというのは大きなポイントです。これがお金を払ったサービスなどであれば、自動的にストレージをアタッチしてくれたりもするのでしょうが、お家検証ラボ環境ではそんな便利な仕組みは利用できません。。
このため、勢いnomad
はステートレスなアプリを動かすために利用していました。もしくは外部にDBなどを立てて、そこにステートを保管できるアプリの場合は、それで騙し騙し運用していました。
しかし、これではいかんということで、重い腰を上げて解決策を探ってみました。そこで見つけたのが、democratic-csiでした。
ちょうど「おうち Kubernetes に最適な Synology 公式の CSI Driver がリリースされた話と Cloning / Snapshot feature deep dive - @amsy810's Blog」を見つけたのがきっかけとして一番大きいです。
環境情報について説明します。
ネットワーク図はこのようになります。3台のサーバーにnomad
がインストールされていて、稼働しています:
条件としては以下になります:
Synology NAS
側にSAN Manager
が導入されていることadmin
アカウントが有効で、2-Factor認証は利用していないこと。パスワード認証できること
CSIとは、Cloud Native Computing Foundationで定義されたContainer Orchestrator(CO)で利用可能な業界標準のストレージ・インターフェースを指しているそうです。この仕組を利用して、たとえばKubernetes
やnomad
などのコンテナオーケストレーションツールがストレージを操作できるようになっているそうです。
今回はdemocratic-csiというのを利用して、Synology NAS
からiSCSI
領域を切り出して、コンテナから利用できるようにします。
事前にやっておく作業を書きます。正直nomad
はこの分野では成熟していないため、色々とやる必要があります。
Storage Manager
上で、Volume 1
がある前提で話を進めていきます:
また、SAN Manager
が動作していることも確認しておきます:
nomad
が動作しているサーバ側で実施する手順になります。
次のようにして必要なパッケージをインストールします:
open-iscsi
lsscsi
sg3-utils
multipath-tools
scsitools
実行ログはこんな感じです:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| kazu634@test02% sudo apt-get install -y open-iscsi lsscsi sg3-utils multipath-tools scsitools
[sudo] kazu634 のパスワード:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
multipath-tools はすでに最新バージョン (0.8.3-1ubuntu2) です。
multipath-tools は手動でインストールしたと設定されました。
sg3-utils はすでに最新バージョン (1.44-1ubuntu2) です。
sg3-utils は手動でインストールしたと設定されました。
open-iscsi はすでに最新バージョン (2.0.874-7.1ubuntu6.2) です。
open-iscsi は手動でインストールしたと設定されました。
以下のパッケージが新たにインストールされます:
lsscsi scsitools
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
163 kB のアーカイブを取得する必要があります。
この操作後に追加で 490 kB のディスク容量が消費されます。
取得:1 http://192.168.10.200:8080/ubuntu/apt-mirror/mirror/jp.archive.ubuntu.com/ubuntu focal/main amd64
lsscsi amd64 0.30-0.1 [46.1 kB]
取得:2 http://192.168.10.200:8080/ubuntu/apt-mirror/mirror/jp.archive.ubuntu.com/ubuntu focal/universe a
md64 scsitools amd64 0.12-3ubuntu1 [117 kB]
163 kB を 0秒 で取得しました (620 kB/s)
以前に未選択のパッケージ lsscsi を選択しています。
(データベースを読み込んでいますi... 現在 81800 個のファイルとディレクトリがインストールされています。)
.../lsscsi_0.30-0.1_amd64.deb を展開する準備をしています ...
lsscsi (0.30-0.1) を展開しています...
以前に未選択のパッケージ scsitools を選択しています。
.../scsitools_0.12-3ubuntu1_amd64.deb を展開する準備をしています ...
scsitools (0.12-3ubuntu1) を展開しています...
scsitools (0.12-3ubuntu1) を設定しています ...
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
lsscsi (0.30-0.1) を設定しています ...
man-db (2.9.1-1) のトリガを処理しています ...
systemd (245.4-4ubuntu3.13) のトリガを処理しています ...
|
Ubuntuでopen-iscsi(2.0.874 @raspberry pi 4 / ubuntu 20.04)を参照して、こんな感じで探索をします:
1
2
3
4
5
| kazu634@test02% sudo iscsiadm -m discoverydb -t st -p 192.168.10.200 --discover
192.168.10.200:3260,1 iqn.2000-01.com.synology:ds418.default-target.670eccce521
[fe80::211:32ff:fe8a:58a3]:3260,1 iqn.2000-01.com.synology:ds418.default-target.670eccce521
192.168.10.200:3260,1 iqn.2000-01.com.synology:ds418.nomad.target-mysql
[fe80::211:32ff:fe8a:58a3]:3260,1 iqn.2000-01.com.synology:ds418.nomad.target-mysql
|
このコマンドを実行しないと、/etc/iscsi/nodes/
配下に探索した結果を格納したファイルが作成されず、後で実施するsudo systemctl start iscsi.service
が失敗するので、必ず実行しましょう。
次のように行います:
1
2
3
4
5
6
7
8
9
10
| kazu634@test02% sudo tee /etc/multipath.conf <<-'EOF'
defaults {
user_friendly_names yes
find_multipaths yes
}
EOF
defaults {
user_friendly_names yes
find_multipaths yes
}
|
multipath-tools
とopen-iscsi
を自動実行させ、起動します。
以下のようにコマンドを実行します:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| kazu634@test02% sudo systemctl enable multipath-tools.service
Synchronizing state of multipath-tools.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable multipath-tools
Created symlink /etc/systemd/system/multipath-tools.service → /lib/systemd/system/multipathd.service.
Created symlink /etc/systemd/system/sysinit.target.wants/multipathd.service → /lib/systemd/system/multipathd.service.
Created symlink /etc/systemd/system/sockets.target.wants/multipathd.socket → /lib/systemd/system/multipathd.socket.
kazu634@test02% sudo service multipath-tools restart
kazu634@test02% sudo systemctl status multipath-tools.service
multipathd.service - Device-Mapper Multipath Device Controller
Loaded: loaded (/lib/systemd/system/multipathd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-12-29 12:00:21 JST; 1min 26s ago
TriggeredBy: ● multipathd.socket
Process: 28848 ExecStartPre=/sbin/modprobe -a scsi_dh_alua scsi_dh_emc scsi_dh_rdac dm-multipath (c>
Main PID: 28849 (multipathd)
Status: "up"
Tasks: 7
Memory: 10.7M
CGroup: /system.slice/multipathd.service
└─28849 /sbin/multipathd -d -s
12月 29 12:01:36 test02 multipathd[28849]: sda: failed to get sysfs uid: Invalid argument
12月 29 12:01:36 test02 multipathd[28849]: sda: failed to get sgio uid: No such file or directory
12月 29 12:01:41 test02 multipathd[28849]: sda: add missing path
12月 29 12:01:41 test02 multipathd[28849]: sda: failed to get udev uid: Invalid argument
12月 29 12:01:41 test02 multipathd[28849]: sda: failed to get sysfs uid: Invalid argument
12月 29 12:01:41 test02 multipathd[28849]: sda: failed to get sgio uid: No such file or directory
12月 29 12:01:46 test02 multipathd[28849]: sda: add missing path
12月 29 12:01:46 test02 multipathd[28849]: sda: failed to get udev uid: Invalid argument
|
以下のようにコマンドを実行します:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| kazu634@test02% sudo systemctl enable open-iscsi.service
Synchronizing state of open-iscsi.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable open-iscsi
kazu634@test02% sudo service open-iscsi start
kazu634@test02% sudo systemctl status open-iscsi
● open-iscsi.service - Login to default iSCSI targets
Loaded: loaded (/lib/systemd/system/open-iscsi.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2021-12-29 12:03:38 JST; 8s ago
Docs: man:iscsiadm(8)
man:iscsid(8)
Process: 29166 ExecStart=/sbin/iscsiadm -m node --loginall=automatic (code=exited, status=21)
Process: 29167 ExecStart=/lib/open-iscsi/activate-storage.sh (code=exited, status=0/SUCCESS)
Main PID: 29167 (code=exited, status=0/SUCCESS)
12月 29 12:03:38 test02 systemd[1]: Starting Login to default iSCSI targets...
12月 29 12:03:38 test02 iscsiadm[29166]: iscsiadm: No records found
12月 29 12:03:38 test02 systemd[1]: Finished Login to default iSCSI targets.
|
先ほど書いたようにnomad
のCSIサポートは成熟していないため、次のようなことを色々としてあげる必要があります。
democratic-csiのController
コンポーネントはnomad
のBridge
ネットワークで動作させる必要があるのですが、Bridge
ネットワークで動作させるためには、手動でCNIプラグインをインストールする必要がありました。。さらにCNIプラグインをインストールするためには、Golang
が必要なのでした。。
次のようにしてGolang
をインストールします:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
| kazu634@test02% sudo add-apt-repository ppa:longsleep/golang-backports
Golang 1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16 and 1.17 PPA for Ubuntu
More info: https://launchpad.net/~longsleep/+archive/ubuntu/golang-backports
Press [ENTER] to continue or Ctrl-c to cancel adding it.
ヒット:1 http://192.168.10.200:8080/ubuntu/apt-mirror/mirror/jp.archive.ubuntu.com/ubuntu focal InRelease
ヒット:2 http://192.168.10.200:8080/ubuntu/apt-mirror/mirror/jp.archive.ubuntu.com/ubuntu focal-updates InRelease
ヒット:3 http://192.168.10.200:8080/ubuntu/apt-mirror/mirror/jp.archive.ubuntu.com/ubuntu focal-backports InRelease
ヒット:4 http://192.168.10.200:8080/ubuntu/apt-mirror/mirror/jp.archive.ubuntu.com/ubuntu focal-security InRelease
ヒット:5 https://download.docker.com/linux/ubuntu focal InRelease
ヒット:6 https://apt.releases.hashicorp.com focal InRelease
取得:7 https://repositories.timber.io/public/vector/deb/ubuntu focal InRelease [4,932 B]
取得:8 https://repositories.timber.io/public/vector/deb/ubuntu focal/main amd64 Packages [2,815 B]
ヒット:9 http://ppa.launchpad.net/git-core/ppa/ubuntu focal InRelease
取得:10 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal InRelease [17.5 kB]
取得:11 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal/main amd64 Packages [3,196 B]
取得:12 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal/main Translation-en [1,768 B]
30.3 kB を 2秒 で取得しました (14.5 kB/s)
パッケージリストを読み込んでいます... 完了
kazu634@test02% apt update
ヒット:1 http://192.168.10.200:8080/ubuntu/apt-mirror/mirror/jp.archive.ubuntu.com/ubuntu focal InRelease
ヒット:2 http://192.168.10.200:8080/ubuntu/apt-mirror/mirror/jp.archive.ubuntu.com/ubuntu focal-updates InRelease
ヒット:3 http://192.168.10.200:8080/ubuntu/apt-mirror/mirror/jp.archive.ubuntu.com/ubuntu focal-backports InRelease
ヒット:4 http://192.168.10.200:8080/ubuntu/apt-mirror/mirror/jp.archive.ubuntu.com/ubuntu focal-security InRelease
ヒット:5 https://download.docker.com/linux/ubuntu focal InRelease
ヒット:6 https://apt.releases.hashicorp.com focal InRelease
取得:7 https://repositories.timber.io/public/vector/deb/ubuntu focal InRelease [4,932 B]
ヒット:8 http://ppa.launchpad.net/git-core/ppa/ubuntu focal InRelease
ヒット:9 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal InRelease
4,932 B を 1秒 で取得しました (3,617 B/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードできるパッケージが 1 個あります。表示するには 'apt list --upgradable' を実行してください
kazu634@test02% apt install golang
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
golang-1.17 golang-1.17-doc golang-1.17-go golang-1.17-src golang-doc golang-go golang-src
pkg-config
提案パッケージ:
bzr | brz mercurial subversion
以下のパッケージが新たにインストールされます:
golang golang-1.17 golang-1.17-doc golang-1.17-go golang-1.17-src golang-doc golang-go golang-src
pkg-config
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 1 個。
72.0 MB のアーカイブを取得する必要があります。
この操作後に追加で 424 MB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://192.168.10.200:8080/ubuntu/apt-mirror/mirror/jp.archive.ubuntu.com/ubuntu focal/main amd64
pkg-config amd64 0.29.1-0ubuntu4 [45.5 kB]
取得:2 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal/main amd64 golang-1.17-doc all 1
.17.5-1longsleep1+focal [105 kB]
取得:3 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal/main amd64 golang-1.17-src all 1
.17.5-1longsleep1+focal [15.2 MB]
取得:4 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal/main amd64 golang-1.17-go amd64
1.17.5-1longsleep1+focal [56.6 MB]
取得:5 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal/main amd64 golang-1.17 all 1.17.
5-1longsleep1+focal [27.9 kB]
取得:6 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal/main amd64 golang-src amd64 2:1.
17~1longsleep1 [5,056 B]
取得:7 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal/main amd64 golang-go amd64 2:1.1
7~1longsleep1 [24.1 kB]
取得:8 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal/main amd64 golang-doc all 2:1.17
~1longsleep1 [5,052 B]
取得:9 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal/main amd64 golang amd64 2:1.17~1
longsleep1 [5,008 B]
72.0 MB を 15秒 で取得しました (4,900 kB/s)
以前に未選択のパッケージ golang-1.17-doc を選択しています。
(データベースを読み込んでいます .1. 現在c81861 個のファイルとディレクトリがインストールされています。)
.../0-golang-1.17-doc_1.17.5-1longsleep1+focal_all.deb を展開する準備をしています ...
golang-1.17-doc (1.17.5-1longsleep1+focal) を展開しています...
以前に未選択のパッケージ golang-1.17-src を選択しています。
.../1-golang-1.17-src_1.17.5-1longsleep1+focal_all.deb を展開する準備をしています ...
golang-1.17-src (1.17.5-1longsleep1+focal) を展開しています...
以前に未選択のパッケージ golang-1.17-go を選択しています。
.../2-golang-1.17-go_1.17.5-1longsleep1+focal_amd64.deb を展開する準備をしています ...
golang-1.17-go (1.17.5-1longsleep1+focal) を展開しています...
以前に未選択のパッケージ golang-1.17 を選択しています。
.../3-golang-1.17_1.17.5-1longsleep1+focal_all.deb を展開する準備をしています ...
golang-1.17 (1.17.5-1longsleep1+focal) を展開しています...
以前に未選択のパッケージ golang-src:amd64 を選択しています
1948
.../4-golang-src_2%3a1.17~1longsleep1_amd64.deb を展開する準備をしています ...
golang-src:amd64 (2:1.17~1longsleep1) を展開しています...
以前に未選択のパッケージ golang-go を選択しています。
.../5-golang-go_2%3a1.17~1longsleep1_amd64.deb を展開する準備をしています ...
golang-go (2:1.17~1longsleep1) を展開しています...
以前に未選択のパッケージ golang-doc を選択しています。
.../6-golang-doc_2%3a1.17~1longsleep1_all.deb を展開する準備をしています ...
golang-doc (2:1.17~1longsleep1) を展開しています...
以前に未選択のパッケージ golang:amd64 を選択しています。
.../7-golang_2%3a1.17~1longsleep1_amd64.deb を展開する準備をしています ...
golang:amd64 (2:1.17~1longsleep1) を展開しています...
以前に未選択のパッケージ pkg-config を選択しています。
.../8-pkg-config_0.29.1-0ubuntu4_amd64.deb を展開する準備をしています ...
pkg-config (0.29.1-0ubuntu4) を展開しています...
golang-1.17-doc (1.17.5-1longsleep1+focal) を設定しています ...
golang-1.17-src (1.17.5-1longsleep1+focal) を設定しています ...
pkg-config (0.29.1-0ubuntu4) を設定しています ...
golang-1.17-go (1.17.5-1longsleep1+focal) を設定しています ...
golang-src:amd64 (2:1.17~1longsleep1) を設定しています ...
golang-go (2:1.17~1longsleep1) を設定しています ...
golang-1.17 (1.17.5-1longsleep1+focal) を設定しています ...
golang-doc (2:1.17~1longsleep1) を設定しています ...
golang:amd64 (2:1.17~1longsleep1) を設定しています ...
man-db (2.9.1-1) のトリガを処理しています ...
kazu634@test02% which go
/usr/bin/go
kazu634@test02% go version
go version go1.17.5 linux/amd64
|
ようやくCNIプラグインをインストールしていきます。まずはCNIプラグインをビルドします。Makefile
などはなく、build_linux.sh
を実行します:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| kazu634@test02% git clone https://github.com/containernetworking/plugins.git
Cloning into 'plugins'...
remote: Enumerating objects: 13094, done.
remote: Counting objects: 100% (1813/1813), done.
remote: Compressing objects: 100% (1125/1125), done.
remote: Total 13094 (delta 780), reused 1431 (delta 621), pack-reused 11281
Receiving objects: 100% (13094/13094), 10.98 MiB | 9.59 MiB/s, done.
Resolving deltas: 100% (6885/6885), done.
kazu634@test02% cd plugins/
kazu634@test02% ./build_linux.sh
Building plugins
bandwidth
firewall
portmap
sbr
tuning
vrf
bridge
host-device
ipvlan
loopback
macvlan
ptp
vlan
dhcp
host-local
static
kazu634@test02% ll bin/
合計 63M
drwxrwxr-x 2 kazu634 kazu634 4.0K 12月 29 12:15 .
drwxrwxr-x 10 kazu634 kazu634 4.0K 12月 29 12:15 ..
-rwxrwxr-x 1 kazu634 kazu634 3.7M 12月 29 12:15 bandwidth
-rwxrwxr-x 1 kazu634 kazu634 4.1M 12月 29 12:15 bridge
-rwxrwxr-x 1 kazu634 kazu634 9.4M 12月 29 12:15 dhcp
-rwxrwxr-x 1 kazu634 kazu634 4.2M 12月 29 12:15 firewall
-rwxrwxr-x 1 kazu634 kazu634 3.7M 12月 29 12:15 host-device
-rwxrwxr-x 1 kazu634 kazu634 3.2M 12月 29 12:15 host-local
-rwxrwxr-x 1 kazu634 kazu634 3.9M 12月 29 12:15 ipvlan
-rwxrwxr-x 1 kazu634 kazu634 3.2M 12月 29 12:15 loopback
-rwxrwxr-x 1 kazu634 kazu634 3.9M 12月 29 12:15 macvlan
-rwxrwxr-x 1 kazu634 kazu634 3.6M 12月 29 12:15 portmap
-rwxrwxr-x 1 kazu634 kazu634 4.0M 12月 29 12:15 ptp
-rwxrwxr-x 1 kazu634 kazu634 3.4M 12月 29 12:15 sbr
-rwxrwxr-x 1 kazu634 kazu634 2.8M 12月 29 12:15 static
-rwxrwxr-x 1 kazu634 kazu634 3.4M 12月 29 12:15 tuning
-rwxrwxr-x 1 kazu634 kazu634 3.8M 12月 29 12:15 vlan
-rwxrwxr-x 1 kazu634 kazu634 3.4M 12月 29 12:15 vrf
|
ビルドしたコマンドを任意のディレクトリに格納します。今回は/opt/cni/bin
としました:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| kazu634@test02% cd bin/
./ bandwidth* dhcp* host-device* ipvlan* macvlan* ptp* static* vlan*
../ bridge* firewall* host-local* loopback* portmap* sbr* tuning* vrf*
kazu634@test02% sudo chown root:root *
kazu634@test02% ll
合計 63M
drwxrwxr-x 2 kazu634 kazu634 4.0K 12月 29 12:15 .
drwxrwxr-x 10 kazu634 kazu634 4.0K 12月 29 12:15 ..
-rwxrwxr-x 1 root root 3.7M 12月 29 12:15 bandwidth
-rwxrwxr-x 1 root root 4.1M 12月 29 12:15 bridge
-rwxrwxr-x 1 root root 9.4M 12月 29 12:15 dhcp
-rwxrwxr-x 1 root root 4.2M 12月 29 12:15 firewall
-rwxrwxr-x 1 root root 3.7M 12月 29 12:15 host-device
-rwxrwxr-x 1 root root 3.2M 12月 29 12:15 host-local
-rwxrwxr-x 1 root root 3.9M 12月 29 12:15 ipvlan
-rwxrwxr-x 1 root root 3.2M 12月 29 12:15 loopback
-rwxrwxr-x 1 root root 3.9M 12月 29 12:15 macvlan
-rwxrwxr-x 1 root root 3.6M 12月 29 12:15 portmap
-rwxrwxr-x 1 root root 4.0M 12月 29 12:15 ptp
-rwxrwxr-x 1 root root 3.4M 12月 29 12:15 sbr
-rwxrwxr-x 1 root root 2.8M 12月 29 12:15 static
-rwxrwxr-x 1 root root 3.4M 12月 29 12:15 tuning
-rwxrwxr-x 1 root root 3.8M 12月 29 12:15 vlan
-rwxrwxr-x 1 root root 3.4M 12月 29 12:15 vrf
kazu634@test02% sudo mkdir -p /opt/cni/bin/
kazu634@test02% sudo mv * /opt/cni/bin/
kazu634@test02% ll /opt/cni/bin/
合計 63M
drwxr-xr-x 2 root root 4.0K 12月 29 12:18 .
drwxr-xr-x 3 root root 4.0K 12月 29 12:18 ..
-rwxrwxr-x 1 root root 3.7M 12月 29 12:15 bandwidth
-rwxrwxr-x 1 root root 4.1M 12月 29 12:15 bridge
-rwxrwxr-x 1 root root 9.4M 12月 29 12:15 dhcp
-rwxrwxr-x 1 root root 4.2M 12月 29 12:15 firewall
-rwxrwxr-x 1 root root 3.7M 12月 29 12:15 host-device
-rwxrwxr-x 1 root root 3.2M 12月 29 12:15 host-local
-rwxrwxr-x 1 root root 3.9M 12月 29 12:15 ipvlan
-rwxrwxr-x 1 root root 3.2M 12月 29 12:15 loopback
-rwxrwxr-x 1 root root 3.9M 12月 29 12:15 macvlan
-rwxrwxr-x 1 root root 3.6M 12月 29 12:15 portmap
-rwxrwxr-x 1 root root 4.0M 12月 29 12:15 ptp
-rwxrwxr-x 1 root root 3.4M 12月 29 12:15 sbr
-rwxrwxr-x 1 root root 2.8M 12月 29 12:15 static
-rwxrwxr-x 1 root root 3.4M 12月 29 12:15 tuning
-rwxrwxr-x 1 root root 3.8M 12月 29 12:15 vlan
-rwxrwxr-x 1 root root 3.4M 12月 29 12:15 vrf
|
以下の内容で/etc/cni/nomad.conflist
というファイル名で保存します。拡張子は必ず.conflist
にしましょう。nomad
は拡張子.conflist
を読み込みます:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| {
"cniVersion": "0.3.1",
"name": "nomad",
"plugins": [
{
"type": "ptp",
"ipMasq": true,
"ipam": {
"type": "host-local",
"subnet": "172.16.30.0/24",
"routes": [
{
"dst": "0.0.0.0/0"
}
]
}
},
{
"type": "portmap",
"capabilities": { "portMappings": true }
}
]
}
|
nomad
の設定ファイルに以下の記述を追加します:
1
2
3
4
5
6
| client {
enabled = true
cni_path = "/opt/cni/bin"
cni_config_dir = "/etc/cni/"
}
|
/etc/nomad.d/csi.hcl
に以下の内容を書き込みます:
1
2
3
4
5
6
7
8
9
| plugin "docker" {
config {
volumes {
enabled = true
}
allow_privileged = true
}
}
|
設定を反映させるために、nomad
の再起動を忘れずに。以上の作業をnoamd
サーバ3台で実施します。
CSIプラグインのまずはControllerを起動させます。ここからはnomad
のジョブ定義となります。Nomad Supportを参考にしていきます。ただ、個々の記述も最新の記述とは言えず、試行錯誤したのはここだけの話。Synology NASで動作させるためには、democratic-csi/docs/Nomad/examplesも合わせて読む必要がありました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| job "storage-controller" {
datacenters = ["dc1"]
type = "service"
group "controller" {
network {
mode = "bridge"
port "grpc" {
static = 9000
to = 9000
}
}
task "controller" {
driver = "docker"
config {
image = "democraticcsi/democratic-csi:latest"
ports = ["grpc"]
args = [
"--csi-version=1.2.0",
"--csi-name=org.democratic-csi.iscsi",
"--driver-config-file=${NOMAD_TASK_DIR}/driver-config-file.yaml",
"--log-level=debug",
"--csi-mode=controller",
"--server-socket=/csi/csi.sock",
"--server-address=0.0.0.0",
"--server-port=9000",
]
}
csi_plugin {
id = "org.democratic-csi.iscsi"
type = "controller"
mount_dir = "/csi"
}
template {
destination = "${NOMAD_TASK_DIR}/driver-config-file.yaml"
data = <<EOH
ここに設定を記述する
EOH
}
resources {
cpu = 500
memory = 256
}
}
}
}
|
「ここに設定を記述する」の部分は以下のように記述します:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| driver: synology-iscsi
httpConnection:
# NASの管理コンソールのプロトコル (http or https)
protocol: http
# NASのIPアドレス
host: 192.168.10.200
# ポート番号 (通常はhttp 5000, https 5001)
port: 5000
# 管理者ユーザーのユーザー名
username: admin
# パスワード
password: Holiday88
# httpsの場合、証明書の検証結果を無視するかどうか(true: 無視する)
allowInsecure: true
# should be uniqe across all installs to the same nas
session: "democratic-csi"
serialize: true
synology:
# choose the proper volume for your system
# ここはNAS上のボリューム名を指定する
volume: /volume1
iscsi:
# NASのIPアドレス
targetPortal: "192.168.10.200"
# for multipath
targetPortals: [] # [ "server[:port]", "server[:port]", ... ]
# leave empty to omit usage of -I with iscsiadm
interface: ""
# NAS側にターゲット作成する際のターゲット名の基準となる名前
baseiqn: "iqn.2000-01.com.synology:ds418.nomad.target-"
# MUST ensure uniqueness
# full iqn limit is 223 bytes, plan accordingly
namePrefix: ""
nameSuffix: ""
# documented below are several blocks
# pick the option appropriate for you based on what your backing fs is and desired features
# you do not need to alter dev_attribs under normal circumstances but they may be altered in advanced use-cases
lunTemplate:
# btrfs thin provisioning
type: "BLUN"
# tpws = Hardware-assisted zeroing
# caw = Hardware-assisted locking
# 3pc = Hardware-assisted data transfer
# tpu = Space reclamation
# can_snapshot = Snapshot
#dev_attribs:
#- dev_attrib: emulate_tpws
# enable: 1
#- dev_attrib: emulate_caw
# enable: 1
#- dev_attrib: emulate_3pc
# enable: 0
#- dev_attrib: can_snapshot
# enable: 1
# btfs thick provisioning
# only zeroing and locking supported
#type: "BLUN_THICK"
# tpws = Hardware-assisted zeroing
# caw = Hardware-assisted locking
#dev_attribs:
#- dev_attrib: emulate_tpws
# enable: 1
#- dev_attrib: emulate_caw
# enable: 1
# ext4 thinn provisioning UI sends everything with enabled=0
#type: "THIN"
# ext4 thin with advanced legacy features set
# can only alter tpu (all others are set as enabled=1)
#type: "ADV"
#dev_attribs:
#- dev_attrib: emulate_tpu
# enable: 1
# ext4 thick
# can only alter caw
#type: "FILE"
#dev_attribs:
#- dev_attrib: emulate_caw
# enable: 1
lunSnapshotTemplate:
is_locked: true
# https://kb.synology.com/en-me/DSM/tutorial/What_is_file_system_consistent_snapshot
is_app_consistent: true
targetTemplate:
auth_type: 0
max_sessions: 0
|
一つにまとめるとこうなります:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
| job "storage-controller" {
datacenters = ["dc1"]
type = "service"
group "controller" {
network {
mode = "bridge"
port "grpc" {
static = 9000
to = 9000
}
}
task "controller" {
driver = "docker"
config {
image = "democraticcsi/democratic-csi:latest"
ports = ["grpc"]
args = [
"--csi-version=1.2.0",
"--csi-name=org.democratic-csi.iscsi",
"--driver-config-file=${NOMAD_TASK_DIR}/driver-config-file.yaml",
"--log-level=debug",
"--csi-mode=controller",
"--server-socket=/csi/csi.sock",
"--server-address=0.0.0.0",
"--server-port=9000",
]
}
csi_plugin {
id = "org.democratic-csi.iscsi"
type = "controller"
mount_dir = "/csi"
}
template {
destination = "${NOMAD_TASK_DIR}/driver-config-file.yaml"
data = <<EOH
driver: synology-iscsi
httpConnection:
# NASの管理コンソールのプロトコル (http or https)
protocol: http
# NASのIPアドレス
host: 192.168.10.200
# ポート番号 (通常はhttp 5000, https 5001)
port: 5000
# 管理者ユーザーのユーザー名
username: admin
# パスワード
password: Holiday88
# httpsの場合、証明書の検証結果を無視するかどうか(true: 無視する)
allowInsecure: true
# should be uniqe across all installs to the same nas
session: "democratic-csi"
serialize: true
synology:
# choose the proper volume for your system
# ここはNAS上のボリューム名を指定する
volume: /volume1
iscsi:
# NASのIPアドレス
targetPortal: "192.168.10.200"
# for multipath
targetPortals: [] # [ "server[:port]", "server[:port]", ... ]
# leave empty to omit usage of -I with iscsiadm
interface: ""
# NAS側にターゲット作成する際のターゲット名の基準となる名前
baseiqn: "iqn.2000-01.com.synology:ds418.nomad.target-"
# MUST ensure uniqueness
# full iqn limit is 223 bytes, plan accordingly
namePrefix: ""
nameSuffix: ""
# documented below are several blocks
# pick the option appropriate for you based on what your backing fs is and desired features
# you do not need to alter dev_attribs under normal circumstances but they may be altered in advanced use-cases
lunTemplate:
# btrfs thin provisioning
type: "BLUN"
# tpws = Hardware-assisted zeroing
# caw = Hardware-assisted locking
# 3pc = Hardware-assisted data transfer
# tpu = Space reclamation
# can_snapshot = Snapshot
#dev_attribs:
#- dev_attrib: emulate_tpws
# enable: 1
#- dev_attrib: emulate_caw
# enable: 1
#- dev_attrib: emulate_3pc
# enable: 0
#- dev_attrib: can_snapshot
# enable: 1
# btfs thick provisioning
# only zeroing and locking supported
#type: "BLUN_THICK"
# tpws = Hardware-assisted zeroing
# caw = Hardware-assisted locking
#dev_attribs:
#- dev_attrib: emulate_tpws
# enable: 1
#- dev_attrib: emulate_caw
# enable: 1
# ext4 thinn provisioning UI sends everything with enabled=0
#type: "THIN"
# ext4 thin with advanced legacy features set
# can only alter tpu (all others are set as enabled=1)
#type: "ADV"
#dev_attribs:
#- dev_attrib: emulate_tpu
# enable: 1
# ext4 thick
# can only alter caw
#type: "FILE"
#dev_attribs:
#- dev_attrib: emulate_caw
# enable: 1
lunSnapshotTemplate:
is_locked: true
# https://kb.synology.com/en-me/DSM/tutorial/What_is_file_system_consistent_snapshot
is_app_consistent: true
targetTemplate:
auth_type: 0
max_sessions: 0
EOH
}
resources {
cpu = 500
memory = 256
}
}
}
}
|
それではジョブを実行させます:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| kazu634@test02% nomad job run controller.nomad
==> 2021-12-29T14:22:33+09:00: Monitoring evaluation "bbb4d4af"
2021-12-29T14:22:33+09:00: Evaluation triggered by job "storage-controller"
==> 2021-12-29T14:22:34+09:00: Monitoring evaluation "bbb4d4af"
2021-12-29T14:22:34+09:00: Evaluation within deployment: "b8269ab5"
2021-12-29T14:22:34+09:00: Allocation "a9500c24" created: node "84bb93d7", group "controller"
2021-12-29T14:22:34+09:00: Evaluation status changed: "pending" -> "complete"
==> 2021-12-29T14:22:34+09:00: Evaluation "bbb4d4af" finished with status "complete"
==> 2021-12-29T14:22:34+09:00: Monitoring deployment "b8269ab5"
✓ Deployment "b8269ab5" successful
2021-12-29T14:23:04+09:00
ID = b8269ab5
Job ID = storage-controller
Job Version = 0
Status = successful
Description = Deployment completed successfully
Deployed
Task Group Desired Placed Healthy Unhealthy Progress Deadline
controller 1 1 1 0 2021-12-29T14:33:02+09:00
kazu634@test02% nomad job status storage-controller
ID = storage-controller
Name = storage-controller
Submit Date = 2021-12-29T14:22:33+09:00
Type = service
Priority = 50
Datacenters = dc1
Namespace = default
Status = running
Periodic = false
Parameterized = false
Summary
Task Group Queued Starting Running Failed Complete Lost
controller 0 0 1 0 0 0
Latest Deployment
ID = b8269ab5
Status = successful
Description = Deployment completed successfully
Deployed
Task Group Desired Placed Healthy Unhealthy Progress Deadline
controller 1 1 1 0 2021-12-29T14:33:02+09:00
Allocations
ID Node ID Task Group Version Desired Status Created Modified
a9500c24 84bb93d7 controller 0 run running 6m44s ago 6m14s ago
|
CSIの各ノードで動作させるジョブを起動します。ジョブ定義はこんな感じです:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
| job "storage-node" {
datacenters = ["dc1"]
type = "system"
group "node" {
task "node" {
driver = "docker"
env {
CSI_NODE_ID = "${attr.unique.hostname}"
}
config {
image = "democraticcsi/democratic-csi:latest"
args = [
"--csi-version=1.2.0",
"--csi-name=org.democratic-csi.iscsi",
"--driver-config-file=${NOMAD_TASK_DIR}/driver-config-file.yaml",
"--log-level=debug",
"--csi-mode=node",
"--server-socket=/csi/csi.sock",
]
privileged = true
ipc_mode = "host"
network_mode = "host"
mount {
type = "bind"
target = "/host"
source = "/"
readonly = false
}
}
csi_plugin {
id = "org.democratic-csi.iscsi"
type = "node"
mount_dir = "/csi"
}
template {
destination = "${NOMAD_TASK_DIR}/driver-config-file.yaml"
data = <<EOH
driver: synology-iscsi
httpConnection:
# NASの管理コンソールのプロトコル (http or https)
protocol: http
# NASのIPアドレス
host: 192.168.10.200
# ポート番号 (通常はhttp 5000, https 5001)
port: 5000
# 管理者ユーザーのユーザー名
username: admin
# パスワード
password: Holiday88
# httpsの場合、証明書の検証結果を無視するかどうか(true: 無視する)
allowInsecure: true
# should be uniqe across all installs to the same nas
session: "democratic-csi"
serialize: true
synology:
# choose the proper volume for your system
# ここはNAS上のボリューム名を指定する
volume: /volume1
iscsi:
# NASのIPアドレス
targetPortal: "192.168.10.200"
# for multipath
targetPortals: [] # [ "server[:port]", "server[:port]", ... ]
# leave empty to omit usage of -I with iscsiadm
interface: ""
# NAS側にターゲット作成する際のターゲット名の基準となる名前
baseiqn: "iqn.2000-01.com.synology:ds418.nomad.target-"
# MUST ensure uniqueness
# full iqn limit is 223 bytes, plan accordingly
namePrefix: ""
nameSuffix: ""
# documented below are several blocks
# pick the option appropriate for you based on what your backing fs is and desired features
# you do not need to alter dev_attribs under normal circumstances but they may be altered in advanced use-cases
lunTemplate:
# btrfs thin provisioning
type: "BLUN"
# tpws = Hardware-assisted zeroing
# caw = Hardware-assisted locking
# 3pc = Hardware-assisted data transfer
# tpu = Space reclamation
# can_snapshot = Snapshot
#dev_attribs:
#- dev_attrib: emulate_tpws
# enable: 1
#- dev_attrib: emulate_caw
# enable: 1
#- dev_attrib: emulate_3pc
# enable: 0
#- dev_attrib: can_snapshot
# enable: 1
# btfs thick provisioning
# only zeroing and locking supported
#type: "BLUN_THICK"
# tpws = Hardware-assisted zeroing
# caw = Hardware-assisted locking
#dev_attribs:
#- dev_attrib: emulate_tpws
# enable: 1
#- dev_attrib: emulate_caw
# enable: 1
# ext4 thinn provisioning UI sends everything with enabled=0
#type: "THIN"
# ext4 thin with advanced legacy features set
# can only alter tpu (all others are set as enabled=1)
#type: "ADV"
#dev_attribs:
#- dev_attrib: emulate_tpu
# enable: 1
# ext4 thick
# can only alter caw
#type: "FILE"
#dev_attribs:
#- dev_attrib: emulate_caw
# enable: 1
lunSnapshotTemplate:
is_locked: true
# https://kb.synology.com/en-me/DSM/tutorial/What_is_file_system_consistent_snapshot
is_app_consistent: true
targetTemplate:
auth_type: 0
max_sessions: 0
EOH
}
resources {
cpu = 500
memory = 256
}
}
}
}
|
それではジョブを実行してみます:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| kazu634@test02% nomad job run storage-node.nomad
==> 2021-12-29T14:24:03+09:00: Monitoring evaluation "ed30d050"
2021-12-29T14:24:03+09:00: Evaluation triggered by job "storage-node"
2021-12-29T14:24:03+09:00: Allocation "ee10d0e6" created: node "84bb93d7", group "node"
==> 2021-12-29T14:24:04+09:00: Monitoring evaluation "ed30d050"
2021-12-29T14:24:04+09:00: Evaluation status changed: "pending" -> "complete"
==> 2021-12-29T14:24:04+09:00: Evaluation "ed30d050" finished with status "complete"
kazu634@test02% nomad job status storage-node
ID = storage-node
Name = storage-node
Submit Date = 2021-12-29T14:24:03+09:00
Type = system
Priority = 50
Datacenters = dc1
Namespace = default
Status = running
Periodic = false
Parameterized = false
Summary
Task Group Queued Starting Running Failed Complete Lost
node 0 0 1 0 0 0
Allocations
ID Node ID Task Group Version Desired Status Created Modified
ee10d0e6 84bb93d7 node 0 run running 12m55s ago 12m48s ago
|
Stateful Workloads with Container Storage Interface | Nomad - HashiCorp Learnを参考にして、動作確認をしていきます。
次のようなストレージ定義を作成します:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| id = "mysql"
name = "mysql"
type = "csi"
plugin_id = "org.democratic-csi.iscsi"
capacity_min = "3GiB"
capacity_max = "5GiB"
capability {
access_mode = "single-node-writer"
attachment_mode = "file-system"
}
mount_options {
}
|
これをstorage-mysql.hcl
として保存し、ストレージを作成します:
1
2
| kazu634@test02% nomad volume create storage-mysql.hcl
Created external volume mysql with ID mysql
|
作成したストレージを確認してみます:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| kazu634@test02% nomad volume status
Container Storage Interface
ID Name Plugin ID Schedulable Access Mode
mysql mysql org.democratic-csi.iscsi true <none>
kazu634@test02% nomad volume status mysql
ID = mysql
Name = mysql
External ID = mysql
Plugin ID = org.democratic-csi.iscsi
Provider = org.democratic-csi.iscsi
Version = 1.4.3
Schedulable = true
Controllers Healthy = 1
Controllers Expected = 1
Nodes Healthy = 1
Nodes Expected = 1
Access Mode = <none>
Attachment Mode = <none>
Mount Options = <none>
Namespace = default
Allocations
No allocations placed
|
次のジョブ定義を作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
| job "mysql-server" {
datacenters = ["dc1"]
type = "service"
group "mysql-server" {
count = 1
volume "mysql" {
type = "csi"
read_only = false
source = "mysql"
attachment_mode = "file-system"
access_mode = "single-node-writer"
per_alloc = false
}
network {
port "db" {
static = 3306
}
}
restart {
attempts = 10
interval = "5m"
delay = "25s"
mode = "delay"
}
task "mysql-server" {
driver = "docker"
volume_mount {
volume = "mysql"
destination = "/srv"
read_only = false
}
env {
MYSQL_ROOT_PASSWORD = "password"
}
config {
image = "hashicorp/mysql-portworx-demo:latest"
args = ["--datadir", "/srv/mysql"]
ports = ["db"]
}
resources {
cpu = 500
memory = 1024
}
service {
name = "mysql-server"
port = "db"
check {
type = "tcp"
interval = "10s"
timeout = "2s"
}
}
}
}
}
|
それではジョブを実行します:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
| kazu634@test02% nomad job run mysql.nomad
==> 2021-12-29T14:51:29+09:00: Monitoring evaluation "6278f054"
2021-12-29T14:51:29+09:00: Evaluation triggered by job "mysql-server"
2021-12-29T14:51:29+09:00: Evaluation within deployment: "ecf0f580"
2021-12-29T14:51:29+09:00: Evaluation status changed: "pending" -> "complete"
==> 2021-12-29T14:51:29+09:00: Evaluation "6278f054" finished with status "complete"
==> 2021-12-29T14:51:29+09:00: Monitoring deployment "ecf0f580"
✓ Deployment "ecf0f580" successful
2021-12-29T14:53:29+09:00
ID = ecf0f580
Job ID = mysql-server
Job Version = 0
Status = successful
Description = Deployment completed successfully
Deployed
Task Group Desired Placed Healthy
Unhealthy Progress Deadline
mysql-server 1 4 1 3
2021-12-29T15:03:28+09:00
kazu634@test02% nomad job status mysql-server
ID = mysql-server
Name = mysql-server
Submit Date = 2021-12-29T14:49:15+09:00
Type = service
Priority = 50
Datacenters = dc1
Namespace = default
Status = running
Periodic = false
Parameterized = false
Summary
Task Group Queued Starting Running Failed Complete Lost
mysql-server 0 0 1 3 0 0
Latest Deployment
ID = ecf0f580
Status = successful
Description = Deployment completed successfully
Deployed
Task Group Desired Placed Healthy Unhealthy Progress Deadline
mysql-server 1 4 1 3 2021-12-29T15:03:28+09:00
Allocations
ID Node ID Task Group Version Desired Status Created Modified
8eec5c5c 84bb93d7 mysql-server 0 run running 1m56s ago 1m12s ago
kazu634@test02% nomad alloc status 8eec5c5c
ID = 8eec5c5c-6010-a7e4-c766-951d24de372e
Eval ID = 2f202164
Name = mysql-server.mysql-server[0]
Node ID = 84bb93d7
Node Name = test02
Job ID = mysql-server
Job Version = 0
Client Status = running
Client Description = Tasks are running
Desired Status = run
Desired Description = <none>
Created = 2m8s ago
Modified = 1m24s ago
Deployment ID = ecf0f580
Deployment Health = healthy
Allocation Addresses
Label Dynamic Address
*db yes 192.168.10.82:3306
Task "mysql-server" is "running"
Task Resources
CPU Memory Disk Addresses
4/500 MHz 387 MiB/1.0 GiB 300 MiB
CSI Volumes:
ID Read Only
mysql false
Task Events:
Started At = 2021-12-29T05:53:13Z
Finished At = N/A
Total Restarts = 0
Last Restart = N/A
Recent Events:
Time Type Description
2021-12-29T14:53:13+09:00 Started Task started by client
2021-12-29T14:52:49+09:00 Driver Downloading image
2021-12-29T14:52:49+09:00 Task Setup Building Task Directory
2021-12-29T14:52:45+09:00 Received Task received by client
kazu634@test02% nomad volume status mysql
ID = mysql
Name = mysql
External ID = mysql
Plugin ID = org.democratic-csi.iscsi
Provider = org.democratic-csi.iscsi
Version = 1.4.3
Schedulable = true
Controllers Healthy = 1
Controllers Expected = 1
Nodes Healthy = 1
Nodes Expected = 1
Access Mode = single-node-writer
Attachment Mode = file-system
Mount Options = <none>
Namespace = default
Allocations
ID Node ID Task Group Version Desir
ed Status Created Modified
8eec5c5c-6010-a7e4-c766-951d24de372e 84bb93d7-df8f-7376-3247-88e01498f1a9 mysql-server 0 run
running 2m19s ago 1m35s ago
|
うまく起動しない場合は、/etc/iscsi/nodes/
配下を全て削除して、再度ジョブを実行してください。
うまく起動できたら、初期データの確認とデータの書き込みをします:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| kazu634@test02% mysql -h 192.168.10.82 -u web -p -D i
temcollection
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 50
Server version: 8.0.15 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show tables;
+--------------------------+
| Tables_in_itemcollection |
+--------------------------+
| items |
+--------------------------+
1 row in set (0.00 sec)
mysql> select * from items;
+----+----------+
| id | name |
+----+----------+
| 1 | bike |
| 2 | baseball |
| 3 | chair |
+----+----------+
3 rows in set (0.00 sec)
mysql> INSERT INTO items (name) VALUES ('glove');
Query OK, 1 row affected (0.03 sec)
mysql> select * from items;
+----+----------+
| id | name |
+----+----------+
| 1 | bike |
| 2 | baseball |
| 3 | chair |
| 4 | glove |
+----+----------+
4 rows in set (0.00 sec)
mysql> INSERT INTO items (name) VALUES ('hat');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO items (name) VALUES ('keyboard')
Query OK, 1 row affected (0.00 sec)
mysql> exit
Bye
|
ここでこのジョブを停止してみます:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| kazu634@test02% nomad job stop -purge mysql-server
==> 2021-12-29T15:04:01+09:00: Monitoring evaluation "c30547e6"
2021-12-29T15:04:01+09:00: Evaluation triggered by job "mysql-server"
==> 2021-12-29T15:04:02+09:00: Monitoring evaluation "c30547e6"
2021-12-29T15:04:02+09:00: Evaluation within deployment: "ecf0f580"
2021-12-29T15:04:02+09:00: Evaluation status changed: "pending" -> "complete"
==> 2021-12-29T15:04:02+09:00: Evaluation "c30547e6" finished with status "complete"
==> 2021-12-29T15:04:02+09:00: Monitoring deployment "ecf0f580"
✓ Deployment "ecf0f580" successful
2021-12-29T15:04:02+09:00
ID = ecf0f580
Job ID = mysql-server
Job Version = 0
Status = successful
Description = Deployment completed successfully
Deployed
Task Group Desired Placed Healthy
Unhealthy Progress Deadline
mysql-server 1 4 1 3
2021-12-29T15:03:28+09:00
kazu634@test02% nomad job status mysql-server
No job(s) with prefix or id "mysql-server" found
|
再度このジョブを起動します:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| kazu634@test02% nomad job run mysql.nomad
==> 2021-12-29T15:04:17+09:00: Monitoring evaluation "76147cde"
2021-12-29T15:04:17+09:00: Evaluation triggered by job "mysql-server"
2021-12-29T15:04:17+09:00: Allocation "ba132b91" created: node "84bb93d7", group "mysql-server"
==> 2021-12-29T15:04:18+09:00: Monitoring evaluation "76147cde"
2021-12-29T15:04:18+09:00: Evaluation within deployment: "2b5617ef"
2021-12-29T15:04:18+09:00: Evaluation status changed: "pending" -> "complete"
==> 2021-12-29T15:04:18+09:00: Evaluation "76147cde" finished with status "complete"
==> 2021-12-29T15:04:18+09:00: Monitoring deployment "2b5617ef"
✓ Deployment "2b5617ef" successful
2021-12-29T15:04:45+09:00
ID = 2b5617ef
Job ID = mysql-server
Job Version = 0
Status = successful
Description = Deployment completed successfully
Deployed
Task Group Desired Placed Healthy
Unhealthy Progress Deadline
mysql-server 1 1 1 0
2021-12-29T15:14:44+09:00
|
再度、mysql
に接続すると、データが永続化されていることがわかります (glove
, hat
, keyboard
が存在します):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| kazu634@test02% mysql -h 192.168.10.82 -u web -p -D itemcollection
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.15 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select * from items;
+----+----------+
| id | name |
+----+----------+
| 1 | bike |
| 2 | baseball |
| 3 | chair |
| 4 | glove |
| 5 | hat |
| 6 | keyboard |
+----+----------+
6 rows in set (0.00 sec)
|
以下、実行ください:
nomad job stop -purge mysql-server
nomad volume delete mysql