kubernetes 4 yaml


kubectl explain pods? ?#詳細POD參數(shù)

vi pod-demo.yaml

apiVersion: v1

kind: Pod

metadata:

? name: pod-demo

? namespace: default

? labels:

? ? app: myapp

? ? tier: frontend

spec:

? containers:

? - name: myapp

? ? image: ikubernets/myapp:v1

? - name: busybox

? ? image: busybox:latest

? ? command:

? ? - "/bin/sh"

? ? - "-c"

? ? - "echo $(date) >> /usr/share/nginx/html/index.html; sleep 5"

kubectl create -f pod-demo.yaml

kubectl describe pods pod-demo

kubectl logs pod-demo myapp

kubectl exec -it pod-demo -c myapp -- /bin/sh

kubectl delete pod pod-demo

kubectl get pods -w

kubectl delete -f pod-demo.yaml? ? ? ? #刪除pod,如果控制器控制的刪除可以自動創(chuàng)建


命令,配置清單(命令式),配置清單(聲明式)


資源配置清單:

自主式Pod資源

資源的清單格式:

? ? ? 一級字段: apiVersion(group/version) 有穩(wěn)定版就不用公測版,

? ? ? ? kind,metadata(name,namespace,labels,annotations(都有)),spec

? ? ? ? ? status(只讀)

? ? spec字段,使用控制器管理POD依然有用

? ? ? Pod資源:

spec.containers<[object]>

kubectl explain pods.spec.containers

容器參數(shù):

name <string>

image <string>? ? ? ? ? ? ? ? ? ? quay.io/coreos/flannel(倉庫/用戶/鏡像)

imagePullPolicy <string>? ? ? ? #鏡像獲取策略

Always, Never, IfNotPresent(總是下載,總是不下載,本地不存在則下載)

下載完后,有些字段不能改,除非刪了重建,如NODEPORT可以改。

imagePullPolicy:? IfNotPresent

ports? ? ? ? 暴露端口

args <[]string>? ? ? 參數(shù)

command <[]string>? 命令(命令作為參數(shù)傳遞給args)

args和command什么時候生效:

https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/

1: 如果kubernetes沒有提供command 和args 則使用docker 的 Entrypoint 和Cmd

2:? command 沒有args? 只運行command? 忽略docker的Entrypint cmd

3:? args 默認使用鏡像當中的Entrypoint? 把args作為參數(shù)傳遞給Entrypoint,鏡像中cmd沒用了

4: 如果使用了 args command? 完全自定義 命令,忽略Entrypoing cmd



給任何資源使用標簽,可以用標簽來操作,標簽(鍵值對)

一個資源可以使用多個標簽,一個標簽可以對應多個資源

可以創(chuàng)建時指定,也可以創(chuàng)建之后使用命令管理

查看POD標簽? LABELS

標簽: key=value

key: 字母? 數(shù)字? _? - .

value: 可以為空,只能字母 數(shù)字開頭及結(jié)尾,中間可使用

kubectl get pods --show-labels

kubectl get pods -l app --show-labels? ? ? #擁有app標簽

kubectl get pods -L app,run

kubectl label --help? ? ? ? ? ? #打標簽幫助

kubectl label pods pod-demo release=canary? ? ? ? #打標簽

已有標簽,打標會報錯

kubectl label pods pod-demo release=stable --overwrite? ? #覆蓋

kubectl get pods -l app --show-labels? ? ? ? #查看

kubectl get pods -l release,app? ? ? ? ? ? #即有release標簽,又有app標簽

標簽選擇器:

等值關系: =? ==? !=

集合關系:

key in (value1,value2.......)

key not in (value1,value2,............)

!key

kubectl get pods -l release=stable --show-labels

kubectl label pods nginx-deployment-5cb87c9ddc-z2w7cash=1764375887 release=canary #打標簽

kubectl label pods nginx-deployment-5cb87c9ddc-z2w7c release=canary

kubectl get pods -l release=stable --show-labels

kubectl get pods -l release

kubectl get pods -l release=stable,app=myapp

kubectl get pods -l release!=stable,app!=myapp

等值關系

----------------------------------------------------------------------

集合關系

kubectl get pod -l "release in (canary,beta,alpha)"

kubectl get pod -l "release not in (canary,beta,alpha)"

許多資源支持內(nèi)嵌字段定義其使用的標簽選擇器 :

