飞天使-k8s基础组件分析-pod

news2024/12/23 9:46:06

文章目录

      • pod介绍
        • pod 生命周期
        • init 容器
        • 容器handler
        • pod中容器共享进程空间
        • sidecar 容器共享
      • 参考链接

pod介绍

最小的容器单元
为啥需要pod?
答: 多个进程丢一个容器里,会因为容器里个别进程出问题而出现蝴蝶效应,pod 是更高级的处理方式


pod 如何共享相同的ip和端口
答: 由于它们在相同的网络名称和空间中运行

如何查看pod 版本
答: kubectl explain pod
[root@k8s-01 chapter03]# kubectl explain pod
KIND:     Pod
VERSION:  v1

如何查看pod 的信息
答:kubectl get pod,svc
[root@k8s-01 chapter03]# kubectl get pod,svc
NAME                        READY   STATUS     RESTARTS   AGE
pod/busybox                 1/1     Running    11         11h
pod/nginx-97499b967-jzxwg   1/1     Running    0          11h
pod/two-containers          1/2     NotReady   0          34m

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        11h
service/nginx        NodePort    10.104.210.165   <none>        80:30001/TCP   11h



pod创建的小案例演示一下? 
答:
cat two-container-pod.yaml
[root@k8s-01 chapter03]# cat two-container-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: two-containers
spec:
  restartPolicy: Never
  volumes:
  - name: shared-data
    emptyDir: {}
  containers:
  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html

  - name: debian-container
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /pod-data
    command: ["/bin/sh"]
    args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]
    
执行如下命令创建Pod
# kubectl apply –f two-container-pod.yaml

查看关于Pod的信息
# kubectl get pod two-containers –-output=yaml

进入nginx的容器进行校验结果
# kubectl exec –it two-containers –c nginx-container -- /bin/bash
# apt-get update
# apt-get install curl procps
# ps aux
# curl localhost 

pod 生命周期

pod 可能存在的状态
Pending           等待中
Running           运行中
Succeeded      正常终止
Failed              异常停止
Unkonwn         未知状态

Pending

Pod已经被创建,但还没有完成调度,或者说有一个或多个镜像正处于从远程仓库下载的过程。

处在这个阶段的Pod可能正在写数据到etcd中、调度、pull镜像或启动容器。

 

Running

该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。

 

Succeeded

Pod中的所有的容器已经正常的执行后退出,并且不会自动重启,一般会是在部署job的时候会出现。

 

Failed

Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。

 

Unkonwn

API Server无法正常获取到Pod对象的状态信息,通常是由于其无法与所在工作节点的kubelet通信所致。
 

容器的探测
为了探测Pod是否处于健康状态,kubernetes提供三种探测方式:
ExecAction
TCPSocketAction
HTTPGetAction

探测有以下三种结果之一
Success
Failure
Unknown

探测的三种类型
livenessProbe
readlinessProbe
startupProbe

StartupProbe:k8s 1.16版本后新加的探测方式,用于判断容器内应用程序是否已经启动。如果配置了startupProbe,就会先禁止其他的探测,直到它成功为止,成功后将不再进行探测。比较适用于容器启动时间长的场景。
LivenessProbe:用于探测容器是否运行,如果探测失败,kubelet会根据配置的重启策略进行相应的处理。若没有配置该探针,默认就是success。
ReadinessProbe:一般用于探测容器内的程序是否健康,它的返回值如果为success,那么久代表这个容器已经完成启动,并且程序已经是可以接受流量的状态。

 

pod 的生命周期如何被停止
答; 人为的停止它
或者删除它所属的控制器
在一段时间内,阶段为成功或失败的pod 将过期并自动销毁


pod 生命周期有啥案列分享? 
使用命令行方式
[root@k8s-01 chapter03]# cat exec-liveness.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness  # 使用liveness的方式进行健康探测
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600  # 由于这里创建一个文件后,5秒钟后又把文件删除,所以5分钟后探测应处于失败状态
    livenessProbe:
      exec:  # 执行如下命令行,如果返回结果的状态码为0,证明探测成功,否则证明失败。执行重启策略,默认为always.
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5   # 第一次探测在等待容器启动后多少秒开启执行,此处设置为5秒。
      periodSeconds: 5  # 设置多长时间探测一次,这里设置为5秒。



