真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

k8s自主式pod之應(yīng)用策略規(guī)則

自主式pod應(yīng)用

我們接觸的pod大多數(shù)是控制器控制的pod,那么今天講的是自主式pod(也就是由yaml文件來創(chuàng)建的pod),也就是pod自己去控制自己,防止pod被控制器殺死。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),臺兒企業(yè)網(wǎng)站建設(shè),臺兒品牌網(wǎng)站建設(shè),網(wǎng)站定制,臺兒網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,臺兒網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

1,首先我們來創(chuàng)建一個nginx的pod資源對象:

在創(chuàng)建pod之前,我們來查看一下鏡像的下載策略:

[root@master yaml]# kubectl explain pod.spec.containers
查看imagePullpolicy的策略字段:
   imagePullPolicy  
     Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always
     if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated.
     More info:
     https://kubernetes.io/docs/concepts/containers/images#updating-images

幾種策略解釋:

  • Always:總是在從指定的倉庫中獲取鏡像,也就是說每次創(chuàng)建pod都會重新拉取一次鏡像。

  • Nerver:禁止從倉庫中下載鏡像,也就是說只使用本地鏡像。如果本地也沒有鏡像,則pod將無法運行。
  • IfNotPresent(提供):僅當(dāng)本地沒有對應(yīng)鏡像時,才從目標(biāo)倉庫中下載。

默認(rèn)的獲取策略如下:
鏡像標(biāo)簽為“l(fā)atest”,它的默認(rèn)下載策略是Always。
鏡像標(biāo)簽為自定義(不是默認(rèn)的latest),它的默認(rèn)下載策略是IfNotPresent。

//創(chuàng)建一個pod(定義某種策略):

[root@master yaml]# vim test-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: myapp
    image: nginx
    imagePullPolicy: Always        #定義鏡像下載策略(總是從指定倉庫獲取鏡像)
    ports:
      - containerPort: 80                  #暴露容器的端口
//執(zhí)行yaml文件:
[root@master yaml]# vim test-pod.yaml 
[root@master yaml]# kubectl  apply -f test-pod.yaml 
//查看pod的狀態(tài):
[root@master yaml]# kubectl  get pod test-pod -o wide
NAME       READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
test-pod   1/1     Running   0          7m55s   10.244.2.2   node02              
//以json格式查看pod的一個詳細(xì)信息:
[root@master yaml]# kubectl  get pod test-pod -o json

k8s自主式pod之應(yīng)用策略規(guī)則
k8s自主式pod之應(yīng)用策略規(guī)則

image鏡像相位(狀態(tài)):

  • Running:Pod所需的容器已經(jīng)被成功調(diào)度到某個節(jié)點,且已經(jīng)成功運行。

  • Pending:APIserver創(chuàng)建了pod資源對象,并且已經(jīng)存入etcd中,但它尚未被調(diào)度完成或者仍然處于倉庫中下載鏡像的過程。

  • Succeeded:Pod中的所有容器已成功終止,并且不會重新啟動。

  • Failed:Pod中的所有容器均已終止,并且至少一個容器因故障而終止。也就是說,容器要么以非零狀態(tài)退出,要么被系統(tǒng)終止

  • Unknown:APIserver無法正常獲取到pod對象的狀態(tài),通常用于其無法與所在工作節(jié)點的kubelet通信所致。

一定要熟悉并且記住這幾種狀態(tài),因為這有利于在集群出現(xiàn)故障時能夠準(zhǔn)確的找到問題,且快速的排查錯誤。


2,pod的重啟策略:

//首先我們查看pod的一個重啟策略:
[root@master yaml]# kubectl  explain  pod.spec  #查看pod的spec字段的重啟策略

k8s自主式pod之應(yīng)用策略規(guī)則

  • 字段解釋:
  • Always:但凡是pod對象終止就重啟,此為默認(rèn)策略。
  • OnFailure:僅在pod對象出現(xiàn)錯誤時才重啟,如果容器是處于complete狀態(tài),也就是正常退出的狀態(tài),是不會重啟的。
  • Never:從不重啟。

3,我們模擬一下,創(chuàng)建一個pod,使用公司內(nèi)部的私有倉庫中的鏡像,其鏡像下載策略為:Never(使用本地鏡像),pod的重啟策略為Never(從不重啟)。

[root@master yaml]# vim nginx-pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mynginx
  labels:                           #定義標(biāo)簽與servic相關(guān)聯(lián)
    test: myweb
spec:
  restartPolicy: Never     #定義鏡像重啟策略為Never
  containers:
  - name: myweb
    image: 172.16.1.30:5000/nginx:v1
    imagePullPolicy: Never         #定義鏡像下載策略為Never
---
apiVersion: v1
kind: Service
metadata:
  name: mynginx
spec:
  type: NodePort
  selector:
    test: myweb
  ports:
  - name: nginx
    port: 8080           #定義Cluster IP端口
    targetPort: 80      #暴露容器端口
    nodePort: 30000         #定義給外網(wǎng)通過宿主機(jī)暴露的端口
[root@master yaml]# kubectl  apply -f nginx-pod1.yaml 
pod/mynginx created
service/mynginx created

