k8s 重启策略、健康检查、环境变量、初始化容器
Pod基本概念
Pod是Kubernetes创建和管理的最小单元,一个Pod由一个容器或多个容器组成,这些容器共享存储、网络。
Pod特点
- 一个Pod可以理解为是一个应用实例,提供服务.
- Pod中容器始终部署在一个Node上
- Pod中容器共享网络、存储资源
- Kubernetes直接管理Pod,而不是容器
Pod存在意义
Pod主要用法:
- 运行单个容器:最常见的用法,在这种情况下,可以将Pod看做是单个容器的抽象封装
- 运行多个容器:封装多个紧密耦合且需要共享资源的应用程序
如果有这些需求,你可以运行多个容器:
- 两个应用之间发生文件交互
- 两个应用需要通过127.0.0.1或者socket通信
- 两个应用需要发生频繁的调用
Pod资源共享实现机制
重启策略
- Always:当容器终止退出后,总是重启容器,默认策略(总是重启)
- OnFailure:当容器异常退出(退出状态码非0)时,才重启容器 (非正常退出,比如stop、kill)
- Never:当容器终止退出,从不重启容器(永不重启)
[root@master manifest]# cat test.yml
apiVersion: v1
kind: Pod
metadata:
name: web
spec:
containers: //一个pod多个容器
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
- name: test
image: busybox
imagePullPolicy: IfNotPresent
command: ["bin/sh","-c","sleep 450"]
restartPolicy: Never #默认的话不用修改,改为never后停止容器不会重启
[root@master manifest]# kubectl apply -f test.yml //创建pod
pod/web created
[root@master manifest]# kubectl get pod
NAME READY STATUS RESTARTS AGE
web 2/2 Running 0 92s
[root@master manifest]# kubectl get pod -o wide -w //在node2上停止其中一个,发现并不会重启
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web 1/2 NotReady 0 4m51s 10.244.2.10 node2.example.com <none> <none>
健康检查
- livenessProbe(存活检查)︰如果检查失败,将杀死容器,根据Pod的- restartPolicy来操作
- readinessProbe(就绪检查)︰如果检查失败,Kubernetes会把Pod从service endpoints中剔除
支持的检查方式:
- httpGet:发送HTTP请求,返回200-400范围状态码为成功
- exec: 执行hell命令返回状态码是0为成功
- tcpSocket:发起TCP Socket建立成功
与重启策略相结合使用
重启策略+健康检查
//端口探测
[root@master ~]# cat test.yml
---
apiVersion: v1
kind: Pod
metadata:
name: web
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
hostPort: 80
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 20 #启动容器后多少秒健康检查
periodSeconds: 10 #以后间隔多少秒检查一次
readinessProbe:
httpGet:
port: 80
initi