GeForce1050Ti搭載のGPU物理マシンが3台あるので、
これにDocker環境をあげて機械学習用に使うつもりなのだけど、
せっかく3台あるので前から気になっていた Kubernetes 環境で
立ち上げてみようかと、試してみた。
でも、あまりインストールに関する記事がない..
これからは Kubernetes だ!
とかいう記事はいくつかあるのだけど、
マイナーなTensorFlowとくらべても少ないなあ..
..ということで試行錯誤しながら、
インストール手順を作成してみた。
-----
マスター、ノード2台のマシンが用意されている状態とする。
Proxy Server proxy.server.com:8080 、
NTP Server ntp.server とする。
※動作確認のため、上記マシンとLAN接続されたブラウザが動作するPCが別途必要
以上
これにDocker環境をあげて機械学習用に使うつもりなのだけど、
せっかく3台あるので前から気になっていた Kubernetes 環境で
立ち上げてみようかと、試してみた。
でも、あまりインストールに関する記事がない..
これからは Kubernetes だ!
とかいう記事はいくつかあるのだけど、
マイナーなTensorFlowとくらべても少ないなあ..
..ということで試行錯誤しながら、
インストール手順を作成してみた。
-----
1. 前提
マスター、ノード2台のマシンが用意されている状態とする。
Proxy Server proxy.server.com:8080 、
NTP Server ntp.server とする。
- ホスト名 master
- OS: Ubuntu Server 16.04.3 LTS
- インストール時に Open SSH Server パッケージをチェック追加した最小構成
- IPアドレス:10.1.1.1/24
- sudo 可能なユーザでログイン可能
- ホスト名 node01
- OS: Ubuntu Server 16.04.3 LTS
- インストール時に Open SSH Server パッケージをチェック追加した最小構成
- IPアドレス:10.1.1.2/24
- sudo 可能なユーザでログイン可能
※動作確認のため、上記マシンとLAN接続されたブラウザが動作するPCが別途必要
2. マスターの準備
- master へログイン
- sudo su -
- echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
- sysctl -p
- vi /etc/apt/apt.conf
# 以下の2行を追加
Acquire::https::Proxy "http://proxy.server:8080/";
Acquire::http::Proxy "http://proxy.server:8080/";
- apt update && apt -y upgrade && apt install -y ntpdate
- ntpdate ntp.server
- vi /etc/hosts
# 最終行に以下の2行を追加
10.1.1.1 master
10.1.1.2 node01
- vi ~/.curlrc
# 新規追加
proxy=http://proxy.server:8080/
- curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
- vi /etc/apt/sources.list.d/kubernetes.list
# 新規追加
deb http://apt.kubernetes.io/ kubernetes-xenial main
- apt update && apt install -y docker-engine
- mkdir /etc/systemd/system/docker.service.d
- vi /etc/systemd/system/docker.service.d/http-proxy.conf
# 新規追加、環境変数 NO_PROXY のエントリはネットワーク構成に合わせて変更
[Service]
Environment="HTTP_PROXY=http://solidproxy.exa-corp.co.jp:8080" "HTTPS_PROXY=http://solidproxy.exa-corp.co.jp:8080" "NO_PROXY=localhost,127.0.0.1,10.1.1.0/24,master,node01"
- systemctl daemon-reload
- systemctl restart docker
- docker run hello-world
- aptitude install -y kubelet kubeadm kubectl kubernetes-cni
- vi ~/.bashrc
# 最終行へ追加、環境変数 NO_PROXY のエントリはネットワーク構成に合わせて変更
export http_proxy=http://solidproxy.exa-corp.co.jp:8080
export https_proxy=http://solidproxy.exa-corp.co.jp:8080
export no_proxy=localhost,127.0.0.1,10.1.1.0/24,master,node01
- exit → 一旦rootから抜ける
- sudo su -
- swapoff -a
- free -m
- kubeadm init
# 実行最後にでてくるkubeadmコマンドをコピー(後でnode01上で実行する)
You can now join any number of machines by running the following on each node
as root:
kubeadm join --token xxxxxxxxxxxxxxxxxx10 10.1.1.109:6443 --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- exit
- sudo cp /etc/kubernetes/admin.conf $HOME/
- sudo chown $(id -u):$(id -g) $HOME/admin.conf
- export KUBECONFIG=$HOME/admin.conf
- kubectl get nodes → kubernetes バージョンを確認、ここでは 1.9.0 とする
- kubectl apply -f https://cloud.weave.works/k8s/v1.9/net
3. ノードの準備
- node01 へログイン
- sudo su -
- echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
- sysctl -p
- vi /etc/apt/apt.conf
# 以下の2行を追加
Acquire::https::Proxy "http://proxy.server:8080/";
Acquire::http::Proxy "http://proxy.server:8080/";
- apt update && apt -y upgrade && apt install -y ntpdate
- ntpdate ntp.server
- vi /etc/hosts
# 最終行に以下の2行を追加
10.1.1.1 master
10.1.1.2 node01
- vi ~/.curlrc
# 新規追加
proxy=http://proxy.server:8080/
- curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
- vi /etc/apt/sources.list.d/kubernetes.list
# 新規追加
deb http://apt.kubernetes.io/ kubernetes-xenial main
- apt update && apt install -y docker-engine
- mkdir /etc/systemd/system/docker.service.d
- vi /etc/systemd/system/docker.service.d/http-proxy.conf
# 新規追加、環境変数 NO_PROXY のエントリはネットワーク構成に合わせて変更
[Service]
Environment="HTTP_PROXY=http://solidproxy.exa-corp.co.jp:8080" "HTTPS_PROXY=http://solidproxy.exa-corp.co.jp:8080" "NO_PROXY=localhost,127.0.0.1,10.1.1.0/24,master,node01"
- systemctl daemon-reload
- systemctl restart docker
- docker run hello-world
- aptitude install -y kubelet kubeadm kubectl kubernetes-cni
- vi ~/.bashrc
# 最終行へ追加、環境変数 NO_PROXY のエントリはネットワーク構成に合わせて変更
export http_proxy=http://solidproxy.exa-corp.co.jp:8080
export https_proxy=http://solidproxy.exa-corp.co.jp:8080
export no_proxy=localhost,127.0.0.1,10.1.1.0/24,master,node01
- exit → 一旦rootから抜ける
- sudo su -
- swapoff -a
- free -m
- kubeadm join --token xxxxxxxxxxxxxxxxxx10 10.1.1.109:6443 --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
4. 動作確認
- masterへログイン
- kubectl create namespace sock-shop
- kubectl create -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"
- kubectl describe svc front-end -n sock-shop
# NodePortを確認
Name: front-end
Namespace: sock-shop
Labels: name=front-end
Annotations:
Selector: name=front-end
Type: NodePort
IP: 10.98.214.109
Port:80/TCP
TargetPort: 8079/TCP
NodePort:30001/TCP
Endpoints:
Session Affinity: None
External Traffic Policy: Cluster
Events:
- 動作確認用PCのブラウザから http://10.1.1.1:30001/ を開く
A. 参考
- Kubernetes + kubeadm のインストール方法と紹介(Ubuntu16.04版)
- systemd時代のDockerをProxy環境下で使う
- Kubernetes - Two Steps Installation
- kubeadm init --kubernetes-version=v1.8.0 fail with connection refuse for Get http://localhost:10255/healthz
以上
-----
docker ps すると、もうワケワカラン状態に..
Kubernetes環境だと複雑になりすぎてコッチが困るので、
機械学習の実行環境レベルだと Docker Compose までにしといたほうがいいかもなあ..
0 件のコメント:
コメントを投稿