DevOps

自動テスト、継続的デリバリー、サービス統合と監視、およびSDLCインフラストラクチャーの構築に取り組んでいるソフトウェアエンジニアのためのQ&A

1
MongoDBやMySQLなどのデータベースにStatefulSetの代わりにHelmデプロイメントを使用するとどのような影響がありますか?
ステートレスアプリの定義は、 MongoDBやMySQLなどのデータベースサーバーに適用されるようです。Helm Chartsは、Kubernetesのテンプレートリポジトリの一種として見つかりました。ただし、安定ビルドはすべてのデプロイメントを使用します。安定した状態で提供されないインキュベーター内のみ。 DBサーバーにDeploymentを使用するとどのような影響がありますか? たとえば、クラスターで複数のインスタンスを実行しているときに、同期/レプリケーションの問題などの問題はありますか? 背景:フェイルオーバークラスターでMongoDBを実行したいので、少なくとも2つのインスタンスが実行されています。

3
新しいパッケージが利用可能になったときに、不変のインフラストラクチャを自動的に再構築するにはどうすればよいですか?
Terraformを使用してインフラストラクチャの展開を自動化し、Packerを使用してTerraformによって展開されるマシンイメージを作成します。不変のインフラストラクチャ設計原則に従って、パッチが適用された新しいイメージを作成してパッチを実装し、インフラストラクチャを再展開します。 この設定で、ベースイメージ内のパッケージまたはOS自体を更新してビルドパイプラインをトリガーする必要があるときを自動的に検出するために使用できる追加のツールはありますか? Chef Automateは私が探しているものに近いようですが、イメージマニフェスト自体を分析するのではなく、実行中のノードのコンプライアンスをスキャンするようです。 ありがとう!

1
コンテナーにJavaScriptベースの静的Webサイトを展開/ホストするための戦略
これは、いくつかの開発チームで時々発生しますが、「正しい」方法を理解していません。 私たちは、いくつかのhtml、js、cssファイルである静的なWebサイトに「コンパイル」する多くの反応ベースのWebアプリケーションを使用しています。 ただし、これらのアプリの「ビルド」は、機能フラグの有効化/無効化、バックエンドURLの構成など、いくつかの変数を使用します。つまり、従来の意味でバイナリを「ビルド」して、デプロイ時に設定ファイルを適用することはできません。時間-「ビルド」自体にこれらの環境固有の変数を設定する必要があるため、「ビルド」できるのはデプロイ時のみです。 とりあえず、必要な環境変数をDockerコンテナーに注入し、次の行に沿って開始コマンドを実行することでこれを解決します npm build && nginx run これにはいくつかの欠点があります。 ビルドプロセスは、コンテナーのランタイム要件に比べて多くのCPU /メモリを消費します。つまり、ランタイム要件ではなく、ビルドプロセスのコンテナーをスケーリングする必要があります。 ビルドの失敗を「追跡」するのは困難です。Kubernetesでヘルスチェックを使用できますが、ビルドに2分かかる場合でも、コンテナーのヘルスチェックエンドポイントのテストを開始してその生存を確認する前に、3分(安全のために1つ余分)待つ必要があります。 デプロイには時間がかかることがあります。「シリアル」デプロイを行うようにKubernetesを構成すると、各ポッドが開始され、2〜3分の「initialDelay」期間待機してから次のポッドが開始されます。これは、デプロイが3〜4ポッドにスケーリングされている場合、10分のデプロイ時間を簡単に見ていることを意味します。 これはすべて、私にとって非常に最適ではないと感じています。コミュニティーが「ビルド時にデプロイ」という難問を最新のJavaScript Webアプリケーションで解決する方法を聞いてみたいと思います。 Kubernetesの場合、ビルドを実行し、アーティファクトを永続ストレージに配置し、起動時にアプリコンテナーを永続ストレージから単純にプルする「init-containers」を使用できることを理解していますが、これはまだ問題を「バイパス」するように感じられます根本的な問題を解決します。

1
AnsibleにはPuppetDBに似たコンポーネントがありますか?
私は(限られた)経験からPuppetを知っており、構成管理ではAnsibleへの強い傾向があることに気づきました。 一方では、Ansibleはエージェントを必要としないことを理解していますssh。これは、Ansibleがをインテリジェントに使用するためです。 一方、これらはPuppetについて気に入った機能です。 REST APIを介したシステム全体の構成状態と履歴(PuppetDB)へのアクセス 上書きされたファイルのバックアップを保持する機能(filebuckets) Hiera構成の一部を暗号化する機能(.eyaml) これらの中で、PuppetDBは私にとって最も重要で便利なようです(他のツールとの統合など)。したがって、私の質問は次のとおりです。Ansibleには、PuppetDBに似たものがありますか。たとえば、「ホストxにインストールされているパッケージは何か」と尋ねられるAPIを提供するコンポーネントですか。または「どのホストにパッケージyがインストールされていますか?」 (この質問はStackOverflowから移行されました)。 UPDATE Puppetの重大な欠点それまでの私の経験:エージェントを必要とするという事実はそれほどではありません(私が見たところ、AnsibleのPythonの使用は、Pythonインタープリターの形式で一種のエージェントを導入します;-)。そのエージェントがroot唯一かつ常に行動することを望んでいること。

