【Pod】

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-imageimage: $PRIVATE_IMAGE_NAMEimagePullPolicy: Alwayscommand: [ "echo", "SUCCESS" ]
EOF

//master01 上操作

kubectl edit deployment/nginx-deployment
......template:metadata:creationTimestamp: nulllabels:app: nginxspec:containers:- image: nginx:1.15.4imagePullPolicy: IfNotPresent							#镜像拉取策略为 IfNotPresentname: nginxports:- containerPort: 80protocol: TCPresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: Always										#Pod的重启策略为 Always,默认值schedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30
......

//创建测试案例

mkdir /opt/demo
cd /opt/demovim pod1.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-test1
spec:containers:- name: nginximage: nginximagePullPolicy: Alwayscommand: [ "echo", "SUCCESS" ]kubectl create -f pod1.yamlkubectl 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.11Normal   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 containerNormal   Started    46s (x4 over 119s)  kubelet, 192.168.80.11  Started containerWarning  BackOff    19s (x7 over 107s)  kubelet, 192.168.80.11  Back-off restarting failed containerNormal   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: nginximage: 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.23cd /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"]
}
EOFsystemctl 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 imagesdocker tag tomcat:8.0.52 192.168.10.23/kgc-project/tomcat:v1
docker imagesdocker 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: 2selector:matchLabels:app: my-tomcattemplate:metadata:labels:app: my-tomcatspec:imagePullSecrets:						#添加 K8S 访问 Harbor 私服拉取镜像所需要的 secret 资源选项- name: harbor-pull-secret			#指定 secret 资源名称ntainers:- name: my-tomcatimage: 192.168.10.23/kgc-project/tomcat:v1		#指定 harbor 中的镜像名ports:- containerPort: 80
---apiVersion: v1
kind: Service
metadata:name: my-tomcat
spec:type: NodePortports:- port: 8080targetPort: 8080nodePort: 31111selector: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.yamlkubectl 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.hqwc.cn/news/127673.html

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

相关文章

Qt元对象系统 day5

Qt元对象系统 day5 内存管理 QObject以对象树的形式组织起来&#xff0c;当为一个对象创建子对象时&#xff0c;子对象回自动添加到父对象的children()列表中。父对象拥有子对象所有权&#xff0c;比如父对象可以在自己的析构函数中删除它的孩子对象。使用findChild()或findC…

VR模拟鸡胚培养接种实验,打造沉浸式的学习环境

在医学教育领域&#xff0c;传统的鸡胚接种实验一直是教学的重要组成部分。然而&#xff0c;这种实验方法存在一定的局限性&#xff0c;如操作难度大、成本高、安全隐患等。为了解决这些问题&#xff0c;越来越多的教育机构开始尝试引入虚拟现实(VR)技术&#xff0c;以模拟鸡胚…

【threejs】基本编程概念及海岛模型展示逻辑

采用three封装模式完成的海岛动画&#xff08;点击这里查看&#xff09; 直接上代码吧 <template><div class"scene"><video id"videoContainer" style"position:absolute;top:0px;left:0px;z-index:100;visibility: hidden"&g…

JavaEE-文件IO操作

构造方法 一般方法&#xff0c;有很多&#xff0c;我们以下只是列举几个经常使用的 注意在上述的操作过程中&#xff0c;无论是绝对路径下的这个文件还是相对路径下的这个文件&#xff0c;都是不存在的 Reader 使用 --> 文本文件 FileReader类所涉及到的一些方法 Fil…

RabbitMQ集群搭建详细介绍以及解决搭建过程中的各种问题 + 配置镜像队列——实操型

RabbitMQ集群搭建详细介绍以及解决搭建过程中的各种问题 配置镜像队列——实操型 1. 准备工作1.1 安装RabbitMQ1.2 简单部署搭建设计1.3 参考官网 2. RabbitMQ 形成集群的方法3. 搭建RabbitMQ集群3.1 部署架构3.2 rabbitmq集群基础知识3.2.1 关于节点名称&#xff08;标识符&a…

ORB-SLAM2运行自己的数据集进行定位教程

ORB-SLAM2只做定位的话&#xff0c;精度还是挺准确的&#xff0c;所以用单目摄像头录制视频&#xff0c;制作自己的数据集跑一下&#xff0c;看看定位精度&#xff0c;将过程加以记录。 文章目录 一、系统配置二、制作数据集1、脚本编写2、配置文件编写3、录制视频素材&#x…

基于ModbusTCP与西门子PLC通讯项目案例

目录 一、西门子PLC仿真环境搭建 【1.1】创建PLC项目 【1.2】编写PLC程序 二、C#代码编写 【2.1】窗口制作 【2.2】效果演示 【2.3】读取源码 【2.4】FrmSiemensSet源码 【2.5】Variable源码 一、西门子PLC仿真环境搭建 【1.1】创建PLC项目 搭建PLCSIM-Advacend模拟仿…

三相PWM整流器滞环电流控制Simulink仿真模型

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Maven 配置阿里云镜像

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

【哈士奇赠书活动 - 41期】- 〖产品设计软技能:创业公司篇〗

文章目录 ⭐️ 赠书 - 《产品设计软技能&#xff1a;创业公司篇》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《产品设计软技能&#xff1a;创业公司篇》 ⭐️ 内容简介 在创业公司设计产品与在成熟公司设计产品存在明显差异。《产品设计软…

混沌工程初分享

混沌工程初分享 一、什么是混沌工程 1、什么是混沌 混沌是一种现象&#xff0c;在一个动力系统中&#xff0c;因为各种不同的参数变化导致的一系列的连锁反应。比如&#xff1a; 在南美洲亚马逊河流域热带雨林中的蝴蝶&#xff0c;偶尔的几次振翅&#xff0c;可以在两周以后引…

全栈开发笔记2:项目部署上线的三种方式

文章目录 最原始的方式宝塔Docker 部署其他 本文为编程导航实战项目学习笔记。 项目部署的三种方式&#xff1a; 最原始方式✅ yum 手动安装 jdk mysql tomcat nginx打包前端项目&#xff0c;放到某个目录&#xff0c;修改 nginx 配置修改线上的 mysql 配置&#xff0c;打包 j…