ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

helm installで"Error: no available release name found"

何が起きたのか

deisをサクっと試すのにチュートリアルをやっている。

Install Workflow - Deis Workflow Documentation

で、GKEのクラスタを準備して、helmをいれて、さぁdeisをdeployすっぞーというタイミングでエラー。

$ helm install deis/workflow --namespace deis
Error: no available release name found

解決策としてはこのへん

github.com

でやってみる

$ kubectl create serviceaccount --namespace kube-system tiller
serviceaccount "tiller" created
$ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
clusterrolebinding "tiller-cluster-rule" created
$ kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
deployment "tiller-deploy" patched

$ helm init --service-account tiller
$HELM_HOME has been configured at /Users/take/.helm.
Warning: Tiller is already installed in the cluster.
(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)
Happy Helming!

成功。

$ helm install deis/workflow --namespace deis --set global.use_rbac=true
NAME:   austere-mongoose
LAST DEPLOYED: Mon Jul 23 01:59:04 2018
NAMESPACE: deis
STATUS: DEPLOYED

RESOURCES:
==> v1/Secret
NAME                   TYPE    DATA  AGE
minio-user             Opaque  2     3s
deis-router-dhparam    Opaque  1     3s
objectstorage-keyfile  Opaque  2     3s

==> v1/ConfigMap
NAME                  DATA  AGE
dockerbuilder-config  2     3s
slugbuilder-config    2     3s
slugrunner-config     1     3s

==> v1beta1/RoleBinding
NAME                   AGE
deis-builder           3s
deis-monitor-telegraf  3s
deis-router            3s

==> v1/Service
NAME                    TYPE          CLUSTER-IP    EXTERNAL-IP  PORT(S)                                                   AGE
deis-builder            ClusterIP     10.7.250.176  <none>       2222/TCP                                                  3s
deis-controller         ClusterIP     10.7.253.248  <none>       80/TCP                                                    3s
deis-database           ClusterIP     10.7.254.205  <none>       5432/TCP                                                  3s
deis-logger             ClusterIP     10.7.249.24   <none>       80/TCP                                                    3s
deis-minio              ClusterIP     10.7.251.113  <none>       9000/TCP                                                  3s
deis-monitor-grafana    ClusterIP     10.7.250.120  <none>       80/TCP                                                    3s
deis-monitor-influxapi  ClusterIP     10.7.245.126  <none>       80/TCP                                                    3s
deis-monitor-influxui   ClusterIP     10.7.248.97   <none>       80/TCP                                                    3s
deis-nsqd               ClusterIP     10.7.251.253  <none>       4151/TCP,4150/TCP                                         3s
deis-logger-redis       ClusterIP     10.7.255.161  <none>       6379/TCP                                                  3s
deis-registry           ClusterIP     10.7.245.229  <none>       80/TCP                                                    3s
deis-router             LoadBalancer  10.7.247.6    <pending>    80:30737/TCP,443:30975/TCP,2222:32153/TCP,9090:30151/TCP  3s
deis-workflow-manager   ClusterIP     10.7.246.247  <none>       80/TCP                                                    3s

==> v1/ServiceAccount
NAME                   SECRETS  AGE
deis-builder           1        3s
deis-controller        1        3s
deis-database          1        3s
deis-logger-fluentd    1        3s
deis-logger            1        3s
deis-minio             1        3s
deis-monitor-telegraf  1        3s
deis-nsqd              1        3s
deis-registry          1        3s
deis-router            1        3s
deis-workflow-manager  1        3s

==> v1beta1/ClusterRole
NAME                      AGE
deis:deis-builder         3s
deis:deis-controller      3s
deis:deis-logger-fluentd  3s
deis:deis-router          3s

==> v1beta1/ClusterRoleBinding
NAME                      AGE
deis:deis-builder         3s
deis:deis-controller      3s
deis:deis-logger-fluentd  3s
deis:deis-router          3s

==> v1beta1/Role
NAME                   AGE
deis-builder           3s
deis-monitor-telegraf  3s
deis-router            3s

