GGG

プログラミング言語やソフトウェア開発について思ったことを書いてます

カスタマーサポート関係の便利サービス

現職ではこのようなサービスは使っていないが、世の中にはいろいろ便利なサービスがあるようだ。

Redash.io でテクニカルサポートとのやりとりを通して、intercom.com の存在を知ったので備忘録的に記載。

EメールやらSNSのチャットでのやりとりでは、ステータス管理の難しさや俗人化解消が難しいと思われる。こういったサービスを入れると便利になるんじゃないかな。

社員だけでなくお客さんにとっても良い効果があると思う。

有名どころ?

有名どころらしい。国内のテック系企業でも導入しているようです。

Zendeskは Trialで試したことがあったが、使い倒す前に終わってしまった。機能は豊富のようだった。

www.zendesk.co.jp

freshdesk.com

Redash.ioが使っているサービス

www.intercom.com

 in-app chatでもやりとりできて、Eメールから直接返信してもOKのようだ。

問い合わせをする側からすると最初戸惑ったがすぐ慣れるし、シンプルで使いやすい印象を受けた。

【感想】Kubernetes on AWS アプリケーションエンジニア 本番環境へ備える

Kubernetes on AWS~アプリケーションエンジニア 本番環境へ備える

概要

誰向け?

アプリケーションエンジニアのための書籍

つまり利用者としての立場の方に向けて書かれているような書籍。 EKSを使って構築していくサンプルコードもあるため、動作確認をしながら進められる。

試用時の料金について

EKSは無料ではないため、個人で動作検証する場合にはお金がかかるので注意。

どれくらいかかるかは、書籍に記載してあります。

注意事項「使い終わったらすぐ消す」を意識しましょう。

Kubernetesの詳細度について

kubernetesの詳細な挙動には、触れられておりません。

あくまでも読者の対象者はアプリケーションエンジニアのようです。

要所はしっかり説明してくれているので、さらに理解を深めたい場合には他の書籍をあたると良いと思います。

図解やコラムも豊富です。

そのため、「利用者」としての視点を大切にしているように見受けられる。 これからEKSを構築しようと考えているインフラエンジニアの方にも良いと思います。

Kubernetesへのとっかかりとしてはかなりの良書と思います。書籍がたくさん出ており、何から読み始めるか困ってるいる方は、この本を手にとってみてはいかがでしょうか。

気になったこと

EKS with farget

  • 本書で紹介されているEKS with fargate の構成にとても魅力を感じました。
  • EC2とFargateを混在できることを知りませんでした
  • スケールIN/OUTが何度も発生するようなDeploymentについてはFargateを採用することでワーカーノードのスケール・IN/OUTを考慮する必要性が減りそうです。
  • 保守・運用を2年半以上おこなってきた経験からの辛みからの解放
    • 脆弱性対応やVersionUpに伴うノードの更新作業から解放されるのは非常に大きいメリットと言えます

課題

Fargateは、データプレーンがブラックボックス化されている。 それに伴う様々な制約がある。

  • ワーカーノードへのマウントができなくなります。
  • DaemonSetも使えません。
    • モニタリングやロギング基盤をそのままはできない可能性が高いです。
  • 直近ではEFSがサポートされたため、StatefulSetを利用することはできるようです。

もし、DaemonSetでFluentD / Fluent-bitをScheduleされているようでしたらサイドカーパターンを使うなど何かしら別の方法での対応が必要となりそうです。

この辺のベストプラクティスがまだ確立されていないようですね。 これからのどういった動きがあるのか期待。

TIPS

preStop

  • デプロイする際に数秒間502   のエラーが出ることがあり悩みのタネでした。 preStopを利用することで発生をゼロに抑えられそう。

この本に出会えていなかったら、ずっと悩んでいた未解決の問題として残りそうでした。 今、トライ中!

kubernetes 構築時に既存VPCを使うか、新しく既存VPCを作ってクラスターを構築するか

  • 既存VPCを使った方が柔軟性が高いと記載されていた。 どっちが良いのか、何がGoodPracticeなのかずいぶん悩んだものだが、これで多少すっきりした。

セキュリティについて

紹介されておりました。CIにいれると良さそうです。

イメージスキャン

  • Privy
  • microscanner

