DevOps

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

3
ポートがLISTEN状態でないかどうかをチェックするansibleモジュールはありますか?
Ansibleモジュールインデックスを調べましたが、ポートが利用可能かどうかをチェックするモジュールが見つかりませんでしたか?これをサポートするモジュールはありますか? どういうavailable意味ですか? 利用可能とは、ポートが、たとえば80LISTEN状態でないことを意味します。以下は、ポート111が使用できないことを示しています。 user@localhost ~ $ ss -nat State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:111 *:* この質問の目的は何ですか? この質問の目的は、ポート80がcertbot以外の別のプロセスによってすでに割り当てられている場合に、Ansibleの実行を停止する方法を見つけることです。Certbotはポート80が使用可能であることを必要とします。そうでない場合、証明書は更新できません。問題はここにあります。

2
ビルドパイプラインでサードパーティのリソースをキャッシュする方法は?
あ ビルドパイプラインビルドするアーティファクトのソースコードは別として、サードパーティのリソースにアクセスする必要があることがよくあります。これらのサードパーティの各リソースは、ビルドにリスク要因をもたらします。たとえば、 配布リポジトリは一時的に利用できないため、配布パッケージのインストールは一時的に失敗します。 以前と同じように、ディストリビューションリポジトリは永久に利用できなくなります。 一部のNPMフリーソフトウェアパッケージは、作成者が撤回を取り戻したため、存在しなくなりました。 サードパーティツールの一部のソースファイルまたはバイナリアドホックパッケージは使用できなくなりました。 このリストは、拡張することができアドリブをし、それが音としてはるかに楽しまれている姿を消すために、いくつかのサードパーティのリソースにつながる様々な理由を勉強しながら、それは最初にすべての私たちのために悲惨な結果をもたらす:ビルドパイプラインが壊れています。 Dockerイメージをビルドするときに、次の2つのケースをカバーする最良の方法は何ですか。 curlまたはwgetでダウンロードされたキャッシュファイル。 Debianパッケージのキャッシュ。 ここで考えられるいくつかのもっともらしい戦略があります。たとえば、プロキシを使用して、すべてのリクエストをこのプロキシ経由でルーティングするようにビルドシステムを構成します。2番目の安価な可能性は、curl呼び出しをラップして結果をローカルキャッシュに格納することです。 (この質問では、2番目に重要な問題として、ビルドパイプラインのいくつかのユニット間でキャッシュを共有することを検討します。)

1
トレリスのVagrant同期フォルダーのファイル権限を制御するためのAnsibleプレイブックでのVagrantfileの変更
私はWordPress開発にTrellisを使用しています。同期したフォルダー内のファイル(またはディレクトリ)のアクセス許可を変更するのが難しいのを除いて、それはうまく機能します。 通常、デフォルトの権限設定で問題ありません。ただし、メイン(NFS)同期ディレクトリのサブディレクトリの一部に書き込み権限を与える必要がある場合があります。 これはVMのメイン構成にAnsibleプレイブックを使用するVagrantfileです(私はVirtualBoxを使用しています)。私はRubyプログラマではありませんし、Ansibleを使用したこともありませんが、その外観からすると、Vagrantfileファイルのアクセス権が設定されている部分は次のようになります。 if Vagrant::Util::Platform.windows? and !Vagrant.has_plugin? 'vagrant-winnfsd' wordpress_sites.each_pair do |name, site| config.vm.synced_folder local_site_path(site), remote_site_path(name, site), owner: 'vagrant', group: 'www-data', mount_options: ['dmode=776', 'fmode=775'] end config.vm.synced_folder ANSIBLE_PATH, ANSIBLE_PATH_ON_VM, mount_options: ['dmode=755', 'fmode=644'] config.vm.synced_folder File.join(ANSIBLE_PATH, 'bin'), bin_path, mount_options: ['dmode=755', 'fmode=755'] else if !Vagrant.has_plugin? 'vagrant-bindfs' fail_with_message "vagrant-bindfs missing, please install the plugin with this …

