Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

できる!KickstartとAnsible!

1,781 views

Published on

UniStudy#1 LT資料。

Published in: Technology

できる!KickstartとAnsible!

  1. 1. できる! Kickstartと Ansible! (株)ユニキャスト ソフトウェアエンジニア 野口航 UniStudy#1 フリースタイルLT@日立市
  2. 2. お前誰?: 野口航(@wnoguchi)  しがないソフトウェアエンジニア(29歳)  茨城県日立市在住  「最近太った?」とよく言われるようになった  DevOpsへ取組み  株式会社ユニキャスト所属  シェアハウス「コクリエ」に居住  通勤15秒  夢はユーザ企業、とうきょうぐらし!
  3. 3. もくじ  自動化するモチベーション  Kickstartとは  Kickstartしてみる  構成管理ツールとは  Ansibleとは  Ansibleしてみる
  4. 4. インフラの構築を自動化するモチベーション  物理サーバが増える  毎回同じ手順  仮想マシンもどんどん増える  Hadoopに代表されるビッグデータを扱うものでは同じようなIAサーバをたくさん (100台単位とか)用意する  人がまともにやると過労になる  手順書だとミスも増える
  5. 5. Kickstartとは  RHEL系OSのインストールを自動化するツール  Debian系はPreseedが有名  私のPreseed記事結構有名なので良かったら見てね★  PreseedによるUbuntuの自動インストール入門 – Qiita http://goo.gl/s6SavA
  6. 6. Kickstartしてみる(cont.) ISOをマウント mount -o loop /var/tmp/CentOS-7-x86_64-Minimal-1503-01.iso /mnt/media/centos DVD の中身をすべてコピー 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 ;
  7. 7. 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
  8. 8. 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イメージを錬成 錬金術 - Wikipedia https://goo.gl/uYXiag
  9. 9. Kickstartしてみる(cont.) auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom # Use graphical install text # Run the Setup Agent on first boot firstboot --enable ignoredisk --only-use=sda # Keyboard layouts keyboard --vckeymap=jp --xlayouts='jp' # System language lang ja_JP.UTF-8 firewall --disabled selinux --disabled # Accept Eula eula --agreed reboot --eject # Network information # Intra network --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 password rootpw --iscrypted blahblahblah # System services services --enabled="chronyd" # System timezone timezone 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 ファイルサンプル
  10. 10. Kickstartしてみる(cont.) user --groups=wheel --name=wnoguchi --password=blahblahblah -iscrypted --gecos="wnoguchi" # System bootloader configuration bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda # Partition clearing information clearpart --all --initlabel --drives=sda # Disk partitioning information part /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 ファイルサンプル
  11. 11. Kickstartしてみる(cont.) %packages @core chrony kexec-tools %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end %post --log=/root/post_install.log yum -y update %end Kickstart ファイルサンプル
  12. 12. Kickstartしてみる(cont.) 実行してみよう
  13. 13. Kickstartしてみる(cont.) 実行してみよう
  14. 14. Kickstartしてみる 実行してみよう
  15. 15. 構成管理ツールとは  サーバーの状態を管理するツール  どんなアプリケーションが入っているかを定義する  どのような設定となっているかを定義する  DSLで記述したりしてGit等のVCSで差分を管理できる  どこを変更したか一目瞭然  GitLab等のツールでレビューしやすい  Chef, Ansible, Puppet等がある  これとは逆に状態を保持しない、壊れることを前提としたコンテナ型のアーキテク チャをImmutable Infrastructureという(Docker, LXC, OpenVZ等)
  16. 16. Ansibleとは  Pythonで書かれたサーバの構成管理を自動化するツール  基本的な最小限のセットアップ(ネットワーク、SSH公開鍵のセット、プロビジョ ニングユーザの作成)はKickstartでやって、その後のアプリケーションのインス トールはChef, Ansible等の構成管理ツールにまかせる  Pythonはどのディストリビューションにもデフォルトでインストールされているの で、エージェントレスでプロビジョニング可能  Yaml でシンプルに記述可能  Chef Zero(旧Chef Solo)はRubyが必要、エージェントのインストール必須なので、 本腰を入れてWebサービス等を構築するモチベーションがないとつらい
  17. 17. Ansibleしてみる(cont.) インベントリファイルで実行する対象のホストを定義 vim /etc/ansible/hosts
  18. 18. Ansibleしてみる(cont.) $ ansible all -a "/bin/date" 単体で実行 すべてのホストに対して同じ命令を書くのに便利 $ ansible all -m yum -a "name=httpd state=present" -s
  19. 19. 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サンプル ~サーバの構成をまとめて書く~
  20. 20. Ansibleしてみる(cont.) $ ansible-playbook playbook.yml サンプル実行
  21. 21. Ansibleしてみる $ ansible-playbook playbook.yml 冪等性(べきとうせい)の確認
  22. 22. この先のモチベーション  PullRequestがマージされたタイミングでansible-playbookコマンドを実行すると便利  PullRequestがマージされたタイミングで自動でISOイメージを作成して特定のサーバ(例えば Amazon S3とか)に最新のものを置いてくれると便利 Jenkins先生との融合
  23. 23. ご清聴ありがとうございました。

×