java replica set_K8s 的ReplicaController ReplicaSet DaemonSet和Job
什么是ReplicationController
ReplicationController是k8s的一種資源對象,能夠保證指定數量的pod處于運行狀態。如果pod由于某些原因掛掉,ReplicationController會立刻啟動新的pod,使得同時運行的pod數量滿足配置中的要求。
ReplicationController的三個組成部分
Label selector
Replica count
Pod template
ReplicationController的描述文件
一個ReplicationController的描述文件樣例如下:
apiVersion: v1
kind: ReplicationController
metadata:
name: kubia
spec:
replicas: 3
selector:
app: kubia # 可以不提供這一行,ReplicationController會使用template創建新的pod
template:
metadata:
labels:
app: kubia
spec:
containers:
- name: kubia
image: luksa/kubia
ports:
- containerPort: 8080
ReplicationController的相關操作
創建ReplicationController
kubectl create -f my-replication-controller.yaml
獲取ReplicationController
kubectl get rc
顯示某個ReplicationController的詳情信息
kubectl describe rc kubia
修改某個ReplicationController的配置
kubectl edit rc kubia
修改ReplicationController的pod副本數
kubectl scale rc kubia --replicas=10
刪除ReplicationController
# 刪除rc,但是它創建的pod扔保持運行
kubectl delete rc kubia --cascade=false
# 刪除rc,pod也刪除
kubectl delete rc kubia
ReplicaSet
ReplicaSet使用pod selector指定一組pod。負責維持一定數量的pod運行。pod運行數量少于預期的時候會使用pod template創建pod,pod運行數量多于預期的時候會刪除掉多余的pod。
一個pod被ReplicaSet關聯之后,它的屬性中會增加metadata.ownerReferences
如果一個pod的label匹配ReplicaSet的pod selector,同時這個pod沒有ownerReferences或者ownerReferences不是Controller,這個pod會立刻被此ReplicaSet管理。
Replica Set相比 Replication Controller支持更復雜的label selector。
ReplicaSet的描述文件
一個ReplicaSet描述文件的樣板如下所示:
apiVersion: apps/v1beta2
kind: ReplicaSet
metadata:
name: kubia
spec:
replicas: 3
selector:
matchLabels:
app: kubia
template:
metadata:
labels:
app: kubia
spec:
containers:
- name: kubia
image: luksa/kubia
ReplicaSet的相關操作
獲取所有的replicaSet
kubectl get rs
獲取replicaSet的信息
kubectl describe rs
獲取名字為kubia的replicaSet的信息
kubectl describe rs/kubia
ReplicaSet和Horizontal Pod Autoscaler
創建HPA描述文件:
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: frontend-scaler
spec:
scaleTargetRef:
kind: ReplicaSet
name: frontend
minReplicas: 3
maxReplicas: 10
targetCPUUtilizationPercentage: 50
HPA會監視CPU的利用率,動態調整ReplicaSet的replicas數量(3-10之間),直到CPU利用率為50%
以上配置等效于如下命令:
kubectl autoscale rc frontend --min=3 --max=10 --cpu-percent=50
刪除replicaSet
kubectl delete rs kubia
更復雜的選擇器
Replica支持更加復雜的選擇器。如下所示:
selector:
matchExpressions:
- key: app
operator: In
values:
- kubia
In:key對應的value必須包含values中給定的值。
NotIn:key對應的value必須不包含values中給定的值。
Exists:給定的key必須存在,不用再指定values。
DoesNotExist:給定的key必須不存在,不用再指定values。
DaemonSet
DaemonSet管理的Pod在集群中所有節點運行,且對于同一個節點只會啟動一個。DaemonSet的replica數量為集群節點的數量,無法更改。DaemonSet的這個特性非常適合運行一些類似于節點狀態監控的服務。
DaemonSet的描述文件
一個DaemonSet的例子如下:
apiVersion: apps/v1beta2
kind: DaemonSet
metadata:
name: ssd-monitor
spec:
selector:
matchLabels:
app: ssd-monitor
template:
metadata:
labels:
app: ssd-monitor
spec:
nodeSelector:
disk: ssd
containers:
- name: main
image: luksa/ssd-monitor
DaemonSet的相關操作
獲取daemon set信息
kubectl get ds
其余的命令和ReplicaSet,ReplicationController一致,不再贅述。
Job
Job 是一種特殊的controller,job期待著它控制的pod內的container運行成功后停止。不像是其他controller,pod停止運行后會自動重啟。但是如果job控制的pod異常退出,job的默認行為會重啟這個pod,直到任務運行成功,或者是累計失敗一定的次數后停止。
Job的描述文件
一個Job描述文件的例子如下:
apiVersion: batch/v1
kind: Job
metadata:
name: batch-job
spec:
template:
metadata:
labels:
app: batch-job
spec:
restartPolicy: OnFailure
containers:
- name: main
image: luksa/batch-job
和之前介紹的幾個controller不同的是。Job的restart policy 不能使用always。
可以使用的值為onFailure(默認值)和Never。
Job的相關操作
獲取job的信息
kubectl get jobs
查看運行完成的pod
kubectl get po -a
Job的高級配置
配置job需要完成多次(串行執行)
apiVersion: batch/v1
kind: Job
metadata:
name: multi-completion-batch-job
spec:
completions: 5
template:
...
允許job并行執行
apiVersion: batch/v1
kind: Job
metadata:
name: multi-completion-batch-job
spec:
completions: 5
parallelism: 2
template:
...
動態修改job的并行度
kubectl scale job multi-completion-batch-job --replicas 3
限制job完成最大耗時
配置job的pod spec中的activeDeadlineSeconds屬性
job失敗前最大重試次數
配置pod的spec.backoffLimit。如果Job執行失敗超過這個次數,Job會失敗,不再重新啟動。
cronjob定時任務
一個例子如下:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: batch-job-every-fifteen-minutes
spec:
schedule: "0,15,30,45 * * * *"
jobTemplate:
spec:
template:
metadata:
labels:
app: periodic-batch-job
spec:
restartPolicy: OnFailure
containers:
- name: main
image: luksa/batch-job
周期性定時任務的關鍵配置是schedule配置項。
Schedule配置項后每個數字分別對應著:
Minute
Hour
Day of month
Month
Day of week
定時任務最大啟動延遲時間
定時任務最大啟動延遲時間配置項為startingDeadlineSeconds。超過這個時間未啟動成功,job會被標記為失敗。
apiVersion: batch/v1beta1
kind: CronJob
spec:
schedule: "0,15,30,45 * * * *"
startingDeadlineSeconds: 15
...
總結
以上是生活随笔為你收集整理的java replica set_K8s 的ReplicaController ReplicaSet DaemonSet和Job的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: marvell万兆交换机内核编译总结
- 下一篇: 量子计算机芯片的制造过程,全干货!一文读