1. やりたいこと
Dockerコンテナを利用したデプロイングツールって何かあるのかなー、と探してるとkubernetesやAWSのECSに行き当たります。
内部のソースも読むことも可能、ということでkubernetesさんに触ってみたのですが、Pods, Services, ReplicationControllers等の設定が多くてちょっとお手軽感があまりないような。。
ということで良さげなツールないかなー、と、探していたら以下の2つを見つけました。
どちらも同じことが出来そうですが、先に見つけたspreadの方を試してみることにしました。
2. 実施手順
- AWSのシングルインスタンスに、k8sのサービスを構築する
- 手元のMacOSにkubectlをダウンロードしてパスを通し、AWSのk8sへの接続設定をする
- 手元のMacOSにspreadをインストールする
- mattermost用のspreadの定義をgitからcloneする
- spred deployコマンドを利用してmattermostをデプロイする
3. 実施詳細
3-1. AWSのシングルインスタンスに、k8sのサービスを構築する
- etcdをインストールします。
curl -L https://github.com/coreos/etcd/releases/download/v2.3.0-alpha.1/etcd-v2.3.0-alpha.1-darwin-amd64.zip -o etcd-v2.3.0-alpha.1-darwin-amd64.zip
unzip etcd-v2.3.0-alpha.1-darwin-amd64.zip
cd etcd-v2.3.0-alpha.1-darwin-amd64
- kubernetesをgit cloneします。
git clone https://github.com/kubernetes/kubernetes
cd kubernetes
-
hack/local-up-cluster.sh の中の
localhost
及び127.0.0.1
を0.0.0.0
に書き換えます。 -
etcdを
PATH
に通します。
export PATH=$PATH:/path/to/etcd
- cluster/kubectl.shで、serverのアドレスを設定します。
cluster/kubectl.sh config set-cluster local --server=http://*.*.*.*:8080 --insecure-skip-tls-verify=true
- k8sを起動します。
hack/local-up-cluster.sh
3-2. 手元のMacOSにkubectlをダウンロードしてパスを通し、AWSのk8sへの接続設定をする
- kubectlをダウンロードします
export K8S_VERSION=1.2.0-alpha.7
wget http://storage.googleapis.com/kubernetes-release/release/v${K8S_VERSION}/bin/linux/amd64/kubectl
export PATH=$PATH:`pwd`
- kubectlでAWS上のk8sのIP設定をする
kubectl config set-cluster local --server=http://*.*.*.*:8080 --insecure-skip-tls-verify=true
3-3. 手元のMacOSにspreadをインストールする
ここはREADMEにある通りコマンド二発で実施できました^^
sudo brew tap redspread/spread
sudo brew install spread
3-4. mattermost用のspreadの定義をgitからcloneする
git clone https://github.com/redspread/kube-mattermost.git
cd kube-mattermost
3-5. spred deployコマンドを利用してmattermostをデプロイする
- .k2e/app-service.ymlで、portsとexternalIpsを編集する
.k2e/app-service.yml
apiVersion: v1
kind: Service
metadata:
name: mattermost-app
spec:
selector:
app: mattermost-app
ports:
- name: http
protocol: TCP
port: 8081
targetPort: 80
externalIPs:
- *.*.*.*
- x.x.x.x
- spread deploy ./ を実施する
spread deploy ./
- 作成できたかkubectlで確認してみる
kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) SELECTOR AGE
kubernetes 10.0.0.1 <none> 443/TCP <none> 1h
mattermost-app 10.0.0.100 *.*.*.*,x.x.x.x 8081/TCP app=mattermost-app 4s
nginx 10.0.0.27 *.*.*.*,x.x.x.x 80/TCP name=nginx 5m
redis-sentinel 10.0.0.234 <none> 26379/TCP redis-sentinel=true 45m
- 作成できたかWebブラウザで確認してみる
動いているみたいですね^^
4. 所感
- kubernetesの環境や設定ファイル群が手元にあるのであれば、お手軽なコマンドラインツールとして利用するのはアリだと思いました。
- どちらかというとGUIでkubernetesで利用するPods, SVC, RC等のymlを生成してくれるyed的なツールがほしい('-'*)
- helmの方は、k8sのgithubのREADMEにも載ってたしこっちのが主流なのかな。ちょっと見てみたいです。
- spreadのソースコードはk8sのapiを叩いてる、というシンプルな作りなのでがっつり見てみたいです。
5. 参考
- etcdのインストール手順
- kubernetesのインストール手順
- Dockerで簡単にSlackライクなmattermostを動かしてみよう!
- SlackクローンのMattermostを使ってみる - 導入、初期設定編-
- kubernetesのservicesの設定について
本日は以上となります。