まずはKubernetesを立てる
とにもかくにもKubernetesを立てる。
自動化のためにSaltを選択。
いけるとこまで手元のALIENWAREノートPCで頑張る。
メモリ16GBでいけるとこまでいく。
確認バージョン:
# salt --version
salt 2016.11.3 (Carbon)
# kubectl --version
Kubernetes v1.5.2
まずはVagrant
PCにVirtualBoxを入れてVagrantを入れる。
作るVM下記。
名前 | IPアドレス | 備考 |
---|---|---|
salt-master | 192.168.66.21 | Saltマスター用 |
kube-master1 | 192.168.66.22 | Kubernetesマスター用 その内冗長構成にしたい |
kube-minion1 | 192.168.66.24 | Kubernetesミニオン用 |
kube-minion2 | 192.168.66.25 | Kubernetesミニオン用 |
PCのどっかに下記のフォルダを作り、Vagrantfileを配置していく。
vagrant
|- kube-master1
|- kube-minion1
|- kube-minion2
- salt-master
下記のファイルを作っていく。
vagrant/salt-master/Vagrantfileファイル
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "bento/centos-7.3"
config.ssh.insert_key = false
config.vm.provider "virtualbox" do |vb|
vb.name = "salt-master"
vb.memory = "1024"
end
config.vm.hostname = "salt-master"
config.vm.network :forwarded_port, guest: 22, host: 2221, id: "ssh", auto_correct: true
config.vm.network "private_network", ip: "192.168.66.21"
end
load "../yum_Vagrantfile" if File.exist?("../yum_Vagrantfile")
load "../cmd_Vagrantfile" if File.exist?("../cmd_Vagrantfile")
load "../salt_master_Vagrantfile" if File.exist?("../salt_master_Vagrantfile")
vagrant/kube-master1/Vagrantfileファイル
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "bento/centos-7.3"
config.ssh.insert_key = false
config.vm.provider "virtualbox" do |vb|
vb.name = "kube-master1"
vb.memory = "2048"
end
config.vm.hostname = "kube-master1"
config.vm.network :forwarded_port, guest: 22, host: 2222, id: "ssh", auto_correct: true
config.vm.network "private_network", ip: "192.168.66.22"
end
load "../yum_Vagrantfile" if File.exist?("../yum_Vagrantfile")
load "../cmd_Vagrantfile" if File.exist?("../cmd_Vagrantfile")
load "../salt_minion_Vagrantfile" if File.exist?("../salt_minion_Vagrantfile")
vagrant/kube-minion1/Vagrantfileファイル
(vagrant/kube-minion1/Vagrantfileもホスト名とIPアドレスとホストのポート以外は一緒)
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "bento/centos-7.3"
config.ssh.insert_key = false
config.vm.provider "virtualbox" do |vb|
vb.name = "kube-minion1"
vb.memory = "2048"
end
config.vm.hostname = "kube-minion1"
config.vm.network :forwarded_port, guest: 22, host: 2224, id: "ssh", auto_correct: true
config.vm.network "private_network", ip: "192.168.66.24"
end
load "../yum_Vagrantfile" if File.exist?("../yum_Vagrantfile")
load "../cmd_Vagrantfile" if File.exist?("../cmd_Vagrantfile")
load "../salt_minion_Vagrantfile" if File.exist?("../salt_minion_Vagrantfile")
vagrant/yum_Vagrantfileファイル
好みでパッケージ入れる。
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: <<-SHELL
yum update -y
yum install -y net-tools sysstat iotop iftop vim tmux lsof bind-utils strace tcpdump psmisc wget git bash-completion
cp /usr/share/doc/tmux-1.8/examples/vim-keys.conf /root/.tmux.conf
sed -e '$ a set -g prefix C-g' -i /root/.tmux.conf
sed -e '$ a unbind C-b' -i /root/.tmux.conf
yum install -y epel-release
yum clean all
SHELL
end
vagrant/cmd_Vagrantfileファイル
叩いておきたいコマンドがあったらを書いておく。
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: <<-SHELL
systemctl disable NetworkManager
SHELL
end
vagrant/salt_master_Vagrantfileファイル
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: <<-SHELL
yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-1.el7.noarch.rpm
yum clean all
yum install -y salt-master
sed -e '$ a log_level_logfile: info' -i /etc/salt/master
sed -e '$ a default_include: master.d/*.conf' -i /etc/salt/master
mkdir /etc/salt/master.d
touch /etc/salt/master.d/nodegroups.conf
echo -e "nodegroups:\\n kube-master: 'kube-master*'\\n kube-minion: 'kube-minion*'" > /etc/salt/master.d/nodegroups.conf
sed -e "$ a file_roots:\\n base:\\n - /srv/salt" -i /etc/salt/master
mkdir /srv/salt
touch /srv/salt/top.sls
touch /srv/salt/default.sls
sed -e "$ a pillar_roots:\\n base:\\n - /srv/pillar" -i /etc/salt/master
mkdir /srv/pillar
touch /srv/pillar/top.sls
touch /srv/pillar/default.sls
systemctl start salt-master
systemctl enable salt-master
shutdown -r now
SHELL
end
vagrant/salt_minion_Vagrantfileファイル
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: <<-SHELL
yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-1.el7.noarch.rpm
yum clean all
yum install -y salt-minion
sed -e '$ a master: salt-master' -i /etc/salt/minion
sed -e '$ a 192.168.66.21 salt-master' -i /etc/hosts
systemctl start salt-minion
systemctl enable salt-minion
shutdown -r now
SHELL
end
salt-master -> kube-master1,kube-minion1,kube-minion2
の順で vagrant upして VM作る。
Kubernetes立てる
salt-masterで実行
salt-minionの公開鍵を承認。
# salt-key -L
# salt-key -A
# cat /etc/salt/master.d/nodegroups.conf
nodegroups:
kube-master: 'kube-master*'
kube-minion: 'kube-minion*'
Saltでの疎通を確認
# salt -N 'kube-master' test.ping
kube-master1:
True
Stateファイルの配置
# cd /srv/salt/
# git clone https://github.com/YasuhiroOsajima/salt_kubernetes.git
デプロイ
# salt -N 'kube-master' state.sls salt_kubernetes/deploy_kube-master saltenv=base
# salt -N 'kube-minion' state.sls salt_kubernetes/deploy_kube-minion saltenv=base
デプロイされたか確認。
# salt "*" state.request
状況を確認
kube-master1で、
# kubectl get node
NAME STATUS AGE
kube-minion1 Ready 14m
kube-minion2 Ready 13m
Saltを初めて使ったけど、Ansibleみたいに処理経過がコンソールに出てこないから、なんか怖い。
出るように設定できるのかもしれないけど、「Salt」で検索すると塩のことばかり引っかかってきて心が折れた。
「SaltStack」で検索しないといけないけど、ツール自体の名前は「Salt」なのよね、たしか。
次は Kubernetesに ReplicaSetを(また Saltから……)立てて、手始めに Tomcatの辺りから作っていきたいと思う。