できる!kickstartとansible!

23
でででKickstart で Ansible 株株 株株株株株株 () 株株株株株株株株株株株 株株株 UniStudy#1 株株株株株株株 LT 株株株

Upload: wataru-noguchi

Post on 12-Apr-2017

937 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: できる!KickstartとAnsible!

できる!KickstartとAnsible!

(株)ユニキャストソフトウェアエンジニア 野口航

UniStudy#1 フリースタイル LT @日立市

Page 2: できる!KickstartとAnsible!

お前誰? : 野口航 (@wnoguchi)

しがないソフトウェアエンジニア( 29 歳) 茨城県日立市在住 「最近太った?」とよく言われるようになった DevOps へ取組み 株式会社ユニキャスト所属 シェアハウス「コクリエ」に居住 通勤 15 秒 夢はユーザ企業、とうきょうぐらし!

Page 3: できる!KickstartとAnsible!

もくじ 自動化するモチベーション Kickstart とは Kickstart してみる 構成管理ツールとは Ansible とは Ansible してみる

Page 4: できる!KickstartとAnsible!

インフラの構築を自動化するモチベーション 物理サーバが増える 毎回同じ手順 仮想マシンもどんどん増える Hadoop に代表されるビッグデータを扱うものでは同じような IA サーバをたくさん( 100 台単位とか)用意する 人がまともにやると過労になる 手順書だとミスも増える

Page 5: できる!KickstartとAnsible!

Kickstartとは

RHEL 系 OS のインストールを自動化するツール Debian 系は Preseed が有名 私の Preseed 記事結構有名なので良かったら見てね★

Preseed による Ubuntu の自動インストール入門 – Qiitahttp://goo.gl/s6SavA

Page 6: できる!KickstartとAnsible!

Kickstartしてみる (cont.)

ISO をマウントmount -o loop /var/tmp/CentOS-7-x86_64-Minimal-1503-01.iso /mnt/media/centosDVD の中身をすべてコピーfind /var/tmp/CentOS-7-x86_64-Minimal-1503-01.iso /mnt/media/centos -maxdepth 1 -mindepth 1 -exec cp -rp {} /var/tmp/CentOS-7-x86_64-Minimal-1503-01-ks \;

Page 7: できる!KickstartとAnsible!

Kickstartしてみる (cont.)

timeout 50

label linux menu label ^Install CentOS 7 kernel vmlinuz menu default append initrd=initrd.img inst.stage2=cdrom inst.text inst.ks=http://192.168.0.10/ks.cfg

Kickstart の構成ファイルを外に定義するvim isolinux/isolinux.cfg

Page 8: できる!KickstartとAnsible!

Kickstartしてみる (cont.)

sudo cp /vagrant/ks.cfg /var/tmp/CentOS-7-x86_64-Minimal-1503-01-ks

mkisofs -v -r -J -o /var/tmp/CentOS-7-x86_64-Minimal-1503-01-ks.iso \ -b isolinux/isolinux.bin \ -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ /var/tmp/CentOS-7-x86_64-Minimal-1503-01-ks

sudo cp /var/tmp/CentOS-7-x86_64-Minimal-1503-01-ks.iso /vagrant

ISO イメージを錬成

錬金術 - Wikipediahttps://goo.gl/uYXiag

Page 9: できる!KickstartとAnsible!

Kickstartしてみる (cont.)

auth --enableshadow --passalgo=sha512

# Use CDROM installation mediacdrom# Use graphical installtext# Run the Setup Agent on first bootfirstboot --enableignoredisk --only-use=sda# Keyboard layoutskeyboard --vckeymap=jp --xlayouts='jp'# System languagelang ja_JP.UTF-8firewall --disabledselinux --disabled

# Accept Eulaeula --agreedreboot --eject

# Network information# Intranetwork --bootproto=static --device=enp0s25 --gateway=192.168.0.1 --ip=192.168.0.120 --nameserver=8.8.8.8,8.8.4.4 --netmask=255.255.255.0 --ipv6=auto --activate --hostname=phy1.pg1x.internal# Root passwordrootpw --iscrypted blahblahblah# System servicesservices --enabled="chronyd"# System timezonetimezone Asia/Tokyo --isUtc --ntpservers=0.centos.pool.ntp.org,1.centos.pool.ntp.org,2.centos.pool.ntp.org,3.centos.pool.ntp.org,ntp.jst.mfeed.ad.jp

