重启策略 ,健康检查,环境变量,初始化容器

重启策略

Always: 当容器终止退出后,总是重启容器,默认策略。
OnFailure: 当容器异常退出(退出状态码非0)时,才重启容器。
Never:当容器终止退出,从不重启容器。

[root@master ~]# kubectl explain pod.spec.restartPolicy
KIND:     Pod
VERSION:  v1

FIELD:    restartPolicy <string>

DESCRIPTION:
     Restart policy for all containers within the pod. One of Always, OnFailure,
     Never. Default to Always. More info:
     https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy

修改策略为Never

[root@master ~]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  namespace: default
  labels:
    app: web
spec:
  containers:
  - name: web1
    image: nginx
  - name: busybox
    image: busybox
    command:
    - '/bin/sh'
    - '-c'   
    - 'sleep 36000'
  restartPolicy: Never
默认的话不用修改,现在改为never,停止容器后不会重启
[root@master ~]# kubectl apply -f pod.yaml 
pod/pod-1 created
[root@master ~]# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
pod-1   2/2     Running   0          14m

[root@master ~]# kubectl get pods -o wide -w  #-w实时监控,在node1上面用docker命令关上其中一个,发现不会重启
NAME    READY   STATUS    RESTARTS   AGE   IP           NODE    NOMINATED NODE   READINESS GATES
pod-1   2/2     Running   0          19m   10.244.1.2   node1   <none>           <none>
pod-1   1/2     NotReady   0          19m   10.244.1.2   node1   <none>           <none>
^V^C[root@master ~]# 

修改策略为Always

先修改pod.yaml文件,改为Always
[root@master ~]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  namespace: default
  labels:
    app: web
spec:
  containers:
  - name: web1
    image: nginx
  - name: busybox
    image: busybox
    command:
    - '/bin/sh'
    - '-c'   
    - 'sleep 36000'
  restartPolicy: Always
删除原先的pod.yaml ,重启启动一个新的pod
[root@master ~]# kubectl delete -f pod.yaml 
pod "pod-1" deleted
[root@master ~]# kubecel apply -f pod.yaml 
-bash: kubecel: 未找到命令
[root@master ~]# kubectl apply -f pod.yaml 
pod/pod-1 created

启动好后,在node1上面删除nginx
[root@node1 ~]# docker stop 53d1dcf613a7
53d1dcf613a7

提前监控pods
[root@master ~]# kubectl get pods -o wide -w
NAME    READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
pod-1   2/2     Running   0          6m57s   10.244.1.3   node1   <none>           <none>
pod-1   1/2     NotReady   0          7m11s   10.244.1.3   node1   <none>           <none>
pod-1   2/2     Running    1          7m27s   10.244.1.3   node1   <none>           <none>
发现等一段时间后,会重新启动.

在这里插入图片描述

健康检查类型

livenessProbe (存活检查) :如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
readinessProbe (就绪检查) :如果检查失败,Kubernetes会把Pod从service endpoints中剔除。

[root@master ~]# kubectl explain pods.spec.containers.livenessProbe 
针对名字叫web1 的
[root@master ~]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  namespace: default
  labels:
    app: web
spec:
  containers:
  - name: web1
    image: nginx
    livenessProbe:
      httpGet:
        port: 80 
  - name: busybox
    image: busybox
    command:
    - '/bin/sh'
    - '-c'   
    - 'sleep 36000'
  restartPolicy: Always
检查80端口能否访问,能访问就不重启,不能访问就重启。

与重启策略相结合使用,

支持的检查方式

httpGet:发送HTTP请求,返回200-400范围状态码为成功。
exec: 执行hell命令返回状态码是0为成功。
tcpSocket:发起TCP Socket建立成功。

环境变量

变量值几种定义方式:

  • 自定义变量值
  • 变量值从Pod属性获取
  • 变量值从Secrt,ConfigMap

初始化容器

Init Container:顾名思义,用于初始化工作,执行完就结束,可以理解为- -次性任务。
  • 支持大部分应用容器配置,但不支持健康检查
    优先应用容器执行
应用场景:
  • 环境检查:例如确保应用容器依赖的服务启动后再启动应用容器
  • 初始化配置:例如给应用容器准备配置文件

创建一个有初始化容器的Pod
创将一个Pod,该Pod中包含一个应用容器和初始化容器。在应用容器开始之前,初始化容器的初始化任务已经完成。文件名:pod.yaml

示例:部署一个web网站,网站程序没有打到镜像中,而是希望从代码仓库中动态拉取放到应用容器中。

[root@master ~]# cat init.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: init-pod
  namespace: default
spec:
  initContainers:
  - name: download
    image: busybox
    command:
    - "wget"
    - "-O"
    - "/opt/index.html"
    - http://www.baidu.com
    volumeMounts:
    - name: wwwroot
      mountPath: "/opt"
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: wwwroot
      mountPath: /usr/share/nginx/html
  volumes:
  - name: wwwroot
    emptyDir: {}

#创建
[root@master ~]# kubectl apply -f init.yaml 
pod/init-pod created

#此时init容器进行启动工作
[root@master ~]# kubectl get pods
NAME    READY   STATUS              RESTARTS   AGE
pod-1   0/2     ContainerCreating   0          22s


#当init容器完成后,应用容器启动并进行工作
[root@master ~]# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
pod-1   2/2     Running   0          4m47s

当我们Pod正常Running之后,我们可以通过kubectl describe pod [pod-name]查看到init容器的一个状态
如果失败init容器默认会在State中显示CrashLoopBackOff (重启/异常),在Reason会显示Error

State 代表状态
Reason 原因
Terminated 终止
Completed 完成

深入理解Pod对象:调度

  • 创建一个Pod的工作流程
    Kubernetes基于list-watch机制的控制器架构,实现组件间交互的解耦。
    其他组件监控自己负责的资源,当这些资源发生变化时,kube- apiserver会通知这些组件,这个过程类似于发布与订阅。
    在这里插入图片描述
  • Pod中影响调度的主要属性
    根据资源调度,根据策略调度
    在这里插入图片描述
  • 资源限制对Pod调度的影响
  • nodeSelector & nodeAffinity
  • Taint (污点) & Tolerations (污点容忍)
  • nodeName
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值