mkawabata

UdemyでDockerを学ぶ① 〜概要からSection1まで〜


リンクバル技術部の川畑です。エンジニアとは常に新しい技術を勉強し続けねばならない悲しい生物(!?)です。最近はそんなエンジニアのためにドットインストールや、paizaなどオンラインで簡単に勉強ができるようになってきました。そんな中で今回はDokcerを体系的に学びたいと思い、UdemyでDockerを勉強してみました。

Udemy(ユーデミー)とは

アメリカのオンライン学習プラットフォーム。学びたい講座を購入(1部無料)し受講したり、また誰でも講師となり、自分の講座を動画でインターネット上に公開できる、オンライン学習プラットフォーム。

続きを読む


OpenLDAPでSSH公開鍵を管理


リンクバル技術部の川畑です。サーバーのログインユーザーのSSH公開鍵についてOpenLDAPで管理できないか調査しました。OpenSSHをソースからコンパイルしてとかいろいろ情報がありましたが、Ubuntu 14.04.1 LTSではOpenSSH 6.6.1p1がapt-getで入手できるのでスキーマファイルをダウンロードしてincludeするだけで簡単に設定できそうなので検証してみました。

検証環境

  • OS:Ubuntu 14.04.1 LTS
  • OpenSSH:6.6.1p1
  • OpenLDAP:2.4.31

LDAPサーバ側の設定

まずLDAPサーバでの設定手順

1.OpenLdapサービス停止

sudo su -
service slapd stop

2.スキーマファイルをダウンロード

cd /usr/local/src
wget https://openssh-lpk.googlecode.com/files/openssh-lpk_openldap.schema

3.スキーマディレクトリにコピー

mv openssh-lpk_openldap.schema /etc/ldap/schema

4.slapd.conf編集

vi /etc/ldap/slapd.conf
------------------------------------------------------------
include         /etc/ldap/schema/openssh-lpk_openldap.schema
------------------------------------------------------------

5.ConfigDB削除