Events:
  Type     Reason     Age                 From               Message
  ----     ------     ----                ----               -------
  Normal   Scheduled  106s                default-scheduler  Successfully assigned default/liveness-exec to k8s-02
  Normal   Pulled     88s                 kubelet, k8s-02    Successfully pulled image "busybox"
  Normal   Created    87s                 kubelet, k8s-02    Created container liveness
  Normal   Started    87s                 kubelet, k8s-02    Started container liveness
  Warning  Unhealthy  45s (x3 over 55s)   kubelet, k8s-02    Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory
  Normal   Killing    45s                 kubelet, k8s-02    Container liveness failed liveness probe, will be restarted
  Normal   Pulling    15s (x2 over 106s)  kubelet, k8s-02    Pulling image "busybox"
[root@k8s-01 chapter03]# kubectl describe pod liveness-exec

使用http方式进行探测
[root@k8s-01 chapter03]# cat http-liveness.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: nginx
    livenessProbe:
      httpGet:
        path: /
        port: 80
      initialDelaySeconds: 3
      periodSeconds: 3

使用tcp方式
[root@k8s-01 chapter03]# cat tcp-liveness-readiness.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    readinessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 15
      periodSeconds: 20

在这里插入图片描述
在这里插入图片描述

init 容器

就是初始化容器,启动之前就会开始执行
init 容器始终运行到完成
每个init 容器必须在下一个容器启动之前成功完成 



创建pod
# kubectl apply –f init-pod.yaml

查看pod的状态
# kubectl get –f init-pod.yaml

查看Pod的详细信息
# kubectl describe –f init-pod.yaml

查看pod中的init容器日志
# kubectl logs myapp-pod –c init-myservice
# kubectl logs myapp-pod –c init-mydb

创建mydb和myservice服务,并再次查看pod状态
# Kubectl apply –f init-pod-service.yaml
# Kubectl get –f init-pod.yaml



有没有案列来告诉?
答: 
[root@k8s-01 chapter03]# cat init-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;'][root@k8s-01 chapter03]# 
[root@k8s-01 chapter03]# 
[root@k8s-01 chapter03]# cat init-pod-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
---
apiVersion: v1
kind: Service
metadata:
  name: mydb
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9377


演示效果:
**nslookup: can't resolve 'myservice'**
waiting for myservice
[root@k8s-01 chapter03]# kubectl create -f init-
init-containers.yaml   init-pod-service.yaml  init-pod.yaml          
[root@k8s-01 chapter03]# kubectl create -f init-pod-service.yaml 
service/myservice created
service/mydb created
[root@k8s-01 chapter03]# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
busybox                 1/1     Running   12         12h
myapp-pod               1/1     Running   0          8m27s
nginx-97499b967-jzxwg   1/1     Running   0          12h

容器handler

它是用来处理程序附加到容器生命周期中的事件,支持postStart和preStop事件。比如在容器启动后立即发送postStart事件,在容器终止前发送preStop事件

[root@k8s-01 chapter03]# cat lifecycle-events.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
      preStop:
        exec:
          command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]



创建pod
# kubectl apply –f lifecycle-events.yaml

校验Pod中的容器是否运行
# kubectl get pod lifecycle-demo

通过以下命令校验postStart和preStop是否执行
# kubectl exec –it lifecycle-demo -- /bin/bash
/# cat /usr/share/message

pod中容器共享进程空间

当启用进程名称空间共享时,容器中的进程对该pod中的所有容器都是可见的。
[root@k8s-01 chapter03]# cat share-process-namespace.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  shareProcessNamespace: true
  containers:
  - name: nginx
    image: nginx
  - name: shell
    image: busybox
    securityContext:
      capabilities:
        add:
        - SYS_PTRACE
    stdin: true
    tty: true


创建pod
# kubectl apply –f share-process-namespace.yaml


关联shell容器和运行ps
# kubectl attach –it nginx –c shell
/# ps ax

sidecar 容器共享

Sidecar容器在不改变现有容器的情况下扩展和增加pod的功能,也就是说其中一个容器增加了另一个预存在的容器功能


