DevOps

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

5
DevOpsで小さな会社を見つけることはできますか?
私が起業家で、グレートアイデア(TM)に対するシードマネーがほとんどなく、最初に自分のグレートアイデア(TM)を自分で実装することを計画している会社を立ち上げ、会社の成長率に基づいて追加の支援を雇うとします。 多くの場合、このサイトの回答は、DevOpsは役割ではなく、役割のチームがDevOpsを実際に実行できるようにする新しい操作哲学で物事を行う新しい方法を中心にしています。これは、燃え尽き症候群を防ぎ、人々が孤狼のように感じるのを防ぎます それでは、駆け出しの新興企業として、DevOpsを哲学として追求する必要があるのでしょうか、それとも、十分な規模の開発チームを持つことができるより成熟した運用にのみ適しているのでしょうか。

1
マージ時またはブランチが削除されたときにスクリプトをトリガーするにはどうすればよいですか?
私はジェンキンスのマルチブランチパイプラインを使用しています。ブランチがマージされ、削除された場合、ジェンキンスはブランチをパイプラインからも削除します。 これは素晴らしいですが、ブランチが削除されたときにコマンド/スクリプトを実行したいのですが、ブランチが削除されたときにjenkinsにコマンドを実行させるにはどうすればよいですか?ジェンキンスがブランチを削除する前にジョブをトリガーする方法はありますか? 編集:私はbitbucketを使用していることを追加する必要があります。Jenkinsがマルチブランチパイプラインのブランチをパージするときにイベントをトリガーできれば、すばらしいでしょう。理想的には、私のgitプロバイダーが何であるかは問題ではありません。

4
複数のサーバーでプログラムの進行状況を監視する
tmuxセッション内でデータ分析タスクを実行しているPythonプログラムを実行している3つのサーバーがあります。現在使用している方法は、tmuxセッションに接続し、コマンドラインで出力を監視するそれぞれにSSHで接続することです。 この方法は面倒なので、探しているのは、複数のサーバーのプログラムの進行状況(CLIでの出力)の監視を同時に自動化するソリューションです。Web UIソリューションが理想的ですが、CLIも完全に適しています。 読んでくれてありがとう。

6
EC2インスタンスの死の抱擁を防ぐ方法は?
アプリストアでiOSアプリを使用していて、最近、EC2でホストされているランディングページへのトラフィックが急増し、ページが応答しなくなったため、幸い、インスタンスを再起動して、 t2.medium。 今私は、同じ死を再び防ぐための技術を実装するために誰かを雇うことを探しています。私の経験では、基本的なdevopsのことは理解できますが、AWSでのロードバランサーには不十分です。インスタンスの手頃な実装とは何かを知りたいのです。 ランディングページとiOSアプリのバックエンドが同じインスタンスでホストされています。

2
まだ存在しないものをシェフする方法
次のようなChefコードがあるとします。 require 'mixlib/shellout' yum_package 'somepackage' myvar = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip どこに/bin/somecommandそれがでインストールされているため、まだ存在していませんsomepackage。これはその理由でレシピのコンパイル時に失敗しますが、パッケージが正常にインストールされれば、収束時に明らかに機能します(それでも失敗しない場合は、レシピが失敗したことは明らかです)。パッケージがインストールされている場合、これらはすべて事前にコンパイルされるため、ランリストの前のレシピとしても失敗します。Chefレシピに、そのレシピまたはランリストがインストールするものを含めるにはどうすればよいですか?

4
Terraform:リソースに複数のタグを指定するための簡潔な構文はありますか?
リソースに複数のタグを付けるために、私は現在複数のtagブロックを使用しています: resource "aws_autoscaling_group" "instance" { ... tag { key = "Name" value = "${var.cluster_prefix}" propagate_at_launch = true } tag { key = "Owner" value = "${var.tag_Owner}" propagate_at_launch = true } tag { key = "Project" value = "${var.tag_Project}" propagate_at_launch = true } } うまくいきますが、もっと簡潔な構文があるのでしょうか。またpropagate_at_launch、タグごとに指定する必要があるため、ビットエラーが発生しやすくなります。 更新:この質問は、Terrafrom v0.12が出る前に書かれました。それ以降、サポートは動的ネストブロックで改善されました(以下の私の回答を参照してください)。
9 terraform 

2
オペレーティングシステムに基づくAnsibleでの役割とホストを使用したVMのデプロイ
Ansibleでホスト/ロールをさまざまなオペレーティングシステムに最適に適用する方法を考え出すのに問題があります。 現在、Ansibleを使用してWindows / Mac / Linux VMを生成しています。各VMには、適用する必要のある異なる役割があります。 私はベストプラクティスを読み、特にグループ化の方法を使用するために、それらに従うことを試みましたが、彼らが主にWebサーバーとDBサーバーに言及しているため、まだわかりません。 site.yml - name: Apply common configuration to all nodes hosts: all roles: - common - name: Configure and deploy test node 1 hosts: build-test-node roles: - build-machine-test-1 - name: Configure and deploy test node 2 hosts: build-test-node-2 roles: - build-machine-test-2 環境/テスト/グループ [win_build_nodes] …


