創(chuàng)建資源文件模板
kubectl create <tab><tab> 下面的所有都可以創(chuàng)建模板文件 --dry-run=client -o yaml
# 以下資源對象都可以用模板生成
[root@master ~]# kubectl create <tab><tab>
clusterrole deployment poddisruptionbudget rolebinding
clusterrolebinding ingress priorityclass secret
configmap job quota service
cronjob namespace role serviceaccount
查詢資源對象的幫助信息
????????kubectl explain pod.spec.restartPolicy? ? ? ? ? ? #這里對上下層級關(guān)系需要清楚
# 查看幫助信息
[root@master ~]# kubectl explain pod.spec.restartPolicy
KIND: Pod
VERSION: v1
FIELD: restartPolicy <string>
DESCRIPTION:
Restart policy for all containers within the pod.
One of Always, OnFailure, Never. Default to Always. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
獲取Pod模板
????????kubectl run mypod --image=xxxx --dry-run=client -o yaml
# Pod 模板
[root@master ~]# kubectl run mypod --image=myos:httpd --dry-run=client -o yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: mypod
name: mypod
spec:
containers:
- image: myos:httpd
name: mypod
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
獲取Deployment
????????kubectl create dewployment myeb --image=myos:httpd --dry-run=client -o yaml
# Deployment 模板
[root@master ~]# kubectl create deployment myweb --image=myos:httpd --dry-run=client -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: myweb
name: myweb
spec:
replicas: 1
selector:
matchLabels:
app: myweb
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: myweb
spec:
containers:
- image: myos:httpd
name: myos
resources: {}
status: {}
控制器
可以幫助用戶實(shí)現(xiàn)Pod的自動(dòng)部署,自維護(hù),擴(kuò)容,滾動(dòng)更新等自動(dòng)化程序
Deployment控制器(副本數(shù)量保持)
最常用的無狀態(tài)服務(wù)控制器,由Deployment 、 ReplicaSet 、 Pod組成支持集群擴(kuò)容縮容,滾動(dòng),更新,自動(dòng)維護(hù)Pod可用性及副本數(shù)量等功能
ReplicaSet 和 Pod 由 Deployment自動(dòng)管理,用戶無需干預(yù)
[root@master ~]# vim mydeploy.yaml
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: myweb
spec:
replicas: 2
selector:
matchLabels:
app: myhttp
template:
metadata:
labels:
app: myhttp
spec:
restartPolicy: Always
containers:
- name: apache
image: myos:httpd
ports:
- name:
protocol: TCP
containerPort: 80
[root@master ~]# kubectl apply -f mydeploy.yaml
deployment.apps/myweb created
[root@master ~]# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
myweb 2/2 2 2 68s
[root@master ~]# kubectl get replicasets.apps
NAME DESIRED CURRENT READY AGE
myweb-64b544dcbc 2 2 2 73s
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myweb-64b544dcbc-5mhqn 1/1 Running 0 76s
myweb-64b544dcbc-nt6tz 1/1 Running 0 76s
測試Deploment
# 創(chuàng)建服務(wù)訪問集群
[root@master ~]# vim websvc.yaml
---
kind: Service
apiVersion: v1
metadata:
name: websvc
spec:
type: ClusterIP
clusterIP: 10.245.1.80
selector:
app: myhttp
ports:
- protocol: TCP
port: 80
targetPort: 80
[root@master ~]# kubectl apply -f websvc.yaml
service/websvc created
[root@master ~]# curl -m 3 http://10.245.1.80
Welcome to The Apache.
# 自維護(hù)自治理
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myweb-64b544dcbc-5mhqn 1/1 Running 0 4m16s
myweb-64b544dcbc-nt6tz 1/1 Running 0 4m16s
# Pod 被刪除后,Deploy 會(huì)自動(dòng)創(chuàng)建新的 Pod 來維護(hù)集群的完整性
[root@master ~]# kubectl delete pod myweb-64b544dcbc-5mhqn
pod "myweb-64b544dcbc-5mhqn" deleted
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myweb-64b544dcbc-g8l9p 1/1 Running 0 3s
myweb-64b544dcbc-nt6tz 1/1 Running 0 4m25s
# 動(dòng)態(tài)更新集群副本數(shù)量
[root@master ~]# kubectl scale deployment myweb --replicas=1
deployment.apps/myweb scaled
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myweb-64b544dcbc-nt6tz 1/1 Running 0 5m46s
[root@master ~]# kubectl scale deployment myweb --replicas=3
deployment.apps/myweb scaled
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myweb-64b544dcbc-5sf5z 1/1 Running 0 3s
myweb-64b544dcbc-6r6dw 1/1 Running 0 3s
myweb-64b544dcbc-nt6tz 1/1 Running 0 5m56s
歷史版本、滾動(dòng)更新
# 添加注釋信息
[root@master ~]# kubectl annotate deployments.apps myweb kubernetes.io/change-cause="httpd.v1"
deployment.apps/myweb annotated
# 修改鏡像,滾動(dòng)更新集群
[root@master ~]# curl -m 3 http://10.245.1.80
Welcome to The Apache.
[root@master ~]# sed -r 's,(image: ).*,\1myos:nginx,' mydeploy.yaml |kubectl apply -f -
deployment.apps/myweb configured
# 更新注釋信息
[root@master ~]# kubectl annotate deployments.apps myweb kubernetes.io/change-cause="nginx.v1"
deployment.apps/myweb annotated
[root@master ~]# kubectl get replicasets.apps
NAME DESIRED CURRENT READY AGE
myweb-5bfdc888d7 2 2 2 3m46s
myweb-64b544dcbc 0 0 0 12m
[root@master ~]# curl -m 3 http://10.245.1.80
Nginx is running !
# 歷史版本與回滾
[root@master ~]# kubectl rollout history deployment myweb
deployment.apps/myweb
REVISION CHANGE-CAUSE
1 httpd.v1
2 nginx.v1
[root@master ~]# kubectl rollout undo deployment myweb --to-revision=1
deployment.apps/myweb rolled back
[root@master ~]# kubectl rollout history deployment myweb
deployment.apps/myweb
REVISION CHANGE-CAUSE
2 nginx.v1
3 httpd.v1
[root@master ~]# curl -m 3 http://10.245.1.80
Welcome to The Apache.
# 刪除控制器方法1
[root@master ~]# kubectl delete deployments.apps myweb
deployment.apps "myweb" deleted
# 刪除控制器方法2
[root@master ~]# kubectl delete -f mydeploy.yaml
deployment.apps "myweb" deleted
DaemonSet控制器(根據(jù)node)
?無法自定義副本數(shù)量,所創(chuàng)建的Pod與node節(jié)點(diǎn)綁定
每個(gè)node上都會(huì)運(yùn)行一個(gè)Pod
當(dāng)有新Node加入集群時(shí)會(huì)為他新增Pod副本,當(dāng)Node從集群移除時(shí),這些Pod也會(huì)被回收,典型的應(yīng)用kube-proxy
會(huì)受到污點(diǎn)策略的影響
[root@master ~]# vim myds.yaml
---
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: myds
spec:
selector:
matchLabels:
app: myhttp
template:
metadata:
labels:
app: myhttp
spec:
restartPolicy: Always
containers:
- name: apache
image: myos:httpd
ports:
- name:
protocol: TCP
containerPort: 80
[root@master ~]# kubectl apply -f myds.yaml
daemonset.apps/myds created
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
myds-4wt72 1/1 Running 0 31s 10.244.3.14 node-0003
myds-lwq8l 1/1 Running 0 31s 10.244.2.17 node-0002
myds-msrcx 1/1 Running 0 31s 10.244.1.11 node-0001
# 刪除DS控制器
[root@master ~]# kubectl delete -f myds.yaml
daemonset.apps "myds" deleted
Job/CronJob
Job是一個(gè)單任務(wù)控制器,負(fù)責(zé)執(zhí)行一次任務(wù),保證任務(wù)在一個(gè)或多個(gè)Pod上執(zhí)行成功CronJob基于時(shí)間管理的Job
執(zhí)行完才是1/1 沒執(zhí)行完是0/1
[root@master ~]# vim myjob.yaml
---
kind: Job
apiVersion: batch/v1
metadata:
name: myjob
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: myjob
image: myos:latest
command: ["/bin/sleep", "30"]
[root@master ~]# kubectl apply -f myjob.yaml
job.batch/myjob created
[root@master ~]# kubectl get jobs.batch
NAME COMPLETIONS DURATION AGE
myjob 0/1 3s 3s
[root@master ~]# kubectl get pods -l job-name=myjob
NAME READY STATUS RESTARTS AGE
myjob--1-kz8mk 1/1 Running 0 6s
[root@master ~]# sleep 30
[root@master ~]# kubectl get pods -l job-name=myjob
NAME READY STATUS RESTARTS AGE
myjob--1-kz8mk 0/1 Completed 0 58s
[root@master ~]# kubectl get jobs.batch
NAME COMPLETIONS DURATION AGE
myjob 1/1 31s 64s
# 刪除Job控制器
[root@master ~]# kubectl delete -f myjob.yaml
job.batch "myjob" deleted
?CronJob
達(dá)到條件才運(yùn)行,保留三次運(yùn)行結(jié)果,多出來的把之前的刪除
[root@master ~]# vim mycj.yaml
---
kind: CronJob
apiVersion: batch/v1
metadata:
name: mycronjob
spec:
schedule: "*/1 * * * 1-5" #調(diào)度字段周期分時(shí)日月周
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: myjob
image: myos:latest
command: ["/bin/sleep", "30"]
[root@master ~]# kubectl apply -f mycj.yaml
cronjob.batch/mycronjob created
[root@master ~]# kubectl get cronjobs.batch
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
mycronjob */1 * * * 1-5 False 0 <none> 4s
[root@master ~]# kubectl get jobs.batch
No resources found in default namespace.
[root@master ~]# kubectl get pods
No resources found in default namespace.
[root@master ~]# sleep 60
[root@master ~]# kubectl get jobs.batch
NAME COMPLETIONS DURATION AGE
mycronjob-27605367 0/1 0s 0s
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mycronjob-27605367--1-ps6r8 1/1 Running 0 3s
[root@master ~]# kubectl get jobs.batch
NAME COMPLETIONS DURATION AGE
mycronjob-27605367 0/1 12s 12s
[root@master ~]# sleep 200
# 保留三次結(jié)果,多余的會(huì)被刪除
[root@master ~]# kubectl get jobs.batch
NAME COMPLETIONS DURATION AGE
mycronjob-27605367 1/1 31s 3m30s
mycronjob-27605368 1/1 31s 2m30s
mycronjob-27605369 1/1 31s 90s
mycronjob-27605370 0/1 30s 30s
[root@master ~]# kubectl get jobs.batch
NAME COMPLETIONS DURATION AGE
mycronjob-27605368 1/1 31s 2m33s
mycronjob-27605369 1/1 31s 93s
mycronjob-27605370 1/1 31s 33s
# 刪除CJ控制器
[root@master ~]# kubectl delete -f mycj.yaml
cronjob.batch "mycronjob" deleted
高級控制器StatefulSet
與有狀態(tài)的應(yīng)用及分布式系統(tǒng)一起使用,涉及了Headless服務(wù),存儲卷,DNS等相關(guān)知識點(diǎn),是一個(gè)復(fù)雜的話題
?一個(gè)一個(gè)創(chuàng)建,無核服務(wù)先創(chuàng)建
# 配置headless服務(wù)
[root@master ~]# vim mysvc.yaml
---
kind: Service
apiVersion: v1
metadata:
name: mysvc
spec:
type: ClusterIP
clusterIP: None
selector:
app: myhttp
ports:
- protocol: TCP
port: 80
targetPort: 80
[root@master ~]# kubectl apply -f mysvc.yaml
service/mysvc created
[root@master ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysvc ClusterIP None <none> 80/TCP 61s
# 創(chuàng)建statefulset控制器
[root@master ~]# vim mysts.yaml
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
name: mysts
spec:
serviceName: "mysvc"
selector:
matchExpressions:
- key: app
operator: In
values:
- myhttp
replicas: 3
template:
metadata:
labels:
app: myhttp
spec:
restartPolicy: Always
containers:
- name: apache
image: myos:httpd
imagePullPolicy: Always
ports:
- protocol: TCP
containerPort: 80
[root@master ~]# kubectl apply -f mysts.yaml
statefulset.apps/mysts created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysts-0 1/1 Running 0 4s
mysts-1 1/1 Running 0 3s
mysts-2 1/1 Running 0 2s
[root@master ~]# host mysts-0.mysvc.default.svc.cluster.local 10.245.0.10
Using domain server:
Name: 10.245.0.10
Address: 10.245.0.10#53
Aliases:
mysts-0.mysvc.default.svc.cluster.local has address 10.244.3.81
[root@master ~]# host mysvc.default.svc.cluster.local 10.245.0.10
Using domain server:
Name: 10.245.0.10
Address: 10.245.0.10#53
Aliases:
mysvc.default.svc.cluster.local has address 10.244.2.10
mysvc.default.svc.cluster.local has address 10.244.1.12
mysvc.default.svc.cluster.local has address 10.244.3.11
[root@master ~]# curl -m 3 http://10.244.2.10/info.php
<pre>
Array
(
[REMOTE_ADDR] => 10.244.0.0
[REQUEST_METHOD] => GET
[HTTP_USER_AGENT] => curl/7.29.0
[REQUEST_URI] => /info.php
)
php_host: mysts-2
1229
# 刪除sts控制器
[root@master ~]# kubectl delete -f mysts.yaml -f mysvc.yaml
statefulset.apps "mysts" deleted
service "mysvc" deleted
HPA控制器
HorizontalPodAutoscaling簡稱HPA在集群中基于CPU利用率或者其他程序提供的度量值實(shí)現(xiàn)水平自動(dòng)伸縮的功能,自動(dòng)縮放Pod的數(shù)量
控制器會(huì)周期性的獲取平均利用率
與目標(biāo)值相比較后調(diào)整副本數(shù)量文章來源:http://www.zghlxwxcb.cn/news/detail-437341.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-437341.html
# 為 Deploy 模板添加資源配額
[root@master ~]# vim mydeploy.yaml
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: myweb
spec:
replicas: 1
selector:
matchLabels:
app: myhttp
template:
metadata:
labels:
app: myhttp
spec:
restartPolicy: Always
containers:
- name: apache
image: myos:httpd
ports:
- name:
protocol: TCP
containerPort: 80
resources:
requests:
cpu: "200m"
---
kind: Service
apiVersion: v1
metadata:
name: websvc
spec:
type: ClusterIP
clusterIP: 10.245.1.80
selector:
app: myhttp
ports:
- protocol: TCP
port: 80
targetPort: 80
# 使用 Deploy 和 Cluster IP 創(chuàng)建集群
[root@master ~]# kubectl apply -f mydeploy.yaml
deployment.apps/myweb created
service/websvc created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myweb-5946bb4c68-c8tm2 1/1 Running 0 2m43s
[root@master ~]# curl -s http://10.245.1.80
Welcome to The Apache.
# 創(chuàng)建 HPA 控制器
[root@master ~]# vim myhpa.yaml
---
kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v1
metadata:
name: myweb
spec:
minReplicas: 1
maxReplicas: 3
scaleTargetRef:
kind: Deployment
apiVersion: apps/v1
name: myweb
targetCPUUtilizationPercentage: 50
[root@master ~]# kubectl apply -f myhpa.yaml
horizontalpodautoscaler.autoscaling/myweb created
# 剛剛創(chuàng)建 unknown 是正常現(xiàn)象,最多等待 300s 就可以正常獲取數(shù)據(jù)
[root@master ~]# kubectl get horizontalpodautoscalers.autoscaling
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
myweb Deployment/myweb <unknown>/50% 1 3 0 4s
[root@master ~]# kubectl get horizontalpodautoscalers.autoscaling
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
myweb Deployment/myweb 0%/50% 1 3 1 71s
# 終端 1 訪問提高負(fù)載
[root@master ~]# while true;do
curl -s "http://10.245.1.80/info.php?id=50000"
sleep 1
done
# 終端 2 監(jiān)控 HPA 變化
[root@master ~]# kubectl get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
myweb Deployment/myweb 0%/50% 1 3 1 8m21s
myweb Deployment/myweb 49%/50% 1 3 1 9m
myweb Deployment/myweb 56%/50% 1 3 1 9m15s
myweb Deployment/myweb 56%/50% 1 3 2 9m30s
myweb Deployment/myweb 37%/50% 1 3 2 9m45s
myweb Deployment/myweb 32%/50% 1 3 2 10m
myweb Deployment/myweb 41%/50% 1 3 2 11m
myweb Deployment/myweb 48%/50% 1 3 2 11m
myweb Deployment/myweb 51%/50% 1 3 2 11m
myweb Deployment/myweb 59%/50% 1 3 2 11m
myweb Deployment/myweb 58%/50% 1 3 3 12m
myweb Deployment/myweb 42%/50% 1 3 3 12m
myweb Deployment/myweb 34%/50% 1 3 3 12m
# 如果 300s 內(nèi)平均負(fù)載小于標(biāo)準(zhǔn)值,就會(huì)自動(dòng)縮減集群規(guī)模
[root@master ~]# kubectl get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
myweb Deployment/myweb 38%/50% 1 3 3 19m
myweb Deployment/myweb 21%/50% 1 3 3 20m
myweb Deployment/myweb 17%/50% 1 3 3 21m
myweb Deployment/myweb 7%/50% 1 3 3 22m
myweb Deployment/myweb 0%/50% 1 3 3 23m
myweb Deployment/myweb 0%/50% 1 3 2 25m
myweb Deployment/myweb 0%/50% 1 3 1 28m
[root@master ~]# kubectl get horizontalpodautoscalers.autoscaling
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
myweb Deployment/myweb 0%/50% 1 3 1 5m41s
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myweb-5946bb4c68-f9tw9 1/1 Running 0 6m40s
到了這里,關(guān)于K8s控制器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!