==> v1beta1/DaemonSet
NAME                   DESIRED  CURRENT  READY  UP-TO-DATE  AVAILABLE  NODE SELECTOR  AGE
deis-logger-fluentd    2        2        0      2           0          <none>         3s
deis-monitor-telegraf  2        2        0      2           0          <none>         3s
deis-registry-proxy    2        2        1      2           1          <none>         3s

==> v1beta1/Deployment
NAME                   DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
deis-builder           1        1        1           0          3s
deis-controller        1        1        1           0          3s
deis-database          1        1        1           0          3s
deis-logger            1        1        1           0          3s
deis-minio             1        1        1           0          3s
deis-monitor-grafana   1        1        1           0          2s
deis-monitor-influxdb  1        1        1           0          2s
deis-nsqd              1        1        1           0          2s
deis-logger-redis      1        1        1           0          1s
deis-registry          1        0        0           0          1s
deis-router            1        0        0           0          1s
deis-workflow-manager  1        0        0           0          0s

==> v1/Pod(related)
NAME                                    READY  STATUS             RESTARTS  AGE
deis-logger-fluentd-2nzb5               0/1    ContainerCreating  0         3s
deis-logger-fluentd-tdr9q               1/1    Running            0         3s
deis-monitor-telegraf-4flv9             0/1    ContainerCreating  0         3s
deis-monitor-telegraf-sscpr             0/1    ContainerCreating  0         3s
deis-registry-proxy-97cgs               0/1    ContainerCreating  0         3s
deis-registry-proxy-j2k2s               1/1    Running            0         3s
deis-builder-55bbd946bd-9srb5           0/1    ContainerCreating  0         3s
deis-controller-59c948dbd4-k7hxq        0/1    Pending            0         3s
deis-database-5875dcff85-6cl6t          0/1    Pending            0         3s
deis-logger-7445666f95-8w9wq            0/1    ContainerCreating  0         2s
deis-minio-64454c6bf6-cvpch             0/1    Pending            0         2s
deis-monitor-grafana-77d54db485-rdq48   0/1    Pending            0         2s
deis-monitor-influxdb-5fb56d489c-zn4c5  0/1    Pending            0         1s
deis-nsqd-649fbc4947-tjcwr              0/1    ContainerCreating  0         1s
deis-logger-redis-7fcc95cc5d-977tm      0/1    Pending            0         1s
deis-registry-554c5569db-zxcgb          0/1    Pending            0         0s
deis-router-98ccf5c64-466r5             0/1    Pending            0         0s

何をしたのか

そういえばhelm initを最初にしたときにこう言われている。

$ helm init
Creating /Users/take/.helm
Creating /Users/take/.helm/repository
Creating /Users/take/.helm/repository/cache
Creating /Users/take/.helm/repository/local
Creating /Users/take/.helm/plugins
Creating /Users/take/.helm/starters
Creating /Users/take/.helm/cache/archive
Creating /Users/take/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
Adding local repo with URL: http://127.0.0.1:8879/charts
$HELM_HOME has been configured at /Users/take/.helm.

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!

TillerというHelmのServer側にあるコンポーネントは既にGKE上にインストールされてるよ。デフォルトだとallow unauthenticated usersを認めてないんよ。と言ってる。

やり方公式に載ってました。

github.com

Service Accountはkubernetesの認証方式の1つ。作成したservice accountにはsecretも一緒に作成されて、そのtokenを使ってclientはpodへアクセスすることができる。今回helm initで使うservice accountを明示することで、podのdeployが許可されたのだろう。

参考

qiita.com

⎈ Happy Helming!⎈

入社して1ヶ月

blog.chaspy.me

blog.chaspy.me

これまでと同じくシュっとかく。しっかりは書かない。

9末に向けて、1ヶ月を振り返りつつ、目標設定もしたので感情をつらっと書いておく。

できることが少し増えて、できないことがこんなにある、ということが現実味を帯びて迫ってきている感じで、なかなかしんどい。