ふるまい

  • Falco

商用製品

  • Sysdig
  • Aqua

そのネットワークポリシー、セキュリティーポリシー本当に必要?

今まで、設定するのが「是」であった。この問いは私には衝撃的だった。 そもそもクラスタを分けてしまってロードバランサー(ELB)を介してアクセスを強制することで、自動的にアクセスポリシーができあがる。

複数台クラスタ運用をすると別の新たな課題は発生する。 しかし、1クラスタ内でセキュリティ設定を頑張るのではなく、複数クラスタに分けることでセキュリティポリシーを満たす。

煩雑なNamespaceなどによる制約を設けるよりもクラスタ内での自由度は高くなって良さそうだ。

私の経験

Kopsを使って kubernetes on EC2 を実現して2年半以上本番環境で稼働させております。

Managedサービス利用のススメ

クラスタやメトリクス、モニタリング、ロギングのスタックについて

自前で構築すると保守・運用が大変 SaaS系を使ったり、お使いのパブリッククラウドが提供しているサービスを使うなどして、SelfManagedしないようにした方が良さそうです。 私自身、マネージャを務めるSREはまだまだ小さい組織です。

導入当初は、外部に支払うコストを減らすために自前で構築して運用を進めておりましたが事業規模が大きくなり、クラスターが増え、見るメトリクスが増えるなどの運用負荷増大につれて徐々に運用が辛くなってきました。

現在は、SaaSへの置き換えを進める(ある意味で自動化)ことで、改善作業への取り組むための時間を確保しようとしております。 当然、どれくらいのコストがかかるかは事業規模等によりますがSaaS置き換えによるランニングコストと移行の負荷が妥当であれば十分検討可能なのではないかと思います。

組織は大きくないけど、Kubernetesいれたいよね。という組織にはManagedで整備するのがお勧めです。

helm 入門(kubernetes)

以下のサイトを参考に作業してみた。 helmとはどんなものかは、さわってみた qiita.com

前提条件

  • mac
  • minikube
  • kubernetes

mac os

kubernetes version

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.1", GitCommit:"3a1c9449a956b6026f075fa3134ff92f7d55f812", GitTreeState:"clean", BuildDate:"2018-01-04T20:00:41Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"0b9efaeb34a2fc51ff8e4d34ad9bc6375459c4a4", GitTreeState:"dirty", BuildDate:"2017-10-17T15:09:55Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}

minikube version

 $ minikube version
minikube version: v0.23.0

手順

brew install

$ brew install kubernetes-helm

helm init

$ Helm init

Creating /Users/<user>/.helm 
Creating /Users/<user>/.helm/repository 
Creating /Users/<user>/.helm/repository/cache 
Creating /Users/<user>/.helm/repository/local 
Creating /Users/<user>/.helm/plugins 
Creating /Users/<user>/.helm/starters 
Creating /Users/<user>/.helm/cache/archive 
Creating /Users/<user>/.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/<user>/.helm.

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

確認: tilter

$ kubectl get pods --all-namespaces | grep tiller 
kube-system   tiller-deploy-5b9d65c7f-xsz6k   1/1       Running   0          18m

確認 helm version