1
自動スケーリング環境でConsulとそのクォーラムを管理する方法は?
私たちはサービスの発見にConsulを使用する自動スケーリングDocker環境を持っています。これらの環境では、数分ごとに1つのインスタンスを追加または削除できます。 初期のConsulテストでは、Consulが定足数を失うのは非常に簡単であることがわかりました。おそらく単純に、最初の実験は、すべてのインスタンスでConsulサーバーを起動し、そのConsulサーバーをクラスターに参加させるセットアップでした。その部分はうまく機能していました。 ただし、非常にスケーラブルな環境では、Consulは到達不能なノードを迅速に(約72時間かかりますか?)定足数を失います。 GitHub:https : //github.com/hashicorp/consul/issues/454#issuecomment-125767550のこの問題に関するほぼ2年前からのarmonの応答を見てきました。 これらの問題のほとんどは、正常な休暇をとるというデフォルトの動作が原因です。私たちのメンタルモデルでは、サーバーは長命であり、予期しない停電、または正常なメンテナンス(クラスターを離れる必要がある場合)以外の理由でシャットダウンしません。振り返ってみると、それは悪いデフォルトでした。これはほとんどすべて、Consulサーバーを-9で強制終了することで回避でき、電力損失のシミュレーションに影響を与えます。 専用の長期間有効なノードを実行しないようにしようとしていました。どの時点でも、自動スケーリンググループからN / 2 + 1インスタンスを削除しないことに注意してください。EC2クラスターは、ほとんどのノードにいつでも到達でき、ノードをConsul(または他のツール)クラスターから削除するかどうかを投票できる必要があります。

2
Ansibleで「E405:リモートパッケージタスクには再試行が必要」を解決する方法
E405 v4.0.0リモートパッケージタスクには再試行が必要ですパッケージ操作はネットワーク通信とリモートサーバーの可用性を必要とするため、信頼できません。潜在的な問題を軽減するために、再試行はregister:my_resultおよびuntil:my_result |を介して使用する必要があります。成功 これは、実行時にansible-lint次のエラーとして表示されます。 [405] Remote package tasks should have a retry plays/sample.yml:31 Task/Handler: Install list of packages サンプルコードを考えると: - name: Install list of packages apt: name: [jq, vim, curl, unzip, dnsutils] state: present これを解決するには?
7 ansible 

3
マスター/エージェント構成管理を実行する明確な利点は何ですか?
Ansibleは、エージェントがなく、ある程度のオーバーヘッドを節約できるため、シェフや人形のような競争よりも明らかに有利なようです。 さまざまな構成ツールの比較をいくつか読んだところ、各ツールにはそれぞれ長所と短所がありますが、その多くは個人の好みによるものであることがわかりました。 エージェントレスであることの利点は非常に簡単ですが、構成管理ツールに関してマスター/エージェントアーキテクチャの利点はありますか?

2
100の同一のDockerマシンをAWSで起動する最良の方法は?
システムで大規模なテストを行う必要があります。システムは、マネージャーとノードの2つの主要部分で構成されています。マネージャー・サーバーは1つだけですが、ノードは100になります。マネージャーとノードはどちらもDockerイメージです。 ノードの100のインスタンス(サーバーごとに1つのインスタンス)が開始されるAWSでセットアップを起動できるようにしたいと思います。 これには何を使用しますか?マネージャーとノードは一緒に通信できなければならず、ノードはいかなる方法でも負荷分散されるべきではありません。そのため、マネージャーが通信できる専用の内部IPが必要です。 ECSとCloudFormation + EC2をカスタムAMIで確認しましたが、どうすればよいかわかりません。 理想的には、サーバーを起動して簡単に閉じるために、たまに実行できるスクリプトが必要です。 このセットアップを簡単に開始するためにAWSで何ができるかに関する提案はありますか?

3
複数の依存マイクロサービスをデプロイする方法
AWS ECSに複数のマイクロサービスをデプロイしたいと考えています。 私たちが解決する必要がある問題は、それらをアトミックな方法で展開する方法です。 ユーザーサービスバージョン2.0を必要とするフロントエンドサービスがあるとしましょう。 フロントエンドサービスを展開する前に、ユーザーサービスが利用可能であることを確認する方法。 私たちはインフラ全体を複製し、すべてを配備してから利用可能にするという考えを持っています。しかし、それは私には複雑に思えます。これらのスペアインスタンスを作成し、サービスをデプロイして、切り替えを行う方法を教えてください。 サービスごとに2つのALBとターゲットグループを使用しています(動的ポートマッピング)。

