概要
KubernetesをUbuntuで構築したい人向けの記事です。
masterとnode1台ずつ構築するところまでの説明を含んでいます。
動作環境
ここではmasterとノードの2サーバーを作成します。
以下のIPアドレス・ホスト名で構築しました。
- master サーバー
ホスト名 master
IPアドレス 192.168.137.20 - node サーバー
ホスト名 node1
IPアドレス 192.168.137.21
バージョン
- OS:Ubuntu 14.04.5 LTS Basic Ubuntu Serverのみをインストール
- Kubernetes:1.3.6
- etcd:3.0.7
- flannel:0.6.1
master側の構築
master側ではkubernetesのapiserverやetcdなどを動作させます。
関連パッケージのインストール
sudo apt-get update
sudo apt-get install build-essential linux-libc-dev bridge-utils git curl ssh unzip golang -y
バイナリの保存先作成
sudo mkdir /opt/bin
ホスト名の登録
sudo sh -c "echo '192.168.137.20 master' >> /etc/hosts"
sudo sh -c "echo '192.168.137.21 node1' >> /etc/hosts"
etcdのインストールと設定
wget https://github.com/coreos/etcd/releases/download/v3.0.7/etcd-v3.0.7-linux-amd64.tar.gz
tar xzvf etcd-v3.0.7-linux-amd64.tar.gz
sudo mv etcd-v3.0.7-linux-amd64/etcd /opt/bin/
sudo mv etcd-v3.0.7-linux-amd64/etcdctl /opt/bin/
sudo ln -s /opt/bin/etcd /usr/local/bin/etcd
sudo ln -s /opt/bin/etcdctl /usr/local/bin/etcdctl
sudo chmod 755 /opt/bin/etcd
sudo chmod 755 /opt/bin/etcdctl
/etc/init/etcd.conf(差分のみを示します。)
29c29
< ETCD_OPTS=""
---
> ETCD_OPTS="--listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://localhost:2379"
flanneldのインストールと設定
wget https://github.com/coreos/flannel/releases/download/v0.6.1/flanneld-amd64
sudo mkdir /opt/flanneld
sudo mv flanneld-amd64 /opt/bin/flanneld
sudo ln -s /opt/bin/flanneld /usr/local/bin/flanneld
sudo chmod 755 /opt/bin/flanneld
flannelで利用するアドレスの範囲を設定
sudo initctl start etcd
etcdctl mk /coreos.com/network/config '{"Network":"172.17.0.0/16"}'
kubernetesのインストールと設定
wget https://github.com/kubernetes/kubernetes/releases/download/v1.3.6/kubernetes.tar.gz
tar xzvf kubernetes.tar.gz
# ビルド済みのバイナリはserverフォルダー以下にtarで固められています
cd kubernetes/server
# kubernetesのバイナリ展開(各アーキテクチャにあったファイルを展開してください。)
tar xzvf kubernetes-server-linux-amd64.tar.gz
sudo cp kubernetes/server/bin/kube-apiserver /opt/bin/
sudo cp kubernetes/server/bin/kube-controller-manager /opt/bin/
sudo cp kubernetes/server/bin/kube-scheduler /opt/bin/
sudo cp kubernetes/server/bin/kube-proxy /opt/bin/
sudo cp kubernetes/server/bin/kubectl /opt/bin/
cd ~
sudo ln -s /opt/bin/kube-apiserver /usr/local/bin/
sudo ln -s /opt/bin/kube-controller-manager /usr/local/bin/
sudo ln -s /opt/bin/kube-scheduler /usr/local/bin/
sudo ln -s /opt/bin/kubectl /usr/local/bin/
sudo ln -s /opt/bin/kube-proxy /usr/local/bin/
sudo cp kubernetes/cluster/ubuntu/master/init_conf/* /etc/init/
sudo cp kubernetes/cluster/ubuntu/master-flannel/init_conf/flanneld.conf /etc/init/
/etc/init/kube-scheduler.conf(差分のみを示します。)
25c25
< KUBE_SCHEDULER_OPTS=""
---
> KUBE_SCHEDULER_OPTS="--master http://master:8080"
/etc/init/kube-controller-manager.conf(差分のみを示します。)
25c25
< KUBE_CONTROLLER_MANAGER_OPTS=""
---
> KUBE_CONTROLLER_MANAGER_OPTS="--address 0.0.0.0 --master http://master:8080"
/etc/init/kube-apiserver.conf(差分のみを示します。)
25c25
< KUBE_APISERVER_OPTS=""
---
> KUBE_APISERVER_OPTS="--address 0.0.0.0 --port 8080 --etcd_servers http://master:2379 --allow_privileged false --service-cluster-ip-range 10.254.0.0/16 --kubelet_port 10250"
/etc/init/flanneld.conf(差分のみを示します。)
24c24
< FLANNEL_OPTS=""
---
> FLANNEL_OPTS="-etcd-endpoints=http://master:2379 -etcd-prefix=/coreos.com/network"
node側の構築
node側ではkubernetesのkubeletを動作させます。
関連パッケージのインストール
sudo apt-get update
sudo apt-get install build-essential linux-libc-dev bridge-utils git curl ssh unzip golang -y
バイナリの保存先作成
sudo mkdir /opt/bin
ホスト名の登録
sudo sh -c "echo '192.168.137.20 master' >> /etc/hosts"
sudo sh -c "echo '192.168.137.21 node1' >> /etc/hosts"
flanneldのインストールと設定
wget https://github.com/coreos/flannel/releases/download/v0.6.1/flanneld-amd64
sudo mkdir /opt/flanneld
sudo mv flanneld-amd64 /opt/bin/flanneld
sudo ln -s /opt/bin/flanneld /usr/local/bin/flanneld
sudo chmod 755 /opt/bin/flanneld
Kubernetesのインストールと設定
wget https://github.com/kubernetes/kubernetes/releases/download/v1.3.6/kubernetes.tar.gz
tar xzvf kubernetes.tar.gz
# ビルド済みのバイナリはserverフォルダーにtarで固められています
cd kubernetes/server
# kubernetesのバイナリ展開(各アーキテクチャにあったファイルを展開してください。)
tar xzvf kubernetes-server-linux-amd64.tar.gz
# kubernetesのバイナリをコピー
# ノードにはkubeletとkube-proxyを入れてください
sudo cp kubernetes/server/bin/kubelet /opt/bin/
sudo cp kubernetes/server/bin/kube-proxy /opt/bin/
cd ~
sudo ln -s /opt/bin/kubelet /usr/local/bin/
sudo ln -s /opt/bin/kube-proxy /usr/local/bin/
# 設定ファイルのコピー
sudo cp kubernetes/cluster/ubuntu/minion-flannel/init_conf/flanneld.conf /etc/init/
sudo cp kubernetes/cluster/ubuntu/minion/init_conf/* /etc/init/
/etc/init/kube-proxy.conf(差分のみを示します)
27c27
< KUBE_PROXY_OPTS=""
---
> KUBE_PROXY_OPTS="--master http://master:8080"
/etc/init/kubelet.conf(差分のみを示します)
25c25
< KUBELET_OPTS=""
---
> KUBELET_OPTS="--address=0.0.0.0 --port=10250 --hostname-override node1 --api-servers http://master:8080"
/etc/init/flanneld.conf(差分のみを示します。)
24c24
< FLANNEL_OPTS=""
---
> FLANNEL_OPTS="-etcd-endpoints=http://master:2379 -etcd-prefix=/coreos.com/network"
Dockerのインストールと設定
インストール
wget -qO- https://get.docker.com/ | sh
flanneldで割り当てられたIPアドレスを適用するために修正します。
参考:http://blog.shippable.com/docker-overlay-network-using-flannel
/etc/init/docker.conf(差分のみを示します。)
3,4c3,4
< start on (filesystem and net-device-up IFACE!=lo)
< stop on runlevel [!2345]
---
> start on started flanneld
> stop on stopping flanneld
41a42,51
> if [ -f /var/run/flannel/subnet.env ]; then
> ## if flannel subnet env is present, then use it to define
> ## the subnet and MTU values
> . /var/run/flannel/subnet.env
> DOCKER_OPTS="$DOCKER_OPTS --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU}"
> else
> echo "Flannel subnet not found, exiting..."
> exit 1
> fi
>
nsenterのインストール
sudo docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
DashBoardの導入
動作テストのため導入します。
wget https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml
# apiサーバーのアドレスとポート番号を指定(docker内で利用されるのでIPアドレス直打ちです。)
sed -ie 's/# - --apiserver-host=http:\/\/my-address:port/- --apiserver-host=http:\/\/192.168.137.20:8080/' kubernetes-dashboard.yaml
kubectl create -f kubernetes-dashboard.yaml
kubectl get noでノードがReadyになっているか、kubectl --namespace=kube-system get poでpodが起動しているかを確認してください。
http://192.168.137.20:8080/ui でアクセスできます。
guestbookを立ち上げる
以下の手順でguestbookをデプロイできます。
masterのターミナルで叩いてください。
wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/examples/guestbook/all-in-one/guestbook-all-in-one.yaml
guestbook-all-in-one.yamlを開きGET_HOSTS_FROMのvalueをenvにしてください。(DNSの設定をしていないため。)
最後にコンテナを配置します。
kubectl create -f guestbook-all-in-one.yaml
http://192.168.137.20:8080/api/v1/proxy/namespaces/default/services/frontend:80/ でアクセスできます。
参考
プログラムの引数周りは公式Fedora向けのページを参考にしました。
http://kubernetes.io/docs/getting-started-guides/fedora/fedora_manual_config/