Docker
kubernetes

Kubernetesでクラスタ環境構築手順(1) - masterの作成

More than 1 year has passed since last update.


概要

Kubernetesの環境構築手順です。


Kubernetesとは

Kubernetesとは、Dockerなどの仮想コンテナのクラスタリングを行うためのサービスです。

詳しくはこちらを参照してください。


事前準備

まず、master用に1台、node用に最低1台、サーバーを用意する必要があります。

今回は、vagrantを2つ、master, node用に用意をして構築をしました。


目次


  1. Kubernetesでクラスタ環境構築手順(1) - masterの作成

  2. Kubernetesでクラスタ環境構築手順(2) - nodeの作成

この記事はmasterの構築手順です。

nodeの作成手順は上記目次の2番になります。

この記事で、手順で特に指定がないものは、全てmasterサーバーで実行してください。


masterの環境


  • CentOS7.1

  • Kubernetes v1.5.2

  • flanneld 0.7.1

  • etcdserver 3.1.9

  • etcdcluster 3.1.0

  • Docker version 1.12.6, build 88a4867/1.12.6


kubernetesのアーキテクチャ

kubernetesを構成するコンポーネントです。

component
desc

apiserver
kubernetesを操作するためのAPIを提供する

controller-manager
コンテナの状態管理やノードの管理と言った各種管理作業を行う

proxy
コンテナへのネットワークルーティングおよび負荷分散を行う

scheduler
各ノードに対しコンテナの割り当てなどを行う

kubelet
各ノード上でのコンテナ作成/削除やボリュームの割り当てなどを行う

kubectl
API経由でKubenetesを操作するためのクライアントツール

引用元:kubernetesによるDockerコンテナ管理入門


flannelとetcdについて

これらの2つを使って、コンテナ間で通信するための内部ネットワークが作られます。

flannelはetcdを使うので、まず先にetcdが起動している必要があります。

名前
説明

ectd
Flannelが各種情報を格納するKeyValueストア

flannel
コンテナ間で通信するための内部ネットワークを作る

参考記事:Kubernetesの分散環境を支えるetcdとflannel


host名の設定

Kubernetesは、node間通信で、マシンのホスト名を利用できるように、

/etc/hostsにIPアドレスとホスト名を登録します。


/etc/hosts

192.168.33.10 master



インストール

etcd, kubernetes, flannelをインストールします。

$ sudo yum -y install etcd kubernetes flannel


etcdの設定

kubernetesやflannelはその設定管理にetcdを使用します。

そのため、まずetcdの設定を行ってサービスを起動しておく必要があります。

etcdのデフォルト設定ではローカルホストからしかetcdにアクセスできないようになっているので、外部から接続できるようにします。

$ sudo vi /etc/etcd/etcd.conf


/etc/etcd/etcd.conf

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"

$ sudo systemctl start etcd


flannelの設定

仮想ネットワークを利用するためにflannelの設定を行います。

etcdctlコマンドでflannelが使用する仮想ネットワークのIPアドレスを指定します。

$ sudo etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'

$ sudo  systemctl start flanneld


kubernetesの設定

Kubernetesの設定をします。


RSA鍵の発行

opensslコマンドを使用して、kubernetesのAPI認証に使用される鍵ファイルを/etc/kubernetes/serviceaccount.keyとして作成します。

$ sudo openssl genrsa -out /etc/kubernetes/serviceaccount.key 2048


マスターサーバーの指定

/etc/kubernetes/configファイルでkubernetesのマスターサーバーを指定します。

$ sudo vi /etc/kubernetes/config


/etc/kubernetes/config

# How the controller-manager, scheduler, and proxy find the apiserver

KUBE_MASTER="--master=http://192.168.33.10:8080"


自マシンのホスト名とAPI Serverの設定

/etc/hostsに設定した、ホスト名と、API Serverの設定をします。

$ sudo vi /etc/kubernetes/kubelet


/etc/kubernetes/kubelet

KUBELET_HOSTNAME="--hostname-override=master"

KUBELET_API_SERVER="--api-servers=http://192.168.33.10:8080"


API Serverの設定

KUBE_API_ADDRESSにマスターサーバーのIPアドレスを指定します。

KUBE_API_ARGSに作成したRSA鍵のパスを指定します。

--insecure-bind-address を使っているのはローカルの通信を想定しているため。

ローカルでない場合は、 --address を使う。

KUBE_API_ARGS には先ほど生成したRSA鍵のパスを指定します。

$ sudo vi /etc/kubernetes/apiserver


/etc/kubernetes/apiserver

KUBE_API_ADDRESS="--insecure-bind-address=192.168.33.10"

KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.33.10:2379"
KUBE_API_ARGS="--service_account_key_file=/etc/kubernetes/serviceaccount.key"


controller-manager

/etc/kubernetes/controller-managerにも、同様に鍵ファイルの指定をします。

$ sudo vi /etc/kubernetes/controller-manager


/etc/kubernetes/controller-manager

# Add your own!

KUBE_CONTROLLER_MANAGER_ARGS="--service_account_private_key_file=/etc/kubernetes/serviceaccount.key"


色々起動

色々起動します。

$ sudo systemctl start kube-apiserver

$ sudo systemctl start kube-controller-manager
$ sudo systemctl start kube-scheduler
$ sudo systemctl start kube-proxy
$ sudo systemctl start kubelet

自動起動設定

$ sudo systemctl enable flanneld

$ sudo systemctl enable etcd
$ sudo systemctl enable kube-apiserver
$ sudo systemctl enable kube-controller-manager
$ sudo systemctl enable kube-scheduler
$ sudo systemctl enable kube-proxy
$ sudo systemctl enable kubelet


kubectlコマンドの設定

kubectlコマンドで設定をします。

こちらの設定は、ユーザーごとに作られるので、Kubernetesを操作する一般ユーザーで実行してください。

ちなみに、kubectlコマンドは設定ファイルとして~/.kube/configファイルを参照するので、kubectlコマンドを使用せず、手動で~/.kube/configを作成することもできます。

$ kubectl config set-cluster vagrant --server=http://master:8080

$ kubectl config set-credentials vagrant-admin --username=admin --password=admin
$ kubectl config set-context vagrant --cluster=vagrant --user=vagrant-admin
$ kubectl config use-context vagrant

設定内容確認

$ kubectl config view

apiVersion: v1
clusters:
- cluster:
server: http://master:8080
name: vagrant
contexts:
- context:
cluster: vagrant
user: vagrant-admin
name: vagrant
current-context: vagrant
kind: Config
preferences: {}
users:
- name: vagrant-admin
user:
password: admin
username: admin


クラスタの情報を確認

$ kubectl cluster-info

Kubernetes master is running at http://master:8080

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.


nodeの情報を確認。

masterができていることが確認できます。

$ kubectl get nodes

NAME STATUS AGE
master Ready 6m


firewallの設定

nodeとの通信のために、2379番, 8080番のポートを開ける。

$ sudo firewall-cmd --add-port=2379/tcp --zone=public --permanent

$ sudo firewall-cmd --add-port=8080/tcp --zone=public --permanent
$ sudo firewall-cmd --reload

次項: Kubernetesでクラスタ環境構築手順(2) - nodeの作成


参考