2
DevOps vs SRE vsプロダクションサポートエンジニア
DevOpsは主に配信速度に焦点を当て、SREは本番環境の信頼性に焦点を当てていますが、本番環境のモニタリング、アラート、パフォーマンス、ユーザーエクスペリエンス、インシデント管理、RCAに焦点を当て、コードの欠陥に取り組み、ビジネス機能を理解するプロダクションサポートエンジニアはどこに適していますか? SREの世界では、プロダクションサポートエンジニアはSREとより連携するのでしょうか、それともSREと統合するのでしょうか。

1
ITインフラストラクチャのサイズと複雑さの指標は何ですか
サイズと複雑さに関して異なるインフラストラクチャを比較するにはどうすればよいですか。ノードの数、サーバーの数、アーキテクチャなど、何を測定して比較できますか。 それらの測定値と変数は、比較対象でどのように異なりますか?それらのうちどれを比較するのが理にかなっているか、ほんの少し余分な作業ではなく、行われた作業の種類に実際の違いがあるカーディナリティは何ですか。 「このインフラストラクチャは非常に大きい」または「このインフラストラクチャは非常に複雑である」と私は何を決めますか、そして違いは何ですか?

1
インベントリファイルでIPv6アドレスを表記する方法は?
私はipv6経由でのみアクセス可能なマシンを持っています。rsaキーでsshをセットアップします。今、私はそれをansibleで管理したいと思います。残念ながら、これはインベントリのドキュメントではカバーされていません。 だから私は次の順列を試しました: docker_test ansible_host=fe80::88ea:e002:b409:4be0 docker_test ansible_host=[fe80::88ea:e002:b409:4be0] docker_test ansible_host=\[fe80::88ea:e002:b409:4be0\] これはどれもうまくいきませんでした。 比較のために、.ssh/configエントリを追加します。 Host docker_host AddressFamily inet6 HostName fe80::88ea:e002:b409:4be0 BindAddress fe80::3e6b:335a:d2f7:3a75%enp3s0 :私はこの問題は、部分的に解決し、少なくともあることを示している問題追跡システムに2つの閉じたバグを発見した3879、3888 このトピックに関するアドバイスは高く評価されます。

6
定期的なDockerプロセスを実行する最も安価で簡単な方法
クライアントが月に1、2回実行したいDocker化されたPythonプロセスがあります。いくつかのGoogle APIを呼び出し、その結果をGoogleスプレッドシートに保存します。ネットワーク要求は受け付けません。Dockerコンテナーを起動してすべてをシャットダウンする「マジックボタン」を1つ提供したいと思います。 背景:これは以前、これをDocker Cloud経由でAWS EC2マイクロインスタンスにデプロイしていました。私のクライアントはDocker Cloudアカウントを取得し、コンテナーをオンデマンドで比較的簡単に実行できました。このワークフローには2つの問題があります。 プロビジョニングされたEC2インスタンス(Dockerホスト)は、Dockerコンテナーが実行されたかどうかに関係なく、24時間365日稼働していました。これは高価になりました。 Dockerクラウドは1か月前にシャットダウンしました。 代替手段は、GoogleおよびAWS Kubernetesサービスのようです。私の予約は、クライアントが使用するには複雑すぎるためです。助言?
7 docker  cloud 

