LoginSignup
28
39

More than 3 years have passed since last update.

CentOS7でkubernetesを利用したdockerクラスタを構築する

Last updated at Posted at 2015-11-08

今日は、dockerはサーバ1台で利用するには非常に便利なツールです。しかし、共通でたくさんの人が利用する仕組み(システム)を作るには、もう少し手順が必要です。その一つがGoogleが提供したkubernetes(k8s)です。Redhatが提供するOpenShiftにもコンポーネントとして利用されています。

今日はその構築方法についてまとめました。利用するOSは、CentOS 7になります。

参考ページ

kubernetesのアーキテクチャ

システム構成

kubernetes01 master, node
kubernetes02 node
kubernetes03 node

設定手順

共通の設定

firewalldを止めておきます。

systemctl stop firewalld
systemctl disable firewalld

時刻同期を合わせます

yum install chrony
systemctl start chronyd.service
chronyc sources

サーバ名を登録します

/etc/hosts
192.168.243.51  kubernetes01
192.168.243.52  kubernetes02
192.168.243.53  kubernetes03

※各環境に合わせてください

Kubernetes Masterの設定

必要なサービス・ツールをインストールし、enableにします。

yum install etcd flannel docker-registry docker kubernetes 

for SERVICES in docker.service docker-registry etcd kube-apiserver kube-controller-manager kube-scheduler flanneld 
   do systemctl enable $SERVICES 
done

dockerのREGISTRYにprivate-registryを追加します。

/etc/sysconfig/docker
INSECURE_REGISTRY='--insecure-registry kubernetes01:5000'

kubernetesのAPIサーバの設定をします

/etc/kubernetes/apiserver
KUBE_API_ADDRESS="--address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBE_ETCD_SERVERS="--etcd_servers=http://kubernetes01:2379"

外部から参照できるように0.0.0.0にすることを忘れないようにしてください。

kubernetesのmasterの接続先を設定します

/etc/kubernetes/config
KUBE_MASTER="--master=http://kubernetes01:8080"

kubernetesのnodeを設定します

複数のnodeを設定する場合は、複数並べます。

/etc/kubernetes/controller-manager
KUBELET_ADDRESSES="--machines=kubernetes01,kubernetes02,kubernetes03"

etcdの設定

/etc/etcd/etcd.conf
ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

外部から参照できるように0.0.0.0にすることを忘れないようにしてください。

flannelの設定

etcdと接続する設定を記入します。上で指定した2379ポートを間違わないように記載します。また、/flannel/networkは後で設定しています。
:/etc/sysconfig/flanneld
FLANNEL_ETCD="http://kubernetes01:2379"
FLANNEL_ETCD_KEY="/flannel/network"
FLANNEL_OPTIONS="eth0"

etcdにアップするflannelの設定ファイルです。

/root/flannel-config.json
{
 "Network": "10.100.0.0/16",
 "SubnetLen": 24,
 "SubnetMin": "10.100.50.0",
 "SubnetMax": "10.100.199.0",
 "Backend": {
 "Type": "vxlan",
 "VNI": 1
 }
}

etcdのAPIを使って、前で設定した/flannel/network/configにJSONデータをアップします。

#curl -L http://kubernetes01:2379/v2/keys/flannel/network/config -XPUT --data-urlencode value@/root/flannel-config.json
{"action":"set","node":{"key":"/flannel/network/config","value":"{\n \"Network\": \"10.100.0.0/16\",\n \"SubnetLen\": 24,\n \"SubnetMin\": \"10.100.50.0\",\n \"SubnetMax\": \"10.100.199.0\",\n \"Backend\": {\n \"Type\": \"vxlan\",\n \"VNI\": 1\n }\n}\n","modifiedIndex":6,"createdIndex":6}}

正常に登録できているかは、以下のコマンドで確認できます。

etcdctl -C=http://kubernetes01:2379 ls --recursive
etcdctl -C=http://kubernetes01:2379 get /flannel/network/config

正常に起動することを確認し、念のため再起動しておきます。

systemctl start docker
systemctl start docker-registry
reboot

※再起動する意味は、起動後も正しく動作することを確認するということが大きい理由です。

kubenetes Nodeのインストール

必要なサービスをインストールします。

yum install -y docker kubernetes flannel

for SERVICES in docker.service kubelet kube-proxy flanneld
   do  systemctl enable $SERVICES
done

kubernetes nodeで動かすのは、kubeletサービスになります。

masterに接続するAPIのURLと自分のアドレスを設定します。

/etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME=""
KUBELET_API_SERVER="--api_servers=http://kubernetes01:8080"

外部から参照できるように0.0.0.0にすることを忘れないようにしてください。

dockerの設定

/etc/sysconfig/docker
ADD_REGISTRY='--add-registry kubernetes01:5000'

flannelの設定

masterと同様に設定します。

/etc/sysconfig/flanneld
FLANNEL_ETCD="http://kubernetes01:4001"
FLANNEL_ETCD_KEY="/flannel/network"
FLANNEL_OPTIONS="eth0"

各サービスの確認

うまく設定できればこのようにすべての接続先ノードが見えるはずです。

# kubectl get nodes
NAME           LABELS                                STATUS
kubernetes01   kubernetes.io/hostname=kubernetes01   Ready
kubernetes02   kubernetes.io/hostname=kubernetes02   Ready
kubernetes03   kubernetes.io/hostname=kubernetes03   Ready

ちなみに、OpenShiftでは、flannelを使用していないそうです。flannelでは、latencyが大きくなる傾向があるそうで、Open vSwitchを利用し、VXLANのoverlayネットワークを構成しているようです。

今日はここまでです。

28
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
39