Kubernetes (K8s) オペレーターの書き方、学びましたか?

Kubernetes (K8s) オペレーターの書き方、学びましたか?

Kubernetes(K8s) オペレーターを書こうという思いが私の心の中でどんどん大きくなっていきました。私は記事を読み、GitHub リポジトリを調べ、同僚に相談し始めました。完全に成功したとは言えませんが、意図はそこにありました。

Payam Qorbanpour 著「How to Write a Kubernetes Operator」からの翻訳です。

Kubernetes を毎日扱うバックエンド開発者として、私は自分の知識の境界を広げるためにオペレーターを書きたいと常に思っていました。しかし、この目標を達成するのを妨げる障害が発生しました。

これは私が兵役中に gobackup-operator を書いた経緯です。 tl;dr: 「詳細プロジェクト」セクションに直接スキップします

ナイフを研いでも薪割りは遅れない

Kubernetes(K8s) オペレーターを書こうという思いが私の心の中でどんどん大きくなっていきました。私は記事を読み、GitHub リポジトリを調べ、同僚に相談し始めました。完全に成功したとは言えませんが、意図はそこにありました。

この努力の成果は、私の GitHub アカウントに保存されている一連のチュートリアル プロジェクトです。

実践プロセスは、私が初めて Kubernetes に出会った約 1 年前に始まったことを述べておきます。 CKAD について学ぶために、まず Guru のチュートリアルを見て、次に Nana の YouTube チュートリアルを見ました。

灰に帰した

私は軍隊に配属されました。

インターネット接続も、電子機器も一つもありませんでした。その代わりに、私たちを楽しませてくれたのは、ハードカバーの本、バレーボール、そして素晴らしい日の出と日の入りの景色だけでした。

この場合、オペレーターを作成するという考えは消えつつあります。私が気にしているのは、食べること、読書すること、そして時々の自由(休暇)を楽しむことだけです。しかし、時にはこの自由は長くは続かなかった。司令官はかつてこうコメントした。

休暇の喜びは兵舎を出た瞬間に終わります。

研修コースが終了し、オフィスで社員として働き始めましたが、そこでもインターネット接続の不足を感じました。夜はオフィスを出て、好きな仕事をします。限られた時間内でより良いパフォーマンスが得られることもあります。それで、午後4時から午後9時まで、何か特別なものを作らなければなりませんでした。私にとって、それは本当に特別なことです!

音を立てなければ、

結局、このシリーズの助けを借りて、チュートリアルから別の Kubernetes オペレーターを作成することができましたが、今回は違ったものでした。

同僚がバックアップシステムを開発しましたが、あまりうまく機能していないようです。そこで彼らは別の解決策を模索し、定期的にデータベースをバックアップしてストレージにプッシュするように設計された gobackup というプロジェクトに出会いました。問題は、プロジェクトに etcd データベースのサポートが含まれていないことです。そのため、彼らは要件を満たすために etcd サポートを追加することでプロジェクトに貢献することを決定しました。最終的に、これが新しいバージョンにつながりました。

私が不在の間、彼らはその上に Kubernetes オペレーターを開発することに決めました。これは私にとって重要な一歩です。彼らがそれを私と共有したとき、私は熱心にプロジェクトをチェックし、「ついにこれだ。オペレーターが作成されようとしている。やったー!」と思いました。

プロジェクトを読んでいるときに、プロジェクトの README に質問があることに気付きました。リンクの 1 つは 404 ページを指しています。私はこの問題を解決するために率先してプルリクエストを送信しました。

オーナーはそれを受け入れました。 :)

このようなオープンな姿勢に出会った後、同僚の一人が、このオペレーターを gobackup 組織の下に置いて、より多くの人が開発に貢献できるようにしたらどうかと提案しました。

私は問題を提起し、gobackup 組織の下にリポジトリを提案しましたが、コラボレーションの余地はまだ残っています。

昼間は軍隊に勤務し、夜は gobackup-operator プロジェクトに取り組んでいます。

プロジェクトの詳細

