Zalando Postgres Operator を試してみた

ふとしたきっかけで、自宅ラボに PostgreSQL as a Service が欲しくなったので Zalando Postgres Operator を試してみました。 Zalando Postgres Operator とは Zalando Postgres Operator(以下、Postgres Operator)とは、Kubernetes クラスタに HA 構成の PostgreSQL クラスタを簡単に構築してくれる Operator です。 Postgres Operator を Kubernetes クラスタにデプロイすると、postgresql というカスタムリソースを宣言したマニフェストを使うだけで簡単に PostgreSQL クラスタを構築できます。 また、専用の Web UI を使って PostgreSQL クラスタを管理することもできます。 この Postgres Operator を自宅ラボの Kubernetes クラスタにデプロイして PostgreSQL as a Service として利用します。 Zalando SE Zalando SE とは、ヨーロッパを中心に展開するオンラインファッションプラットフォームを運営する企業です(日本で言うところの ZOZO でしょうか?)。 Zalando SE は GitHub で複数のオープンソースのプロジェクトを公開しています。 Zalando SE Zalando Postgres Operator も Zalando が開発しているプロジェクトの一つです。 ...

January 22, 2021 · 3 min · @nnstt1

自宅 k8s クラスタのサービスに FQDN で繋がるようにした

自宅の検証用マシン (Deskmini A300) に ESXi を入れて検証環境として利用しています。 最近はそこへ k8s クラスタを構築して色々試しているのですが、クラスタ内に立ち上げたサービスへは IP アドレスでアクセスしていました。 IP アドレスでアクセスするのはとても面倒だったのですが、やっと k8s で動かしているサービスに FQDN で繋がるようになったので投稿します。 システム構成図 完成後のシステム構成図になります。 (構成図描くの下手で分かりにくいと思います…) [f🆔nnstt1:20201113012536p:plain] 見てもらって分かる通り、LAN 用の DNS サーバを VM で建てています (k8s クラスタの外です)。 これは、k8s クラスタを構築する前に DNS サーバ (dnsmasq) を構築していて、それを流用しているためです。 使用するプロダクト 今回利用しているプロダクトは以下になります。 名前 バージョン 用途 Kubernetes 1.19.0 コンテナオーケストレーション Docker 19.03.12 コンテナランタイム ExternalDNS 0.7.3 DNS プロバイダに DNS を登録 CoreDNS 1.8.0 DNS サーバ etcd 3.4.13 DNS レコード格納 MetalLB 0.9.3 ベアメタルロードバランサー 構築 以下の手順で環境を構築しました。 DNS サーバ (CoreDNS & etcd) 構築 MetalLB デプロイ ExternalDNS デプロイ DNS サーバ (CoreDNS & etcd) 構築 CoreDNS & etcd を使った DNS サーバを構築します。 この DNS サーバに k8s クラスタのサービス用の DNS レコードを格納していきます。 なぜ dnsmasq を流用しないかというと、後述する ExternalDNS が dnsmasq に対応していないからです。 ...

November 13, 2020 · 4 min · @nnstt1

AWX が Ansible Galaxy を使う動きを追ってみた

