示例:将pod转化为yaml资源清单
init容器能能做什么
https://kubernetes.io/zh/docs/concepts/workloads/pods/init-containers/
此yaml参考官方文件写成,意思是init进行service检查,如果不通过则一直初始化,如果通过,则运行主程序。
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: myapp:v1
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', "until nslookup myservice.default.svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
一直处于init状态,没有就绪
无法完成解析,主程序无法执行
所以创建一个service服务来暴露pod,启动主程序
kind: Service
apiVersion: v1
metadata:
name: myservice
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
init解析完成
内网可以解析到svc
探针能做什么
在init完成之后,liveness和readness工作
liveness和readness是探针,会对mainC检查
https://kubernetes.io/zh/docs/concepts/workloads/pods/pod-lifecycle/
readness探针在0/1
用户访问pod的流程:
user -> kubectl -> apiserver -> cri(容器运行时间) -> (ori -> linx) -> pause(pod之父,最精简,容纳多个pod,docker 镜像,根容器) -> init(containers) -> containers
使用探针
1.高级 liveness 探针示例(存活检测)
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1
imagePullPolicy: IfNotPresent
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 1 1秒钟后检测
timeoutSeconds: 2 延迟2秒
periodSeconds: 2 每隔2秒检查一次
检测出错,不断重启
2.高级 readness 探针示例
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: nginx
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
path: /test.html
port: 80
initialDelaySeconds: 1
periodSeconds: 2
timeoutSeconds: 2
就绪检测没有通过
404错误
一直在做就绪检测