一方で、(想像はしてたにせよ)扱うシステム・インフラの(まだ知らないが故だが)膨大さに、理解のスピードが追いつくかは不安である。自分自身のコーディング/インフラスキルに対する不安もある。 とはいえ、そもそもソフトウェアエンジニアリングそのものが不安との戦いだとすら僕は思っているので、そういうものだと思ってやるしかないのはわかっている。


変わらない不安は、やっぱり自分ができること、自分ができるスピード、自分が知ってること、自分のことばかりだ。チームにはどうやって勝つねんみたいな強いひとばかりだが、焦らずやっていこうと言い聞かせる他ない。

このへんの不安が確信になった感じ。

まぁやるしかないのは変わらない。日々自己否定を頑張って無視している。

目下の課題はこのへん

  • 英語
    • 仕事の大半は英語なので、読み書きのスピードが仕事のスピードとほぼイコールになる。読んだ結果が間違ってれば誤認識になるし、書いたものが伝わらなければチームメンバーに対して余計なオーバーヘッドをかける。話す聞くの前にまず読む書くをトレーニングしないとまずい。
  • キーボード
    • これまでサボってきたのが悪いが、キーボード、ターミナル操作が遅い。毎日1つずつスピードアップのために何か覚える、とかやったほうが良さそう。pecoが超絶便利なのでなるべく組み合わせて、aliesにコマンド化していれる、などしている。vimとかtmuxとかショートカットキーとか、テクさがまだ足りない。
  • 新しいことの学び方
    • 永遠のテーマみたいなテーマだが、未知へのハックの仕方が悪い。何年エンジニアやってんだって話だけど(いやたった4年か。。。とか言って励ますけど)わからないことをわかる能力というか。何言ってんだ。今やっているのはとにかく言語化。何がわかったのか、何がわかってないのか、問いは何か、その問いの答えは何か。これを愚直に繰り返す。あとは図にする。のろまでもこれを繰り返すしかない。このへんは改善のアクションが自分で浮かんでない。見つめ直しが足りないのかも。

目標は、自分で見つけ出して改善を週に2つできるようになろう、ということになった。改善そのものは好きだし、大切だし、得意だと思うけど、改善をするためには現状を「わかって」いないとできない。なかなかいい目標設定をするなぁ、とボスに感心。

あとは、仕事をコントロールしている感がない。散らかっているというか。このへんは抜け出したい。

  • 業務依頼
    • やったあと復習
  • 中期的にやる業務
  • 新しく何かを覚える
  • わからないことの整理

このあたりがぐちゃぐちゃ。週報、月報、振り返りをうまくやって足場を固めたい。

次は「入社して三ヶ月」に書く。そのときに上記の課題や、今回立てた目標がどうなっているかをまた振り返りたい。

勉強会行くのやめる

勉強会は(少なくとも参加者である限りは)得られることは「知ること」であり、「できること」ではない。「できること」が一切ない今、「知ること」を優先させるのは時間の使い方として得策ではない、というだけ。

主催のクローズド勉強会以外はしばらくおやすみしようと思う。

自分自身のタイミングの問題であり、言うまでもないけど勉強会文化を否定するわけでもないし、むしろ感謝ばかり。

直近は(半分仕事だけど)明日のStudySapuri Product Meetup、あとは個人的に思い入れのあるJTF2018は行く。9月のbuilderscon tokyo 2018、チケット勢いで買っちゃってたけど平日だしいかないかも。5000円寄付。

techplay.jp

2018.techfesta.jp

builderscon.io

さ、特のり弁分走ろ。

NginxをAWS上で作って壊す「Nginx Up and Running」0.2.0をリリースした

趣味インフラ趣味プロジェクトなので勝手にリリースごっこをしているだけであります。

初回リリース時の記事はこちら。

blog.chaspy.me

何が変わったか

issue & PR

0.1.0まではガシガシmasterに向けてcommit & pushしてましたが、そのあとはissue & PRで、ちゃんとcommitやPRにはrefでissue情報を加えています。現職での仕事の仕方に習っています。

