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