pod进阶版(1)

本文介绍了Kubernetes的Pod及其重启策略,包括Always、OnFailure和Never,以及Docker的相应策略。还讨论了单机部署和集群部署的区别,以及如何通过yaml生成和管理资源。此外,文章详细解释了livenessProbe、httpGet和tcpSocket探针的使用方法以及资源限制的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pod的相关知识

k8s的pad重启策略:

Always deployment的yaml文件只能是Always pod的yaml三种模式都可以。
Onfailure:只有异常退出状态码非0才会重启。正常退出不重启。
Never:非正常退出和非正常退出都不重启。
容器的退出了pod才会重启。
pod可以有多个容器,只要有一个容器退出,整个pod都会重启,pod内的所有容器都会重启。


docekr的重启策略:

docker的默认策略是Never。
on-failure:非正常退出,才会重启容器。
always:只要容器退出都会重启。
unless-stopped:只要退出就会重启,docker守护进程时已经停止的容器,不会重启。


单机部署:docker就够用了
集群化部署:k8s部署

yaml模板文件快速生成的三种方式

可以生成pod、service、deployment等yaml文件

1、手写

2、对已有资源进行导出

kubectl get deployments.apps nginx -o yaml > /opt/lyw.yaml

3、通过api的组件,使对象不执行命令生成文件

kubectl create deployment nginx1 --image=nginx:1.22 --dry-run=client -o yaml >  /opt/test1.yaml
--dry-run=client 只是调用api的对象不执行命令

pod的状态:

pod状态简述说明说明
pending挂起状态

pod已被创建,但是尚未被分配到运行的node节点

(原因:节点资源不够或等待其他pod节点调度)

running运行中pod已经被分配到了node节点,pod内部的所有容器都已经启动,运行状态正常,稳定。
completed 成功运行完毕并退出容器内部的进程运行完毕,正常退出,没有发生错误。
successded
faild运行错误并退出

pod中的容器非正常退出,发生了错误。

需要通过查看详细和日志来定位问题。

Unkown未知

由于某些原因,k8s集群无法获取pod的状态。

APIserver出了问题

terminating在终止中

这个pod正在被删除,里面的容器正在终止。

终止过程中,资源回收、垃圾清理、以及终止过程中需要执行的命令。

crashloopbackoffpod当中的容器退出,kubelet正在重启
imagepullbackoff正在重试拉取镜像
errimagepull

镜像拉取出错

(1、网速太慢  2、镜像名字写错了  3、镜像仓库挂了)

Evictepod被驱赶(node节点的资源不足部署pod,或者是资源不足,kubelet自动选择一个pod驱逐。)

pod内的容器使用节点资源的限制:

1、request:需要的资源
2、limit    最高占用系统多少资源
   limit需要多少,最多也只能占用这么多

两个限制(cpu、内存):

cpu :
    cpu的个数限制:
    1 2 0.5 0.2 0.3  1:可以占用1个cpu  0.1是最小单位(要么整数,要么就是小数点后只能跟一位)
   cpu时间分片原理:
        cpu时间分片: 通过周期性的轮流分配cpu时间给各个进程。多个进程可以在cpu上交替,在k8s中就是占用cpu的比率,单位:m(millicores)100m是最小单位(等于0.1)
内存:Ki 字节   Mi-mb   Gi-gb  Ti-tb

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: centos
  name: centos
spec:
  replicas: 1
  selector:
    matchLabels:
      app: centos
  template:
    metadata:
      labels:
        app: centos
    spec:
      containers:
      - image: centos:7
        name: centos
        imagePullPolicy: Never
        command: ["/bin/bash","-c","sleep 3600"]
        resources:
          requests:
            memory: "256Mi"
            cpu: "0.5"
          limits:
            memory: "1Gi"
            cpu: "1"
#在创建pod时,一定要给容器做资源限制。

如果超出范围

ready  status

 0/1        crashloopbackoff

超过资源限制,进程会被立即杀死

k8s怎么设置拉取镜像的策略:

镜像默认策略:
IfnotPresent: 如果本地镜像有,就不拉取,本地没有才会去镜像仓库拉取。默认策略
Always: 不论镜像是否存在,创建时(重启) 都会重新拉取镜像
Never:  仅仅使用本地镜像,不进行拉取镜像

如果涉及到外部部署,默认策略 (事前要把docker的镜像导入到目标主机)
Always:一般不用

