【Kubernetes】k8s集群的pod基础

目录

一.Pod概述

1.什么是pod

2.k8s中pod的两种使用方式

3.pod容器的常规使用流程

4.创建pod的3种方式

二.Pod中容器概述

1.容器分类

2.Pod容器的3种镜像拉取策略

3.Pod容器的3种重启策略

4.pod的dns策略


一.Pod概述

1.什么是pod

Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod

代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展

Pod功能

例如:用于管理Pod运行的StatefulSet和Deployment等控制器对象,用于暴露Pod应用的Service和

Ingress对象,为Pod提供存储的PersistentVolume存储资源对象等

2.k8s中pod的两种使用方式

  • 一个Pod中运行一个容器。“每个Pod中一个容器”的模式是最常见的用法;在这种使用方式中,你可以把Pod想象成是单个容器的封装,kuberentes管理的是Pod而不是直接管理容器
  • 在一个Pod中同时运行多个容器。一个Pod中也可以同时封装几个需要紧密耦合互相协作的容器,它们之间共享资源。这些在同一个Pod中的容器可以互相协作成为一个service单位,比如一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理

3.pod容器的常规使用流程

一个Pod下的容器必须运行于同一节点上。现代容器技术建议一个容器只运行一个进程,该进程在

容器中PID命名空间中的进程号为1,可直接接收并处理信号,进程终止时容器生命周期也就结束

了。若想在容器内运行多个进程,需要有一个类似Linux操作系统init进程的管控类进程,以树状结

构完成多进程的生命周期管理。运行于各自容器内的进程无法直接完成网络通信,这是由于容器间

的隔离机制导致,k8s中的Pod资源抽象正是解决此类问题,Pod对象是一组容器的集合,这些容器

共享NET、MNT、UTS及IPC命名空间,因此具有相同的域名、主机名和网络接口,并可通过IPC

直接通信

Pod资源中针对各容器提供网络命名空间等共享机制的是底层基础容器pause,基础容器(也可称

为父容器)pause就是为了管理Pod容器间的共享操作,这个父容器需要能够准确地知道如何去创

建共享运行环境的容器,还能管理这些容器的生命周期。为了实现这个父容器的构想,kubernetes

中,用pause容器来作为一个Pod中所有容器的父容器。这个pause容器有两个核心的功能,一是

它提供整个Pod的Linux命名空间的基础。二来启用PID命名空间,它在每个Pod中都作为PID为1进

程(init进程),并回收僵尸进程

4.创建pod的3种方式

  • 自主式Pod

由scheduler调度到node节点运行的;不被控制器管理;没有自愈能力,一旦Pod挂掉了,不会被

重新拉起;没有副本管理能力,不能滚动更新;配置信息是存储在etcd中
          kubectl run ....

  • 控制器管理的Pod

由scheduler调度到node节点运行的;被控制器管理;有自愈能力,一旦Pod挂掉了,会被控制器

重新拉起;有副本管理能力,支持滚动更新;配置信息是存储在etcd中
           kubectl create <Pod控制器资源类型> ....

  • 静态Pod

不由scheduler调度到node节点运行的,而是由kubelet自行管理的;始终与kubelet运行在同一个

node节点上;不能通过向apiserver发送请求直接删除

在node节点的/etc/kubernetes/manifests/目录中放置Pod的yaml配置文件,kubelet就会自动根据

yaml配置文件创建静态Pod;反之删除目录中的yaml配置文件,kubelet则会删除静态Pod

创建静态pod

vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
vim /var/lib/kubelet/config.yaml

kubectl run test1 --image=soscscs/myapp:v1 --port=80 --dry-run=client -o yaml > pod.yaml   #导出一个pod的yaml配置模板
vim pod.yaml修改其中的name为test2scp pod.yaml 192.168.80.102:/etc/kubernetes/manifests/  #将yaml文件复制到node节点上静态pod文件保存路径上,即可自动创建pod

二.Pod中容器概述

1.容器分类

pause容器(基础容器/父容器/根容器)

  • 给Pod容器组做环境初始化
  • 作为Linux命名空间共享的基础,为Pod里的其它容器提供网络、存储资源的共享
  • 作为PID=1的init管控类进程管理整个Pod容器组的生命周期
  • pause容器是Pod最先启动的容器
