qicoo-controller-01
サーバから打つ事をにより発動するコントローラとそれをコード化したansibleで管理する。
master
ブランチのみが安定版です。
ほとんどのEKSやAWSリソースに対するアクションは https://github.com/cndjp/qicoo-ansible/tree/master/slackbot
配下にあるコードをソースとして動いている、
qicoo-controller-01
サーバ上のslackbotのサービスをcndjpのslackの #qicoo-updown
からオペレーション出来るようにデザインしてあります。
細かなオペレーションはあえてしないようなデザインになってますので、細かい事をしたい場合は直接qicoo-controller-01
サーバで実行してください。
また東●仗助が使用するバッチやスクリプトは https://github.com/cndjp/qicoo-ansible/tree/master/bat
配下にあります。
現状では以下のコマンドがサポートされています。
@東● 仗助 上げて:qicooのインフラを全部上げる
@東● 仗助 下げて:qicooのインフラを全部下げる
@東● 仗助 見せて:qicooの全インフラの状態を見る
@東● 仗助 覚えて <クラスター/プロメテウス>:今の状態でbackupをとる
@東● 仗助 戻して:直前のbackupに戻す
@東● 仗助 繋げて:Spinnakerのweb画面を見れるようにする
@東● 仗助 調べて:AWSリソースの状態だけみる
@東● 仗助 すけえる <数字>:<数字>個にEKSをスケールする
@東● 仗助 テスト:生存確認用
前述の通り、これらのコマンドを使えばインフラの準備から全削除、バックアップリストア、スケールアップまでサポートされています。
また、全てのコマンドの出力はログを取っており、そのログは qicoo-controller-01
サーバ上の /home/qicoo/
またはcndjpのslack上に送ります。
東●仗助は同時に動作して欲しくないコマンドがあり、そのコマンドに対してはメモリ上にフラグを立ててロック排他制御を実施しています。
ロック作動時には ちょっと待てって。オレはバカだから一つの事しかできねぇんでよぉ。
と呟きます。
コマンドリファレンス内で🔐マークがあるコマンドが対象です。
このコマンドでは、以下のリソースをデプロイします(ソース:https://github.com/cndjp/qicoo-ansible/blob/master/bat/async-ansible-up.py
)。
Python3によって非同期、パイプラインの依存性解決が管理されており、大量のリソースをデプロイしながらも高速かつ正確に動きます。
[主なAWSリソース]
EKS:qicoo-eks-01
RDS:qicoo-rds-01,qicoo-rds-s01,qicoo-rds-d01
ElastiCache:qicoo-ecache-01,qicoo-ecache-s01,qicoo-ecache-d01
EBS※2:ebs-prometheus
Route53:qicoo-rds-01,qicoo-rds-s01,qicoo-rds-d01,qicoo-ecache-01,qicoo-ecache-s01,qicoo-ecache-d01のCNAME
[主なk8sリソース]
ARK:`https://github.com/cndjp/qicoo-ansible/tree/master/ark/files/main`
External-dns:`https://github.com/cndjp/qicoo-ansible/blob/master/eks/files/eks-externaldns-deployment.yaml`,`https://github.com/cndjp/qicoo-ansible/blob/master/eks/files/eks-externakdns-namespace.yaml`,`https://github.com/cndjp/qicoo-ansible/blob/master/eks/files/eks-externakdns-serviceaccount.yaml`
Spinnaker: `hal deploy apply`を実行
Prometheus: `https://github.com/cndjp/qicoo-ansible/tree/master/spinnaker/files`
前回のリストア※1: `https://github.com/cndjp/qicoo-ansible/blob/master/bat/bot-restore.sh`を実行
尚このコマンドは一応
冪等性が考慮されているので、何度実行してもOKです。
が、もちろん完全ではないので、主にSpinnaker周りで一部うまく動作しないコンポーネントがあるかもしれませんが、そうしたら手で修正してください。
※1...リストアするk8sリソースは https://github.com/cndjp/qicoo-ansible/blob/master/vars/all.yml
に定義されている、ネームスペースに絞っています。
※2...Prometheusが使用するEBSに関しては、「上げて」時にCloudformationのebs-prometheus
により生成されたスナップショットからリストア、スナップショットの削除しています。そして「下げて」時にebs-prometheus
上のDeletionPolicy: Snapshot
によってスナップショットが新たに生成され、このライフサイクルによりあたかもプロメテウスのメトリクスが継続して収集しているようなインフラを実現しています。
このコマンドでは、@東● 仗助 上げて
によりデプロイされたリソースを バックアップを取って
全て削除します(ソース:https://github.com/cndjp/qicoo-ansible/blob/master/bat/async-ansible-down.py
)。
Python3によって非同期、パイプラインの依存性解決が管理されており、大量のリソースを消しながらも高速かつ正確に動きます。
尚、バックアップ対象は以下です。
・Kubernetes上の全リソース
・Spinnakerの設定
尚このコマンドは冪等性が考慮されているので、何度実行してもOKです。 下げての方は、安定して何度も実行できます。
このコマンドでは、qicoo
で使うほとんどのリソースの状態を確認できます。
以下のコマンドを打っています。
kubectl get all --all-namespaces
aws rds describe-db-instances --output table
aws elasticache describe-cache-clusters --output table
aws eks describe-cluster --name qicoo-eks-01
aws route53 list-resource-record-sets --hosted-zone-id Z36M600IDI6K7I --output table
このコマンドでは、以下のリソースのバックアップをとります(ソース:https://github.com/cndjp/qicoo-ansible/blob/master/bat/bot-backup.sh
)。
・現在のKubernetes上の全リソース
・現在のSpinnakerの設定
尚、Kubernetes上の全リソースはheptio/ark
によってバックアップされ、S3上の qicoo-backupbucket-01
に日付入りで永続化されています。
このコマンドでは、以下のリソースのバックアップをとります(ソース:https://github.com/cndjp/qicoo-ansible/blob/master/bat/ebs-snap-or-down.sh
)。
・現在のPrometheusにマウントされたEBSのスナップショット
このコマンドでは、以下のリソースのリストアを実施します(ソース:https://github.com/cndjp/qicoo-ansible/blob/master/bat/bot-restore.sh
)。
・直前のKubernetes上のうち、変数RESTORE_NAMESPACESで定義されたnamespaceのリソースのみ
・直前のSpinnakerの設定
注意点としては、Spinnakerの設定の巻き戻しはデプロイし直さないとうまくいかないので、一度今立っているSpinnakerは全部けしてしまう動作をします。
このコマンドでは、EKS上にデプロイしたSpinnakerの gate
と deck
に対して、qicoo-controller-01
上のnginx(ソース:https://github.com/cndjp/qicoo-ansible/tree/master/nginx
)がリバプロさせます。
これの発動後、cndjpのslackの #qicoo-updown
に表示されるログイン情報をブラウザに入力すればSpinnakerのWeb UIが見れます。
尚、このコマンドは冪等性担保かつ例外処理に対応しているので、繰り返し打つと新たにSpinnakerの gate
と deck
に対してリバプロさせます。
これは、例えばSpinnakerを繰り返しデプロイし直す際に使えます。
このコマンドでは、qicooで使用するAWS上のリソースの状態の一覧を表示します(ソース:https://github.com/cndjp/qicoo-ansible/tree/master/check
)。
このコマンドでは、指定した <数字> の個数にEKSのノードをスケールさせます。
すけえるすることによってノード数を増やす分にはEKS上のサービスが落ちる事はありません。
ノードを減らす時は、新しくできた順にノードを消すようにしているのでそれに乗っ取ってポッドをどかす操作をする必要はあります。
すごいクラウドネイティブでインスタ映えする機能です。
このコマンドは、東●仗助サービスが生きているか確認します。
テストで失敗しても直せばいいのによぉ〜〜〜〜〜〜〜。
って返ってことなかったら確実に動いてません。
以下で動かすことが前提です。
$ cd /home/qicoo/qicoo-ansible
ansibleのplaybookを適用する時のうんとかなんとかコマンド打つのが面倒なので便利なエイリアスをqicoo-controller-01
サーバ上に既に設定してあります。
$ alias a="ansible-playbook -i localhost, -c local"
普通はこんな風にコマンドを発動できます。
$ a cli/install-aws-cli.yml
ほぼ全て
$ vim vars/all.yml
暗号化されたクレデンシャル情報
$ vim vars/secret.yml
以下のコマンドで東●仗助を使わずにデプロイもできます。
$ bat/async-ansible-up.py /home/qicoo/qicoo-all-up/qicoo-all-up_$(date +%Y%m%d%H%M%S).log
$ a aws/create-rds-development.yml
$ a aws/create-rds-staging.yml
$ a aws/create-rds-production.yml
$ a aws/create-elasticache-development.yml
$ a aws/create-elasticache-staging.yml
$ a aws/create-elasticache-production.yml
$ a aws/create-s3-bucket.yml
$ a aws/create-ec2-securitygroup.yml
$ a eks/setup-eks-vpc.yml
$ a eks/setup-eks-env.yml
$ hal deploy apply
$ kubectl apply -f spinnaker/files/
$ hal deploy connect
これで https://<qicoo-controller-01のIP>
で見れる。
$ a ark/create-heptio-deployment.yml
$ a ark/create-heptio-backup.yml
$ a ark/create-heptio-restore.yml
以下のコマンドで東●仗助を使わずに削除もできます。
$ bat/async-ansible-down.py /home/qicoo/qicoo-all-down/qicoo-all-down_$(date +%Y%m%d%H%M%S).log
$ a aws/delete-rds-development.yml
$ a aws/delete-rds-staging.yml
$ a aws/delete-rds-production.yml
$ a aws/delete-elasticache-development.yml
$ a aws/delete-elasticache-staging.yml
$ a aws/delete-elasticache-production.yml
$ a eks/delete-eks-env.yml
$ hal deploy clean
$ kubectl delete -f spinnaker/files