91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

etcd-operator快速入門完全教程

發布時間:2020-04-21 07:30:57 來源:網絡 閱讀:481 作者:RancherLabs 欄目:云計算

Operator是指一類基于Kubernetes自定義資源對象(CRD)和控制器(Controller)的云原生拓展服務,其中CRD定義了每個operator所創建和管理的自定義資源對象,Controller則包含了管理這些對象所相關的運維邏輯代碼。

 

對于普通用戶來說,如果要在k8s集群中部署一個高可用的etcd集群,那么不僅要了解其相關的配置,同時又需要特定的etcd專業知識才能完成維護仲裁,重新配置集群成員,創建備份,處理災難恢復等等繁瑣的事件。
 

而在operator這一類拓展服務的協助下,我們就可以使用簡單易懂的YAML文件(同理參考Deployment)來聲明式的配置,創建和管理我們的etcd集群,下面我們就來一同了解下etcd-operator這個服務的架構以及它所包含的一些功能。
 
etcd-operator快速入門完全教程

 

目 標

 

  1. 了解etcd-operator的架構與CRD資源對象

  2. 部署etcd-operator

  3. 使用etcd-operator創建etcd cluster

  4. 基于etcd-operator備份和恢復etcd cluster
     

    服務架構

 

etcd-operator的設計是基于k8s的API Extension機制來進行拓展的,它為用戶設計了一個類似于Deployment的Controller,只不過這個Controller是用來專門管理etcd這一服務的。

 

用戶默認還是通過kubectl或UI來與k8s的API進行交互,只不過在這個k8s集群中多了一個用戶自定義的控制器(custom controller),operator controller的服務是以Pod的方式運行在k8s集群中的,同時這個服務也需要配置所需的RBAC權限(比如對Pod,Deployment,Volume等使用到的資源進行增刪改查的操作),下面我們用一個簡單的架構圖來進行闡述:
 
etcd-operator快速入門完全教程
 

etcd-operator的自定義資源對象(CRD)

 

在k8s中,所有自定義的Controller和其自定義的資源對象(CRD)都必須滿足k8s API的規范(參考下圖):

 

  • apiVersion描述了當前自定義資源對象的版本號

  • Kind表示自定義資源對象的名稱,用戶可通過執行kubectl get $KIND_NAME來獲取所創建的CRD對象

  • Metadata繼承了原生k8s的metadata,用于添加標簽,Annotations等元數據

  • Spec是用戶可自定義設計的服務配置參數,如鏡像版本號,節點數量,資源配置等等..

  • Status包含了當前資源的的相關狀態,每個operator controller可自定義status所包含的信息,一般會選擇添加如conditions,updateTime和message等一類的信息。
     
    etcd-operator快速入門完全教程
     
    下面先我們來了解一下etcd-operator所包含的幾個自定義資源對象(CRDs):

 

1、EtcdCluster: etcdcluster用來描述用戶自定義的etcd集群,可一鍵式部署和配置一個相關的etcd集群。
 

apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdCluster
metadata:
  name: etcd-cluster
spec:
  size: 3
  version: 3.2.25

 
2、EtcdBackup: etcdbackup用來描述和管理一個etcd集群的備份,當前支持定期備份到云端存儲,如AWS s3, Aliyun oss(oss當前需使用quay.io/coreos/etcd-operator:dev鏡像)。
 

apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdBackup
metadata:
  name: etcd-backup
spec:
  etcdEndpoints: [<etcd-cluster-endpoints>]
  storageType: OSS #options are S3/ABS/GCS/OSS
  backupPolicy:
    backupIntervalInSecond: 125
    maxBackups: 4
  oss:
    #"<oss-bucket-name>/<path-to-backup-file>"
    path: <full-oss-path>
    ossSecret: <oss-secret>
    # Details about regions and endpoints, see https://www.alibabacloud.com/help/doc-detail/31837.htm
    endpoint: <endpoint> 

 

3、EtcdRestore:etcdrestore用來幫助將etcdbackup服務所創建的備份恢復到一個指定的etcd的集群。
 

apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdRestore
metadata:
  # name must be same to the spec.etcdCluster.name
  name: example-etcd-cluster
spec:
  etcdCluster:
    name: example-etcd-cluster
  backupStorageType: OSS
  oss:
    path: <full-oss-path> 
    ossSecret: <oss-secret>
    endpoint: <endpoint>

 

如何部署和使用etcd-operator

 
1、部署etcd-operator

 

在Rancher最新的stable v2.3.2 的版本中,用戶可通過應用商店(Catalog)來一鍵式部署 etcd-operator v0.9.0版本,同時原生k8s也可下載rancher/charts到本地后通過helm install的方式進行部署。
 
etcd-operator快速入門完全教程
 
1)(可選)部署etcd-operator時可選擇同時創建一個etcd集群(此集群在etcd-operator被刪除時會被一同移除),當然用戶也可待etcd-operator部署完成通過kubectl apply -f myetcd.yaml來創建一個新的etcd集群。
 
etcd-operator快速入門完全教程
 
2)部署時,如果用戶選擇啟動Enable Clusterwide of etcd Operator這個選項,那么這個etcd-operator將作為集群層級對象來使用(否則為namespaced隔離),如果enable這個選項,那么在創建etcd集群時需添加以下注釋才能創建創建:
 

kind: EtcdCluster
metadata:
  name: etcd-cluster
  # add this annotation when the clusterWide is enabled
  annotations:
    etcd.database.coreos.com/scope: clusterwide

 
2、創建etcd集群

 

接下來我們就可以使用上述的CRD自定義資源對象對來創建和管理我們的etcd集群了。
 

2.1 手動創建etcd集群
 

cat <<EOF | kubectl apply -f -
apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdCluster
metadata:
  name: "etcd-cluster"
spec:
  size: 3 # 默認etcd節點數
  version: "3.2.25" # etcd版本號
EOF

 
2.2 部署后可通過CRD對象來查看我們創建的etcd集群和pod狀態
 

$ kubectl get etcdcluster
NAME            AGE
etcd-cluster    2m

$ kubectl get pod
NAME                     READY   STATUS  RESTARTS AGE
etcd-cluster-g28f552vvx  1/1   Running    0      2m
etcd-cluster-lpftgqngl8  1/1   Running    0      2m
etcd-cluster-sdpcfrtv99  1/1   Running    0      2m

 
2.3 可以往etcd集群任意的寫入幾條數據驗證etcd集群是正常工作的(后續也可用來驗證集群的備份和恢復功能)
 

$ kubectl get svc
NAME                  TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
etcd-cluster          ClusterIP   None           <none>        2379/TCP,2380/TCP   17h
etcd-cluster-client   ClusterIP   10.43.130.71   <none>        2379/TCP            17h
## write data
$ kubectl exec -it any-etcd-pod -- env "ETCDCTL_API=3" etcdctl --endpoints http://etcd-cluster-client:2379 put foo "Hello World"
## get data
$ kubectl exec -it any-etcd-pod -- env "ETCDCTL_API=3" etcdctl --endpoints http://etcd-cluster-client:2379 get foo
foo
Hello World

 
3、基于operator備份etcd cluster

 

3.1 確認了etcd集群正常運行后,作為devops后面要考慮的就是如何創建etcd集群的自動化備份,下面以阿里云的OSS舉例:
 

cat <<EOF | kubectl apply -f -
apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdBackup
metadata:
  name: example-etcd-cluster-periodic-backup