[root@k8s-01 chapter03]# cat sidecar.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-sidecar
spec:
  volumes:
  - name: shared-logs
    emptyDir: {}
  containers:
  - name: sidecar-container
    image: alpine
    command: ["/bin/sh"]
    args: ["-c", "while true; do date >> /var/log/app.txt; sleep 5;done"]
    volumeMounts:
    - name: shared-logs
      mountPath: /var/log
  - name: app-container
    image: nginx:1.7.9
    ports:
      - containerPort: 80
    volumeMounts:
    - name: shared-logs
      mountPath: /usr/share/nginx/html

参考链接

https://edu.csdn.net/learn/27762/375863?spm=3001.4143

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/912222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简述docker映射(Mapping)和挂载(Mounting)

映射的概念&#xff1a; 将容器内的端口映射到主机的端口上&#xff0c;这样就可以通过主机的网络接口与容器内部进行通信。主机上对应端口的请求会被转发到容器内部&#xff0c;从而实现对容器内部程序的通信访问&#xff08;注意&#xff01;这里提到的容器内部的端口并不一定…

网络安全(黑客)了解学习路线

谈起黑客&#xff0c;可能各位都会想到&#xff1a;盗号&#xff0c;其实不尽然&#xff1b;黑客是一群喜爱研究技术的群体&#xff0c;在黑客圈中&#xff0c;一般分为三大圈&#xff1a;娱乐圈 技术圈 职业圈。 娱乐圈&#xff1a;主要是初中生和高中生较多&#xff0c;玩网恋…

EasyImage简单图床 - 快速搭建私人图床云盘同时远程访问【无公网IP内网穿透】

憧憬blog主页 在强者的眼中&#xff0c;没有最好&#xff0c;只有更好。我们是移动开发领域的优质创作者&#xff0c;同时也是阿里云专家博主。 ✨ 关注我们的主页&#xff0c;探索iOS开发的无限可能&#xff01; &#x1f525;我们与您分享最新的技术洞察和实战经验&#xff0…

阿里云CDN加速器基本概念与购买开通

文章目录 1.CDN加速器的基本概念1.1.CDN加速器基本介绍1.2.网站引入CDN加速器的架构图1.3.CDN加速器的工作原理1.4.引入CDN后域名解析变成了CNAME&#xff1f; 2.开通阿里云CDN加速服务 1.CDN加速器的基本概念 CDN加速器官方文档&#xff1a;https://help.aliyun.com/product/…

USB音频芯片SSS1700 鑫创优势替代CM6533参考设计|SSS1700规格24bit 96KHZ |替换CM6533方案

Cmedia CM6533是一款US B音频编解码器&#xff0c;内部嵌入8051内核&#xff0c;适用于耳麦&#xff0c;移动娱乐设备直插移动音箱&#xff08;docking&#xff09;&#xff0c;US B音箱&#xff0c;US B麦克风等应用。通过内部8051可以研发出各种应用&#xff0c;例如微软语音…

vue3 pdf、word等文件下载

效果&#xff1a; <div class"byLawBox"><div class"titleBox">规章制度公示</div><div class"contentBox"><TableList:loading"byLawloading"ref"byLawtablistRef":hasImport"false"…

Unity - 特殊文件夹

地址记录&#xff1a;https://www.cnblogs.com/zouqiang/p/6841399.html Assets Assets文件夹是unity项目中放置游戏资源的主文件夹。 该文件夹中的内容将直接反应在编辑器的Project视口中。许多系统API基于该文件夹路径。 Resources Unity允许你按需动态加载游戏资源到场景中…

ubuntu 对多CPU统一设置高性能模式

一、问题描述 之前在网上找到的CPU设置高性能模式&#xff0c;只能设置CPU0单个CPU&#xff0c;下述是对多核CPU统一设置工作模式。 二、软件安装与设置 执行下述命令sudo apt-get install indicator-cpufreq,然后重启电脑。此时&#xff0c;界面右上角会出现如下图标&#xf…

爬虫异常捕获与处理方法详解

Hey&#xff01;作为一名专业的爬虫代理供应商&#xff0c;我今天要和大家分享一些关于爬虫异常捕获与处理的方法。在进行爬虫操作时&#xff0c;我们经常会遇到各种异常情况&#xff0c;例如网络连接错误、请求超时、数据解析错误等等。这些异常情况可能会导致程序崩溃或数据丢…

威班8.19PMP考试爱心送考再出发,能量补给站为学员提供考试保障