matchLabels:? ? ? ? ? 直接給定鍵值

matchExpressions:? 基于給定的表達式來定義使用標簽選擇器 {key:"KEY",operator:"OPERATOR",

values:[VAL1,VAL2,................]}

操作符: In? NotIn; values字段的值必須為非空列表?

Exists? NotExists: values字段的值必須為空列表

kubectl get nodes --show-labels

kubectl get nodes --show-labels

beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node1

kubectl label nodes node1? disktype=ssd

kubectl get nodes --show-labels

kubectl explain pods.spec

nodeSelector <map[string]string>

節(jié)點標簽選擇器,

kubectl delete -f pod-demo.yaml

kubectl get nodes --show-labels

nodeName: 直接指定node

kubectl describe pods pod-demo



nodeName <string>

annotations:? ? ? ? ? ? 資源注解

與label不同的地方在于,它不能用于挑選資源對象,僅用于為對象提供“元數(shù)據(jù)”。



一個容器一個進程

一個POD可以運行多個容器,但一般只運行一個

主容器一退出,POD就結(jié)束了,

主程序結(jié)束前: pre stop

主程序結(jié)束后: post start

對Pod的檢測:

存活狀態(tài)檢測: liveness probe

就緒狀態(tài)檢測: readiness probe


Pod的生命周期:

-狀態(tài): pending(掛起) - Running,Failed,Succeeded,Unkown

創(chuàng)建Pod: apiserver-->schuelder-->etcd pod-->node 清單-->etcd-->apiserver

直接執(zhí)行命令? HTTP/tcp? 應用請求?

liveness probe: 容器狀態(tài)存活探測

readiness probe: 容器狀態(tài)

Pod的生命周期: 狀態(tài) 容器探測

Pod生命周期中的重要行為:

初始化容器

容器探測:

LIVENESS

readliness

restartPolicy:

Always,OnFailure,Never,Default to Always

300秒不斷重啟,最長時間

容器一般停止30秒,然后KILL

探針類型有三種:

ExecAction? TCPSockerAction HTTPGetAction

存活性探針

就緒性探針

探的容器,不是POD

kubectl explain pods.spec.containers.livenessProbe

探針,只要定義一個就好了

exec <Object>

httpGet <Object>

tcpSocket <Object>

failureThreshold <integer>? 失敗幾次才算失敗 3

每次多長時間:

periodSeconds <integer>? 默認10秒

超時多久算沒響應:

timeoutSeconds <integer>? 默認1秒

initialDelaySeconds <integer>: 初始化延遲探測:

kubectl explain pods.spec.containers.livenessProbe.exec:

command <[]string>? ? 返回成功,就是存活的

vi liveness-exec.yaml



kubectl create -f liveness-exec.yaml

kubectl get pods -w

kubectl descript pods liveness-exec-pod

kubectl explain pods.spec.containers.livenessProbe.tcpSocket? #Socker探測

kubectl explain pods.spec.containers.livenessProbe.httpGet



kubectl create -f liveness-exec.yaml

kubectl get pods -w

kubectl descript pods liveness-exec-pod

kubectl explain pods.spec.containers.livenessProbe.tcpSocket? #Socker探測

kubectl explain pods.spec.containers.livenessProbe.httpGet


vi readiness-httpget.yaml


kubectl exec -it readiness-httpget-pod -- /bin/sh

kubectl describe pods readiness-httpget-pod

kubectl explain pods.spec.containers.lifecycle

vi poststart-pod.yaml


vi poststart-pod.yaml




回顧: Pod

apiVersion kind metadata spec status(只讀)

? ? ? ? ? spec:

? ? ? ? ? ? ? ? ? containers:

? ? ? ? ? ? ? ? ? nodeSelector

? ? ? ? ? ? ? ? ? nodename

? ? ? ? ? ? ? ? ? restartPolicy:

? ? ? Always, Nerver Onfailure

? ? ? ? ? containers:

name

image

imagePullPolicy: Always Nerver IfNotPresent

ports:

? ? ? name:

? ? ? containerPort:

? ? ? ? ? ? ? ? livenessProbe

? ? ? ? ? ? ? ? readinessProbe

? ? ? ? ? ? ? ? liftcycle

? ? ? ? 內(nèi)嵌探測:

? ? ? ? ExecAction:? exec

? ? ? ? TCPSockerAction: tcpSocker

? ? ? ? HTTPGetAction: httpGet

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容