pod探针

pod的容器健康检查------探针

探针probe、k8s对容器的定期检查,诊断。

探针的三种规则:

存活探针

livenessProbe 探测容器是否正常运行,如果发现探测失败,会杀容器,容器会根据重启策略来决定是否重启,不是杀掉pod。livenessProbe 杀死容器重启。

所有的探针策略伴随整个pod的生命周期。

就绪探针

探测容器是否进入ready状态,并做好接受请求的准备。探测失败 READY 0/1 没有进入ready状态。

service会把这个资源对象的端点从当中踢出,service也不会把请求转发到这个pod。

启动探针

只是在容器的启动后进行检测,容器内的应用是否启动成功,在启动探测成功之前,所有的探针都处于禁用状态,但是,一旦启动探针结束,后续的操作不再收启动探针影响。

在一个容器当中的可以有多个探针。启动探针:只在容器启动时探测。

Probe的检查方法:

1、exec探针:  在容器内部执行命令,如果命令的返回码是0,表示成功。
适用于需要在容器内部自定义命令来检查容器的健康情况。

2、httpGet:对指定ip+端口的容器发送一个httpget的请求。响应状态码大于等于200,小于400都是成功。
适用于检查容器是否能响应http的请求,web容器(nginx,tomcat)

3、tcpSocket:端口,对指定端口上的容器的ip地址进行tcp检查(三次握手),端口打开,认为探测成功。
检查特定端口的监听状态。
类似于 telnet 192.168.10.10:80

诊断结果:
1、成功 容器通过了,正常运行
2、失败 存活探针将会重启
3、未知状态 

exec探针

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: centos
  name: centos
spec:
  replicas: 1
  selector:
    matchLabels:
      app: centos
  template:
    metadata:
      labels:
        app: centos
    spec:
      containers:
      - image: centos:7
        name: centos
        imagePullPolicy: Never
        command: ["/bin/bash","-c","touch /opt/123.txt; sleep 3600"]
        livenessProbe:
          exec:
            command: ["/usr/bin/test","-e","/opt/123.txt"]
          initialDelaySeconds: 3
#核心指标;表示容器启动之后多少秒来进行探测,时间不要设置的太短,可能会导致无效的探测
          periodSeconds: 2
#核心指标;表示探针探测的间隔时间。每隔多少秒进行检查。根据应用的延迟敏感度,这个应用非常重要,是核心组件。
          failureThreshold: 2
#核心指标;表示如果探测失败,失败几次之后,把容器标记为不健康。
          successThreshold: 1
#表示只要成功一次就标记为就绪,标记为健康,ready。只能为1
          timeoutSeconds: 1
#表示每次探测的超时时间,就是探测这个过程耗时,小于间隔时间,在这个秒数没必须完成探测。

httpGet探针

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx1
  name: nginx1
spec:
  containers:
  - image: nginx:1.22
    name: nginx1
    livenessProbe:
      httpGet:
        port: 80
        path: /index.html
      initialDelaySeconds: 4
      periodSeconds: 2

正常示范

错误示范1

错误示范2

tcpSocket探针

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx1
  name: nginx1
spec:
  containers:
  - image: nginx:1.22
    name: nginx1
    livenessProbe:
      tcpSocket:
        port: 81
      initialDelaySeconds: 4
      periodSeconds: 2

总结

探针:
存活探针:检测失败之后,会杀死容器,然后重启。
探针将伴随整个容器的生命周期
exec 相当于执行了一个shell命令: 容器里面执行
shell命令执行成功:
返回码:0表示成功
成功一次就是探测成功


httpGet:对web容器发起get请求,可以添加path,指定访问的资源。返回码大于等于200 小于400 之内算成功

tcpSocket:相当于telnet,指定的容器监听端口是否打开。是否能和指定的容器监听端口进行通信。

