日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java replica set_Kubernetes对象之ReplicaSet

發(fā)布時(shí)間:2024/3/7 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java replica set_Kubernetes对象之ReplicaSet 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

說(shuō)到ReplicaSet對(duì)象,得先說(shuō)說(shuō)ReplicationController(簡(jiǎn)稱為RC)。在舊版本的Kubernetes中,只有ReplicationController對(duì)象。它的主要作用是確保Pod以你指定的副本數(shù)運(yùn)行,即如果有容器異常退出,會(huì)自動(dòng)創(chuàng)建新的 Pod 來(lái)替代;而異常多出來(lái)的容器也會(huì)自動(dòng)回收。可以說(shuō),通過(guò)ReplicationController,Kubernetes實(shí)現(xiàn)了集群的高可用性。

在新版本的 Kubernetes 中建議使用 ReplicaSet(簡(jiǎn)稱為RS )來(lái)取代 ReplicationController。ReplicaSet 跟 ReplicationController 沒(méi)有本質(zhì)的不同,只是名字不一樣,并且 ReplicaSet 支持集合式的 selector(ReplicationController 僅支持等式)。

雖然也 ReplicaSet 可以獨(dú)立使用,但建議使用 Deployment 來(lái)自動(dòng)管理 ReplicaSet,這樣就無(wú)需擔(dān)心跟其他機(jī)制的不兼容問(wèn)題(比如 ReplicaSet 不支持 rolling-update 但 Deployment 支持),并且Deployment還支持版本記錄、回滾、暫停升級(jí)等高級(jí)特性。Deployment 的詳細(xì)介紹和使用方法參見(jiàn)。

ReplicationController和Pod一樣,都是Kubernetes中的對(duì)象,因此創(chuàng)建方式類似。通過(guò)yaml或json描述文件來(lái)定義一個(gè)ReplicationController對(duì)象。一個(gè)最簡(jiǎn)單的ReplicationController的定義如下:

apiVersion: v1

kind: ReplicationController

metadata:

name: nginx

spec:

replicas: 3

selector:

app: nginx

template:

metadata:

name: nginx

labels:

app: nginx

spec:

containers:

- name: nginx

image: nginx

ports:

- containerPort: 80

下面簡(jiǎn)要解釋一下上述ReplicationController描述文件中的關(guān)鍵點(diǎn):

kind字段代表你要新建的對(duì)象類型。此處指定為ReplicationController。

spec.selector字段指定為你需要管理的Pod的label(label的意義體現(xiàn)在此處)。這兒將spec.selector設(shè)置為app: nginx,意味著所有包含label:app: nginx的Pod都將被這個(gè)RC管理。

spec.replicas字段代表了受此RC管理的Pod,需要運(yùn)行的副本數(shù)。

template模塊用于定義Pod,包括Pod的名字,Pod擁有的label以及Pod中運(yùn)行的應(yīng)用。

上面的RC通過(guò)kubectl apply命令創(chuàng)建成功后,Kubernetes會(huì)在所有可用的Node上,新建三個(gè)Pod。每個(gè)Pod都有一個(gè)app: nginx的label,并且每個(gè)Pod中都運(yùn)行一個(gè)nginx容器。一旦其中某個(gè)Pod發(fā)生故障停止運(yùn)行了,Controller Manager都能夠及時(shí)發(fā)現(xiàn),然后根據(jù)當(dāng)前RC定義,創(chuàng)建出一個(gè)新的Pod,從而使包含label:app: nginx的Pod的運(yùn)行副本數(shù)始終為3。

Kubernetes官方強(qiáng)烈建議避免直接使用ReplicaSet,而應(yīng)該通過(guò)Deployment來(lái)創(chuàng)建RS和Pod。

由于ReplicaSet是ReplicationController的代替物,因此用法基本相同,唯一的區(qū)別在于ReplicaSet支持集合式的selector。一個(gè)典型的RS描述文件如下:

apiVersion: apps/v1

kind: ReplicaSet

metadata:

name: frontend

labels:

app: guestbook

tier: frontend

spec:

replicas: 3

selector:

matchLabels:

tier: frontend

matchExpressions:

- {key: tier, operator: In, values: [frontend]}

template:

metadata:

labels:

app: guestbook

tier: frontend

spec:

containers:

- name: php-redis

image: gcr.io/google_samples/gb-frontend:v3

resources:

requests:

cpu: 100m

memory: 100Mi

env:

- name: GET_HOSTS_FROM

value: dns

ports:

- containerPort: 80

以上RS描述文件中,selector除了可以使用matchLabels,還支持集合式的操作:

matchExpressions:

- {key: tier, operator: In, values: [frontend]}

ReplicaSet的刪除

使用kubectl delete命令會(huì)刪除此RS以及它管理的Pod。在Kubernetes刪除RS前,會(huì)將RS的replica調(diào)整為0,等待所有的Pod被刪除后,在執(zhí)行RS對(duì)象的刪除。

如果希望僅僅刪除RS對(duì)象(保留Pod),請(qǐng)使用kubectl delete命令時(shí)添加--cascade=false選項(xiàng)。

ReplicaSet的伸縮

通過(guò)修改.spec.replicas的值可以實(shí)時(shí)修改RS運(yùn)行的Pod數(shù)量。

Horizontal Pod Autoscaler(HPA)

RS可以通過(guò)HPA來(lái)根據(jù)一些運(yùn)行時(shí)指標(biāo)實(shí)現(xiàn)自動(dòng)伸縮,下面是一個(gè)簡(jiǎn)單的例子:

apiVersion: autoscaling/v1

kind: HorizontalPodAutoscaler

metadata:

name: frontend-scaler

spec:

scaleTargetRef:

kind: ReplicaSet

name: frontend

minReplicas: 3

maxReplicas: 10

targetCPUUtilizationPercentage: 50

可以通過(guò)kubectl create -f來(lái)創(chuàng)建HPA或者使用

# 注意此命令并不會(huì)調(diào)用HAP定義,而是直接通過(guò)命令達(dá)到自動(dòng)擴(kuò)容效果,與上面通過(guò)yml效果類似

kubectl autoscale rs frontend --max=10

總結(jié)

以上是生活随笔為你收集整理的java replica set_Kubernetes对象之ReplicaSet的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。