【Pod】

news2024/11/22 5:42:21

Pod

  • 一、Pod基本概念
  • 二、Pod的使用方式
    • pause容器(pod的基础容器)核心功能
    • pause容器使得Pod中所有容器可以共享两种资源:网络和存储
      • 网络
      • 存储
  • 三、Pod分类
    • 自主式Pod/静态pod
    • 控制器管理的Pod
  • 四、三种容器
  • 五、镜像拉取策略(image PullPolicy)
    • 1.IfNotPresent
    • 2.Always
    • 3.Never

一、Pod基本概念

Pod是k8s中最小的资源管理组件
Pod是最小化运行容器化应用的资源对象
一个Pod代表着集群中运行的一个进程
k8s中大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的

在这里插入图片描述

二、Pod的使用方式

一个pod中运行一个容器。k8s管理的是pod二不是直接管理容器
一个pod中同时运行多个容器。他们之间共享资源。这些在同一个pod中的容器可以互相成为一个service单位,比如一个容器共享文件,另一个"sidecar"容器来更新这些文件。pod将这些容器的存储资源作为一个实体来管理。
pod资源中针对各种容器提供网络命令空间等共享机制的是底层基础容器pause,基础容器(父容器)pause就是为了管理pod容器间的共享操作。父容器需要能够精确知道如何去创建共享运行环境的容器。还能管理这些容器的生命周期。为了实现这个父容器的构想,k8s中,用pause容器来作为一个Pod中所有容器的父容器。

pause容器(pod的基础容器)核心功能

一、提供整个Pod的Linux命令命名空间的基础
二、启用PID命名空间,它在每个Pod中都作为PID为1进程(init进程),并收回僵尸进程
给pod中的所有应用容器提供网络(共享IP)和存储(共享存储)资源的共享,作为pid=1的进程(init)

pause容器使得Pod中所有容器可以共享两种资源:网络和存储

网络

每个pod都会被分配一个唯一的IP地址。pod中所有容器共享网络空间,包括IP地址和端口。pod内部的容器可以使用localhost互相通信。
Pod中的容器与外界通信时,必须分配共享网络资源(例如使用宿主机的端口映射)

存储

每个pod都有一个特殊的被称为“基础容器”的pause容器。Pod中的所有容器都可以访问共享的Volume。Volume也可以用来持久化pod中的存储资源,以防容器重启后文件丢失。

三、Pod分类

自主式Pod/静态pod

不能自我修复,如果运行的node故障,或是调度器本身故障;pod所在node缺少资源或pod处于维护状态,pod也会被驱逐而且副本数量也会因为达不到期望值而创建型的pod

控制器管理的Pod

被控制管理的pod,有自愈能力,一旦挂了,会重新拉起,而且副本数量会因为达不到期望值而创建新的pod

四、三种容器

pause容器:给pod中的所有应用容器提供网络(共享IP)和存储(共享存储)资源的共享,作为pid=1的进程(init进程),管理整个pod中容器组的生命周期
初始化容器(init容器):阻塞或者延迟应用的容器的启动,可以为应用容器事先提供号运行环境和工具。多个init容器时是串行启动的,每个init容器必须在下一个init容器启动前完成启动和退出

五、镜像拉取策略(image PullPolicy)

1.IfNotPresent

在镜像已经存在的情况下,kubelet将不再去拉取镜像,仅当本地缺失时才从仓库中拉取,默认的镜像拉取策略

2.Always

每次创建pod都会重新拉取,仅使用本地镜像

3.Never

pod不会主动拉取镜像,仅使用本地镜像
注意:对于标签为:latest的镜像,其默认的镜像获取策略即为always,而对于其他镜像,其默认策略为ifnotpresent

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: private-image-test-1
spec:
  containers:
    - name: uses-private-image
      image: $PRIVATE_IMAGE_NAME
      imagePullPolicy: Always
      command: [ "echo", "SUCCESS" ]
EOF

//master01 上操作

kubectl edit deployment/nginx-deployment
......
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.15.4
        imagePullPolicy: IfNotPresent							#镜像拉取策略为 IfNotPresent
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always										#Pod的重启策略为 Always,默认值
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
......

//创建测试案例

mkdir /opt/demo
cd /opt/demo

vim pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-test1
spec:
  containers:
    - name: nginx
      image: nginx
      imagePullPolicy: Always
      command: [ "echo", "SUCCESS" ]