cat /opt/kubernetes/cfg/kubelet
......
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.2"

每次创建 Pod 时候就会创建,运行的每一个Pod都有一个 pause-amd64 的基础容器自动会运

行,对于用户是透明的

docker ps -a
registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.2   "/pause"

init容器(初始化容器/init container)

  • 可以在应用容器启动前基于共享存储为应用容器提供运行依赖环境和工具包
  • 还可以阻塞或延迟应用容器的启动
  • init容器是在pause容器之后启动
  • 如果Pod定义了多个init容器,它们是串行启动的,即要在上一个init容器成功的完成启动和退出后才会启动下一个init容器

应用容器(业务容器/用户容器/main container):

  • 提供应用程序业务
  • 应用容器是在所有init容器都成功的完成启动和退出后才会启动
  • 如果Pod定义了多个应用容器,它们是并行启动的

2.Pod容器的3种镜像拉取策略

imagePullPolicy(与image字段同一层级)

  • IfNotPresent:优先使用node节点本地已存在的镜像,如果本地没有则从仓库拉取镜像。是标签为非latest的镜像的默认拉取策略
vim pod.yaml 
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: test1name: test1
spec:containers:- image: soscscs/myapp:v1name: test2ports:- containerPort: 80resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}kubectl apply -f pod.yaml   #创建
kubectl get pod test1 -o yaml  #查看

vim pod.yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: test2name: test2
spec:containers:- image: soscscs/myapp:v2           #v2版本不存在name: test2imagePullPolicy: IfNotPresent     #设置拉取策略为IfNotPresent ports:- containerPort: 80resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}kubectl apply -f pod.yaml   #创建
kubectl get pod
kubectl describe pod test2

vim pod.yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: test4name: test4
spec:containers:- image: soscscs/myapp:v2         #镜像已经存在name: test2imagePullPolicy: IfNotPresentports:- containerPort: 80resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}kubectl apply -f pod.yaml
kubectl describe pod test4

  • Always:总是从仓库拉取镜像,无论node节点本地是否已存在镜像。是标签为latest或无标签的镜像的默认拉取策略
vim pod.yaml 
apiVersion: v1     
kind: Pod
metadata:creationTimestamp: nulllabels:run: test1name: test1
spec:containers:- image: soscscs/myapp:v1      #本地存在这个镜像版本name: test2imagePullPolicy: Always      #拉取策略设置为Always  ports:- containerPort: 80resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}kubectl apply -f pod.yaml
kubectl get pod
kubectl describe pod test1

  • Never:仅使用node节点本地镜像,总是不从仓库拉取镜像
vim pod.yaml 
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: test1name: test1
spec:containers:- image: soscscs/myapp:v3   #v3版本不存在name: test2imagePullPolicy: Never    #拉取策略设置为Neverports:- containerPort: 80resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}kubectl apply -f pod.yaml
kubectl get pod
kubectl describe pod test1

当配置中不设置拉取策略和镜像版本时(或镜像版本设置为latest

),默认拉取策略为Always

apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: test1name: test1
spec:containers: - image: nginx    #不设置镜像版本,且不设置拉取策略name: test2ports:- containerPort: 80resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}kubectl apply -f pod.yaml
kubectl get pod test1 -o yaml

apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: test1name: test1
spec:containers:- image: nginx:latest    #版本设置为latest,不设置拉取策略name: test2ports:- containerPort: 80resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}kubectl apply -f pod.yaml
kubectl get pod test1 -o yaml

3.Pod容器的3种重启策略

restartPolicy(与containers字段同一层级)

  • Always:当Pod容器退出时,总是重启容器,无论容器退出状态码如何。是默认的容器重启策略
