目錄
一、replicaset
二、deployment
1、版本迭代
2、回滾
3、滾動更新策略
4、暫停與恢復(fù)
三、daemonset
四、statefulset
五、job
六、cronjob
一、replicaset
ReplicaSet用于保證指定數(shù)量的 Pod 副本一直運行
vim rs-example.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-example
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
kubectl apply -f rs-example.yml
kubectl get pod --show-labels
replicaset是通過標(biāo)簽匹配pod
kubectl label pod replicaset-example-c7bs2 app=myapp --overwrite
kubectl get pod --show-labels
kubectl label pod replicaset-example-c7bs2 app=nginx --overwrite
kubectl get pod --show-labels
replicaset自動控制副本數(shù)量,pod可以自愈
kubectl delete pod replicaset-example-c7bs2
kubectl get pod --show-labels
回收資源
kubectl delete -f rs-example.yml
二、deployment
vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-example
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:v1
kubectl apply -f deployment-example.yaml
1、版本迭代
replicaset就是deployment的一個版本
2、回滾
vim deployment-example.yaml
kubectl apply -f deployment-example.yaml
kubectl get all
3、滾動更新策略
vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-example
spec:
minReadySeconds: 5
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:v1
kubectl apply -f deployment-example.yaml
kubectl describe deployments.apps deployment-example

4、暫停與恢復(fù)
暫停,避免觸發(fā)不必要的線上更新
kubectl rollout pause deployment deployment-example
vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-example
spec:
minReadySeconds: 5
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
replicas: 6
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
resources:
limits:
cpu: 0.5
memory: 200Mi
requests:
cpu: 0.5
memory: 200Mi
kubectl apply -f deployment-example.yaml
調(diào)整副本數(shù),不受影響
但是更新鏡像和修改資源并沒有觸發(fā)更新
kubectl rollout history deployment deployment-example
恢復(fù)后開始觸發(fā)更新
kubectl rollout resume deployment deployment-example
kubectl rollout history deployment deployment-example
回收
kubectl delete -f deployment-example.yaml
三、daemonset
Taints(污點)是一種標(biāo)記,可以應(yīng)用于節(jié)點,用于表示這個節(jié)點上的某些條件不適合運行某些 Pod。
vim daemonset-example.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-example
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
tolerations:
- effect: NoSchedule
operator: Exists
containers:
- name: nginx
image: nginx
kubectl apply -f daemonset-example.yml
kubectl get pod -o wide
四、statefulset
當(dāng)使用StatefulSet時,Pod的名稱會包括一個索引,例如web-0,web-1,web-2等,這些索引是按順序遞增的,并且在Pod的生命周期中保持不變
StatefulSet保證每個Pod的名稱在整個集群中是唯一的,例如,如果您有一個名為web-0的Pod,任何時候都不能重新創(chuàng)建一個叫做web-0的Pod。
vim statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
serviceName: "nginx"
replicas: 3
minReadySeconds: 3
template:
metadata:
labels:
app: nginx
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
kubectl apply -f statefulset.yaml
kubectl get pod
五、job
Job是用于處理一次性任務(wù)的控制器,它可以保證任務(wù)成功完成后自動停止。Job中包含一個或多個Pods,在Pods成功完成后便完成任務(wù)。如果Pods失敗,則Job會重啟Pods,直到任務(wù)完成。
提前將perl上傳至harbor倉庫
vim job.yml
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
completions: 6 //完成任務(wù)的Pod數(shù)量
parallelism: 2 //并行執(zhí)行的Pod數(shù)量
template:
spec:
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never //完成后不會重啟
backoffLimit: 4 //當(dāng)任務(wù)執(zhí)行失敗時,最多重試的次數(shù)
kubectl apply -f job.yml



六、cronjob
CronJob是用于處理周期性任務(wù)的控制器,它類似于傳統(tǒng)的Cron定時任務(wù),可以基于指定的時間或時間間隔來執(zhí)行任務(wù)。CronJob會創(chuàng)建一個Job對象來運行任務(wù),Job對象運行完成后自動被刪除。如果Job對象出現(xiàn)錯誤,CronJob將會自動重啟Job對象,直到任務(wù)成功完成。
vim cronjob.yml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "* * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
kubectl apply -f cronjob.yml
kubectl get all
kubectl get pod
kubectl delete -f cronjob.yml
每分鐘的每一秒都會執(zhí)行一次,使用busybox鏡像來打印當(dāng)前時間并輸出"Hello from the Kubernetes cluster"文章來源:http://www.zghlxwxcb.cn/news/detail-738032.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-738032.html
到了這里,關(guān)于kubernetes-控制器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!