### 回答1: 《Kubernetes进阶实战第2》是一本非常实用的技术书籍,适合那些已经对Kubernetes有一定了解,并希望进一步提升自己在Kubernetes领域技术的人群。这本书主要包含了以下几个方面的内容。 首先,这本书对Kubernetes的核心概念和架构进行了深入的介绍。读者可以了解到Kubernetes的各个组件的作用和相互之间的关系,对于理解整个系统的运行原理非常有帮助。 其次,书中介绍了如何在实际项目中使用Kubernetes进行应用部署和管理。包括使用Docker构建镜像、使用kubectl命令行工具进行Pod和Service的创建与管理,以及使用YAML文件进行应用的声明式部署等。 此外,书中还介绍了Kubernetes的高级特性和进阶用法,如水平Pod自动伸缩、设置资源限制和请求、集群的高可用性配置等。这些内容帮助读者更好地优化和管理自己的应用,提高系统的稳定性和性能。 最后,本书还涵盖了如何监控和调试Kubernetes集群,以及如何进行故障排查和故障恢复等内容。这对于运维人员来说非常有价值,帮助他们更好地管理整个集群,并解决遇到的问题。 总之,Kubernetes是一个非常强大和复杂的容器编排平台,本书帮助读者更加深入地了解Kubernetes的核心概念和使用方式,并在实际项目中进行实践。对于希望进一步提升自己在Kubernetes领域技术的人来说,这本书是一本非常值得阅读的实战指南。 ### 回答2: 《Kubernetes进阶实战第2》是一本关于如何深入学习和实践Kubernetes的书籍。Kubernetes作为一个开源的容器编排系统,被广泛应用于容器化应用的部署、扩缩容和管理。本书是在前一的基础上进行了更新和扩充,致力于帮助读者更好地理解和使用Kubernetes,以满足现代容器化应用开发和运维的需求。 本书主要涵盖了以下内容: 1. Kubernetes基础知识:首先介绍了Kubernetes的核心概念和架构,包括Pod、Deployment、Service等重要组件的作用和使用方法。读者可以通过学习这些知识,深入了解Kubernetes的工作原理和基本操作。 2. Kubernetes高级特性:本书深入讲解了Kubernetes的高级特性,包括ConfigMap、Secret、PersistentVolume等,帮助读者更好地管理和配置应用的相关资源。此外,还介绍了Kubernetes的网络和存储模型,以及常用的监控和日志系统的集成方法。 3. Kubernetes集群部署和管理:本书详细介绍了如何搭建和管理Kubernetes集群,包括单节点和多节点集群的部署方法、初始化配置和节点扩展。同时,还提供了故障排除和性能优化的相关技巧,帮助读者更好地运维和管理Kubernetes集群。 4. Kubernetes在生产环境中的应用:最后,本书介绍了Kubernetes在生产环境中的实践经验和应用案例。涵盖了安全和权限管理、容器镜像的构建和推送、多集群管理、灰度发布等话题,帮助读者更好地应对实际生产环境中的挑战。 总而言之,本书提供了一套完整的学习和实践Kubernetes的路径,适合对Kubernetes已有基础的读者进一步深入学习和应用。无论是开发人员、运维人员还是架构师,都可以通过本书获得更深入的Kubernetes知识和实践经验,提升容器化应用开发和运维的能力。 ### 回答3: 《Kubernetes进阶实战第2》是一本深入探讨Kubernetes技术的实用指南。本书旨在帮助读者进一步了解和掌握Kubernetes的高级概念和实践技巧。 该书首先介绍了Kubernetes的核心组件、架构和基本原理,包括Pod、ReplicaSet、Deployment、Service等概念的详细解释。接着,它深入讨论了如何使用Kubernetes进行应用程序开发和部署,包括如何使用Kubernetes API、Kubernetes编排和调度等。此外,书中还介绍了Kubernetes中常用的网络和存储方案,以及如何在Kubernetes集群中管理配置和凭据。 《Kubernetes进阶实战第2》还特别关注了Kubernetes的运维和监控方面。读者可以学习到如何使用Kubernetes的日志记录机制、健康检查和故障恢复等功能来提高应用程序的可靠性和可用性。此外,书中还介绍了Kubernetes的水平扩展和自动伸缩功能,以及如何使用Helm进行应用程序的打包和发布。 除了理论知识,该书还提供了大量的实战案例和示例代码。读者可以通过这些实例了解Kubernetes在实际生产环境中的应用场景,并学习到如何解决常见的问题和挑战。此外,书中还介绍了一些Kubernetes的最佳实践和性能优化技巧,帮助读者在使用Kubernetes时提高工作效率和系统性能。 总的来说,《Kubernetes进阶实战第2》是一本很好的学习指南,它适合已经具备一定Kubernetes基础知识的读者进一步深入学习和实践。通过阅读该书,读者可以提高Kubernetes的应用水平,更好地应对复杂的生产环境中的挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值