まず環境を整えました。

幸運なことに、私のコンピューターにはすでに Golang、Docker、kubectl がインストールされていました。これまでの経験を通じて、ローカル マシンの Kubernetes クラスター (Kind など) とオペレーターを作成するためのツール (kubebuilder など) についてはすでに精通しています。

そこで、オペレータコードを開始しました。

 $ kubebuilder init --domain gobackup.io --repo github.com/gobackup/gobackup-operator

次に、オペレーターの API を作成しました。

 $ kubebuilder create api --group gobackup --version v1 --kind Backup Create Resource [y/n] y Create Controller [y/n] y

データベースとストレージについても同様です。

 $ kubebuilder create api --group database.gobackup --version v1 --kind PostgreSQL Create Resource [y/n] y Create Controller [y/n] y $ kubebuilder create api --group storage.gobackup --version v1 --kind S3 Create Resource [y/n] y Create Controller [y/n] y

APIの変更

プロジェクトの特定の要件に応じて API を変更しました。

 // Backup is the Schema for the backups API type Backup struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec BackupSpec `json:"spec,omitempty"` Status BackupStatus `json:"status,omitempty"` BackupModelRef BackupModelRef `json:"backupModelRef,omitempty"` StorageRefs []StorageRef `json:"storageRefs,omitempty"` DatabaseRefs []DatabaseRef `json:"databaseRefs,omitempty"` }

次に、Reconcileメソッドを変更します

//+kubebuilder:rbac:groups=gobackup.io,resources=backups,verbs=get;list;watch;create;update;patch;delete //+kubebuilder:rbac:groups=gobackup.io,resources=backups/status,verbs=get;update;patch //+kubebuilder:rbac:groups=gobackup.io,resources=backups/finalizers,verbs=update func (r *BackupReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { // reconcile implementation }

テスト

テストする前に、バックアップ可能なテスト データベースを準備する必要があります。したがって、gobackup-operator-postgres-deployment.yaml ファイルを使用して PostgreSQL デプロイメントを作成します。

 apiVersion: apps/v1 kind: Deployment metadata: name: postgres-deployment spec: selector: matchLabels: app: postgres replicas: 1 template: metadata: labels: app: postgres spec: containers: - name: postgres image: postgres:14.11 env: - name: POSTGRES_USER value: "" - name: POSTGRES_PASSWORD value: "" - name: PGDATA value: "/var/lib/postgresql/data/pgdata" volumeMounts: - mountPath: /var/lib/postgresql/data name: postgredb volumes: - name: postgredb persistentVolumeClaim: claimName: postgres-pvc

マニフェスト内の POSTGRES_USER と POSTGRES_PASSWORD を変更して適用することを忘れないでください。

 kubectl apply -f example/gobackup-opetator-postgres-deployment.yaml, example/gobackup-opetator-postgres-service.yaml

さらに、Kubernetes クラスターでテストするためのリソース (デプロイメント、ロール、クラスター ロール、サービス アカウントなど) をいくつか追加しました。これらはすべて gobackup-operator/example/ ディレクトリにあります。

したがって、次のチェックリストを適用して基本的なリソースを追加します。

 kubectl apply -f example/gobackup-opetator-serviceaccount.yaml, gobackup-opetator-pvc.yaml, gobackup-opetator-namespace.yaml, gobackup-opetator-clusterrolebinding.yaml, gobackup-opetator-clusterrole.yaml