1
KubernetesのCPU使用率とDockerコンテナーメトリックの競合
最近、本番環境をKubernetesに切り替えました。コンテナーにCPU制限を適用したいのですが。適合しないCPUメトリックが競合しています。これが私の設定です: として実行されているDataDogエージェント Daemonset CPU制限なしで実行されている既存のアプリケーション 問題のコンテナはマルチスレッドのRubyアプリケーションです 2つのメトリック:kubernetes.cpu.usage.{avg,max}およびdocker.cpu.usage c4.xlarge クラスタノード(4つのvCPUまたはKubernetesの用語では4000m) kubernetes.cpu.usage.max問題のコンテナについて〜600mを報告します。docker.cpu.usage約60%を報告します。したがって、1000mのCPU制限は、通常の操作では十分な容量を超えることになります。 制限を1000mに設定しました。その後docker.container.throttlesながら大幅に上がるkubernetes.cpu.usage.maxとdocker.cpu.usage同じまま。この間、システムはすべてひざまずきます。これは私には意味がありません。 Dockerの統計を調査しました。docker stats(および基になるAPI)は、CPUコアに従って負荷を正規化しているようです。したがって、私の場合、docker.cpu.usageKubernetesに換算すると60%の(4000m * 0.60)から2400mになります。ただし、これはKubernetes番号とは相関しません。Kubernetesの数値が正しくないという私の仮説を検証するために、別の実験を行いました。制限を2600mに設定しました(追加のヘッドルームのため)。これによりスロットルは発生しませんでした。ただし、KubernetesはCPU使用率に変化がないことを確認しました。これは私を混乱させます。 だから私の質問は: これはKubernetes(またはスタック内の何か)のバグのように感じますか? 私の理解は正しいですか? 私のフォローアップ質問は、RubyアプリケーションのCPUを適切に決定する方法に関するものです。1つのコンテナーはPumaを使用します。これは、構成可能な量のスレッドを備えたマルチスレッドWebサーバーです。HTTP要求は、スレッドの1つによって処理されます。2番目のアプリケーションは、スレッドサーバーを使用するリサイクルサーバーです。各着信TCP接続は、それ自体のスレッドによって処理されます。スレッドは、接続が閉じると終了します。Ruby as GIL(Global Interpreter Lock)なので、一度に1つのスレッドのみがRubyコードを実行できます。これにより、IOなどを実行する複数のスレッドが可能になります。 最善のアプローチは、各アプリケーションで実行されるスレッドの数を制限し、スレッドの数に基づいてKubernetes CPUの制限を概算することだと思います。プロセスは分岐しないため、CPUの合計使用量を予測することは困難です。 ここでの問題は、これらのアプリケーションのCPU使用率と制限を適切に予測する方法です。

2
ロードバランサーF5はCasC(コードとしての構成)をサポートしていますか?
CasCとF5を併用すると、バージョン管理されたオプションの動的ネットワークエンドポイント構成が可能になり、時間を節約してリスクを軽減できます。 このツールはこれをサポートしていますか?単一構成ファイル(SCF、F5用語)はそれを行う手段ですか?

3
米国にないiOS用のホストされたCI / CD?
TL; DR:アジア、または少なくともヨーロッパにデータセンター/ビルドボックスを持っているiOS向けのホスティングCI / CDプロバイダーをご存知ですか?(ビルドとデプロイの両方を提供するが、ビルドはMVPである場合のボーナスポイント) 裏話: 私たちはiOSとAndroidで大規模なCI / CDを実行しています。Merge-Requestブランチのテスト/検証と、テスターと利害関係者へのトランクビルドのデプロイの両方で、10以上の同時ビルドを実行しています。私たちは、満足しているSaaS /クラウドプロバイダーを使用しています。 情報源と同様に、私たちはアジアにいます。クライアントは規制の厳しい業界に属しており、規制当局はまだクラウド内のソースを処理できないと考えているため、ソースをオンプレミスに保つために懸命に闘っています。この前提を受け入れてください。彼らがそれを手放す必要がある理由を理解しています。しかし、今のところ...できないと思います。 つまり、ソースはアジアにありますが、それを構築するCI / CDプロバイダーはすべて米国にあるようです(Circle、Buddybuildなど)。太平洋を越えた帯域幅は、特にアジアの営業日にひどい。すべてのビルドが急増する前にすべてのクローンが費やす時間は、営業日のほとんど60分を超えます。 CI / CDのオンプレミスは、DockerコンテナーでのAndroidビルドでは非常に簡単です。しかし、iOSが問題です。OSXを管理してビルドボックスの艦隊を運用し続けるように人々に教えるビジネスに身を置く必要があるか、専門家にその問題を解決させる必要があります。 ノート: SEコミュニティ、私は推奨事項を求めていません!これは事実上の技術的な質問です。特定の地域で、特定の技術要件を満たす特定のサービスを利用できますか? MacStadiumがアイルランドでMacOS VMを提供できることはわかっています。ただし、これは、独自のCIプロセス全体を管理する必要があることを意味します。さらに、避けたい多くの低レベルのシステム管理タスクも必要になります。もちろん、ビルドとデプロイメントを分離することも意味します。しかし、待ち時間は許容範囲のようです。 私たちは、クラウドCI / CDプラットフォームを私たちの近くに持っている他の人々を知っています...しかしiOS / MacOSのサポートがありません。 浅いクローンは必要な帯域幅が少ないため問題が軽減されることはわかっていますが、現在のプロバイダーがまだサポートしていないことを意味する他の複雑さもあります。そして、彼らはどんな場合でも問題を完全に解決するわけではありません。 オフプレミスのGitHubミラーを使用して実験しましたが、これは問題の一部を解決しますが、規制の問題には対応していません。また、多くのWebhook、特に新しいコードのCIパイプラインにとって重要なMerge-Request Webhookでは機能しません。Webhookを監視し、APIコマンドを他のサービスプロバイダーに強制的にリレーするエージェントを作成することもできますが、それは実際にフープを飛び越えているだけでなく、維持するための実質的な新しいコードを作成しているはずです。