1
ジェンキンス&ビットバケット; 同じブランチに対して新しいコミットが行われた場合、以前のビルドをキャンセルしますか?
Jenkinsは、Bitbucketのリポジトリにコミットされたときにユニットテストを実行しています。これは、Bitbucketプラグインによって、つまりBitbucket Webhookを介して制御されます。 現在、ブランチAに対してコミットが行われると、ユニットテストが始まります。そのジョブの実行中に2番目のコミットがブランチAに対して行われた場合、2番目の単体テストが開始されるため、同じブランチに2つの単体テストがありますが、コードは少し異なります。 私たちが好む動作は、最初のコミットのテストが2番目のテストの開始時に中止されるため、最新の単体テストのみが実行されることです。これは達成できますか? 明確にするために; 多くのブランチがあるため、同時ビルドを防止したり、次の開始時に最後のビルドをキャンセルしたりすることはできません。どの方法を使用する場合でも、一般的にジョブがすでに実行されているかどうかではなく、ブランチがすでに実行されているかどうかを具体的に確認する必要がありますランニング。 Gitのトリガーコントロールはいくつか見ましたが、Bitbucketは見ていません。また、ジョブが既に実行されているかどうかを確認し、実行されている場合はキャンセルするスクリプトも見つけましたが、前述のとおり、これは私たちの使用例には適していません。何か不足していますか?

1
DevOps時代のITスタッフのサイジング-DevOpsチームはいつ、どのようにスケールアップしますか?
DevOpsを使用すると、ITスタッフは実際にすべての自動化を通じてダウンスケールしてより多くのことを実行できますが、その制限は何ですか? つまり、自動化の急速な進展とRPA(Robotic Process Automation)の導入が急速に進んでいるにもかかわらず、より多くの人々が必要であることがわかっている場合、経験則は何ですか? 注:これは、IT部門全体のスタッフのサイズと、ビジネスのサイズ、構造、および機能との関係でまとめたものです(1つのチームのサイズは、2ピザチームのコンセプトで明確に定義されています)。

1
フラスコ、Gunicorn、Docker Swarm
ですから、Dockerで実行されているFlaskにこの素晴らしいREST APIを実装し、スケーリングについて考えています。これは私がどのように進歩したかです: CMD ["flask", "run", "--host=0.0.0.0"] そして docker run -d -p 5000:5000 pyrest-alpine 正常に動作します CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "pyrest:app"] そして docker run -d -p 5000:5000 pyrest-alpine これも正常に機能します。Gunicornは、単一コンテナー内のpreforkワーカーモデルを介していくつかのスケーリングを提供しました。 CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "pyrest:app"] そして CMD ["flask", "run", "--host=0.0.0.0"] うまく動作する docker service create --name pyrest-swarm --replicas 2 -p …

2
Ansibleでデプロイメントを構築する3つのソリューション?
私は現在新製品を展開しており、プレイブックとロールを構成するためにいくつかの問題に遭遇しました。私は3つの異なる解決策を持っていますが、どのパスが最適であるかを入力してもらいたいと思っています。 製品は、Windowsサーバー上のWebアプリケーションです。展開するには、次の手順が必要です(高レベル)。 javajdkをインストールする Tomcatをインストールする win_serviceをインストールする Java regkesを構成する Tomcatを構成する webappをインストールする サービスを開始 私はprodとステージング、group_vars、ロール(ansible-galaxyで作成)に静的インベントリを使用しているため、何らかの構造があります。 解決策1 すべてを1つの巨大なハンドブックにまとめます。これはうまく聞こえませんが、以前のインストールからの変数を知っているという利点があります。たとえばtomcat、どこにあるかを知る必要がJAVA_HOMEあります...それは、javajdkインストールにあったのJAVA_HOMEです。 解決策2 すべてを小さな役割に分割します。良さそうですが、役割は互いに独立している必要があります。タスクを分離する方法は見つかりませんでした。それは感覚などのための単一の役割を持つことになるだろうinstall_tomcat、config_tomcatと順番に言及した役割を持って脚本を設定しますか? しかし、ある役割はどのようにして知るのでしょうか。たとえば、次の役割で必要とされるパス名などです。->インストールはパスを設定します、configは知る必要があります。私は役割を独立させることが本当にわかりません。 ソリューション3ソリューションの 種類2.役割のみを含み、できるだけ役割に分割したメインプレイブックを用意します。独立変数名を持っている./roles/vars/main.yml どういうわけか(?)は、必要varなすべての定義が適用される、プレイブックの変数の優先順位の高い場所を見つけます。内部的には、変数をロールにパスするか、単にロール変数を無効にします。 たとえば、製品にサービスがある場合、サービス名は通常、のパス名の一部ですtomcat。tomcat名前は、サービスに依存してはならないので、そこにあるべきtomcat_install_path役割でもservice_name製品と。したがって、製品のプレイブックがサービス名と呼ばれる場合、サービス名は名前の一部でtomcat_installある必要があります。これは、完全に異なる展開で呼び出され、サービス名をいじる必要はありません。 私はソリューション3を使用しますが、それを設定する方法をまだ見つけていません。専門家の意見は何ですか、ソリューション3は実行可能ですか、もう1つはより優れていますか、それとも4番目のソリューションがありますか?