Kickstart ファイルサンプル

Page 10: できる!KickstartとAnsible!

Kickstartしてみる (cont.)

user --groups=wheel --name=wnoguchi --password=blahblahblah -iscrypted --gecos="wnoguchi"# System bootloader configurationbootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda

# Partition clearing informationclearpart --all --initlabel --drives=sda

# Disk partitioning informationpart /boot --fstype="xfs" --ondisk=sda --size=500

part pv.241 --fstype="lvmpv" --ondisk=sda --size=1905893

volgroup centos_phy1 --pesize=4096 pv.241

logvol / --fstype="xfs" --size=1899872 --name=root --vgname=centos_phy1

logvol swap --fstype="swap" --size=6016 --name=swap --vgname=centos_phy1

Kickstart ファイルサンプル

Page 11: できる!KickstartとAnsible!

Kickstartしてみる (cont.)

%packages@corechronykexec-tools

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

%post --log=/root/post_install.logyum -y update%end

Kickstart ファイルサンプル

Page 12: できる!KickstartとAnsible!

Kickstartしてみる (cont.)実行してみよう

Page 13: できる!KickstartとAnsible!

Kickstartしてみる (cont.)実行してみよう

Page 14: できる!KickstartとAnsible!

Kickstartしてみる実行してみよう

Page 15: できる!KickstartとAnsible!

構成管理ツールとは サーバーの状態を管理するツール どんなアプリケーションが入っているかを定義する どのような設定となっているかを定義する DSL で記述したりして Git 等の VCS で差分を管理できる どこを変更したか一目瞭然 GitLab 等のツールでレビューしやすい Chef, Ansible, Puppet 等がある これとは逆に状態を保持しない、壊れることを前提としたコンテナ型のアーキテクチャを Immutable Infrastructure という (Docker, LXC, OpenVZ 等 )

Page 16: できる!KickstartとAnsible!

Ansibleとは

Python で書かれたサーバの構成管理を自動化するツール 基本的な最小限のセットアップ(ネットワーク、 SSH 公開鍵のセット、プロビジョニングユーザの作成)は Kickstart でやって、その後のアプリケーションのインストールは Chef, Ansible 等の構成管理ツールにまかせる Python はどのディストリビューションにもデフォルトでインストールされているので、エージェントレスでプロビジョニング可能 Yaml でシンプルに記述可能 Chef Zero (旧 Chef Solo )は Ruby が必要、エージェントのインストール必須なので、本腰を入れて Web サービス等を構築するモチベーションがないとつらい

Page 17: できる!KickstartとAnsible!

Ansibleしてみる (cont.)インベントリファイルで実行する対象のホストを定義

vim /etc/ansible/hosts

Page 18: できる!KickstartとAnsible!

Ansibleしてみる (cont.)

$ ansible all -a "/bin/date"

単体で実行

すべてのホストに対して同じ命令を書くのに便利

$ ansible all -m yum -a "name=httpd state=present" -s

Page 19: できる!KickstartとAnsible!

Ansibleしてみる (cont.)

- hosts: 192.168.33.11# var: remote_user: vagrant sudo: yes tasks: - name: install EPEL Repository yum: name=epel-release state=present - name: install httpd yum: name=httpd state=present - name: install php yum: name=php state=present notify: - restart httpd - name: disable selinux selinux: state=disabled - name: show date command: date handlers: - name: restart httpd service: name=httpd state=restarted

Playbook サンプル ~サーバの構成をまとめて書く~

Page 20: できる!KickstartとAnsible!

Ansibleしてみる (cont.)

$ ansible-playbook playbook.yml

サンプル実行

Page 21: できる!KickstartとAnsible!

Ansibleしてみる

$ ansible-playbook playbook.yml

冪等性(べきとうせい)の確認

Page 22: できる!KickstartとAnsible!

この先のモチベーション

PullRequest がマージされたタイミングで ansible-playbook コマンドを実行すると便利 PullRequest がマージされたタイミングで自動で ISO イメージを作成して特定のサーバ(例えば Amazon S3 とか)に最新のものを置いてくれると便利

Jenkins 先生との融合

Page 23: できる!KickstartとAnsible!

ご清聴ありがとうございました。