vim pod.yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: test1name: test1
spec:containers:- image: soscscs/myapp:v1imagePullPolicy: IfNotPresentname: test2ports:- containerPort: 80command:- sh- -c- "sleep 10; exit 0"resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always            #重启策略
status: {}

  • Never:当Pod容器退出时,总是不从前容器,无论容器退出状态码如何
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: test1name: test1
spec:containers:- image: soscscs/myapp:v1imagePullPolicy: IfNotPresentname: test2ports:- containerPort: 80command:- sh- -c- "sleep 10; exit 1"   #状态设置为1,异常退出resources: {}dnsPolicy: ClusterFirstrestartPolicy: Never     #不重启策略
status: {} 
  • OnFailure:当Pod容器异常退出时(容器退出状态码为非0),才会重启重启;正常退出的容器(容器退出状态码为0),不会重启
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: test1name: test1
spec:containers:- image: soscscs/myapp:v1imagePullPolicy: IfNotPresentname: test2ports:- containerPort: 80command:- sh- -c- "sleep 10; exit 1"          #设置状态为异常退出resources: {}dnsPolicy: ClusterFirstrestartPolicy: OnFailure        #异常状态推出下重启策略
status: {}

4.pod的dns策略

dnsPolicy默认设置为ClusterFirst

自定义dns地址

vim pod.yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: test1name: test1
spec:containers:- image: soscscs/myapp:v1imagePullPolicy: IfNotPresentname: test2ports:- containerPort: 80resources: {}dnsPolicy: None               #设置为none,以下添加dnsConfig:nameservers:                #指定nameservers、和searches- 8.8.8.8searches:- xy101.comrestartPolicy: OnFailure
status: {}kubectl apply -f pod.yaml
kubectl exec -it test1 -- sh
vi /etc/resolv.conf

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL深分页和浅分页

前言 最近有面试过也遇到了问关于深分页问题&#xff0c;在这里简单从MySQL、ES等方面分享一下自己对该问题认识和总结。 一、深分页定义 可以从ES定义上来划分浅分页和深分页的边界&#xff0c;即页数超过10000页为深分页&#xff0c;少于10000页为浅分页。 二、MySQL深分…

初学Ubuntu及遇到的问题

初学Ubuntu及遇到的问题 Ubuntu的安装 1.安装VMware Workstation Pro&#xff08;网上有很多资料&#xff0c;本文就不细说啦~~~&#xff09; 2.在Ubuntu官网下载iso文件>https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/ iso文件随便放在哪个位置&#xff…

内网穿透原理,免费内网穿透(简单使用),公网主动访问内网。

内网穿透的本质就是流量转发&#xff0c;把一个电脑的网卡上的流量数据&#xff0c;转发到另一个网卡的流量数据。 实现原理 网络协议分层就是&#xff0c;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;应用层。我简单解释一下这些分层协议…

消灭星星游戏程序设计【连载十】——小星星的残影轨迹

消灭星星游戏程序设计【连载十】——小星星的残影轨迹 大家每次都可以在页面中下载本节内容的实现代码&#xff0c;一步一步从简单开始&#xff0c;逐步完成游戏的各种功能&#xff0c;如果大家有任何问题也欢迎留言交流。 游戏整体效果展示&#xff1a; 1、本节要达到的效果 …

MyBatis快速学习

目录 前言 MyBatis的具体使用 一些小工具&#xff1a;MyBatisX 常见问题&#xff1a; 1.表中字段名和实体属性名不一致 2.按条件查询&#xff08;单条件&#xff09;时的&#xff0c;查询条件怎么编写 3.按条件查询&#xff08;多条件&#xff09; 4.多条件查询时&…

pywinauto:Windows桌面应用自动化测试(七)

前言 上一篇文章地址&#xff1a; pywinauto&#xff1a;Windows桌面应用自动化测试&#xff08;六&#xff09;-CSDN博客 下一篇文章地址&#xff1a; 暂无 一、实战常用方法 1、通过Desktop快速获取窗口 通过之前章节我们了解到控制应用的方法为Application&#xff0…

10、springboot3 vue3开发平台-前端-elementplus, axios配置及封装使用, 包含token 存储

1. 准备工作 1.1 清除项目自带页面 删除views和components目录下所有东西&#xff1a; 1.2 修改App.vue <script setup lang"ts"></script><template><router-view></router-view> </template><style scoped></st…

基于R语言绘制GGE双标图2

参考资料&#xff1a; 严威凯等: 双标图分析在农作物品种多点试验中的应用【作物学报】 https://cran.r-project.org/web/packages/GGEBiplots/GGEBiplots.pdf 1、如何判断双标图是否充分体现数据中的规律 在对双标图的解释中&#xff0c;有一个隐含的假设&#xff0c;就是所…