次に、ストレージとデータベースのリストが表示されます。

 kubectl apply -f example/gobackup-opetator-storage/* kubectl apply -f example/gobackup-opetator-database/*

次のマニフェストを使用して、ローカル マシン上でオペレーターを実行できました。

 kubectl apply -f example/gobackup-opetator-deployment.yaml

したがって、Backup オブジェクトまたは CronBackup オブジェクトが作成または変更されるたびに、オペレーターは必要なタスクを実行します。

バックアップ構成を設定するためのバックアップ モデルを作成するには:

 kubectl apply -f example/gobackup-opetator/gobackup-opetator-backupmodel.yaml

gobackup-operator/example/gobackup-operator ディレクトリ内のマニフェスト (backup または cronbackup) のいずれかを適用すると、オペレーターがバックアップを実行するようになります。

 kubectl apply -f example/gobackup-opetator/gobackup-opetator-cronbackup.yaml

結論は

最初は、README にこのような小さな変更を加えることに恥ずかしさを感じました。 Hacktoberfest への応募に参加するためだけに作成した PR の 1 つのように感じます。

しかし、私はその有効性について考えました。単一行のコミットでも影響がありました。 README ファイルにその変更を加えていなかったら、オペレーターを作成しなかったかもしれません。

<<:  RAG を組み立てるのは、レゴで遊ぶようなものです。 Alibaba Cloud Bailianはオープンソースアーキテクチャと互換性があり、最高レベルの自由度をサポートするように完全にアップグレードされました

>>:  高度にスケーラブルなクラウドネイティブアプリケーションを構築するための 5 つのヒント

推薦する

ミックスアイスシティの100億人民元の収益の秘密を解明

2022年9月22日、 Mixue Bingchengは深セン証券取引所のメインボードに目論見書を公...

2021 Inspur クラウド イノベーション サミット: マネージド クラウドがクラウド移行の 3 番目の選択肢に

9月17日、「すべてをクラウド化できる」をテーマにしたInspurクラウドイノベーションサミットが盛...

コンテンツマーケティングのための優れたアイデアの最終保存

この記事はコンテンツ マーケティングに当てはまります。ビジネスマンであれば、将来のためにベスト ピッ...

ウェブサイトをタイムリーなウェブサイトにする方法を教える3つのステップ

みなさんこんにちは。私はMuzi Chengzhouです。タイムリーなウェブサイトは常に注目されてき...

EasyStackが中国初のOpenStack+K8S専門オープンソース企業に

最近、EasyStack(北京EasyStack技術開発有限公司)は、ドイツのベルリンで開催されたコ...

4 つの文章で「SEO 最適化業界」に恋しくなる

今、また別の子供たちが大学入試に合格しました。彼らにはまた別の明るい未来が待っているはずです。しかし...

Safehousecloud-3 USD/KVM/512 MB RAM/20 GB SSD/1 TB 帯域幅/シンガポール

tは米国とシンガポールに登録された新しいビジネスのようで、主にKVM仮想化に基づくVPSを運営してお...

re:Invent 2019 における AWS のイノベーション - スケールアップ + スケールアウト

[51CTO.com からのオリジナル記事] 毎年恒例のクラウドコンピューティングイベント AWS ...

フォーラムにプロモーション記事を投稿する際のヒントは何ですか?

初心者のウェブマスターとして、私たちはウェブサイトのプロモーションの初期段階で多くの問題に遭遇します...

5月の主な出来事を振り返る:巨人たちは懸命に働いている

編集者 |梁策校正:Yun Zhaoソーシャルホットスポット1. バイトダンスがDouyinグループ...

「3b戦争」後、百度360はどこへ向かうのか

「3b戦争」は関係国務省の仲介により徐々に終結に向かっている。インターネットの世界はまさにこのようで...

潜在顧客を開拓するためにオンラインマーケティングでブランド戦略をどのように活用すればよいでしょうか?

オンラインマーケティングにはブランド戦略が必要ですか?近年、オンラインマーケティングプロモーションで...

フランスのVPSの推奨、いくつかの便利なフランスのVPS(フランスのクラウドサーバー)業者が推奨

フランスの VPS の推奨事項、フランスの VPS のレンタル、どのフランスの VPS が最適ですか...

SEOウェブサイト最適化キーワード競合分析

キーワードの最適化に携わる SEO 担当者にとって、キーワードの競争力を分析することは基本的なスキル...

FinOpsクラウドコスト最適化は無視できない

調査会社ガートナーの調査によると、2022年末までに世界中の企業がクラウドコンピューティングインフラ...