WorkerはKubernetesでいうところの Node になります。
Knowledge centerは下記のように説明されています。
ワーカー・ノードは、タスクを実行するためのコンテナー化された環境を提供するノードです。 要求の増加に伴い、ワーカー・ノードをクラスターに簡単に追加して、パフォーマンスおよび効率性を向上させることができます。 1 つのクラスターには任意の数のワーカー・ノードを含めることができますが、少なくとも 1 つのワーカー・ノードが必要です。
"簡単に追加"とあるのでさっそく簡単に追加してみましょう。
既存環境
VAの追加と同じ環境です。
サーバースペックは同じもので2台のサーバーがあります。
OS | RedHat Endterprise Linux 7.4 |
物理/仮想 | 仮想 |
CPU(Core) | 8 |
Memory | 24GB |
Disk | 300GB |
NIC | 1つ |
Master ServerとWorker Serverが1台ずつあります。 ICPのバージョンは3.1.1になります。
以前、投稿した手順は3.1.0になります。3.1.1でも同様の手順でインストールできます。
また、この手順は3.1.0でも同様の作業内容になりますので、記載されているバイナリ名や、設定名等、 3.1.1 となっている部分は 3.1.0 と読み替えて手順を実施してください。
事前準備
WorkerやVAにするノードを準備します。
今回も既存環境と同じスペックのRHELの仮想マシンと同じものを用意します。
※Workerは x86_64 のLinuxサーバーだけでなく、Linux on Power や Linux on IBM Z でも動作させることができます。 動作環境の詳細は下記をご参照ください。
https://www.ibm.com/support/knowledgecenter/en/SSBS6K_3.1.1/supported_system_config/supported_os.html
追加するノード
追加するノードは下記になります。
Host name | IP | 作業ユーザー | 追加するノードの種類 |
---|---|---|---|
icp-poc-workeradd1.icp.local | xxx.xxx.xxx.167 | root | Worker |
追加ノードで行う作業
追加ノードで行う作業はVAの追加と同じです。 追加するノードでは下記の事を行います。
- 通信ポートの確認
- SE Linux の無効化、Firewallの無効化
- /etc/hostsを設定
- 時刻の同期
- Python のインストール(の確認)
- Dockerのインストール
- (後から作業) sshサービスの再起動
通信ポートの確認
下記コマンドを実行してなにも表示されないことを確認します。
ss -tnlp | awk '{print $4}' | egrep -w "8001|8500|3306"
SE Linux の無効化、Firewallの無効化
SE LinuxとFirewallを無効化します。
SE Linuxは /etc/selinux/config をdisableに変更します。
Firewallは下記のコマンドを実行します。
systemctl stop firewalld systemctl disable firewalld
/etc/hostsを設定
クラスターに存在するすべてのノード(Master/Worker/VA/Management/Proxy)を /etc/hosts に指定します。
前
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 xxx.xxx.xxx.161 icp-poc-master1.icp.localxxx.xxx.xxx.164 icp-poc-worker1.icp.local
後
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 xxx.xxx.xxx.161 icp-poc-master1.icp.localxxx.xxx.xxx.164 icp-poc-worker1.icp.localxxx.xxx.xxx.167 icp-poc-workeradd1.icp.local
時刻の同期
追加するノードと既存のサーバー群と時刻の差が出ないように時刻同期を行います。
時刻同期方法は各Linuxのドキュメントをご確認ください。
RHELで時刻、時刻同期の設定の確認は下記コマンドでできます。
# timedatectl
Local time: Tue 2019-01-08 11:01:18 JST
Universal time: Tue 2019-01-08 02:01:18 UTC
RTC time: Tue 2019-01-08 02:01:17
Time zone: Asia/Tokyo (JST, +0900)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
Python のインストール(の確認)
Pythonがインストールされていることを確認します。
# python --versionPython 2.7.5
サポートされているPythonのバージョンは、2.6,2.7,3.5以上になります。
Dockerのインストール
Dockerをインストールします。DockerのバイナリーはIBM社から提供されています。
- IBM Cloud Private 3.1.1 Docker for Linux (x86_64) (CNXD2EN )
size: 141MB
このファイルをノード上にコピーし実行します。
cd /(ファイルをコピーした場所) ./icp-docker-18.03.1_x86_64.bin --install
※このとき、内部で別のコンポーネントをyumでインストールします。
dockerが自動起動されるように設定します。
systemctl start dockersystemctl enable docker
(後から作業) sshサービスの再起動
既存のMaster ServerからSSH Keyをコピーした後にSSH Serviceの再起動を行います。
後述の手順内で再度ご案内します。
Master Serverで行う作業
実際のインストール作業については既存のMaster Serverから行います。
- SSH Keyのコピー
- (後から作業) sshサービスの再起動
- バイナリーファイルの確認
- Workerの追加
SSH Keyのコピー
Master Server上からノードにSSH Keyをコピーします。
ssh-copy-id -i ~/.ssh/id_rsa.pub <user>@<node_ip_address>
今回は、下記の情報を使ってコマンドを実行します。
user | node_ip_address |
---|---|
root | xxx.xxx.xxx.167 |
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xxx.xxx.xxx.167
!!!ノードで作業!!! sshサービスの再起動
ノード上でSSH Serviceを再起動します。
systemctl restart sshd
バイナリーファイルの確認
下記にLinux用のバイナリーファイルがあることを確認します。
インストールパスを変更している場合は適宜読み替えてください。
Path | File name |
---|---|
/opt/ibm-cloud-private-3.1.1/cluster/images | ibm-cloud-private-x86_64-3.1.1.tar.gz |
コマンド
# ls /opt/ibm-cloud-private-3.1.1/cluster/imagesibm-cloud-private-x86_64-3.1.1.tar.gz
Workerの追加
Workerの追加は下記のコマンドを参考に実行します。
docker run -e LICENSE=accept --net=host \
-v "$(pwd)":/installer/cluster \
ibmcom/icp-inception-$(uname -m | sed 's/x86_64/amd64/g'):3.1.1-ee worker -l \
ip_address_workernode1,ip_address_workernode2
IPアドレス xxx.xxx.xxx.167 をWorkerとして追加しますので、実行するコマンドは下記になります。
cd /opt/ibm-cloud-private-3.1.1/cluster
docker run -e LICENSE=accept --net=host \
-v "$(pwd)":/installer/cluster \
ibmcom/icp-inception-$(uname -m | sed 's/x86_64/amd64/g'):3.1.1-ee worker -l \
xxx.xxx.xxx.167
これでWorkerの追加は完了です!追加の流れはVAの追加とほとんど変わりません。VAの追加よりも簡単です。
事前準備さえできればすぐ追加できます。
次に本当に追加されているかと動作を簡単に確認してみたいと思います。
管理コンソール上での確認
管理コンソールのメニューから[プラットホーム]-[ノード]とたどっていただくと登録されているノードが表示されます。
ここでWorkerとして追加したノードが表示されていることを確認できます。
動作確認
次に実際にPodが追加したWorker上にスケジュール(動作)するか確認してみます。
※ KubernetesではPodのスケジューリングはWorker上の負荷を考慮して自動的に行われます。
このテストでは新しいWorkerに配置されてほしいので、Podが特定のWorkerに配置されるように仕込みをしたyamlファイルでデプロイします。
ラベルの作成
追加した Worker にラベルを付与し、そのラベルをもつWorkerに対してPodをデプロイするように指定します。
ICP MasterサーバーにSSHでログインし、Kubernetes Clusterにログインします。
# cloudctl login -a https://mycluster.icp:8443 --skip-ssl-validation
Username> admin
Password>
Authenticating...
OK
Targeted account mycluster Account (id-mycluster-account)
Select a namespace:
1. cert-manager
2. default
3. ibmcom
4. istio-system
5. kube-public
6. kube-system
7. microclimate-pipeline-deployments
8. microclimate-space
9. platform
10. services
Enter a number> 6
Targeted namespace kube-system
Configuring kubectl ...
Property "clusters.mycluster" unset.
Property "users.mycluster-user" unset.
Property "contexts.mycluster-context" unset.
Cluster "mycluster" set.
User "mycluster-user" set.
Context "mycluster-context" created.
Switched to context "mycluster-context".
OK
Configuring helm: /root/.helm
OK
※クラスター名を mycluster.icpから変更している場合は変更した値で実行してください。
Workerのリストを確認します。
# kubectl get nodes
NAME STATUS ROLES AGE VERSION xxx.xxx.xxx.161 Ready etcd,management,master,proxy 5d v1.11.3+icpee xxx.xxx.xxx.164 Ready worker 5d v1.11.3+icpee xxx.xxx.xxx.167 Ready worker 3d v1.11.3+icpee
追加したWorkerは xxx.xxx.xxx.167 になりますので、このNodeに対してラベルを付与します。
付与するラベルは workertest=deploy としています。
# kubectl label node xxx.xxx.xxx.167 workertest=deploy
ラベルを確認します。
# kubectl -L=workertest get nodes
NAME STATUS ROLES AGE VERSION WORKERTEST xxx.xxx.xxx.161 Ready etcd,management,master,proxy 5d v1.11.3+icpee xxx.xxx.xxx.164 Ready worker 5d v1.11.3+icpee xxx.xxx.xxx.167 Ready worker 5d v1.11.3+icpee deploy
xxx.xxx.xxx.167 にラベルの値 deploy が付与されていることを確認します。
yamlファイルの作成
次にyamlファイルを2つ作成します。
- ファイル名 : test-all.yaml
- ファイル名 : test-add_only.yaml
それぞれの用途は下記になります。
ファイル名 | 用途 |
---|---|
test-all.yaml | すべてのWorkerを対象としてPodをデプロイ |
test-add_only.yaml | 追加したWorkerに対してだけPodをデプロイ |
この2つのYamlを使って、追加したWorkerが利用できることと、既存のWorkerと一緒に動作し分散されることを確認します。
test-all.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: allnode-deploymentspec:
replicas: 5
selector:
matchLabels:
app: allnode
template:
metadata:
labels:
app: allnode
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80
test-add_only.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: workeraddtest-deployment
spec:
replicas: 5
selector:
matchLabels:
app: addworkeronly
template:
metadata:
labels:
app: addworkeronly
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80
nodeSelector:
workertest: deploy
deploymentの作成
yamlファイルからDeploymentを作成します。
NameSpace(名前空間)を default に変更します。
# cloudctl login -a https://mycluster.icp:8443 -n default --skip-ssl-validation
Username> admin
Password>
Authenticating...
OK
Targeted account mycluster Account (id-mycluster-account)
Targeted namespace default
Configuring kubectl ...
Property "clusters.mycluster" unset.
Property "users.mycluster-user" unset.
Property "contexts.mycluster-context" unset.
Cluster "mycluster" set.
User "mycluster-user" set.
Context "mycluster-context" created.
Switched to context "mycluster-context".
OK
Configuring helm: /root/.helm
OK
PodやDeploymentが存在しないことを確認します。
# kubectl get deployments
No resources found.
# kubectl get pods
No resources found.
追加したWorkerにデプロイ
追加したWorkerにだけデプロイするyaml (test-add_only.yaml)をデプロイします。
# kubectl apply -f test-add_only.yaml
deployment.apps/allnode-deployment created
Deploymentが作成されていることを確認します。
# kubectl get deployment
Podを確認します。
# kubectl get pods -o wide
NODEの値がすべて xxx.xxx.xxx.167 となっており、すべてのPodが追加されたWorker上で動作しています。
すべてのWorkerにデプロイ
最後にデプロイするWorkerを指定していない yamlファイルからDeploymentを作成し、ICPが自動でWorkerを分散してPodを作成することを確認します。
# kubectl apply -f test-all.yaml
deployment.apps/allnode-deployment created
Deploymentが作成されていることを確認します。
# kubectl get deployment
Podを確認します。
# kubectl get pods -o wide
allnode-で始まるPodがすべてのWorkerにデプロイする設定としたPodです。
NODEの値に xxx.xxx.xxx.164 がありますので、既存であったWorkerと追加したWorkerどちらも利用してデプロイしていることが確認できます。
今回は以上になります。
後半の動作確認でいくつか実施していることがありますが、Workerの追加だけであればかなりシンプルに実施できることを実感していただけるかと思います。
動作確認で利用したyamlファイルは下記になります。
(毎度の)最後に
IBM Cloud PrivateのPoC環境の貸し出しも実施しています。
https://www.networld.co.jp/product/ibm-hardware/trial/
Worker追加用の仮想マシンの用意もできますのでぜひぜひご利用ください。
すずきけ