COFFEE AI PARTNER -- 神奇的AI工具,相当我雇佣了一个AI员工,淘汰你的是会使用AI的人

COFFEE AI PARTNER介绍 COFFEE AI PARTNER是由 AI JAVA开发的一款生成式人工智能工具&#xff08;又名AI助手&#xff09;&#xff0c;尝试一下。 首先域名似乎正在备案中&#xff0c;企业邮箱似乎正在采购&#xff0c;目前服务地址是&#xff1a;COFFEE AI PARTNER-官网 官网…

git安装图文

1.下载 通过百度网盘分享的文件&#xff1a;git安装图文 链接&#xff1a;https://pan.baidu.com/s/17ZMiWUIULtrGGba5n-WLeA 提取码&#xff1a;anjm --来自百度网盘超级会员V3的分享 2.安装

【C语言篇】猜数字游戏(赋源码)

文章目录 猜数字游戏前言随机数生成randsrandtime设置随机数生成范围 猜数字游戏的实现 猜数字游戏 前言 在前两篇博客对于分支和循环语句进行了详细的介绍&#xff1a; 分支语句详解 循环语句详解 我们就可以写一写稍微有趣的代码了&#xff0c;比如&#xff1a; 写一个…

二分查找法

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

SQL各种注入详解加案例--持续更新

sql注入 联合查询注入案例手工注入判断是否有SQL注入漏洞 sqlmap工具注入 报错注入常用的函数updatexml()函数案例 floor()涉及的函数实现手工注入sqlmap工具注入 盲注布尔盲注案例手工注入脚本sqlmap自动化工具 时间盲注 post注入GET传参和POST传参案例手工注入sqlmap工具 二次…

使用 Python 制作一个属于自己的 AI 搜索引擎

1. 使用到技术 OpenAI KEYSerper KEYBing Search 2. 原理解析 使用Google和Bing的搜搜结果交由OpenAI处理并给出回答。 3. 代码实现 import requests from lxml import etree import os from openai import OpenAI# 从环境变量中加载 API 密钥 os.environ["OPENAI_AP…

MySQL:索引(Index)语句

索引的限制 每个表最多可以有 16 个索引&#xff08;InnoDB 表的限制&#xff09;。 单个索引最多可以包含 16 列。 索引列的最大长度为 767 字节&#xff08;对于 CHAR, VARCHAR, 和 BINARY 类型&#xff09;&#xff0c;3072 字节&#xff08;对于 BLOB 类型&#xff09;。…

浅谈取样器插件之bzm - Free-Form Arrivals Thread Group

浅谈取样器插件之bzm - Free-Form Arrivals Thread Group bzm - Free-Form Arrivals (Ultimate Thread Group) 是一个高级且灵活的线程组插件&#xff0c;专为Apache JMeter设计。它扩展了JMeter的标准线程组功能&#xff0c;允许用户以自由形式定义线程&#xff08;用户&…

SSM项目学习:用xml配置文件或注解开发实现控制反转和依赖注入

什么是SSM SSMSpring(Spring Framework)Spring MVC mybatis Spring Framework系统架构 Spring Framework学习线路 IoC(Inversion of Control)和DI(Dependency Injection) 他们解决的问题&#xff1a;代码耦合度高的问题&#xff0c;需要类自己new对象&#xff0c;修改部分代…

03、DQL(数据查询语句)

目录 1、编写顺序 2、基本查询 3、条件查询 4、聚合函数 5、分组查询 6、排序查询 7、分页查询 8、执行顺序 1、编写顺序 SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 LIMIT 分页参数2、基本查…

简单的docker学习 第11章 镜像中心

第11章 镜像中心 Docker Hub 与阿里云都是 Docker 的公网镜像中心&#xff0c;用户可以将自己的镜像 push 到公网镜像中心中自己的镜像仓库&#xff0c;并可将仓库设置为私有库&#xff0c;使他人无法看到&#xff0c;更无法 pull&#xff0c;以保证镜像的安全性。不过&#x…

【LeetCode刷题笔记】LCR.27 回文链表

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…