4
DevOpsワークフローを中止することの長所/短所?
私は、devospスタイルのワークフローから従来のdev-then-ops(何と呼ぶか​​わからない)に移行することが良いアイデアかどうかを評価しようとしています。 私たちは、従業員が4000人いる従来のメディア(ソフトウェア以外)などの企業に隠れている5人の小さな部門です。2年前に、部門での生産を大幅に拡大できるソフトウェアの構築を開始しました。私たちはかなり成功しており、より大きな会社が注目を集め始めています。これまでのところ、私たちは、最大10のサービスのAWSマイクロサービスプラットフォームとなったものの設計、開発、デプロイを単独で担当してきました。私たちのチームはDevOpsとして識別しませんが、間違いなく私たちはDevOpsの生活を送っています。各開発者は、コードとそれが実行されるシステムの両方に精通しています。 私たちがまもなく直面する問題の1つは、親会社のIT部門と私たちの間でどのような「効率」が共有されるかです。私たちのプロジェクトオーナーは通常、社内での学習よりもアウトソーシングを好むため、私たちの場合、これらの効率は、可能な限り多くのIT作業を「オフプレート」で行うことを意味します。現在、私たちのチームは、コーディングとインフラストラクチャの経験が70/30%分かれていると思います。IT部門は、IT開発の領域にしっかりと属しており、ソフトウェア開発に目に見えるクロスオーバーはありません。 私たちのプロジェクトオーナー(技術者ではない個人)は、できる限り多くの作業をITチームに引き渡すことで、削減した運用作業の1時間あたりの生産性が最大1:1向上することを期待しています。私はこれについては懐疑的です。私たちの製品はまだプレベータ版です(すでに重要なビジネス資産であるにもかかわらず)。IT部門との限られた経験の中で、ファイルシステムのアクセス許可の変更などの単純なことには通常、大幅な遅延があります。 現在、私の理想的なソリューションは、IT部門が私たちを "採用"し、ITオフィスの標準と要件を確実に満たしながら、私たち自身の仕事を展開し続けることです。それがどれほど現実的かはわかりません。さらに、短期的には追加の運用作業が追加されるため、プロジェクトオーナーが推奨するアプローチとはほぼ逆です。 私たちの状況では、DevOpsアプローチを維持することとITを引き継ぐことの賛成/反対の可能性は何ですか?

7
タスク出力をファイルに記録するにはどうすればよいですか?
私の不可能なタスクの1つは、を使用してOracleデータベースをインポートしますimpdp。 これにより、コンソールに大量の出力が生成されるため、設定しましたno_log: True。 ただし、これが失敗した場合は、ログを確認したいと思います。 この特定のタスクログをコンソールではなくファイルにするにはどうすればよいですか?

3
マルチマシンバグラント環境でsshできない
3ノードのマルチマシンバグラント環境を作成しましたが、1つのバグラントvmから別のvagrant vmへのsshの実行に問題があります。 Vagrantfileは次のとおりです。 Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.define "master" do |master| master.vm.hostname = "master.local" master.vm.network "private_network", type: "dhcp" end config.vm.define "node1" do |node1| node1.vm.hostname = "node1.local" node1.vm.network "private_network", type: "dhcp" end config.vm.define "node2" do |node2| node2.vm.hostname = "node2.local" node2.vm.network "private_network", type: "dhcp" end end hostsファイル(各ノードで同じ): $ cat /etc/hosts …
9 vagrant 

2
「真に再現可能なビルド」とは正確には何ですか?
正確には何ですか?継続的デリバリーの分野で、なぜ重要なのですか? コンテキスト:(私はredditを推測している)のコメントの1つで、Truly Reproducibleビルドはまだ研究中の技術であり、作成するのが非常に難しいと見ました。 それで、なぜそれらを作成することがそれほど難しいのか知りたいのですか?

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