で、今回の変更をPRベースで振り返ります。

Testing on CircleCI

github.com

github.com

このリポジトリ、TerraformでAWS上にインフラ(EC2)を作ったあと、ansibleでNginxを作って、InfratasterでL7のテストをするというものです。CIでは何をするか悩みました。悩んだ結果、AWS上には実際にリリースせず、テストに絞ることにしました。

テストをするにしても、実際にAWS上にインフラを作るわけではないので、TerraformとAnsible/Infratasterの2つにわけました。

Terraformは単純にplanをしているだけなので、テストとしては少し甘いかもしれません。TerraformもCI時はlocal(?)に実行できる(?)とかあればいいんですが、わけがわからないので諦め。

次にNginxをinstallするansibleと、構築後のNginxに対してL7のテストを行うInfratasterですが、CircleCIで立ち上がるコンテナに対して、local実行することにしました。

もともと、AWSに対して実行するときも、作成したEC2インスタンスのpublic IPアドレスをhosts、spec/spec_hosts.rbに出力していたので、CI実行時はlocalhostに書き換えることで対応できました。

使うDocker Imageもどうしようか悩んだのですが、Ansibleが入ったイメージをFROMとし、rbenvをいれる部分はDockerfileを書きました。

https://hub.docker.com/r/chaspy/nginx-up-and-running/

あとはAWSのcredentialですが、環境変数に持たせることでCIでもAWSに対してデプロイするときでも動くようにしました。

CIも、テストもとても大事なので、今回ちゃんとできてよかった。

Embedding build status badges

github.com

バッジつけましたー。

CircleCI

Build nginx from source with ngx_mruby module

github.com

ngx_mrubyを使うには、Nginxをbuildするときに指定しないといけません。以前軽くvagnratで動かした時にinstallのshellは書いていたので、それをplaybookにかきおこすダルい作業をしていました。

Ansible、loginしないから/etc/profileとかにexport書いても読んでくれなくてPATHとおらねー!とか、shell moduleとcommand moduleで謎の挙動違いがあってNo such file or directoryになったりとかで無駄にハマったりしました。

あとngx_mrubyのお試しで無駄にfizzbuzzを返すようにしていて、そのテストをInfratasterで書きました。

今後Nginx / ngx_mrubyのconfigとテストをメインにどんどん書いていきたいので、その基盤ができてよかった。

Add Japanese Document

github.com

結局ほぼほぼREADMEに書いている内容と同じになってしまったが、今後増えて行くといいと思う。そんな思いでまずは簡単に書いた。

いつまで続くかわかんないですが、薄い本というか、NginxをAWS上で、CI/CDこみで動かしたい、そういう職場で働いている、キャッチアップしたいひとが、git cloneしてすぐに動かして試せる、学習用の技術書。。。のサポートリポジトリ、みたいなイメージで今回取り組んでいます。

まだまだ道半ばですが、v1.0.0の頃にはそれなりのボリュームのものになればいいなと思います。まだまだ中身もよくないところたくさんあるし、少しずつ直しつつ、ようやくCI/CDまわりの基盤となる部分や、必要ソフトウェアの導入まで終わったので、今後はようやく中身!って感じですね。

今後

さっきも言ったけどNginxでできること、ngx_mrubyでできることをconfigを書きつつ、Infratasterでテストも書きつつ、ドキュメントも書きつつ、っていうのを少しずつ進めて、コンテンツを増やしていきます。

おわりに

Vagrant版もつくろうかなーって思っている。というか以前作ったのがあるので移行する感じで。。。

github.com

Amazon-Linux "ami-cbf90ecb"でrakeが使えない

nginx + mrubyを動かそうとしたとき、CentOSではyumで入るrubyで動くが、EC2のamazon-linux "ami-cbf90ecb"ではrakeが動かない。ngx_mrubyをbuildしようとしたときのことだ。