前回の投稿でAWXのProjects自動同期方法を調べたのですが、その中で一つ気になることが出てきました。 それは 「AWXではAnsible GalaxyのRoleはどのように参照されるのか」 という点です。 CLIで使うAnsibleでは ansible-galaxy install コマンドで外部Role(Galaxyに公開されているRoleや特定リポジトリのRole)をPlaybookから参照/実行できます。参照するRoleを指定する方法の1つに、参照情報を記載したYAMLファイルを読み込む方法があります。その際のコマンドは ansible-galaxy install -r [参照ファイルパス] です。AWXでも同じように参照されるのか、確認してみました。 マニュアルを読む Ansible TowerでAnsible Galaxyを使う方法はUser Guideに書かれています。AWXも同じ方法です。それによると、<project-top-level-directory>/roles/requirements.yml ファイルを見つけると自動的に ansible-galaxy installコマンドが実行されるようです。 [https://docs.ansible.com/ansible-tower/latest/html/userguide/projects.html#ansible-galaxy-support:embed:cite] なるほど、CLI版とほぼ同じでansible-galaxy installコマンドを使って、参照するファイルの名前や保存先は指定されていると。そして実行タイミングはProject Update(プロジェクトの同期)の最後。じゃあ特段気にすることはないな、と思っていたのですが…。 実際に確認 前回の調査で知ったのですが、Project Update自体もAWXの Internal Job となっています。(正式用語かわかりませんがプログラム内のコメントでは Internal Job と記載されていたのでここでもそう呼びます) そして、Internal JobもPlaybookを参照して実行されるようで、Project Updateは project_update.yml というPlaybookを参照しています。このPlaybookはawx_taskコンテナの/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/playbooks/project_update.ymlにあります。project_update.ymlの中身を見ると、 name: Update source tree if necessary name: Install content with ansible-galaxy command if necessary という2つのtasksで構成されていることが分かります。前者がAWX上で指定したSCMの更新で、後者がrequirements.ymlで指定した外部Roleの更新なんですね。実際に後者のタスクでcommand: ansible-galaxy installの記述があるので、マニュアルで書かれていた内容はこのPlaybookで実現しているようです。 外部Role更新タスクの実行条件として when: roles_enabled|bool と tags: install_roles がありました。変数roles_enabledは Settings -> Jobs -> Enable Role Download のON/OFFで決まるようです。tagsのほうはInternal Job実行時に install_roles が付いていれば実行されるタスクのようですが、ここは未確認です(理由は後述)。 ...

May 24, 2020 · 1 min · @nnstt1

仮想化基盤のパーツ購入&構築

先月の投稿で自宅ラボの機器選定をしました。結論を言うと、DeskMini A300 を買いました。 仮想化基盤のハードウェア選定 つよつよエンジニアには「自宅ラボ」という検証環境をお持ちの方が多いようです。 「自宅ラボある⇒つよつよエンジニアになる」ではないですが、自宅ラボあれば勉強する機会が増えるのではということで、自宅ラボ構築を目指します。 「逸般の誤家庭」と呼ばれる常軌を逸した環境(褒め言葉)を構築されている方もいらっしゃるようですが、お財布のほうも常軌を逸してしまいそうなのでコスパ重視で自宅ラボを構築を検討します。 今回は、仮想化基盤用マシンのハードウェア選定をしていきます。ネットワークについては別途検討予定。 目的(なぜ仮想化基盤用のマシンを用意するのか) 自宅でも快適にKubernetesクラスタを検証するためです。 現在は自宅PC(Win10)にVMware Workstation Playerを入れ、その上にESXiを入れてしてネスト仮想化基盤を構築しています。 しかし、PCのスペックがそこまで高くうえにネスト構成にしたためESXiのVMは激重になってしまいました。 当初はOpenShift4を動かしてみるつもりでしたが、インストール作業が終わりませんでした。OpenShiftは要求スペックが高いですね…。 Chapter 1. Installing on bare metal | Installing on bare metal | OpenShift Container Platform | 4.3 | Red Hat Documentation Chapter 1. Installing on bare metal | Installing on bare metal | OpenShift Container Platform | 4.3 | Red Hat Documentation access.redhat.com 代わりにkubeadmでK8sクラスタ(master3台, worker3台)を組んでみたのですが、クラスタできたもののPrometheus-Operatorを入れてみたら無事に死亡しました。 そのようなこともあり、快適にK8sクラスタを動かすことができる自宅ラボを構築することが目的となっています。 機器選定 マザーボードと電源が一体となった「ベアボーン」 or パーツをそれぞれ自分で選ぶ「自作PC」の2通りから考えます。 (ベアボーンも自作PCに含まれると思いますが、適切な表現が不明なので分けて記載します。) 本当はラックサーバが欲しかったのですが、自宅の要件(電力だったり騒音だったり)に合いそうにないため除外しています。また、タワーサーバは中古市場であれば比較的安価なものが出回っているようですが、十分に調べきれていないためこちらも除外しています。 ストレージ ストレージは各候補ともに共通の製品を選択予定です。 パーツ 型番 特徴 価格.comの最安値 ストレージ WD Blue SN550 NVMe WDS500G2B0C m.2 NVMe 8,448 ASRock Deskmini A300 パーツ 型番 特徴 価格.comの最安値 ベアボーン Deskmini A300 NIC(Realtek) 18,673 CPU Ryzen 5 3400G 4コア8スレッド 20,680 メモリ crucial CT8G4SFS8266 [SODIMM DDR4 PC4-21300 8GB] スロット全部使用 15,960(3,990x4) 合計 55,315 ASRock Deskmini 310 パーツ 型番 特徴 価格.comの最安値 ベアボーン Deskmini 310 NIC(Intel) 17,223 CPU Core i5 9400 6コア6スレッド 21,560 メモリ crucial CT8G4SFS8266 [SODIMM DDR4 PC4-21300 8GB] スロット全部使用 15,960(3,990x4) 合計 54,743 自作PC パーツ 型番 特徴 価格.comの最安値 ケース Thermaltake Versa H17 MicroATX/Mini-ITX, 3.5inch: 2個, 2.5inch: 2個 2,979 マザボ ASRock B450M Steel Legend NIC(Realtek) 9,800 電源 ANTEC NeoECO Gold NE550G 550W、プラグイン 8,980 CPU Ryzen 5 2600 6コア12スレッド 14,278 グラボ 玄人志向 GF-GT710-E1GB/HS 安い 3,027 メモリ crucial CT2K16G4DFD832A [DDR4 PC4-25600 16GB 2枚組] 1セット追加で64GBまで拡張可能 15,870 合計 54,934 比較 案 Pros Cons A300 ? CPUにグラフィック必須 310 NICがIntel グラボ乗らないのでCPUにグラフィック必須 自作PC 6コア12スレッド, 拡張性○ ケースでかい(Deskminiと比べて) おわりに 上記の3パターンの構成で検討していますが、費用についてはほぼ差はない状態です。 DeskMini A300を選んだ理由 機器選定で3パターン検討していて、なぜメリットを感じなかったDeskMini A300を選んだのか、なぜ選んでいた自作PCにしなかったのか。それは「Micro ATX用ケースが思いの外でかい!」ということが大きいです。 ...

May 18, 2020 · 2 min · @nnstt1

AWXのプロジェクトを自動同期させたい

Ansible/AWXを利用していて、少し煩わしいと思ったことがあります。 それは「Playbookをリポジトリに追加したら、AWXのプロジェクトの同期を手動実行しないとジョブテンプレートからそのPlaybookを選択できない」という点です。 プロジェクトを同期していないと、ジョブテンプレートのPlaybook選択するプルダウンに追加したPlaybookが出てこないのです。 現在の手順は以下のような感じです。 新規Playbookをリポジトリに追加 プロジェクト手動同期 ジョブテンプレートで新規playbookを選択 簡単な手順ではあるのですが、わざわざ「2. プロジェクト手動同期」をする度にモヤモヤーってしています。このモヤモヤを取り除きたいと思います。 (どんだけ面倒くさがりなんだ……) やりたいこと 簡潔にいうとタイトルの通り 「AWXのプロジェクトを自動同期させたい」 です。自分の検証環境ではGitLabでPlaybookを管理しているので、具体的には以下のような流れで自動同期をしてみます。 GitLabのリポジトリを更新する(Playbookの追加に限定しません) AWXになんとかして更新を通知する AWXのプロジェクトを更新させる 「AWXになんとかして更新を通知する」方法として、AWXの「Webhook」と「API」の2通り検討しました。 前提 今回使用した環境は以下です。 それぞれ個別のサーバに構築 AWX 11.0.0(Ansible 2.9.5) GitLab CE 12.10.3 AWXのプロジェクトはGitLabと連携済み GitLab Runnerは Shell Executer を登録済み 同期方法 Webhook AWXにはWebhook経由でジョブテンプレートを実行するための設定があります。 ジョブテンプレート編集画面でENABLE WEBHOOKにチェックし、WEBHOOK SERVICEでGitLabを選択するとWEBHOOK URLとWEBHOOK KEYに値が表示されます。(WEBHOOK KEYはジョブテンプレート保存後に表示) Towerのマニュアルになりますが、詳細はこちら。 Ansible Documentation Ansible Documentation docs.ansible.com マニュアルにある通りGitLabの設定をしたら、Webhookを使用してジョブテンプレートを実行することができます。しかし、AWXのプロジェクトをWebhookで実行することはできないようです。上記のジョブテンプレート編集画面のようなWebhookを設定する画面は見つかりませんでした。(AWXのソースを見ても無さそうです) Webhook経由で無理やりプロジェクトを同期させる方法としては「Update Revision on Launchを有効にしたプロジェクトを使用するジョブテンプレートをWebhookで実行する」があるかと思います。AWXのプロジェクトの設定でUpdate Revision on Launchを有効にしていると、当該プロジェクトを使用するジョブテンプレートを実行するときにプロジェクトの同期も実行されます。 この機能を利用してWebhookからジョブテンプレートを実行し、間接的にプロジェクトを同期することで AWXのプロジェクトを自動同期させたい を達成可能です。ジョブテンプレートの中身は何でも良いですが、目的がプロジェクトの同期なので処理が軽めの同期用ジョブテンプレートを用意するのが良いと思います。また、Webhookはワークフローテンプレートの実行も可能なので、複数プロジェクトを一斉に同期ということも可能です。(やる機会は無さそうですが) API AWXではAPIが提供されており、こちらからジョブテンプレートの実行やインベントリのホスト一覧を取得などができます。その中でプロジェクトの同期も可能となっています。 Ansible Documentation Ansible Documentation docs.ansible.com Webhookの場合はGitLab上で設定項目が存在するのですが、API呼び出す用の設定とかは無さそうなのでGitLab CIでcurlコマンド叩いてAPI呼び出します。今回は以下のような.gitlab-ci.ymlを準備しました。 ...

May 17, 2020 · 1 min · @nnstt1

仮想化基盤のハードウェア選定

つよつよエンジニアには「自宅ラボ」という検証環境をお持ちの方が多いようです。 「自宅ラボある⇒つよつよエンジニアになる」ではないですが、自宅ラボあれば勉強する機会が増えるのではということで、自宅ラボ構築を目指します。 「逸般の誤家庭」と呼ばれる常軌を逸した環境(褒め言葉)を構築されている方もいらっしゃるようですが、お財布のほうも常軌を逸してしまいそうなのでコスパ重視で自宅ラボを構築を検討します。 今回は、仮想化基盤用マシンのハードウェア選定をしていきます。ネットワークについては別途検討予定。 目的(なぜ仮想化基盤用のマシンを用意するのか) 自宅でも快適にKubernetesクラスタを検証するためです。 現在は自宅PC(Win10)にVMware Workstation Playerを入れ、その上にESXiを入れてしてネスト仮想化基盤を構築しています。 しかし、PCのスペックがそこまで高くうえにネスト構成にしたためESXiのVMは激重になってしまいました。 当初はOpenShift4を動かしてみるつもりでしたが、インストール作業が終わりませんでした。OpenShiftは要求スペックが高いですね…。 Chapter 1. Installing on bare metal | Installing on bare metal | OpenShift Container Platform | 4.3 | Red Hat Documentation Chapter 1. Installing on bare metal | Installing on bare metal | OpenShift Container Platform | 4.3 | Red Hat Documentation access.redhat.com 代わりにkubeadmでK8sクラスタ(master3台, worker3台)を組んでみたのですが、クラスタできたもののPrometheus-Operatorを入れてみたら無事に死亡しました。 そのようなこともあり、快適にK8sクラスタを動かすことができる自宅ラボを構築することが目的となっています。 機器選定 マザーボードと電源が一体となった「ベアボーン」 or パーツをそれぞれ自分で選ぶ「自作PC」の2通りから考えます。 (ベアボーンも自作PCに含まれると思いますが、適切な表現が不明なので分けて記載します。) 本当はラックサーバが欲しかったのですが、自宅の要件(電力だったり騒音だったり)に合いそうにないため除外しています。また、タワーサーバは中古市場であれば比較的安価なものが出回っているようですが、十分に調べきれていないためこちらも除外しています。 ストレージ ストレージは各候補ともに共通の製品を選択予定です。 パーツ 型番 特徴 価格.comの最安値 ストレージ WD Blue SN550 NVMe WDS500G2B0C m.2 NVMe 8,448 ASRock Deskmini A300 パーツ 型番 特徴 価格.comの最安値 ベアボーン Deskmini A300 NIC(Realtek) 18,673 CPU Ryzen 5 3400G 4コア8スレッド 20,680 メモリ crucial CT8G4SFS8266 [SODIMM DDR4 PC4-21300 8GB] スロット全部使用 15,960(3,990x4) 合計 55,315 ASRock Deskmini 310 パーツ 型番 特徴 価格.comの最安値 ベアボーン Deskmini 310 NIC(Intel) 17,223 CPU Core i5 9400 6コア6スレッド 21,560 メモリ crucial CT8G4SFS8266 [SODIMM DDR4 PC4-21300 8GB] スロット全部使用 15,960(3,990x4) 合計 54,743 自作PC パーツ 型番 特徴 価格.comの最安値 ケース Thermaltake Versa H17 MicroATX/Mini-ITX, 3.5inch: 2個, 2.5inch: 2個 2,979 マザボ ASRock B450M Steel Legend NIC(Realtek) 9,800 電源 ANTEC NeoECO Gold NE550G 550W、プラグイン 8,980 CPU Ryzen 5 2600 6コア12スレッド 14,278 グラボ 玄人志向 GF-GT710-E1GB/HS 安い 3,027 メモリ crucial CT2K16G4DFD832A [DDR4 PC4-25600 16GB 2枚組] 1セット追加で64GBまで拡張可能 15,870 合計 54,934 比較 案 Pros Cons A300 ? CPUにグラフィック必須 310 NICがIntel グラボ乗らないのでCPUにグラフィック必須 自作PC 6コア12スレッド, 拡張性○ ケースでかい(Deskminiと比べて) おわりに 上記の3パターンの構成で検討していますが、費用についてはほぼ差はない状態です。 ...

April 5, 2020 · 1 min · @nnstt1

OpenShift 構築奮闘記 #0

OpenShift の構築に試行錯誤した記録を残すため「OpenShift構築奮闘記」というタイトルで連載を始めます。 手始めに OpenShift を構築することにした経緯と、インストールする構成を残しておきます。 どのような課題が発生している/していたかは #1 以降で記載します。 なお、執筆時点で構築完了していないため連載回数は未定です。 事の始まり 弊社(弊部署)には毎月hh時間は技術向上のために遊んでよい(業務外のことをしてよい)、という取り組みがあります。 その一環で、自分は Kubernetes や Ansible といった技術の検証(勉強)を進めていました。 検証のためのVMは用意してもらっていましたが、1台しかないため色々試したいことが試せず悶々とした日々を過ごしていました。 e.g. 1サーバに GitLab(omnibus) と Kubernetesクラスタ を同居させて、 GitLab から Kubernetes に連携しようとしても「同じサーバ上にあるからダメー」と怒られたり…。 そんな折の今年1月末に突如、「保守期限切れになったサーバ(正確にはワークステーションらしい)を廃棄する前に自由に使っていいよ」とボスから声を掛けていただきました。 ↓その日の定時後の様子 なんか知らんけど保守切れ物理サーバ5台を自由に使っていいことになった!なんのご褒美だ?何して遊ぼうかな、やっぱりKubernetesかなー — ののし (@nnstt1) January 31, 2020 5台も使えることになったのですが、前職を含めても物理サーバを直接触ったこともないド初心者です。 とりあえず1台分だけ VMware ESXi を導入してVMの作っては壊しをできるようにして、その VMware 上に当初から考えていた Kubernetes クラスタを構築を目指しました。 社内ネットワークということもありプロキシやら認証やらで手こずりながらも、なんとか kubeadm を使った Kubernetes クラスタを構築することができました。(この内容もいずれ記事に残したいです) そんなこんなして遊んでいたら、Red HatのウェビナーやSoftware Design 3月号で紹介されていた OpenShift の詳細を知る機会があり、興味が湧いてきました。 OpenShift、いいですよね(説明を見聞きしただけで触ったことはない)。 使うだけならARO(Azure Red Hat OpenShift)が楽だと思いますが、せっかくなので VMware 上に OpenShift を構築することを次の目標にしました。 構築にあたり以下の記事を参考にさせていただいてます、ありがとうございます。 OpenShift 4.1をIntelの超小型PC「NUC」にインストールする - Qiita はじめに 2019年6月に OpenShift Container Platform 4.1(以降、OCP4.1と表記する)がリリースされました。 評価用にOCP4.1をIntelの超小型PC「 NUC (NUC6i7KYK) 」にインストールした時の手順を投稿します。 ... qiita.com OpenShift 4.1をベアメタルへUPIインストールする - 赤帽エンジニアブログ Red Hatの福岡オフィスでソリューションアーキテクトをしている田中司恩です。OpenShift 4.1をUPIでベアメタル環境にインストールする方法について解説します。基本的にはインストールドキュメントの要約になりますが、初めてOpenShiftに触れる方にも分かりやすいように順を追って説明していきます。*1 なお、AWSへのUPIインストールについては、前の記事で林さんが書かれていますのでそちらを参考にしてください。 rheb.hatenablog.com 2019/10/30追記。 OpenShift 4.2がGAになりましたので、4.1からの変更点について下記の記事にまとめました。 … rheb.hatenablog.com 上記の記事を流し見して「なるほどよく分からん、まぁなんとかなるでしょ」と、これも勉強だと気軽に考えて手を動かし始めました。 ...

March 3, 2020 · 1 min · @nnstt1