1
Kubernetes APIサーバー構成のドキュメントはどこにありますか?
ご質問 Kubernetes APIサーバー構成パラメーターの説明またはドキュメントはどこにありますか? バックグラウンド マルチノードクラスターを機能させるには、Kubernetes APIサーバー用に構成するパラメーターがあります。たとえば、KUBE_API_ADDRESS(127.0.0.1から変更する必要があるようです)です。 APIサーバーを構成する方法の明確な構成ドキュメントを探していますが、これまでのところ、それを見つけることができませんでした。 CentOS(Kubernetes.io)のセットアップは以下のとおりです。 # The address on the local server to listen to. KUBE_API_ADDRESS="--address=0.0.0.0" Kubernetes GitHubは以下のように述べています。 # --insecure-bind-address=127.0.0.1: The IP address on which to serve the --insecure-port. KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" Vagrantボックス#250の外部からKubernetes APIサーバーに接続すると、次のようになります。 デフォルトでは、kube-apiserverは127.0.0.1でのみリッスンします。再構成しないと、別のマシンからkubectlを使用してKubernetesに接続することはできません。 Kubernetes 1.7 / etc / kubernetes / apiserverは以下にあります。 ### # kubernetes system config # …

2
PowerShellスクリプトを実行するためのアプリケーション
PowerShellでいくつかのスクリプトを作成しました。これらのスクリプトを使用するには、いくつかのパラメーターを手動で入力する必要があります。 残念ながら、これらの追加タスクをサポートするためのJenkinsサーバーのセットアップが完了するまで、これらのスクリプトを他の技術者に渡す必要があります。 理想的には、所定のフィールドとドロップダウンメニューを介してパラメーターを受け入れ、適切なスクリプトを実行できるアプリケーションが欲しいです。 そのニーズを満たす、または自分で何かをノックアップする必要がある、すでに利用可能なものはありますか?

3
マルチノード操作にChefを使用する
複数のノードにまたがるChefを使用して構成したいアプリケーションがあります。それを行うプロセスがから成っているとしましょう 出力をキャプチャするノードAで処理を実行します その出力でノードBで別のことを行います なんらかの操作のためにノードAに戻ります 再びノードBに ... これを行う1つの方法は、各ノードでのステージを格納するレシピを記述し、最終的にすべてのノードですべての操作を実行できるようになるまで、両方のノードで繰り返し実行することです。しかし、これは不格好であり、ノードC、Dなどがある場合はスケーリングされません。単一ノード内のシーケンスの依存関係への通知について知っていますが、複数のノード間では機能しません。これを必要とするのは私だけではないので、このスタイルのアクティビティのメカニズムやデザインパターン/ベストプラクティス/ TTPはありますか?
7 chef 


2
GCEインスタンスを作成したユーザーを知る方法
GCPアカウントには課金が有効なプロジェクトがいくつかあり、それぞれに複数のCompute Engineインスタンスがあります。不要な請求を減らすために、重要ではないインスタンスを削除したい。しかし、その前に、どのインスタンスが何のために使用されているかを知る必要があります。そのためには、最初にどのユーザーがインスタンスを作成したかを知る必要があります。 Google Cloud Shellまたはを使用して、各インスタンスの作成者を知るにはどうすればよいGoogle Cloud Consoleですか?


4
Ansible-プライベートgitリポジトリ-SSHエージェントの転送とプライベートSSHキーのコピー
私は最近、Ansibleをいじり始めました。DevOpsに関する経験はあまりなく、複雑なシナリオを処理する必要はまったくありませんでした。現在の展開ツールであるDeployer PHPを置き換えるために、Ansibleプレイブックの作成を開始しました。残念ながら、gitリポジトリのクローン作成に行き詰まっています。今、私はgitリポジトリへのアクセスを有効にするために公開鍵を追加する必要があることを知っています。 SSHエージェント転送を使用する必要がありますか(この方法でローカルSSHキーを使用できます)、またはプライベートSSHキー(暗号化、ソース管理に追加)をansibleプロジェクト内に保存し、Ansibleを使用してターゲットノードにコピーする必要がありますか?質問が非常に広範囲にわたる可能性があることを知っているので、私にとって興味深いのは、両方のアプローチのセキュリティへの影響です。
7 ansible  git  security 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.