[ec2-user@ip-10-1-1-67 ngx_mruby]$ ruby --version
ruby 2.0.0p643 (2015-02-25) [x86_64-linux]
[ec2-user@ip-10-1-1-23 ~]$ rake
-bash: rake: command not found

なんでないんや

[ec2-user@ip-10-1-1-23 ~]$ ls -la /usr/bin/rake
lrwxrwxrwx 1 root root 22 Jul 15 09:55 /usr/bin/rake -> /etc/alternatives/rake

おっあるやん

[ec2-user@ip-10-1-1-23 ~]$ ls -la /etc/alternatives/rake
lrwxrwxrwx 1 root root 16 Jul 15 09:55 /etc/alternatives/rake -> /usr/bin/rake2.0

ほう

[ec2-user@ip-10-1-1-23 ~]$ ls -la /usr/bin/rake2.0
ls: cannot access /usr/bin/rake2.0: No such file or directory

なるほど

で、なんか2.4はあるのね

[ec2-user@ip-10-1-1-23 ~]$ ls -la /usr/bin/rake2.4
-rwxr-xr-x 1 root root 1185 Aug 18  2017 /usr/bin/rake2.4

結論

symlinkはりなおそ

[ec2-user@ip-10-1-1-23 ~]$ sudo rm /etc/alternatives/rake
[ec2-user@ip-10-1-1-23 ~]$ sudo ln -s /usr/bin/rake2.4 /etc/alternatives/rake
[ec2-user@ip-10-1-1-23 ~]$ rake --version
rake, version 12.0.0

/etc/alternative/rakeって何

せっかくなので軽くググる

なるほどー、symlinkでバージョンを切り替えるのをサポートするalternativeというのがあって、なんことやらrakeは2.0の実態がなくなって2.4しかない状態になっていた感じね。

じゃalternative使って2.4向けてやればよかったのね

(再)結論

rubyを2.4に切り替えてやればいい

alternativesコマンドで確認したところ、rakeはない。

[ec2-user@ip-10-1-1-227 ~]$ sudo alternatives --display rake

rubyはなんやかんやでて、2.0と2.4をサポートしてそうな雰囲気。

[ec2-user@ip-10-1-1-227 ~]$ sudo alternatives --display ruby | grep ruby
ruby - status is auto.
 link currently points to /usr/bin/ruby2.0
/usr/bin/ruby2.0 - priority 2000
 slave ruby.pc: /usr/lib64/pkgconfig/ruby-2.0.pc
 slave ruby.1: /usr/share/man/man1/ruby2.0.1.gz
/usr/bin/ruby2.4 - priority 243
 slave ruby.pc: /usr/lib64/pkgconfig/ruby-2.4.pc
 slave ruby.1: /usr/share/man/man1/ruby2.4.1.gz