2
これは適切なアーキテクチャですか、それとも改善できますか?
ビジネス/企業の要件と私たちの建築家の好みの組み合わせにより、私には少し離れているように見える特定のアーキテクチャにたどり着きましたが、私は非常に限られた建築知識しかなく、クラウド知識がさらに少ないため、確認するための健全性チェックが大好きですここで行うことができる改善がある場合: 背景:ゼロから完全に書き直した既存のシステムの代替品を開発しています。これには、BAPI / SOAP Webサービスを介してSAPインスタンスからデータを調達し、SAPにないデータ用に独自のデータベースを使用する必要があります。現在、管理対象のすべてのデータは、分散アプリケーションのローカルDB、または移行元のMySQLデータベースに存在します。既存の分散アプリの機能を複製する一握りのWebアプリケーションを作成し、管理するデータに対して管理関連の機能を提供する必要があります。 ビジネス/エンタープライズ要件: 私たちが管理するデータベースは、MS SQL Serverに実装する必要があります 作成するデータベースの数を最小限に抑える フェーズ1では、アプリケーションをAzureにデプロイしますが、将来的にはこれらのアプリケーションをオンプレミスにする機能が必要です 運用チームは、コードの管理が大幅に簡単になると感じているため、すべてをドッキングすることを望んでいます。 データの複製を最小化/排除 コーディングスタックは、マイクロサービスと管理アプリの場合は.NET Coreになりますが、メインのフロントエンドアプリケーションの場合はAngular 5になります。 これらの要件から、私たちの建築家はこの設計を思いつきました: 私たちのフロントエンドは、一連のマイクロサービス(「ドメイン」レベルでかなり大きいため、この用語を軽く使用します)からフィードし、各ドメインで読み取りサービスと書き込みサービスに分割されます。どちらもスケーラブルで、Kubernetesを通じて負荷分散されます。それぞれには、データベース内の読み取り専用のコピーがコンテナ内にアタッチされており、読み取り専用コピーへの更新をプッシュする書き込みに使用できるdbの単一のマスターインスタンスがあります。 (低品質の画像については申し訳ありませんが、当然、建築家の頭を除いて、これに関する実際のドキュメントがないため、メモリからやり直しています。) サービス間の通信は、各サービスがリッスンし、関連するメッセージを処理するメッセージキューを介して行われます。情報のために通信を提供するためのサービスを必要とするものはまだ特定されていないため、これの主な用途は電子メールの生成です。複数のサービスの関与を必要とする「ビジネスロジック」に関連するものは、フロントエンドから流れる可能性が高く、フロントエンドは各サービスを個別に呼び出し、原子性を扱います。 私の見解では、間違った方法でこすりつけているのは、読み取り専用のdbインスタンスがサービスのDockerコンテナー内でスピンアップしていることです。サービス自体とdbは、負荷の点で要求が大幅に異なるため、それらを個別に負荷分散できれば、はるかに理にかなっています。MYSQLには、マスター/スレーブ構成でそれを行う方法があると思います。この場合、負荷が高くなるたびに新しいスレーブを起動できます。特に、システムがクラウドにあり、インスタンスごとに支払いを行っている場合、別のdbインスタンスのみが必要なときにサービス全体の新しいインスタンスをスピンアップすると無駄になります(反対に、実際にちょうど新しいデータベースコピーをスピンアップすると、 Webサービスインスタンスが必要です)。ただし、これに対するMS SQL Serverの制限はわかりません。 私の最大の懸念は、MS SQL Serverの実装に関するものです。読み取り専用インスタンスをサービスに非常に密に結合すると、気分が悪くなります。これを行うより良い方法はありますか? 注:私はソフトウェアエンジニアリングについてこれを尋ねると、ここで私を指摘しました。これが適切なSEではない場合は、申し訳ありません。 また、MS SQL Serverタグはありません


2
すべての状態を失うことなく、Terraformによって管理されるRedisクラスターにシャードを追加する方法は?
TerraformでRedisクラスターをセットアップしました。セットアップは次のようになります。 resource "aws_elasticache_replication_group" "instance" { replication_group_id = "test" node_type = "cache.t2.micro" port = 6379 parameter_group_name = "default.redis3.2.cluster.on" subnet_group_name = "${aws_elasticache_subnet_group.instance.name}" security_group_ids = ["${aws_security_group.instance.id}"] cluster_mode { replicas_per_node_group = 0 num_node_groups = "${var.cluster_size}" } automatic_failover_enabled = true apply_immediately = true } var.cluster_size2から3 に変更すると、Terraformが更新を適切に実行することを期待していました。ただし、そうではありません。 -/+ module.groupsign_redis.aws_elasticache_replication_group.instance (new resource required) id: "test" => <computed> …

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