spec:
  etcdEndpoints: [http://etcd-cluster-client:2379] #內網可使用svc地址,外網可用NodePort或LB代理地址
  storageType: OSS
  backupPolicy:
    backupIntervalInSecond: 120 #備份時間間隔
    maxBackups: 4 #最大備份數
  oss:
    path: my-bucket/etcd.backup
    ossSecret: oss-secret #需預先創建oss secret
    endpoint: oss-cn-hangzhou.aliyuncs.com
EOF

 
3.2 若OSS Secret不存在,用戶可先手動創建,具體配置可參考如下:
 

cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: oss-secret
type: Opaque
stringData:
  accessKeyID: myAccessKey
  accessKeySecret: mySecret
EOF

 
3.3 待etcdbackup創建成功后,用戶可以通過kubectl describe etcdbackup或查看etcd-backup controller日志來查看備份狀態,如狀態顯示為Succeeded: true,可以前往oss查看具體的備份內容。
 
etcd-operator快速入門完全教程
 
4、基于operator恢復etcd cluster

 
最后,假設我們要將etcd集群A的備份數據恢復到另一個新的etcd集群B,那么我們先手動創建一個名為etcd-cluster2的新集群(oss備份/恢復當前需使用quay.io/coreos/etcd-operator:dev鏡像)。
 

cat <<EOF | kubectl apply -f -
apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdCluster
metadata:
  name: "etcd-cluster2"
spec:
  size: 3
  version: "3.2.25"
EOF

 
然后通過創建etcdresotre將備份數據恢復到etcd-cluster2集群
 


cat <<EOF | kubectl apply -f -
apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdRestore
metadata:
  # name必須與下面的spec.etcdCluster.name保持一致
  name: etcd-cluster2
spec:
  etcdCluster:
    name: etcd-cluster2
  backupStorageType: OSS
  oss:
    path: my-bucket/etcd.backup_v1_2019-08-07-06:44:17
    ossSecret: oss-secret
    endpoint: oss-cn-hangzhou.aliyuncs.com
EOF

 
待etcdresotre對象創建成功后,可以查看etcd-operator-restore的日志,大致內容如下:
 

$ kubectl logs -f etcd-operator-restore
...
time="2019-08-07T06:50:26Z" level=info msg="listening on 0.0.0.0:19999"
time="2019-08-07T06:50:26Z" level=info msg="starting restore controller" pkg=controller
time="2019-08-07T06:56:25Z" level=info msg="serving backup for restore CR etcd-cluster2"

 
通過kubectl查看pod我們可以看到etcd-cluster2集群的etcd節點被刪除重建:
 

NAME                       READY   STATUS    RESTARTS   AGE
etcd-cluster2-5tq2d5bvpf    0/1     Terminating   0      93s
etcd-cluster2-kfgvc692pp    1/1     Terminating   0      101s
etcd-cluster2-xqkgz8chb8    0/1     Init:1/3      0      6s
etcd-cluster2-pf2qxgtg9d    1/1     Running       0      48s
etcd-cluster2-x92l9vpx97    1/1     Running       0      40s

 
最后可通過etcdctl來驗證之前的數據是否存在(需設置ETCDCTL_API=3):
 

$ kubectl exec -it etcd-pod -- env "ETCDCTL_API=3" etcdctl --endpoints http://etcd-cluster2-client:2379 get foo
foo
Hello World

 

小 結

 

Etcd作為當前非常流行的key-value分布式文件存儲,它本身的強一致性和較優的性能可以為許多分布式計算解決分布式存儲的需求,如果你的微服務和應用需要用到此類的數據庫,不妨來試試Rancher Catalog應用中的etcd-operator吧,Just do it!
 

相關資料:

https://github.com/coreos/etcd-operator

https://coreos.com/blog/introducing-the-etcd-operator.html

https://github.com/rancher/charts/tree/master/charts/etcd-operator/v0.9.0

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹阳市| 盐津县| 英山县| 徐闻县| 尉犁县| 延长县| 资中县| 庄河市| 广灵县| 隆德县| 大埔县| 上栗县| 黄陵县| 依安县| 康马县| 隆林| 霍州市| 沛县| 诏安县| 衢州市| 绥化市| 义乌市| 福州市| 兴城市| 乐亭县| 祥云县| 江都市| 托克逊县| 高要市| 佳木斯市| 岚皋县| 慈溪市| 三亚市| 黔江区| 商洛市| 稷山县| 平远县| 望谟县| 兴隆县| 新密市| 千阳县|