Current `best' version is /usr/bin/ruby2.0.

切り替える。

[ec2-user@ip-10-1-1-227 ~]$ ruby -v
ruby 2.0.0p643 (2015-02-25) [x86_64-linux]
[ec2-user@ip-10-1-1-227 ~]$ sudo alternatives --config ruby

There are 2 programs which provide 'ruby'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/bin/ruby2.0
   2           /usr/bin/ruby2.4

Enter to keep the current selection[+], or type selection number: 2
[ec2-user@ip-10-1-1-227 ~]$ ruby -v
ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-linux-gnu]

[ec2-user@ip-10-1-1-227 ~]$ rake --version
rake, version 12.0.0

おしまい。

開発合宿にいってきます

友人と一泊でもくもく開発をやることにした。最高か。

f:id:take_she12:20180714224834p:plain

f:id:take_she12:20180714224836p:plain

なぜかとりあえずプロジェクターを買う元同期氏。最高か。

f:id:take_she12:20180714225046p:plain

シュっと決まった。泊まる先も選んでくれた。最高か。ってことで湯河原にいってきま!

f:id:take_she12:20180714225156p:plain

何をやっていき

Nginx Up and Running v0.2 Release

blog.chaspy.me

  • nginxのソースコードビルド&ngx_mrubyのインストール
  • CircleCIによるインフラテスト
  • nginxの代表的なconfigとテスト
  • ドキュメント作成

たぶんこれはそこまで時間かけずにできると思う、3,4h?

Deis Up and Running

Up and Running言いたいだけか。

現職、Deisで動いてて、さすがに最低限のCLIと、アーキテクチャの理解ぐらいはしておかないと現状把握に困るのでシュっとキャッチアップすることにする。

とりあえずオフィシャルのドキュメント眺めてチュートリアルをやる。

deis.com

いまいまの理解はオンプレというか、自分で入れるHeroku。であればAWS上に作って、前段nginx + deis(rails + unicorn + DB)を動かす、ぐらいまでできれば御の字か。

まだあんまりよくわかってないが、Kubernetes上に動かせるとなおのこと現状に近い気がするので、できればやってみる。

deisに関してはhakoberaさんが記事を書いているので参考にしつつ。

qiita.com

Sidekiq and Resque

「なるほどUNIXプロセス」の付録を流して、非同期処理をプロセスという視点でどのように実現しているのかを理解する。

tatsu-zine.com

で、いまざっとググった感じ、いずれもRailsと一緒に使われるパターンが多そうなので、Railsと合わせて動きを理解する。

アウトプット

それぞれブログ書きます。

まとまったら月末なんらかの勉強会で LT発表します。

おわりに

たのしみだー

NginxをAWS上に作って壊すリポジトリ「nginx-up-and-running」リポジトリを作った

はじめに

作った。

github.com

とりあえず適当に0.1.0のタグをつけてリリースらしきことをしてみた。

これは何

雑な図がREADMEにありますが、NginxをAWS(EC2 instanceとして)上に作って、挙動をテストするリポジトリです。

モチベーションは何

社内ではNginxを結構派手に使っています。で、自前でもNginxを好きにできる庭が欲しい。しかし、Web application(ex. rails...)とのセットだと敷居が高い。ならば!terraform + ansible + infratasterでインフラCIを実現する学習用リポジトリを作ろう!といった感じです。

心がけてること

誰もがCloneして、すぐにドシャーって作って、ドシャーって壊せる。そしてForkしてアレンジして自分にあったものをすぐに試せる。そんな学習用リポジトリを目指したい。Nginx on AWS with CI/CDをシュっと試せる、そういう書籍で実際に動かすリポジトリ、といったイメージです。なので、ドキュメントもちゃんと作って、同人誌として出したいぐらいの気持ちもあります。

v0.1.0でできること

本当にシンプルで、最低限のところまでです。

  • terraformでVPC上にEC2 instanceをdeploy
  • ansibleでEC2 instanceにnginxをinstall
  • infratasterでGETできることをテスト

こんなもんです。最低限。

今後

で、v0.2.0に向けて何すっかなーってのを考えるために今ここでブログを書いている、という次第です。

  • nginxのソースコードビルド&ngx_mrubyのインストール
  • CircleCIによるインフラテスト
  • nginxの代表的なconfigとテスト
  • ドキュメント作成

こんなもんかな。悩んでるのはCircleCIで何をやるか、といったところで、実際にdeployまでできればいいけど、それ以外でも普通に壊して作ったりしたい。毎回壊して作ってするか、それともテスト目的にするか、を悩んでる。テストだとしても、terraform部分のテストはやっぱり実際のAWSに対して打つしかできないと思うし、ansible/terraformのところもCircleCIコンテナでやるの、若干めんどくさいなーって感じ。targetをCIとそうでないときでわけないとできない気がする。

おわりに

Nginx Up and Runningというイキったリポジトリ名にしたからには使い倒せるような学習用リポジトリを目指したい。

シュっと試す。本を読みながらシュッと実行できるって、キャッチアップする人間にとってありがたいと思うんです。今時クラウド上で、CI/CDまでできて当たり前なので、誰かに役にたつリポジトリになればいいな、という思いで、少しずつ育てていこうと思います。