rm -rf /etc/ldap/slapd.d/*

6.ConfigDB再作成

slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/
chown -R openldap:openldap /etc/ldap/slapd.d

7.OpenLdapサービス起動

service slapd start

※これでLDAPのAttributeに「sshPublicKey」が表示され公開鍵が追加可能に

LDAPクライアント側の設定

sshdがLDAPサーバのSSH公開鍵を取得するようにする設定手順

1.LDAPサーバからSSH公開鍵を取得するスクリプト

※やっていることはLDAPサーバに接続して「ldapsearch」の結果から公開鍵だけ抽出

vi /opt/ssh-command/LdapGetSSHKey.sh
------------------------------------------------------------
#!/bin/bash

uri=ldap://<LDAP-SERVER>
binddn="<BIND-USER>"
bindpw=<PASSWORD>
base="<BASE>"
uid=$1

ldapsearch -LLL -H ${uri} -w "${bindpw}" -D "${binddn}" -b "${base}" "(& (objectClass=posixAccount) (uid=${uid}))" "sshPublicKey" | sed -ne '2,$p' | sed -e 's/sshPublicKey: //g' | sed -e 's/^ //g' | tr -d '\n'
------------------------------------------------------------

2.sshdに認証コマンドの設定

vi /etc/ssh/sshd_config
------------------------------------------------------------
AuthorizedKeysCommand /opt/ssh-command/LdapGetSSHKey.sh
AuthorizedKeysCommandUser root
------------------------------------------------------------

おわりに

今回の検証で、SSH公開鍵をOpenLDAPで管理できることを確認できました。まだまだ課題はありますが、本格的に運用できればと考えております。

リンクバルでは エンジニアを積極募集中 です。興味のある方のご応募お待ちしております。


Packerでマシンイメージを管理する

packer

リンクバル技術部の川畑です。サーバの構成管理はどこの会社でも課題になっていると思われます。このあたり構成管理ツールをつかってコードをGitHubとかで管理していきたいですね。構成管理ツールでもマシンイメージ・ミドルウェア・デプロイツールなどいくつかの階層によって適用できるツールがあると思われるのですが、今回はマシンイメージを管理する「Packer」を検証してみました。

1.Packer設定ファイル

  • json形式で記載
  • 「builder」でマシン環境を定義
  • 「provisioners」でサーバ上の動作を定義
  • ここでは「digitalocean.json」で保存
{
"builders": [{
"type": "digitalocean",
"api_token": "<DigitalOceanのAPIトークン>",
"image": "ubuntu-16-04-x64",
"region": "sgp1",
"ssh_username": "root",
"size": "512mb",
"snapshot_name": "linkbal-packer-test {{timestamp}}"
}],
"provisioners": [{
"type": "shell",
"inline": [
"sleep 30",
"sudo apt-get upgrade"
]
}]
}

2.設定ファイル構文チェック

  • Packer設定ファイルの構文が正しいかをチェック
kawabata$ packer validate digital.json
Template validated successfully.

3.イメージ作成

  • Packer設定ファイルの内容を実行して、新しいイメージをビルド
kawabata$ packer build digital.json
digitalocean output will be in this color.

==> digitalocean: Creating temporary ssh key for droplet...
==> digitalocean: Creating droplet...
==> digitalocean: Waiting for droplet to become active...
==> digitalocean: Waiting for SSH to become available...
==> digitalocean: Connected to SSH!
==> digitalocean: Provisioning with shell script: /var/folders/2m/6vlfpttn2_v52m6nmmls03b0_hvfdt/T/packer-shell546848099
digitalocean: Reading package lists...
digitalocean: Building dependency tree...
digitalocean: Reading state information...
digitalocean: Calculating upgrade...
digitalocean: 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
==> digitalocean: Gracefully shutting down droplet...
==> digitalocean: Creating snapshot: linkbal-packer 1485762269
==> digitalocean: Waiting for snapshot to complete...
==> digitalocean: Destroying droplet...
==> digitalocean: Deleting temporary ssh key...
Build 'digitalocean' finished.

==> Builds finished. The artifacts of successful builds are:
--> digitalocean: A snapshot was created: 'linkbal-packer 1485762269' (ID: 22512428) in region 'sgp1'

実行開始後、DigitalOceanコンソールの「Droplets」を確認するとイメージを作成するためにサーバが起動されている

実行完了後、DigitalOceanコンソールの「Images」を確認すると新規イメージが作成されている

DigitalOceanコンソールの「Droplets」からはサーバが削除されている

まずは使ってみた感想

  • 今回はDigitalOceanのデフォルトのイメージからDropletsを作成し、インストールされているパッケージを最新にするといった流れを検証
  • AWS・GCP・AzureなどのIaaSやVMWare・VirtualBoxにも対応しており、ハイブリッドでマシンイメージを管理する時には便利そう
  • Dockerのイメージ管理もできるので、Dockerを使用して開発している環境では、バージョン管理などが便利そう

※参考

リンクバルでは エンジニアを積極募集中 です。興味のある方のご応募お待ちしております。


Linuxサーバのうるう秒対応について – 2017/1/1 0:00:00(UTC)


リンクバル技術部の川畑です。今年も残すことあと2週間となりました。良い年か迎えられるよう、サーバーリソースやログに異常がないかなど確認したり、監視設定を見直しなどに日々追われております。そして来年早々にうるう秒が「2017/1/1 0:00:00(UTC)」に挿入されるので、その対応についてまとめさせて頂きます。

うるう秒とは

  • 時間というのは1日に1から3ミリ秒ぐらいずれる
  • ±0.9秒ぐらい誤差がでると時間調整のために世界一斉に1秒挿入する
  • 調整実施日は誤差がでている場合、6月末と12月末に実施する

サーバーのうるう秒対応

リンクバルではほとんどのサーバでntpdで上位NTPサーバと時間同期をしております。この場合の対策として大きく分けて2つ考えられます。

  1. うるう秒挿入前に、ntpdをslewモードで起動する
  2. ntpdを停止する

2.の方法は年末年始は問題なく過ごせそうですが、結局どこかのタイミングで時間の補正が必要となるため、1.の対応を今年中に対応することにしました。

ntpdの同期モード

ntpdの同期モードにはstepモードとslewモードがある

  • stepモード : 上位NTPサーバに問い合わせた時間にすぐに合わせる(デフォルト)
  • slewモード : システム時間の進み方(早くしたり遅くしたり)を調整する

デフォルトがstepモードのため、うるう秒が挿入された場合に強制的に1秒戻される可能性があるためslewモードにする必要がある。

slewモード変更手順

ここからは実際の設定変更手順となります。リンクバルで使用している AmazonLinux / CentOS / Ubuntu の設定変更手順となります。

AmazonLinux / CentOS

1.パッケージ最新化
yum --releasever=latest install ntp

2.ntpd停止
service ntpd stop

3.時刻ステータスクリア
ntptime -s 0

4.slewモード設定(オプション「-x」を追加するとslewモード)
vi /etc/sysconfig/ntpd
---
NTPD_OPTS='-g -x'
---

5.ntpd起動
service ntp start

6.プロセス確認(ntpdにオプション「-x」が付与された状態で起動されているか確認)
ps aux | grep ntpd

Ubuntu

1.パッケージ最新化
apt-get update
apt-get install ntp

2.ntpd停止
service ntp stop

3.時刻ステータスクリア
ntptime -s 0 -f 0

4.slewモード設定(オプション「-x」を追加するとslewモード)
vi /etc/default/ntp
---
NTPD_OPTS='-g -x'
---

5.ntpd起動
service ntp start

6.プロセス確認(ntpdにオプション「-x」が付与された状態で起動されているか確認)
ps aux | grep ntp

ということでなんとか年内には対応完了する目処はつきました。あとは「人知を尽くして天命を待つ」といった感じで、元旦早々アラートが上がらないことを祈りながら過ごすことになりそうですが、みなさま良いお年をお過ごし下さい。

リンクバルでは エンジニアを積極募集中 です。興味のある方のご応募お待ちしております。


DigitalOceanを使う5つのメリット

DigitalOcean

リンクバル技術部の川畑です。最近というより1・2年前から海外で流行っているVPS DigitalOcean についてまとめました。IaaS界の巨塔 AWS と比較して良いところを5つか列挙させて頂きます。

コストが安い!

  • DigitalOceanは1番下のスペックのDroplets(AWSのEC2インスタンスみたいなの)で比較した場合、1時間あたり $0.007 1月あたり $5になります。
  • AWSの1番下のスペックのEC2インスタンスだと、t2.nanoが1時間あたり $0.01 1月でEBS 8GBで起動すると $14.64になります。

仮想サーバーの起動が早い!

  • DigitalOceanは1分ぐらいで起動完了。
  • AWSのt2.nanoだとStatusがrunningになるまで5分ぐらいはかかるときも。

コンソールが使いやすい!

  • DigitalOceanのDropletを作成するコンソールが必要最低限の項目で非常にシンプルでわかりやすい。個人的にはIPアドレスをクリップボードにコピーする機能が痒いところに手が届く感じがあって好きです。
  • AWSのEC2インスタンスを作成するコンソールは複雑で多数の項目があり、慣れるまでには時間がかかる。

うれしい自動バックアップ機能も!

  • DigitalOceanのDropletはコンソールで設定するだけで1日1回バックアップを自動で取得してくれます。
  • AWSのEC2インスタンスのバックアップを取得するときは、スクリプトを用意する必要があります。

スペック・Disk容量変更も自由自在!

  • DigitalOceanはDropletの拡張・縮小はコンソール上で自由自在です。
  • AWSのEC2インスタンスはスペックは拡張・縮小は変更可能ですが、Diskの拡張・縮小についてはちょっと複雑な手順になります。

と、無理やり感もありますが、DigitalOceanは「Mr. IaaS」といった感じで、個人的にはAWSよりも結構使っております。ただ実際の本番サービスの運用となると、AWSのALBやS3のようなPaaSは一切提供していないので、DigitalOceanで本番サービスを運用するのは現実的ではないかもしれません。使いどころとしては、検証用・開発用・個人のブログなどになると思われますので、ご興味のある方はぜひ試して見て下さい。

リンクバルでは エンジニアを積極募集中 です。興味のある方のご応募お待ちしております。