//查看pod當(dāng)前狀態(tài):
k8s自主式pod之應(yīng)用策略規(guī)則
查看pod信息可以看到鏡像拉取失敗,所以我們查看該pod的詳細(xì)信息進(jìn)行排查:
[root@master yaml]# kubectl describe pod mynginx
k8s自主式pod之應(yīng)用策略規(guī)則
可以看到是策略的原因,Nerver策略只能從該節(jié)點的本地鏡像進(jìn)行下載,所以我們需要在該節(jié)點(node02)上將私有倉庫中的鏡像進(jìn)行拉取到本地。

[root@node02 ~]# docker pull 172.16.1.30:5000/nginx:v1
v1: Pulling from nginx
Digest: sha256:189cce606b29fb2a33ebc2fcecfa8e33b0b99740da4737133cdbcee92f3aba0a
Status: Downloaded newer image for 172.16.1.30:5000/nginx:v1
//回到master,再次查看pod1是否運行:
[root@master yaml]# kubectl  get pod -o wide
NAME       READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
mynginx    1/1     Running   0          7m32s   10.244.2.4   node02              
test-pod   1/1     Running   1          7h20m   10.244.2.3   node02              

2)測試pod重啟策略:
我們模擬pod非正常退出

[root@master yaml]# vim nginx-pod1.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: mynginx
  labels:
    test: myweb
spec:
  restartPolicy: Never
  containers:
  - name: myweb
    image: 172.16.1.30:5000/nginx:v1
    imagePullPolicy: Never
    args: [/bin/sh -c sleep 10; exit 1]    #添加args字段,模擬sleep10秒后退出
//重新啟動pod
[root@master yaml]# kubectl  delete -f  nginx-pod1.yaml 
pod "mynginx" deleted
service "mynginx" deleted
[root@master yaml]# kubectl  apply -f  nginx-pod1.yaml 
pod/mynginx created
service/mynginx created

PS:因為在pod的文件中設(shè)置了pod的重啟策略為Never,所以在無法修改策略的情況下,需要將該pod刪除,重新執(zhí)行yaml文件生成新的pod。

//第一次查看pod狀態(tài):
k8s自主式pod之應(yīng)用策略規(guī)則
看到新的pod再node01節(jié)點上,所以我們還需再node01上將鏡像拉取到本地。

[root@node01 ~]# docker pull 172.16.1.30:5000/nginx:v1
v1: Pulling from nginx
Digest: sha256:189cce606b29fb2a33ebc2fcecfa8e33b0b99740da4737133cdbcee92f3aba0a
Status: Downloaded newer image for 172.16.1.30:5000/nginx:v1

為了更好的查看到效果,我們重新執(zhí)行yaml文件,生成新pod:
[root@master yaml]# kubectl delete -f nginx-pod1.yaml
[root@master yaml]# kubectl apply -f nginx-pod1.yaml

//查看pod的最終狀態(tài):
k8s自主式pod之應(yīng)用策略規(guī)則

我們來查看該pod的詳細(xì)信息(查看pod運行失敗的原因):
[root@master yaml]# kubectl  describe  pod mynginx 

k8s自主式pod之應(yīng)用策略規(guī)則
從上面的信息中我們可以得知pod在創(chuàng)建出容器后,卻非正常退出了,最后導(dǎo)致容器創(chuàng)建失敗。

3)我們修改策略規(guī)則,將規(guī)則設(shè)置為OnFailure:
k8s自主式pod之應(yīng)用策略規(guī)則

//重新運行pod:
[root@master yaml]# kubectl delete -f  nginx-pod1.yaml 
pod "mynginx" deleted
service "mynginx" deleted
[root@master yaml]# kubectl apply -f  nginx-pod1.yaml 
pod/mynginx created
service/mynginx created
查看pod狀態(tài)(失敗):
[root@master yaml]# kubectl  get pod -o wide
NAME      READY   STATUS              RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
mynginx   0/1     RunContainerError   3          55s   10.244.2.8   node02              

[root@master yaml]# kubectl get pod -o json

k8s自主式pod之應(yīng)用策略規(guī)則
我們可以看到當(dāng)前pod創(chuàng)建容器失敗。

//我們馬上實時監(jiān)控pod當(dāng)前的狀態(tài):
k8s自主式pod之應(yīng)用策略規(guī)則
可以看到pod一直在不停的重啟,原因是我們在設(shè)置pod重啟為OnFailure時,同時設(shè)置了pod在睡眠10秒后,便會重啟,所以該pod會一直重啟下去。

4)我們修改策略規(guī)則,并將其pod恢復(fù)正常運行

k8s自主式pod之應(yīng)用策略規(guī)則

//重新運行yaml文件,生成新的pod:
[root@master yaml]# kubectl  delete -f  nginx-pod1.yaml 
pod "mynginx" deleted
service "mynginx" deleted
k[root@master yaml]# kubectl  apply -f  nginx-pod1.yaml 
pod/mynginx created
service/mynginx created
//查看pod是否恢復(fù)正常運行:(正常運行)
[root@master yaml]# kubectl  get pod -o wide
NAME      READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
mynginx   1/1     Running   0          71s   10.244.1.8   node01              

5) 查看servie信息,驗證nginx的web界面能否正常訪問:

[root@master yaml]# kubectl  get svc  mynginx 
NAME      TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
mynginx   NodePort   10.101.131.36           8080:30000/TCP   4m23s

k8s自主式pod之應(yīng)用策略規(guī)則

———————— 本文至此結(jié)束,感謝閱讀 ————————


本文名稱:k8s自主式pod之應(yīng)用策略規(guī)則
分享網(wǎng)址:http://weahome.cn/article/jhcosp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部