kubespray
kubesprayはAnsibleをベースとしたKubernetesのデプロイツールです。
https://github.com/kubernetes-sigs/kubespray
使用する機会があったので構築手順をメモ書き程度に残したいと思います。
今回はESXi上に5台のマシンを使用したKubernetesクラスタを構築してみました。
構成
役割
node1: master/etcd
node2: master/etcd
node3: master/etcd
node4: node
node5: node
node-mgmt: ansible-playbookを実行するマシン
Linux Distribution
CentOS7.6
- image: CentOS-7-x86_64-DVD-1810.iso
- Minimal Install
Resource
CPU: 2Core
Memory: 2GB
IP address
node1-3: 172.31.20.100 - 172.31.20.102
node4-5: 172.31.20.110 - 172.31.20.111
下準備
README.mdのRequirementsには以下のように記載されているので,各nodeでfirewalldを無効化しておきます。
The firewalls are not managed, you'll need to implement your own rules the way you used to. in order to avoid any issue during deployment you should disable your firewall.
以降の作業は全てnode-mgmtのrootユーザで行います。
kubesprayのcloneと実行用パッケージのインストール
まずはpython3とgitをインストールします。
yum -y update
yum -y install https://centos7.iuscommunity.org/ius-release.rpm
yum -y install python36u python36u-pip git
kubesprayは再現性のためタグを指定してcloneします。
git clone後、pipを使用してrequirements.txt
からpythonパッケージをインストールします。
git clone https://github.com/kubernetes-sigs/kubespray.git -b v2.10.4
cd kubespray
pip3.6 install -r requirements.txt
ansibleは2.8.xだと実行が失敗するようです。
yumでインストールすると2.8.xになるので行わないようにしましょう。
2019/8現在のMasterブランチではRequirementsに以下のような記載があります。
Ansible v2.7.8 (or newer, but not 2.8.x)
ちなみにrequirements.txtの中身は以下です。
ansible==2.7.8
jinja2==2.10.1
netaddr==0.7.19
pbr==5.2.0
hvac==0.8.2
jmespath==0.9.4
ruamel.yaml==0.15.96
hosts.ymlの作成
以下のコマンドでhosts.yml
を作成します。
cp -r inventory/sample inventory/mycluster
declare -a IPS=(172.31.20.100 172.31.20.101 172.31.20.102 172.31.20.110 172.31.20.111)
CONFIG_FILE=inventory/mycluster/hosts.yml python3.6 contrib/inventory_builder/inventory.py ${IPS[@]}
実行後にinventory/mycluster/hosts.yml
が作成されるので、kube-master:
,kube-node:
,etcd:
のhosts:
を編集します。
all:
children:
kube-master:
hosts:
node1:
node2:
node3:
kube-node:
hosts:
node4:
node5:
etcd:
hosts:
node1:
node2:
node3:
その後,構築する環境に合わせてinventory/mycluster/group_vars/all/all.yml
とinventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
を編集しますが,今回はデフォルトのまま構築します。
playbook実行
SSHキーペアを作成し、公開鍵を各ホストに配布します。
ssh-keygen -t rsa -b 4096
ssh-copy-id root@172.31.20.100
以下省略
以下のコマンドでplaybookを実行します。
今回はrootでログインするので-b
オプションは省略しています。
ansible-playbook -i inventory/mycluster/hosts.yml cluster.yml -v
しばらく待てば構築完了です。