kubectl create -f pod1.yaml

kubectl get pods -o wide
pod-test1                         0/1     CrashLoopBackOff   4          3m33s
//此时 Pod 的状态异常,原因是 echo 执行完进程终止,容器生命周期也就结束了

kubectl describe pod pod-test1
......
Events:
  Type     Reason     Age                 From                    Message

----     ------     ----                ----                    -------

  Normal   Scheduled  2m10s               default-scheduler       Successfully assigned default/pod-test1 to 192.168.80.11
  Normal   Pulled     46s (x4 over 119s)  kubelet, 192.168.80.11  Successfully pulled image "nginx"
  Normal   Created    46s (x4 over 119s)  kubelet, 192.168.80.11  Created container
  Normal   Started    46s (x4 over 119s)  kubelet, 192.168.80.11  Started container
  Warning  BackOff    19s (x7 over 107s)  kubelet, 192.168.80.11  Back-off restarting failed container
  Normal   Pulling    5s (x5 over 2m8s)   kubelet, 192.168.80.11  pulling image "nginx"
//可以发现 Pod 中的容器在生命周期结束后,由于 Pod 的重启策略为 Always,容器再次重启了,并且又重新开始拉取镜像

//修改 pod1.yaml 文件

cd /opt/demo
vim pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-test1
spec:
  containers:
    - name: nginx
      image: nginx:1.14							#修改 nginx 镜像版本
      imagePullPolicy: Always
      #command: [ "echo", "SUCCESS" ]			#删除

//删除原有的资源
kubectl delete -f pod1.yaml 

//更新资源
kubectl apply -f pod1.yaml 

//查看 Pod 状态
kubectl get pods -o wide
NAME                              READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE
pod-test1                         1/1     Running   0          33s   172.17.36.4   192.168.80.11   <none>

//在任意 node 节点上使用 curl 查看头部信息
curl -I http://172.17.36.4
HTTP/1.1 200 OK
Server: nginx/1.14.2
......

---------- 部署 harbor 创建私有项目 ----------

//在 Docker harbor 节点(192.168.10.23)上操作
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce
systemctl start docker.service
systemctl enable docker.service
docker version
//上传 docker-compose 和 harbor-offline-installer-v1.2.2.tgz 到 /opt 目录中
cd /opt
chmod +x docker-compose
mv docker-compose /usr/local/bin/
//部署 Harbor 服务
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
vim /usr/local/harbor/harbor.cfg
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.10.23

cd /usr/local/harbor/
./install.sh
//在 Harbor 中创建一个新项目
(1)浏览器访问:http://192.168.10.23 登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345
(2)输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮
(3)填写项目名称为“kgc-project”,点击“确定”按钮,创建新项目

//在每个 node 节点配置连接私有仓库(注意每行后面的逗号要添加)
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.10.23"]
}
EOF

systemctl daemon-reload
systemctl restart docker

//在每个 node 节点登录 harbor 私有仓库

docker login -u admin -p harbor12345 http://192.168.10.23

//在一个 node 节点下载 Tomcat 镜像进行推送

docker pull tomcat:8.0.52
docker images

docker tag tomcat:8.0.52 192.168.10.23/kgc-project/tomcat:v1
docker images

docker push 192.168.10.23/kgc-project/tomcat:v1

//查看登陆凭据

cat /root/.docker/config.json | base64 -w 0			#base64 -w 0:进行 base64 加密并禁止自动换行
ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE5NS44MCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy41IChsaW51eCkiCgl9Cn0=
//创建 harbor 登录凭据资源清单,用于 K8S 访问 Harbor 私服拉取镜像所需要的密钥权限凭证 secret 资源
vim harbor-pull-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: harbor-pull-secret
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE5NS44MCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy41IChsaW51eCkiCgl9Cn0=			#复制粘贴上述查看的登陆凭据
type: kubernetes.io/dockerconfigjson


//创建 secret 资源
kubectl create -f harbor-pull-secret.yaml

//查看 secret 资源

kubectl get secret

//创建资源从 harbor 中下载镜像

cd /opt/demo
vim tomcat-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-tomcat
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-tomcat
  template:
    metadata:
      labels:
        app: my-tomcat
    spec:
      imagePullSecrets:						#添加 K8S 访问 Harbor 私服拉取镜像所需要的 secret 资源选项

   - name: harbor-pull-secret			#指定 secret 资源名称
     ntainers:
        - name: my-tomcat
          image: 192.168.10.23/kgc-project/tomcat:v1		#指定 harbor 中的镜像名
          ports:

        - containerPort: 80
