Kubernetes,Helm,Container Repository,Prometheus,Grafana,ElasticSearchなどなど、Kubernetesクラスタを構成するソフトウェアをターンキーでインストールできる IBM Cloud Private Community Edition (以下 ICP-CEとする) の最新版 2.1.0.1 を自宅のサーバーにインストールしてみたので記事にします。
自宅サーバーのスペック
普通の何処にでもあるタワー型のパソコンです。
- CPU: AMD A10-7800 4 Cores
- RAN: 16GB
- Storage: SATA 700GB
- GPU: GeForce GTX 750ti
- NIC: 1Gbps
- OS: Ubuntu Server 16.04.3 LTS (64bit)
上記は、IBM Cloud Knowledge Center / System requirements の ICP-CEのシステム要件をクリアしていなくても進めてしまいます。
Ubuntu 16.04 のダウンロードとインストールをおこなう場合は、https://www.ubuntu.com/download/server からメディアのISOファイルを入手できます。
インストールのパス
IBM Cloud Knowledge Center / IBM Cloud Private 2.1.0 / Installingの導入手順に沿ってICP-CE v2.1.0.1 を導入して稼働を試みましたが、残念ながら、動作しませんでした。 導入は最後まで進むのですが、ICP-CEのポータルが起動しないという問題で、断念しました。
ICP-CE v2.1.0 を導入した後に、IBM Cloud Knowledge Center / IBM Cloud Private 2.1.0 / Upgrading from IBM® Cloud Private-CE Version 2.1.0 to 2.1.0.1に従って、v2.1.0からv2.1.0.1にアップグレードする事で動作させる事が出来ました。
最初からv2.1.0.1を導入してうまくて行かない事に対しては、調べきれてないので、下記を利用して継続して調べて行きますが、今回は問題を避ける形で、先へ進めて行きます。
サポートの情報元
- IBM Cloud Support
- IBM Knowledge Center / IBM Cloud Private
- stack overflow / IBM Cloud Private
- Slack ibm-cloud-tech.slack.com
- IBM developerWorks / Communities / IBM Cloud Private
v2.1.0 インストール
ICP-CEのドキュメントは、既に2.1.0.1用になっているので、以下のQiitaの記事を利用して、インストールとアップグレードを実施しました。
- Qiita IBM Cloud Private: Kubernetesをオンプレミス(IaaS)に導入してみる
- Qiita V2.1.0からV2.1.0.1にマイグレーションしてみた (Kubernetes / IBM Cloud Private)
インストールのポイント
ICP-CEのイントール・マニュアルでは、docker pull ibmcom/icp-inception:2.1.0.1
と記述があるので、ICP-CEはコンテナで動作すると誤解されがちですが、このコンテナは、コンテナホストのLinuxサーバーに、Kubernetesが動作する様に自動設定変更するAnsibleを実行するためのコンテナになっています。 そこで、このインストール用のコンテナからsshでリモートでシェルが実行できる必要があります。また、hosts に書いてある自ホスト名が、127.0.0.1 の行にホスト名を書いてあると、コンテナ自身を指してしまうので、動作しません。
そこで、事前準備として、コンテナからsshの証明書による認証でコンテナのホストにシェルが実行できる様にします。 そして、ホスト名のエントリをループバックアドレスから、外部からアクセスできるNICのアドレスへ変更します。
rootでログイン鍵の生成
takara@rei:~$ sudo -s
[sudo] password for takara:
root@rei:~# su -
root@rei:~# cd
root@rei:~# pwd
/root
root@rei:~# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:N+jSmJSiRyiSVrQDG7124qP+lVGCuP47cpUgGGY8Qig root@rei
The key's randomart image is:
+---[RSA 2048]----+
|++.. |
|E=*.o |
|*+.=.. . |
|.oo*..o. . |
|+o= *.+ S o |
|+. = =o= . . |
| .o +o+ o |
| o.+. . |
|..++o |
+----[SHA256]-----+
自分自身の鍵をauthorized_keysへ追加
以下の手順で鍵を準備します。
root@rei:~/.ssh# cp id_rsa.pub authorized_keys
root@rei:~/.ssh# chmod 0400 authorized_keys
root@rei:~/.ssh# ls -al
total 36
-rw-r--r-- 1 root root 11771 Feb 18 14:19 :
drwx------ 2 root root 4096 Feb 18 14:20 .
drwx------ 3 root root 4096 Feb 18 14:19 ..
-r-------- 1 root root 390 Feb 18 14:20 authorized_keys
-rw------- 1 root root 1679 Feb 18 14:17 id_rsa
-rw-r--r-- 1 root root 390 Feb 18 14:17 id_rsa.pub
-rw-r--r-- 1 root root 222 Feb 18 14:16 known_hosts
テスト
rootユーザーで自身のホストへログインできる事を確認します。 下記の様にssh localhost
でログインできればOKです。
takara@rei:~$ sudo -s
root@rei:~# ssh localhost
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-87-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 packages can be updated.
0 updates are security updates.
*** System restart required ***
Last login: Sun Feb 18 14:22:56 2018 from ::1
hostsの変更
次に、hostsファイルで、自分のホスト名のIPアドレスを変更します。
127.0.0.1 localhost
#127.0.1.1 rei
192.168.1.100 rei
Pythonのインストール
開発環境を作るわけではないので、pyenvを利用しないで、apt-getでpythonをインストールします。
apt-get install python python-pip -y
...
root@rei:~# python --version
Python 2.7.12
カーネル・パラメータの変更
vm.max_map_count
とnet.ipv4.ip_local_port_range
のパラメータを指定します。
root@rei:~# sysctl vm.max_map_count
vm.max_map_count = 65530
root@rei:~# sysctl -w vm.max_map_count=262144
vm.max_map_count = 262144
root@rei:~# echo "vm.max_map_count=262144" | tee -a /etc/sysctl.conf
vm.max_map_count=262144
root@rei:~# sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 60999
root@rei:~# echo 'net.ipv4.ip_local_port_range="10240 60999"' | tee -a /etc/sysctl.conf
net.ipv4.ip_local_port_range="10240 60999"
Docker-CEのインストール
DockerのインストールガイドとUbuntuの情報 を参考にしながら、インストールします。
Ubuntuにバンドル(同梱)されるDockerを削除して、Docher社のリポジトリを追加して、そこからインストールします。
apt-get remove docker docker-engine docker.io
apt-get update
apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88
pub 4096R/0EBFCD88 2017-02-22
Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid Docker Release (CE deb) <docker@docker.com>
sub 4096R/F273FCD8 2017-02-22
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
apt-get update
apt-get install docker-ce
apt-cache madison docker-ce
usermod -aG docker takara
上記の操作で、docker-ceがインストールされるはずです。
root@rei:~# docker --version
Docker version 17.12.0-ce, build c97c6d6
以上でICP-CEをインストールするための準備は完了です。
ICP v2.1.0のインストール
二つのバージョンを順次動作させるので、下記の2つのディレクトリを作成しておきます。
mkdir /opt/ibm-cloud-private-ce-2.1.0
mkdir /opt/ibm-cloud-private-ce-2.1.0.1
DockerHubのICP-CEのページを参照すると、2.1.0と2.1.0.1の両方が存在している事が解ります。 そこで、2.1.0をプルします。
docker pull ibmcom/icp-inception:2.1.0
v2.1.0 の必要ファイルを準備
v2.1.0のディレクトリに移動して、コンテナのclusterディレクトリをコピーします。
cd /opt/ibm-cloud-private-ce-2.1.0
docker run -e LICENSE=accept -v "$(pwd)":/data ibmcom/icp-inception:2.1.0 cp -r cluster /data
これにより、/opt/ibm-cloud-private-ce-2.1.0
に cluster というディレクトリができるので、その中のhosts
とssh_key
を変更します。 下記のhostsファイル中、192.168.1.100 は、インストール用コンテナが設定変更のために、Ansibleでアクセスするアドレスです。必ずIPアドレスである必要があります。 1台に全部インストールするので、全て同じアドレスです。 IPアドレスの後の呪文は2.1.0だけに必要な様です。
hostsの設定
[master]
192.168.1.100 kubelet_extra_args='["--eviction-hard=memory.available<100Mi,nodefs.available<2Gi,nodefs.inodesFree<5%", "--image-gc-high-threshold=100%", "--image-gc-low-threshold=100%"]'
[worker]
192.168.1.100
[proxy]
192.168.1.100 kubelet_extra_args='["--eviction-hard=memory.available<100Mi,nodefs.available<2Gi,nodefs.inodesFree<5%", "--image-gc-high-threshold=100%", "--image-gc-low-threshold=100%"]'
#[management]
#4.4.4.4
ssh_keyの設定
このファイルは、コンテナからNICのIPアドレスを通じてAnsibleで設定を実行するためのものです。 rootの下のid_rsaを上書きコピーします。
root@rei:/opt/ibm-cloud-private-ce-2.1.0.1/cluster# cp /root/.ssh/id_rsa ssh_key
その他
config.yamlは、特に変更しなくても動作するので、デフォルトのままで変更しません。
このファイルの詳細な説明は、Customizing the cluster with the config.yaml fileにあります。
設定変更コンテナの実行
次のコマンドで、コンテナのホストをKubernetesのサーバーに改造してしまいます。
docker run -e LICENSE=accept --net=host -t -v "$(pwd)":/installer/cluster ibmcom/icp-inception:2.1.0.1 install
自宅のサーバーのスペックで、約23分かかりました。 もしも、途中でタイムアウトなどで処理が失敗した場合でも、Ansibleなので冪等性が保証されるので、再度実行する事で、失敗部分を直してくれます。
上記の処理が終了して、10分後くらいに、ポータルは立ち上が立ち上がってきます。 ディスクへの書き込みが多いため、SSDを利用すると、立ち上がりが早いと思います。
動作確認
私の自宅サーバーのIPアドレスで、https://192.168.1.100:8443
に、ユーザーID admin、パスワード admin でログインしてポータルの内容を確認できます。
2.1.0 -> 2.1.0.1 へのアップグレード
このまま、ICP-CEが動作したまま、アップグレードを進めていきます。 今度は、2.1.0.1のバージョンのディレクトリで作業していきます。
アップグレードの作業は、Upgrading from IBM® Cloud Private-CE Version 2.1.0 to 2.1.0.1に従って進めます。
設定ファイルのコピー
バージョン番号を間違えると、動作しなくなるので、注意しながらコンテナ内からコピーを実施します。
docker pull ibmcom/icp-inception:2.1.0.1
cd /opt/ibm-cloud-private-ce-2.1.0.1
docker run -e LICENSE=accept -v "$(pwd)":/data ibmcom/icp-inception:2.1.0.1 cp -r cluster /data
2.1.0の証明書などを2.1.0.1へコピーします。
cd /opt
cp -r ibm-cloud-private-2.1.0/cluster/cfc-certs ibm-cloud-private-2.1.0.1/cluster
cp -r ibm-cloud-private-2.1.0/cluster/cfc-keys ibm-cloud-private-2.1.0.1>/cluster
cp -r ibm-cloud-private-2.1.0/cluster/cfc-components ibm-cloud-private-2.1.0.1/cluster
cp ibm-cloud-private-2.1.0/cluster/hosts ibm-cloud-private-2.1.0.1/cluster
cp ibm-cloud-private-2.1.0/cluster/ssh_key ibm-cloud-private-2.1.0.1/cluster
hostsファイルの編集
今度はIPアドレスだけのスッキリしたファイルに編集します。
[master]
192.168.1.100
[worker]
192.168.1.100
[proxy]
192.168.1.100
#[management]
#4.4.4.4
ssh_keyの設定
前回と同じでコピーします。
root@rei:/opt/ibm-cloud-private-ce-2.1.0.1/cluster# cp /root/.ssh/id_rsa ssh_key
config.yamlの設定
Upgrading from IBM® Cloud Private-CE Version 2.1.0 to 2.1.0.1に従うと、以下2点を有効にまたは追加します。
backup_version: 2.1.0
glusterfs: false
アップグレードの実行
その時点で、実行している v2.1.0を停止させる必要はありません。 そのまま、upgradeを走らせて、アップグレードを進めます。途中、ポータルが使えなくなりますが、アップグレードが完了して暫くすると、ポータルにアクセスできる様になります。 アップグレードは次の3ステップです。
ステップ1 クラスタのアップグレード準備
docker run -e LICENSE=accept --net=host --rm -t -v "$(pwd)":/installer/cluster \
ibmcom/icp-inception:2.1.0.1 upgrade-prepare
ステップ2 Kubernetesのアップグレード
docker run -e LICENSE=accept --net=host --rm -t -v "$(pwd)":/installer/cluster \
ibmcom/icp-inception:2.1.0.1 upgrade-k8s
ステップ3 管理サービスのアップグレード
このステップに17分ほどかかりました。
docker run -e LICENSE=accept --net=host --rm -t -v "$(pwd)":/installer/cluster \
ibmcom/icp-inception:2.1.0.1 upgrade-mgtsvc
アップグレード完了して、5分程度すると、https://192.168.1.100:8443/ に admin/admin でログインできる様になります。
サーバーの起動と停止
サーバーをシャットダウンする際は、以下のコマンドで終了処理を開始します。
init 0
起動は、電源をONする事で、約20分程度でポータルにログインできる様になります。
ICP-CEのポータルページの内容
ダッシュボードで総括的な状態を把握できます。
kubectlを叩かなくても、ブラウザ画面としてkubectl get deploy の内容を参照できます。 kubectlを使ってない人がデザインしたのか、より詳細では一覧性が悪いので、kubectlも併用が良い様な感じがします。
Grafanaの画面です。デフォルトで幾つかのビューが用意されています。
次は、HELMで利用できるカタログです。 Jupyter Noteを利用したいだけなら、これで十分という感じもするくらい、使えそうなものが色々揃っています。
さいごに
ポータルの機能、bluemix(bx)コマンド、kubectlコマンドで操作する方法について、続編を書きたいと思います。