概要
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アドレスとホスト名を登録します。
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
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
# 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
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
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
# 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の作成