---

apiVersion: v1
kind: Service
metadata:
  name: my-tomcat
spec:
  type: NodePort
  ports:

  - port: 8080
    targetPort: 8080
    nodePort: 31111
      selector:
    app: my-tomcat

//删除之前在 node 节点下载的 Tomcat 镜像

docker rmi tomcat:8.0.52
docker rmi 192.168.10.23/kgc-project/tomcat:v1
docker images

//创建资源

kubectl create -f tomcat-deployment.yaml

kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
my-tomcat-d55b94fd-29qk2   1/1     Running   0         
my-tomcat-d55b94fd-9j42r   1/1     Running   0  

//查看 Pod 的描述信息,可以发现镜像时从 harbor 下载的

kubectl describe pod my-tomcat-d55b94fd-29qk2

//刷新 harbor 页面,可以看到镜像的下载次数增加了

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

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

相关文章

云计算安全和云原生安全的关系

云计算安全(Cloud Computing Security)指的是在云环境中保护数据、应用程序和基础设施的安全性。它包括保护云服务提供商的基础设施和平台&#xff0c;以及云服务用户的数据和应用程序。 云原生安全(Cloud-Native Security)则是指在云原生环境中保护应用程序和服务的安全性。云…

谁说手机没有高质量抓拍?华为Mate 60系列与Mate X5让你体验“时间凝固”!

我们日常拍照时&#xff0c;经常会出现“照片糊了”的现象&#xff0c;这是由于被拍摄的人或者物快速移动导致。 来源网图&#xff0c;侵删 抓拍&#xff0c;Snap photography&#xff0c;“抓住时机&#xff0c;把瞬间出现的情景拍摄下来拍照”&#xff0c;又名写实抓拍&…

手写Demo体验volatile可见性的作用

volatile是java的关键字&#xff0c;作用&#xff1a;①保证线程间的可见性&#xff1b;②防止指令重排。下面看一个demo&#xff0c;启动2个线程&#xff0c;一个线程读取flag变量的值&#xff0c;另外一个线程修改flag变量的值。 public class VolatileDemo {private static…

前端自动化测试入门教程

&#x1fab4; 背景 前端的自动化测试主要可以分为以下四种&#xff1a; 单元测试&#xff08;Unit Test&#xff09;&#xff1a;对一个函数/组件进行测试&#xff0c;一般用于公共函数/公共组件的测试维护。常用框架有 Jest、Jasmine、Mocha等&#xff1b; 集成测试&#x…

VR全景拍摄酒店,为用户消除“不透明度”

近日在各大社交平台上&#xff0c;出现了不少吐槽国庆期间酒店价格太贵的帖子&#xff0c;而一些热门旅游地的度假酒店、网红民宿的热门房型已经“一房难求”&#xff0c;这就出现酒店房型与预定房型不同的现象出现&#xff0c;VR全景拍摄技术同酒店行业的结合&#xff0c;就可…

韩语学习|韩语零基础|柯桥韩语学校,每日一词

今日一词:개방도 평지 韩语每日一词打卡:개방도[개방도]【名词】开放度,开放程度 原文&#xff1a;한 지역의 개방도는 경제 발전 수준에 달려 있습니다. 意思&#xff1a;一个地区的开放程度取决于经济发展水平。 【原文分解】 1、경제[경제]经济 2、지역[지역]地域 3、발전[발…

代码随想录算法训练营第23期day12| 239. 滑动窗口最大值 、347. 前K个高频元素

目录 一、&#xff08;leetcode 239&#xff09;滑动窗口最大值​​​jiao 二、&#xff08;leetcode 347&#xff09;前 K 个高频元素 优先级队列与大小顶堆 一、&#xff08;leetcode 239&#xff09;滑动窗口最大值​​​jiao 力扣题目链接 状态&#xff1a;待回顾&…

kafka、rabbitmq 、rocketmq的区别

一、语言不同 RabbitMQ是由内在高并发的erlanng语言开发&#xff0c;用在实时的对可靠性要求比较高的消息传递上。 kafka是采用Scala语言开发&#xff0c;它主要用于处理活跃的流式数据,大数据量的数据处理上 二、结构不同 RabbitMQ采用AMQP&#xff08;Advanced Message Q…

