Translate

2017年12月26日火曜日

Proxy管理下の Ubuntu Server 16.04.3 LTS導入済みマシン2台をつかってKubernetes環境を構築する

GeForce1050Ti搭載のGPU物理マシンが3台あるので、
これに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/ を開く
→weave socksサイトが開いたら成功

A. 参考





以上
-----

docker ps すると、もうワケワカラン状態に..

Kubernetes環境だと複雑になりすぎてコッチが困るので、
機械学習の実行環境レベルだと Docker Compose までにしといたほうがいいかもなあ..



0 件のコメント:

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...