成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何編寫Kubernetes(K8s) operator,你學會了嗎?

云計算 云原生
編寫 Kubernetes(K8s) operator 的意圖在我心中不斷增長。我開始閱讀文章、探索 GitHub 存儲庫,并就此咨詢我的同事。雖然我不能說它完全成功,但這個意圖仍然存在。

編寫 Kubernetes(K8s)  operator 的意圖在我心中不斷增長。我開始閱讀文章、探索 GitHub 存儲庫,并就此咨詢我的同事。雖然我不能說它完全成功,但這個意圖仍然存在。

圖片

譯自How to Write a Kubernetes Operator,作者 Payam Qorbanpour。

作為一名每天都與 Kubernetes 打交道的后端開發人員,我一直希望編寫一個 operator 來擴展我的知識邊界。然而,障礙出現了,阻礙了我實現這一目標。

這就是我在服兵役期間編寫gobackup-operator的故事。tl;dr:直接跳到“深入項目”部分

磨刀不誤砍柴工

編寫 Kubernetes(K8s)  operator 的意圖在我心中不斷增長。我開始閱讀文章、探索 GitHub 存儲庫,并就此咨詢我的同事。雖然我不能說它完全成功,但這個意圖仍然存在。

所有這些努力的結果是我GitHub 帳戶中存儲的一系列教程項目。

我應該提到,大約一年前,當我第一次接觸 Kubernetes 時,練習過程就開始了。我首先觀看了Guru 的教程以了解 CKAD,然后觀看了Nana 的 YouTube 教程。

化為灰燼

我被派去服兵役。

那里沒有互聯網連接,甚至沒有一個電子設備。相反,我們只有精裝書、排球以及迷人的日出和日落美景來娛樂我們。

在這種情況下,創建 operator 的想法正在逐漸消失。我所關心的一切就是吃飯、看書和享受偶爾的自由(假期)。然而,有時這種自由是短暫的,正如指揮官曾經評論的那樣:

假期的快樂在你離開營房的那一刻就結束了。

訓練課程結束了,我開始在辦公室擔任一名雇員,但那里也感受到了互聯網連接的缺乏!在晚上,我離開辦公室,從事我熱愛的工作。有時,你在有限的時間內會有更好的表現。因此,從下午 4 點到晚上 9 點,我必須創造一些特別的東西。對我來說,它確實很特別!

不鳴則已

畢竟,在此系列的幫助下,我設法從教程中編寫了另一個 Kubernetes  operator但這一次,它有所不同。

我的同事已經開發了一個備份系統,但它似乎運行得不太好。因此,他們探索了另一種解決方案,并遇到了一個名為gobackup的項目,該項目旨在定期備份數據庫并將它們推送到存儲中。問題是該項目不包括對 etcd 數據庫的支持。因此,他們決定通過添加 etcd 支持來滿足要求,從而為該項目做出貢獻。這最終導致了一個新的版本。

在我缺席期間,他們決定在此基礎上開發一個 Kubernetes  operator 。這對我是重要的一步。當他們與我分享時,我急切地檢查了該項目,并想,“終于,就是它了。operator 即將創建。耶!”

在閱讀該項目時,我注意到該項目的自述文件中存在一個問題。其中一個鏈接指向 404 頁面。我主動修復了這個問題并提交了一個拉取請求。

所有者欣然接受了它。:)

遇到如此開放的態度后,我的一個同事建議我們可以將此 operator 放在gobackup 組織下,以便更多的人可以為其開發做出貢獻。

我打開了一個問題并提出了gobackup 組織下的一個存儲庫,并且仍然存在合作的開放性。

白天,我在軍隊服役,晚上,我致力于 gobackup-operator 項目。

深入項目

我首先設置我的環境。

幸運的是,我已經在計算機上安裝了 Golang、Docker 和 kubectl。通過之前的實踐,我已熟悉本地機器 Kubernetes 集群(如 Kind)和用于創建 operator 的工具(如 kubebuilder)。

因此,我啟動了 operator 代碼。

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

然后我繼續為 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/*

使用以下清單,我能夠在我的本地機器上運行該 operator :

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

因此,每當創建或更改 Backup 或 CronBackup 對象時, operator 都會執行必要的任務。

要創建備份模型以設置備份配置:

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

應用 gobackup-operator/example/gobackup-operator 目錄中的清單之一(備份或 cronbackup)將觸發 operator 運行備份:

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

結論

起初,我對在自述文件中做出如此小的更改感到尷尬。感覺就像你為了參與 Hacktoberfest 提交而做出的那些 PR 之一。

但后來我考慮到了它的有效性。即使是那些單行提交也產生了影響。誰知道呢,如果我沒有對 README 文件進行更改,我可能就不會創建這個 operator 。

責任編輯:武曉燕 來源: 云云眾生s
相關推薦

2022-11-02 10:21:41

K8s pod運維

2024-07-29 10:35:44

KubernetesCSI存儲

2024-09-11 08:02:27

k8sgitlab升級

2024-01-26 06:05:16

KuberneteseBPF網絡

2022-07-26 08:03:27

Kubernetes節點磁盤

2024-01-30 18:29:29

微服務架構Ingress

2022-11-30 09:54:57

網絡令牌身份驗證

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2024-09-30 08:01:44

2024-05-29 09:20:41

2021-11-26 11:30:07

身高重建隊列

2024-08-21 08:27:30

擴展數據庫服務器

2023-09-12 07:26:46

2023-04-26 00:41:36

A/B測試郵件數量

2024-08-09 08:17:07

SSH服務器架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品 | 成人在线视频免费观看 | 精品视频在线一区 | 日韩欧美三区 | 天天操妹子 | www.久久精品视频 | 久久日韩精品一区二区三区 | 在线免费黄色 | 91久久久精品国产一区二区蜜臀 | 一区二区三 | 一级毛片视频在线 | 99久久婷婷国产亚洲终合精品 | 亚洲精品白浆高清久久久久久 | 黄色毛片大全 | 欧美不卡在线 | 精品久久久久一区二区国产 | 亚洲综合伊人 | 97视频在线观看网站 | 日韩精品一区二区久久 | 日韩精品一区二区三区中文在线 | 国产精品视频网址 | 日韩欧美一区二区三区在线播放 | 999re5这里只有精品 | 伊人免费在线观看高清 | 天天干天天草 | 日本欧美在线 | 亚洲欧美日韩中文字幕一区二区三区 | 天天插天天操 | av天天爽 | 亚洲高清在线 | 欧美精品乱码99久久影院 | 激情麻豆视频 | 一区二区三区四区国产精品 | 美女视频h | 亚洲国产精品99久久久久久久久 | 日韩精品成人网 | 亚洲一区久久 | 四虎在线观看 | 国产日韩一区二区三免费 | 蜜桃视频在线观看免费视频网站www | 黄色片在线看 |