ためすう
Mac で kubectl と Minikube をインストール
2019-10-24やったこと
Mac で kubectl と Minikube をインストールします。
調査
kubectl インストール
$ curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl"
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl
バージョン確認
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:18:23Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"darwin/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?
Minikube インストール
$ brew cask install minikube
$ minikube version
minikube version: v1.4.0
commit: 7969c25a98a018b94ea87d949350f3271e9d64b6
参考
サーバーの仮想化
2019-10-22やったこと
サーバーの仮想化の概要を調べます。
調査
ホストOS型
ホストOSにゲストOSをインストールして利用します。
ソフトウェア例
- VirtualBox
- VMware
ハイパーバイザー型
コンピュータの仮想化技術のひとつである仮想機械(バーチャルマシン)を実現するための、制御プログラムである。仮想化モニタや仮想化OSと呼ばれることもある。
ソフトウェア例
- Hyper-V
- Linux KVM
コンテナ型
ゲストOSが不要で、単一のOSに対して、独立した環境を提供することが出来ます。
ソフトウェア例
- Docker
参考
GCP 周りの用語を整理する
2019-10-22やったこと
GCP (Google Cloud Platform) 周りの用語を整理します。
調査
GCP (Google Cloud Platform)
Google Cloud Platform(グーグル クラウド プラットフォーム、GCP)とは、Googleが提供しているクラウドコンピューティングサービスである。
GCE (Google Compute Engine)
Google Compute Engine は、Google のデータセンターとファイバー ネットワークで運用される仮想マシンを提供します。
GKE (Google Kubernetes Engine)
Google Kubernetes Engine は、Google のインフラストラクチャを使用して、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを行うマネージド環境を提供します。
GAE (Google App Engine)
Google App Engine は、Google のインフラの上でアプリケーションを作り、実行できるようにする PaaS ( Platform as a Service : サービスとしてのプラットフォーム)です。
参考
ssh-add を使う
2019-10-22やったこと
ssh-add について調べます。
確認環境
$ man ssh-add --help
man, version 1.6c
調査
man より抜粋
DESCRIPTION ssh-add adds private key identities to the authentication agent, ssh-agent(1). When run without arguments, it adds the files ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, and ~/.ssh/id_ed25519. After loading a private key, ssh-add will try to load corresponding certificate information from the filename obtained by appending -cert.pub to the name of the private key file. Alternative file names can be given on the command line.
ssh コマンドを使うとき、パスフレーズの入力をスキップ出来ます。
秘密鍵の登録
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /Users/hogehoge/.ssh/id_rsa:
Identity added: /Users/hogehoge/.ssh/id_rsa (/Users/hogehoge/.ssh/id_rsa)
$ ssh-add -l
2048 SHA256:xxxxxxxxxxx /Users/hogehoge/.ssh/id_rsa (RSA)
秘密鍵の削除
$ ssh-add -d ~/.ssh/id_rsa
Identity removed: /Users/hogehoge/.ssh/id_rsa (hogehoge@hogehoge-no-MBP)
$ ssh-add -l
The agent has no identities.
キーチェーンに保存する
-K When adding identities, each passphrase will also be stored in the user's keychain. When removing identities with -d, each passphrase will be
removed from it.
参考
sed で行を差し込む
2019-10-21やったこと
sed で行を差し込んでみます。
確認環境
$ gsed --version
gsed (GNU sed) 4.7
調査
aaa.rb
111
222
333
222
444
555
出力結果
$ gsed -e "/222/a差し込む" ./aaa.rb
111
222
差し込む
333
222
差し込む
444
555
実際にファイルを更新したい場合はこちら (-i
オプション)
$ gsed -i -e "/222/a差し込む" ./aaa.rb
sed でコメントアウトする (行頭に文字追加)
2019-10-20やったこと
sed で行頭に文字を追加してみます。
確認環境
$ gsed --version
gsed (GNU sed) 4.7
調査
aaa.rb
111
222
333
222
444
555
出力結果
$ gsed -e '/222/s/^/#/g' ./aaa.rb
111
#222
333
#222
444
555
実際にファイルを更新したい場合はこちら
$ gsed -i -e '/222/s/^/#/g' ./aaa.rb
docker を使ってみる (チュートリアル Part5: スタック)
2019-10-20やったこと
docker を使ってみます。
チュートリアルの Part5 です。
調査
スタック (stack)
スタックは相互関係を持つサービスのグループであり、依存関係を共有します。そして、同時にオーケストレート(訳者注;複数のサーバ上で一斉に挙動する)やスケール(訳者注;サービスの拡大および縮小)します。
docker-compose.yml の準備
docker-compose.yml
version: '3'
services:
web:
image: hogehoge/get-started:part1
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- '80:80'
networks:
- webnet
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
redis:
image: redis
ports:
- "6379:6379"
volumes:
- ./data:/data
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
networks:
webnet:
※ web.image
はご自身の環境に合わせて変更してください
myvm1
環境にコピー
$ docker-machine scp docker-compose.yml myvm1:~
ディレクトリ準備
ホスト上の ./data
に対して、Redis コンテナでは、/data
でアクセスします。
$ docker-machine ssh myvm1 "mkdir ./data"
デプロイ
$ docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"
確認
$ docker-machine ssh myvm1 "docker stack ps getstartedlab"
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
zh7eyy78eeiw getstartedlab_redis.1 redis:latest myvm1 Running Running 21 hours ago
a7qov9u2po63 getstartedlab_visualizer.1 dockersamples/visualizer:stable myvm1 Running Running 21 hours ago
redis
と visualizer
が追加されているのが確認できると思います。
確認
redis
http://192.168.99.100
http://192.168.99.101
にアクセスする度にカウンタが増えていきます。
visualizer
http://192.168.99.100:8080
でページを見ることが出来ます。
参考
docker を使ってみる (チュートリアル Part4: Swarm)
2019-10-20やったこと
docker を使ってみます。
チュートリアルの Part4 です。
調査
Swarmクラスタの理解
swarm とは Docker が動作し、クラスタに参加しているマシン・グループです。
swarm 上のマシンは物理あるいは仮想どちらも使えます。swarm に加わった後は、これらは ノード として参照されます。
$ docker swarm init
swarm mode を有効化し、現在のマシンを swarm マネージャにします。
仮想マシン の作成
$ docker-machine create --driver virtualbox myvm1
$ docker-machine create --driver virtualbox myvm2
swarm の初期化
$ docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100:2377"
Swarm initialized: current node (xxxxxxxxxxx) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token [my_token] 192.168.99.100:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
これで myvm1
が swarm manager となりました。
myvm2 を join する
$ docker-machine ssh myvm2 "docker swarm join \
--token [my_token] \
192.168.99.100:2377"
This node joined a swarm as a worker.
my_token
は自分の token に置き換えてください。
node 確認
$ docker-machine ssh myvm1 "docker node ls"
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
2y7x69ce4gkm0eewep0meoyjk * myvm1 Ready Active Leader 19.03.3
x3pmieqf6lri4b4wqp7hhgrw7 myvm2 Ready Active 19.03.3
デプロイ
$ docker-machine scp docker-compose.yml myvm1:~
$ docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"
※ docker-compose.yml は Part3 で使ったものを使用します。
image は Docker Hub にアップロードしているものを使います。
スタック (stack) の確認
$ docker-machine ssh myvm1 "docker stack ps getstartedlab"
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ocgug6lzsq8t getstartedlab_web.1 hogehoge/get-started:part1 myvm1 Running Running 21 hours ago
wwq7y0fp5a8k getstartedlab_web.2 hogehoge/get-started:part1 myvm2 Running Running 21 hours ago
oyeqksqowa9x getstartedlab_web.3 hogehoge/get-started:part1 myvm1 Running Running 21 hours ago
jl7rqoy40yxl getstartedlab_web.4 hogehoge/get-started:part1 myvm2 Running Running 21 hours ago
qrrp9ft7fv87 getstartedlab_web.5 hogehoge/get-started:part1 myvm2 Running Running 21 hours ago
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm1 - virtualbox Running tcp://192.168.99.100:2376 v19.03.3
myvm2 - virtualbox Running tcp://192.168.99.101:2376 v19.03.3
192.168.99.100
192.168.99.101
にアクセスすると、5つのコンテナのいずれかにアクセスします。
swarm を削除する
$ docker-machine ssh myvm2 "docker swarm leave"
$ docker-machine ssh myvm1 "docker swarm leave --force"
参考
File#flock を使ってみる (Ruby)
2019-10-20やったこと
File の flock について挙動を確認しました。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
排他ロックを使う
コンソール1
$ rails c
Running via Spring preloader in process 31090
Loading development environment (Rails 5.2.3)
irb(main):001:0> f = File.open("/tmp/foo", "w")
=> #<File:/tmp/foo>
irb(main):002:0> f.flock(File::LOCK_EX)
=> 0
コンソール2
$ rails c
Running via Spring preloader in process 31491
Loading development environment (Rails 5.2.3)
irb(main):001:0> f = File.open("/tmp/foo", "w")
=> #<File:/tmp/foo>
irb(main):002:0> f.flock(File::LOCK_EX)
コンソール2は止まっています。
コンソール1 (unlockする)
irb(main):003:0> f.flock(File::LOCK_UN)
=> 0
コンソール2
irb(main):002:0> f.flock(File::LOCK_EX)
=> 0
排他ロックされている場合、待たせない
コンソール1
$ rails c
Running via Spring preloader in process 33223
Loading development environment (Rails 5.2.3)
irb(main):001:0> f = File.open("/tmp/foo", "w")
=> #<File:/tmp/foo>
irb(main):002:0> f.flock(File::LOCK_EX | File::LOCK_NB)
=> 0
コンソール2
$ rails c
Running via Spring preloader in process 33627
Loading development environment (Rails 5.2.3)
irb(main):001:0> f = File.open("/tmp/foo", "w")
=> #<File:/tmp/foo>
irb(main):002:0> f.flock(File::LOCK_EX | File::LOCK_NB)
=> false
先に排他的ロックが取られている場合、処理を待つことなく false
が返されました。
参考
sed に BSD と GNU の確認方法
2019-10-20やったこと
sed でテキストの置換処理を調べていたのですが、書いてある通りに動かないことがありました。
それは、BSD と GNU で異なることが原因のようでした。
Mac ではデフォルトでは sed は BSD 版が入っているようです。
今回、以下をやりました。
- GNU 版のインストール
- BSD、GNUの確認方法
調査
GNU 版のインストール
brew でインストールします。
$ brew install gnu-sed
$ gsed --version
gsed (GNU sed) 4.7
Copyright (C) 2018 Free Software Foundation, Inc.
(以下省略)
BSD、GNUの確認方法
$ man sed
出力結果 (抜粋)
SED(1) BSD General Commands Manual SED(1)
NAME
sed -- stream editor
BSD 版が入っていることが確認できました。