$ helm version
Client: &version.Version{SemVer:"v2.7.2", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.7.2", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}

確認:stableのパッケージ一覧

 helm search
NAME                            VERSION DESCRIPTION                                       
stable/acs-engine-autoscaler    2.1.1   Scales worker nodes within agent pools            
stable/aerospike                0.1.5   A Helm chart for Aerospike in Kubernetes          
stable/artifactory              6.2.4   Universal Repository Manager supporting all maj...
stable/aws-cluster-autoscaler   0.3.2   Scales worker nodes within autoscaling groups.    
stable/buildkite                0.2.0   Agent for Buildkite                               
stable/centrifugo               2.0.0   Centrifugo is a real-time messaging server.       
stable/chaoskube                0.6.1   Chaoskube periodically kills random pods in you...
stable/chronograf               0.4.0   Open-source web application written in Go and R...
stable/cluster-autoscaler       0.3.1   Scales worker nodes within autoscaling groups.    
stable/cockroachdb              0.5.4   CockroachDB is a scalable, survivable, strongly...
stable/concourse                0.10.8  Concourse is a simple and scalable CI system.     
stable/consul                   1.1.3   Highly available and distributed service discov...
stable/coredns                  0.8.0   CoreDNS is a DNS server that chains plugins and...
stable/coscale                  0.2.0   CoScale Agent                                     
stable/dask-distributed         2.0.0   Distributed computation in Python                 
stable/datadog                  0.10.3  DataDog Agent                                     
stable/docker-registry          1.0.0   A Helm chart for Docker Registry                  
stable/dokuwiki                 0.2.1   DokuWiki is a standards-compliant, simple to us...
stable/drupal                   0.11.3  One of the most versatile open source content m...
stable/elastalert               0.1.0   ElastAlert is a simple framework for alerting o...
stable/etcd-operator            0.6.2   CoreOS etcd-operator Helm chart for Kubernetes    
stable/external-dns             0.4.4   Configure external DNS servers (AWS Route53, Go...
stable/factorio                 0.3.0   Factorio dedicated server.                        
stable/fluent-bit               0.2.4   Fast and Lightweight Log/Data Forwarder for Lin...
stable/g2                       0.2.0   G2 by AppsCode - Gearman in Golang                
stable/gcloud-endpoints         0.1.0   Develop, deploy, protect and monitor your APIs ...
stable/gcloud-sqlproxy          0.2.2   Google Cloud SQL Proxy                            
stable/ghost                    2.1.7   A simple, powerful publishing platform that all...
stable/gitlab-ce                0.2.1   GitLab Community Edition                          
stable/gitlab-ee                0.2.1   GitLab Enterprise Edition                         
stable/grafana                  0.5.4   The leading tool for querying and visualizing t...
stable/hadoop                   1.0.1   The Apache Hadoop software library is a framewo...
stable/heapster                 0.2.4   Heapster enables Container Cluster Monitoring a...
stable/influxdb                 0.8.0   Scalable datastore for metrics, events, and rea...
stable/ipfs                     0.2.0   A Helm chart for the Interplanetary File System   
stable/jasperreports            0.2.3   The JasperReports server can be used as a stand...
stable/jenkins                  0.11.0  Open source continuous integration server. It s...
stable/joomla                   0.5.4   PHP content management system (CMS) for publish...
stable/kapacitor                0.5.0   InfluxDB's native data processing engine. It ca...
stable/keel                     0.2.0   Open source, tool for automating Kubernetes dep...
stable/kibana                   0.2.0   Kibana is an open source data visualization plu...
stable/kube-lego                0.3.0   Automatically requests certificates from Let's ...
stable/kube-ops-view            0.4.1   Kubernetes Operational View - read-only system ...
stable/kube-state-metrics       0.5.1   Install kube-state-metrics to generate and expo...
stable/kube2iam                 0.6.1   Provide IAM credentials to pods based on annota...
stable/kubed                    0.1.0   Kubed by AppsCode - Kubernetes daemon             
stable/kubernetes-dashboard     0.4.3   General-purpose web UI for Kubernetes clusters    
stable/lamp                     0.1.0   Modular and transparent LAMP stack chart suppor...
stable/linkerd                  0.4.0   Service mesh for cloud native apps                
stable/locust                   0.1.2   A modern load testing framework                   
stable/magento                  0.5.2   A feature-rich flexible e-commerce solution. It...
stable/mailhog                  2.0.0   An e-mail testing tool for developers             
stable/mariadb                  2.1.3   Fast, reliable, scalable, and easy to use open-...
stable/mcrouter                 0.1.0   Mcrouter is a memcached protocol router for sca...
stable/mediawiki                0.6.1   Extremely powerful, scalable software and a fea...
stable/memcached                2.0.1   Free & open source, high-performance, distribut...
stable/metabase                 0.3.0   The easy, open source way for everyone in your ...
stable/minecraft                0.2.0   Minecraft server                                  
stable/minio                    0.4.3   Distributed object storage server built for clo...
stable/mongodb                  0.4.22  NoSQL document-oriented database that stores JS...
stable/mongodb-replicaset       2.1.4   NoSQL document-oriented database that stores JS...
stable/moodle                   0.4.1   Moodle is a learning platform designed to provi...
stable/msoms                    0.1.1   A chart for deploying omsagent as a daemonset K...
stable/mysql                    0.3.4   Fast, reliable, scalable, and easy to use open-...
stable/namerd                   0.2.0   Service that manages routing for multiple linke...
stable/neo4j                    0.4.0   Neo4j is the world's leading graph database       
stable/newrelic-infrastructure  0.0.1   A Helm chart to deploy the New Relic Infrastruc...
stable/nginx-ingress            0.8.22  An nginx Ingress controller that uses ConfigMap...
stable/nginx-lego               0.3.0   Chart for nginx-ingress-controller and kube-lego  
stable/odoo                     0.7.0   A suite of web based open source business apps.   
stable/opencart                 0.6.0   A free and open source e-commerce platform for ...
stable/openvpn                  2.0.2   A Helm chart to install an openvpn server insid...
stable/orangehrm                0.5.0   OrangeHRM is a free HR management system that o...
stable/osclass                  0.5.0   Osclass is a php script that allows you to quic...
stable/owncloud                 0.5.3   A file sharing server that puts the control and...
stable/pachyderm                0.1.1   Pachyderm is a large-scale container-based work...
stable/parse                    0.3.2   Parse is a platform that enables users to add a...
stable/percona                  0.3.0   free, fully compatible, enhanced, open source d...
stable/phabricator              0.5.5   Collection of open source web applications that...
stable/phpbb                    0.6.0   Community forum that supports the notion of use...
stable/postgresql               0.8.5   Object-relational database management system (O...
stable/prestashop               0.5.3   A popular open source ecommerce solution. Profe...
stable/prometheus               4.6.16  Prometheus is a monitoring system and time seri...
stable/prometheus-to-sd         0.1.0   Scrape metrics stored in prometheus format and ...
stable/rabbitmq                 0.6.14  Open source message broker software that implem...
stable/rabbitmq-ha              0.1.1   Highly available RabbitMQ cluster, the open sou...
stable/redis                    1.1.5   Open source, advanced key-value store. It is of...
stable/redis-ha                 2.0.0   Highly available Redis cluster with multiple se...
stable/redmine                  2.0.1   A flexible project management web application.    
stable/rethinkdb                0.1.0   The open-source database for the realtime web     
stable/risk-advisor             2.0.0   Risk Advisor add-on module for Kubernetes         
stable/rocketchat               0.1.2   Prepare to take off with the ultimate chat plat...
stable/sapho                    0.2.1   A micro application development and integration...
stable/searchlight              0.1.0   Searchlight by AppsCode - Alerts for Kubernetes   
stable/selenium                 0.2.5   Chart for selenium grid                           
stable/sensu                    0.2.0   Sensu monitoring framework backed by the Redis ...
stable/sentry                   0.1.7   Sentry is a cross-platform crash reporting and ...
stable/sonarqube                0.3.2   Sonarqube is an open sourced code quality scann...
stable/sonatype-nexus           0.1.6   Sonatype Nexus is an open source repository man...
stable/spark                    0.1.6   Fast and general-purpose cluster computing system.
stable/spartakus                1.1.3   Collect information about Kubernetes clusters t...
stable/spinnaker                0.3.10  Open source, multi-cloud continuous delivery pl...
stable/spotify-docker-gc        0.1.1   A simple Docker container and image garbage col...
stable/stash                    0.2.0   Stash by AppsCode - Backup your Kubernetes Volumes
stable/sugarcrm                 0.2.2   SugarCRM enables businesses to create extraordi...
stable/suitecrm                 0.3.2   SuiteCRM is a completely open source enterprise...
stable/sumokube                 0.1.1   Sumologic Log Collector                           
stable/sumologic-fluentd        0.2.1   Sumologic Log Collector                           
stable/swift                    0.2.0   swift by AppsCode - Ajax friendly Helm Tiller P...
stable/sysdig                   0.4.0   Sysdig Monitor and Secure agent                   
stable/telegraf                 0.3.0   Telegraf is an agent written in Go for collecti...
stable/testlink                 0.4.16  Web-based test management system that facilitat...
stable/traefik                  1.15.2  A Traefik based Kubernetes ingress controller w...
stable/uchiwa                   0.2.2   Dashboard for the Sensu monitoring framework      
stable/verdaccio                0.1.2   A lightweight private npm proxy registry (sinop...
stable/voyager                  2.0.0   Voyager by AppsCode - Secure Ingress Controller...
stable/weave-cloud              0.1.2   Weave Cloud is a add-on to Kubernetes which pro...
stable/weave-scope              0.9.1   A Helm chart for the Weave Scope cluster visual...
stable/wordpress                0.7.9   Web publishing platform for building blogs and ...
stable/zeppelin                 1.0.0   Web-based notebook that enables data-driven, in...
stable/zetcd                    0.1.4   CoreOS zetcd Helm chart for Kubernetes    

install

$ helm install stable/redis-ha
NAME:   agile-guppy
LAST DEPLOYED: Mon Jan  8 18:01:54 2018
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Service
NAME                             TYPE       CLUSTER-IP  EXTERNAL-IP  PORT(S)    AGE
agile-guppy-redis-ha-master-svc  ClusterIP  10.0.0.189  <none>       6379/TCP   2s
agile-guppy-redis-ha-sentinel    ClusterIP  10.0.0.198  <none>       26379/TCP  2s
agile-guppy-redis-ha-slave-svc   ClusterIP  10.0.0.61   <none>       6379/TCP   2s

==> v1beta1/Deployment
NAME                           DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
agile-guppy-redis-ha-sentinel  3        3        3           0          2s
agile-guppy-redis-ha-server    3        3        3           0          2s

==> v1/Pod(related)
NAME                                            READY  STATUS             RESTARTS  AGE
agile-guppy-redis-ha-sentinel-55b94ddd8c-5nxsg  0/1    ContainerCreating  0         2s
agile-guppy-redis-ha-sentinel-55b94ddd8c-9kscd  0/1    ContainerCreating  0         2s
agile-guppy-redis-ha-sentinel-55b94ddd8c-9qfk4  0/1    ContainerCreating  0         2s
agile-guppy-redis-ha-server-d474fdb7-25b7x      0/1    Pending            0         2s
agile-guppy-redis-ha-server-d474fdb7-g27gq      0/1    ContainerCreating  0         2s
agile-guppy-redis-ha-server-d474fdb7-m2kxw      0/1    ContainerCreating  0         2s


NOTES:
Redis cluster can be accessed via port 6379 on the following DNS name from within your cluster:
agile-guppy-redis-ha.default.svc.cluster.local

To connect to your Redis server:

1. Run a Redis pod that you can use as a client:

   kubectl exec -it agile-guppy-redis-ha-master-0 bash

2. Connect using the Redis CLI:

  redis-cli -h agile-guppy-redis-ha.default.svc.cluster.local

List

$ helm list                                                                                                              
NAME        REVISION    UPDATED                     STATUS      CHART           NAMESPACE
agile-guppy 1           Mon Jan  8 18:01:54 2018    DEPLOYED    redis-ha-2.0.0  default  

確認pods

kubectl get pods --show-labels                                                                                         
NAME                                             READY     STATUS    RESTARTS   AGE       LABELS
agile-guppy-redis-ha-sentinel-55b94ddd8c-5nxsg   1/1       Running   0          2h        app=redis-ha,chart=redis-ha-2.0.0,heritage=Tiller,name=agile-guppy-redis-ha-sentinel,pod-template-hash=1165088847,podIP=172.17.0.7,redis-role=sentinel,release=agile-guppy
agile-guppy-redis-ha-sentinel-55b94ddd8c-9kscd   1/1       Running   0          2h        app=redis-ha,chart=redis-ha-2.0.0,heritage=Tiller,name=agile-guppy-redis-ha-sentinel,pod-template-hash=1165088847,podIP=172.17.0.8,redis-role=sentinel,release=agile-guppy
agile-guppy-redis-ha-sentinel-55b94ddd8c-9qfk4   1/1       Running   0          2h        app=redis-ha,chart=redis-ha-2.0.0,heritage=Tiller,name=agile-guppy-redis-ha-sentinel,pod-template-hash=1165088847,podIP=172.17.0.6,redis-role=sentinel,release=agile-guppy
agile-guppy-redis-ha-server-d474fdb7-25b7x       1/1       Running   0          2h        app=redis-ha,chart=redis-ha-2.0.0,heritage=Tiller,name=redis-server,pod-template-hash=80309863,podIP=172.17.0.9,redis-node=true,redis-role=master,release=agile-guppy,runID=fe5a64
agile-guppy-redis-ha-server-d474fdb7-g27gq       1/1       Running   0          2h        app=redis-ha,chart=redis-ha-2.0.0,heritage=Tiller,name=redis-server,pod-template-hash=80309863,podIP=172.17.0.11,redis-node=true,redis-role=slave,release=agile-guppy,runID=7781d7
agile-guppy-redis-ha-server-d474fdb7-m2kxw       1/1       Running   0          2h        app=redis-ha,chart=redis-ha-2.0.0,heritage=Tiller,name=redis-server,pod-template-hash=80309863,podIP=172.17.0.10,redis-node=true,redis-role=slave,release=agile-guppy,runID=69b5f2

Delete

$ helm delete agile-guppy
release "agile-guppy" deleted

最後に

  • 参考URLでは独自パッケージ作成をやっているため、そのうちやってみたい。

簡単にredis-ha をデプロイすることができた。

仕事でkubernetesを使っているが、自分で構築した時にそこそこ時間がかかったのを覚えてる。 これだけ簡単にデプロイできるなら選択肢としてもありかも?

もう少し検証した上で採用までもっていけるか判断したいなと思いました。 設定項目はとても参考になりそうです。こちらももう少し掘り下げて行きたい。

brew doctor (coreutil関連)[Putting non-prefixed findutils ...]

brew doctorを実行したら下記のWarningが出ていたので対応した。いつから? もしかしたら brew upgrade して pythonがバージョンが上がったのが影響しているかもしれない。

findutilsについて警告がでている。 要はfindutilsをuninstall -> install して解決。

症状

$ brew doctor 
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: Putting non-prefixed findutils in your path can cause python builds to fail.

解決

$ brew uninstall findutils 
Uninstalling /usr/local/Cellar/findutils/4.6.0... (25 files, 1.6MB)


$ brew install findutils
==> Downloading https://homebrew.bintray.com/bottles/findutils-4.6.0.high_sierra.bottle.2.tar.gz
######################################################################## 100.0%
==> Pouring findutils-4.6.0.high_sierra.bottle.2.tar.gz
==> Caveats
All commands have been installed with the prefix 'g'.
If you do not want the prefix, install using the "with-default-names" option.

If you need to use these commands with their normal names, you
can add a "gnubin" directory to your PATH from your bashrc like:

    PATH="/usr/local/opt/findutils/libexec/gnubin:$PATH"

Additionally, you can access their man pages with normal names if you add
the "gnuman" directory to your MANPATH from your bashrc as well:

    MANPATH="/usr/local/opt/findutils/libexec/gnuman:$MANPATH"
==> Summary
🍺  /usr/local/Cellar/findutils/4.6.0: 34 files, 1.6MB

参考

Installing and configuring GNU command-line utilities

brew link error

brew doctorを実行したら下記のwarningが出ていたので対応した。 下記URLを参考にしました。

症状

$ brew doctor
・
・
Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
  python

brew link python

inking /usr/local/Cellar/python/2.7.14_2... Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

解決 

sudo install -d -o $(whoami) -g admin /usr/local/Frameworks

参考

gist.github.com

「PEAK PERFORMANCE 最強の成長術」読んで見た

PEAK PERFORMANCE 最強の成長術

書店でふと目にとまった。 年末だし、振り返るにはいいかなと思った。来年はさらに良い年になるようにしたいです。

まとめ

  • 上手な休息を実践する
  • 自分を超越した目的を持つ。
  • 負荷は頑張ればギリギリ届くくらいを目標とする

上手な休息

  • マインドフルネスがいいらしい。タイマーを使うといいかも?

1日

業務中

業務中にもしっかり休息時間をとることが重要 個人差があるみたいで、だいたい30分〜90分間ごとに休息をとるのがいいみたい。 本では紹介されていないけど、ポモドーロとか有名ですね。

屋内外問わず散歩がいいらしい。席を立てないなら風景画もあり?

仮眠をとる

30分未満が良いらしい。

帰宅後

  • 家に仕事を持ち帰らない。
  • 睡眠がとても重要。7時間以上寝たほうがいいみたい

平日は寝れていないし、家に帰っても時々やってしまっている。。。

週末

  • 1週間に1日は完全に仕事を忘れる日があると良い。忙しい時ほど重要みたい。

1日は家族と過ごして、携帯もPCも見ない日を作りたい。

長期休暇

  • リフレッシュ休暇は重要みたい。現職だと5営業日しか連続で休めないので、祝日と組み合わせると良いかも?来年は必ず取得しよう。

ここ最近は旅行先でぼーっと過ごしたが、そんなに間違ってなかったかも。来年も続けたい。

目的

  • 自分のためだと限界があるみたい。火事場の馬鹿力を出すためには「誰かのために」があるといいらしい
  • 目に見えるところに貼って毎日確認

職場に貼るのはちょっと恥ずかしい。手帳にでも書いて始業前に確認することから始めようかな?

負荷

  • 重すぎると耐えられず、軽すぎると負荷にならない?絶妙なポイントがいい。コンフォートゾーンから出てるポイントがいいみたい。
    • 人によっても違うからメンバーにアサインする際には注意しないと成長に結びつかないな。来年はもう少し気を使おう。

ルーティー

  • 心と体の準備はアスリートでなくてもあるといいらしい。千差万別。自分に合ったルーティーンを見つけたい。

補足

PEAK PERFORMANCE 最強の成長術

PEAK PERFORMANCE 最強の成長術

プロダクションレディマイクロサービスを読んでみた

プロダクションレディマイクロサービス ―運用に強い本番対応システムの実装と標準化

書籍を読んだものの、読みっぱなしになっていたので気づいた点をメモしておこうと思う。

動機

  • 所属先ではSREプロジェクトが立ち上がりジョインしているが、具体的に何をするのかよくわかっておらず勉強し始めた次第。
  • コンテナを用いた開発・本番運用が組織内で本格化している。
  • モノリシックなアーキテクチャからマイクロサービスへの転換が起こり始めている。

感想

大規模サービス向けに書かれている内容が多いです。 そのため、求められる基準がかなり高い。

私はスタートアップ系のため、うーん。ただ学ぶことは非常に多い。 これが全てできるようになったら大企業が行なっている品質基準を満たすことができるということがわかった。

これから少しずつ対応していきたい。

書籍でも対応するのに数年かかると言っている。焦らずに地道に対応して行くしかないですね。

思ったことについて、それぞれの項目の中で書いた。

概要

マイクロサービス化をした(あるいは、これからする)ものの、本番環境で利用するには何をすべきかについて 8つの評価基準を設けて、それについて語っているものです。

また、これとは別に可用性という9つ目の指標があるが、これについては8つの基準を満たすことで高い可用性を保つことができると言われている。

  • 安定性 (Stability)
  • 信頼性 (Reliability)
  • スケーラビリティ (Scalability)
  • パフォーマンス (Performance)
  • 耐障害性 (Fault Tolerance)
  • 大惨事対応 (Catastrophe Preparedness)
  • 監視 (Monitoring)
  • ドキュメント (Documentation)

8評価基準に対するメモ

安定性

変更によるマイナスの影響を緩和するための施策が用意されていること

安定したデプロイ 

開発環境 -> ステージング -> カナリア --> 本番

デプロイによる影響を最小限に抑える。また問題が発生しても自動的にリカバリーする仕組みが有ると良い。 カナリア:本番環境の2-5%程度のトラフィックを処理させて変更内容を検証する環境をいうらしい。しばらく、この環境で運用し問題がなければ本番環境にデプロイする流れ。

デプロイに失敗した場合に自動的にロールバックする仕組みが有ると良い。

所感

カナリア環境はないので、へぇー!と思った。用意してみたい。 また、デプロイ成功したんだけど、その後の継続的なヘルスチェックで失敗したらロールバックさせる仕組みが有るといいなと思った。

信頼性

  • クライアントやステークホルダーからみて安心して使えるマイクロサービスであることに対する基準
    • テストがしっかりされている
    • 安心、確実なデプロイ

クライアントはマイクロサービスを使っている別のマイクロサービスという意味も有るかも。

所感

  •  テストはしてるけど、十分にできているかは疑問が湧いた。今までと違った観点でのテストが必要かもしれない。

スケーラビリティ

タスクをどのように分割統治するか

並行性、パーティション分割

  • トラフィックの増加に簡単に対応できる
    • できないと , レイテンシ増加、インシデント、機能停止に繋がる。
  • 質的な成長、量的な成長の二つの判断基準を明確にする
    • 質:ページビューなど
    • 量:毎秒何リクエストまで処理可能かなど
  • データ格納、処理する方法もスケーラブル
  • 急激なトラフィック増大(バースト処理)に対応できる

アーキテクチャのレビューを行うことでどこに問題があるか分かるらしい。

所感

  • ウィークポイントな気がする。書きたいことがいっぱいありすぎる。

パフォーマンス

マイクロサービスがタスクをどれくらい効率よく処理しているか

  • 非同期処理によりパフォーマンス・スケーラビリティ向上ができるのに同期処理にしている ... 改善必要
  • コストが高い通信などの処理を大量に行なっている .. SQLの大量発行とか?
  • CPU,メモリなどのリソース割り当てを富豪的に使っている ... お金の無駄遣い? (コストパフォーマンス?)

所感

  • ウィークポイントな気がする。アプリケーション内の処理で改善できることがたくさんありそう。

耐障害性 / 大惨事対応

機能停止、インシデントが発生した場合の対処が行われている

それらが自動的に繰り返し、ランダムでテストされている

障害の検出と修正

新たに見つかったら、テストスイートに追加する

  1. 障害発生のシナリオを明らかにする
  2. 戦略を練る
  3. 計画を立てる

計画を立てて終わりだと、あまり意味がない。避難訓練みたいに実際にやってみることが大事。

データセンターがダウンしたことを想定し、あるリージョン上のインスタンスを強制的にダウンさせてみるなど。

アーキテクチャレビューを重ねることで、色々問題点が分かるみたい。 基本的にはSPOF(Single Point of Failure)を排除して行くことが課題になりそうだ。

やってみること

回復性テスト

  • マイクロサービスエコシステム、インフラに強制的に障害を発生させてテストする
  • コードテスト
  • ロードテスト
  • カオステスト
    • 本番環境で障害シナリオを実行する。(ランダム&スケジュールされている)
    • 全ての障害シナリオに対応できることを証明し続ける。
    • Netfilixがやってると言われているテストでしょうか?

負荷テスト

トラフィックの急激な変化にどれだけ耐えられるか明確化する。また耐えられなくなった場合の対応措置を明確化する

手に負えない場合のシナリオ

どうしようもない場合に、何をすべきか決めておく。

連絡先の共有とかでしょうか?

所感

  • カオステストやってみたい。

監視

ロギング

必要な情報に簡単にアクセス、検索できることが重要らしい。 最近だと ElasticSearch , Kibanaとか?

必要な情報の定義が難しい。自分の解釈では問題が発生した際に再現をしなくてもログだけで原因がわかり修正ができる。ということかな。 再現できる不具合ばかりではないため。

GUI

dashboardとかの話。 サービスが健全で有ることがすぐ分かること。エンジニアでなくても見て分かることが重要らしい。 見せ方重要ですね。

アラート

効果的でアクション可能な主要メトリックに基づくアラート

障害の検知はアラートで行う。ダッシュボードを見ないとわからない・・・というのはよくないらしい。

  • 正常 , 警告、危険の3種類のアラートが有ると良いみたい。

所感

だいたいできてるのかな。ただ改善点は有る。

ドキュメント

  • 一元管理
  • 簡単にアクセス、検索できることが大事。

所感

ドキュメントはいくつかの場所に散在しちゃってて、改善したいと思ってました。

その他

  • マイクロサービス間の通信について
    • RPC(リモートプロシージャコール)を介したやりとり ... 非同期
    • REST APIによるやりとり ... 同期

マイクロサービスエコシステムの4層モデル

layer / 対象 備考
4 マイクロサービス
3 アプリケーションプラットフォーム
2 通信 サービス間の通信。DNS, RPC, API サービス検出、サービスレジストリ、負荷分散
1 ハードウェア Machine, OS , Docker,...

アンチパターン

  • APIをバージョニングすること