LoginSignup
89
90

More than 3 years have passed since last update.

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

Last updated at Posted at 2017-08-03

概要

Kubernetesの環境構築手順です。

Kubernetesとは

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

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

この記事はmasterの構築手順です。
nodeの作成手順は以下になります。
Kubernetesでクラスタ環境構築手順(2) - nodeの作成

目次

事前準備

まず、master用に1台、node用に最低1台、サーバーを用意する必要があります。
今回は、vagrantを2つ、master, node用に用意をして構築をしました。

このページで、手順で特に指定がないものは、全て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の作成

参考

89
90
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
89
90