8月19日&#xff0c;2023年的第三场PMP考试准时开考。 对于准备了个把月的学员们来说&#xff0c;这一时刻无比重要&#xff0c;为了给威班的PMP学员们考试加油打气&#xff0c;威班特地组织了送考活动&#xff0c;在考场外提前布置应援点&#xff0c;给前去参加考试的学员们带…

5.1 汇编语言:汇编语言概述

汇编语言是一种面向机器的低级语言&#xff0c;用于编写计算机程序。汇编语言与计算机机器语言非常接近&#xff0c;汇编语言程序可以使用符号、助记符等来代替机器语言的二进制码&#xff0c;但最终会被汇编器编译成计算机可执行的机器码。 相较于高级语言&#xff08;如C、P…

紧跟老板思维,这款数据可视化工具神了

在今时今日&#xff0c;依靠大数据可视化分析工具做出一张形象直观、符合企业审美的数据可视化分析报表都不是什么难事&#xff0c;难就难在于做出一张能够紧随老板思维变化展开可视化分析的数据可视化分析报表。接下来要介绍的这款数据可视化工具就是这么一款神奇的BI工具&…

整理文件轻松搞定,教你如何将文件夹里的文件进行类型归类保存

大家好&#xff01;相信大家在日常工作和学习中都会面临着大量的文件管理问题&#xff0c;如何高效地整理和保存文件成为了一大难题。幸运的是&#xff0c;不仅可以帮助你高效整理文件&#xff0c;还能实现文件的类型归类保存。 首先&#xff0c;我们要进入文件批量查询高手主…

七夕给TA满分宠爱!浪漫攻略为约会加分

浪漫的七夕将至&#xff0c;无论是异地恋人还是约会情侣&#xff0c;怎么能缺少节日仪式感~精心策划的约会计划&#xff0c;让浪漫“超级加倍”。 美好的二人世界&#xff0c;共度甜蜜时光&#xff0c;当然需要提前做好攻略&#xff0c;风和日丽的好天气能为约会加分不少。在规…

分享书架二维码 = 分享了10多本电子书

铁子们&#xff01;告诉你一个实用的方法&#xff0c;分享一个书架就等于分享了10多本电子书&#xff0c;不用再一本一本的发送给客户啦&#xff01; 方法如下&#xff1a; 1.首先打开FLBOOK电子杂志制作平台 2.我们开始上传自己的作品&#xff0c;选择PDF上传 3.进入编辑页面…

Python-主线程控制子线程结束-2

需求&#xff1a;主线程创建工作子线程和键盘输入监听子线程。 当用户输入 0 后&#xff0c; 工作子线程会收到停止信号并退出&#xff0c;此时键盘输入监听线程仍然运行&#xff1b; 当用户输入 1 后&#xff0c;会建立新的工作子线程&#xff1b; …

爆肝分享! 8款3D仿真软件推荐

当今&#xff0c;3D设计和制作已经成为许多领域中不可或缺的一部分&#xff0c;从建筑设计到电影制作&#xff0c;从游戏开发到工业设计&#xff0c;都需要强大的3D软件来实现想象中的世界。本文将介绍八款备受推崇的3D软件&#xff0c;这些软件不仅功能强大&#xff0c;而且易…

01、Cannot resolve MVC View ‘xxxxx前端页面‘

Cannot resolve MVC View ‘xxxxx前端页面’ 没有找到对应的mvc的前端页面。 代码&#xff1a;前端这里引入了 thymeleaf 模板 解决&#xff1a; 需要添加 thymeleaf 的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>s…

卷积神经网络——下篇【深度学习】【PyTorch】【d2l】

文章目录 5、卷积神经网络5.10、⭐批量归一化5.10.1、理论部分5.10.2、代码部分 5.11、⭐残差网络&#xff08;ResNet&#xff09;5.11.1、理论部分5.11.2、代码部分 话题闲谈 5、卷积神经网络 5.10、⭐批量归一化 5.10.1、理论部分 批量归一化可以解决深层网络中梯度消失和…

需求自动拆解子需求功能上线!自动估算再升级!

CoCode开发云旗下Co-Project V3.5智能项目管理平台正式发布&#xff0c;平台需求板块、估算板块以及需求分析工具全新升级&#xff1a;需求自动拆解为子需求&#xff0c;自动估算功能优化&#xff0c;需求分析工具界面优化。 需求自动拆解为多个子需求&#xff0c;有助于需求细…