Excel·VBA使用ADO读取工作簿工作表数据

目录 查询遍历写入数组查询整体写入数组查询工作簿所有工作表名称查询工作簿所有工作表数据 不打开工作簿读取数据&#xff0c;以下举例都为《ExcelVBA合并工作簿》中 7&#xff0c;合并子文件夹同名工作簿中同名工作表&#xff0c;纵向汇总数据所举例的工作簿&#xff0c;使用…

国庆作业day10.4

QT实现TCP服务器客户端搭建的代码&#xff0c;现象 服务器 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器servernew QTcpServer(this);c…

探秘小米增程汽车与仿生机器人的未来:AI大模型的潜在影响及苹果iPhone15Pro发热问题解决之道

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

智能井盖传感器:城市安全卫士

随着城市人口的不断增加和城市基础设施的不断发展&#xff0c;井盖作为城市道路和排水系统的重要组成部分&#xff0c;承担着确保城市安全和便利性的关键角色。然而&#xff0c;井盖在日常使用中常常面临倾斜、水浸和翻转等问题&#xff0c;这些问题可能导致交通阻塞、行人坠井…

漏洞挖掘--edusrc两连杀

免责声明&#xff1a;文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01; 最近闲来无事&#xff0c;研究了下通达的day&#xff0c;由于本人太菜了&#xff…

软考网络工程师考前如何复习?

先看一下这知识点总结图&#xff0c;在备考复习前大致简单了解一遍&#xff01; 第一步&#xff1a; 通读教程&#xff08;《网络工程师》&#xff09;&#xff0c;首先对教程中的各章节及知识点有一个基本的认识&#xff0c;第一阶段基本以泛读为主&#xff0c;不求立刻记得所…

Maven 配置阿里云镜像

1. 查找maven setting.xml配置文件 find / -name "setting.xml" 2. 添加阿里云镜像 修改maven根目录下的conf文件夹中的setting.xml文件中的mirrors下添加mirror标签 <settings> <localRepository>E:\Maven\repository</localRepository> <…

LLMs Python解释器程序辅助语言模型(PAL)Program-aided language models (PAL)

正如您在本课程早期看到的&#xff0c;LLM执行算术和其他数学运算的能力是有限的。虽然您可以尝试使用链式思维提示来克服这一问题&#xff0c;但它只能帮助您走得更远。即使模型正确地通过了问题的推理&#xff0c;对于较大的数字或复杂的运算&#xff0c;它仍可能在个别数学操…

【Kotlin精简】第2章 集合

1 简介 在 Kotlin 中集合主要分为可变集合与只读集合&#xff0c;其中可变集合使用 “Mutable” 前缀 集合类名表示&#xff0c;比如 MutableList、MutableSet、MutableMap 等。而对于只读集合就是和 Java 中集合类名是一致。 Java 中的 List 非 Kotlin 中的 List , 因为 Kot…

深度学习——权重衰减(weight_decay)

深度学习——权重衰减&#xff08;weight_decay) 文章目录 前言一、权重衰减1.1. 范数与权重衰减1.2. 高维线性回归1.3. 从零开始实现1.3.1.初始化模型参数1.3.2. 定义L₂范数惩罚1.3.3. 定义训练代码实现1.3.4. 不管正则化直接训练1.3.5. 使用权重衰减 1.4. 简洁实现 总结 前言…

寒露到了,冬天还会远吗?

寒露惊秋晚&#xff0c;朝看菊渐黄。 日复一日间&#xff0c;光影如梭&#xff0c;我们便很快将告别了秋高气爽&#xff0c;白日将变得幽晦&#xff0c; 天寒夜长&#xff0c;风气萧索&#xff0c;雾结烟愁。 还没好好体会秋高气爽,寒露就到了。 今天晚上9点多&#xff0c;我们…

成都直播产业未来发展新方向一览,又一大型直播基地入驻成都!

成都直播产业正迎来一股蓬勃发展的新浪潮&#xff0c;展现出无限的潜力和前景。最新消息显示&#xff0c;又一座大型直播基地——成都天府蜂巢直播产业基地即将入驻成都&#xff0c;为这座城市的直播产业注入了新的动力和活力。 天府蜂巢 行业模范 成都天府蜂巢直播产业基地采…