【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.rhkb.cn/news/151196.html

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

相关文章

阿里面试:页面调10 个上游接口,如何做高并发?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 一个页面要调100 个上游接口&#xff0c;如何优化&#xff1f; 一个场景…

AI工程化—— 如何让AI在企业多快好省的落地?

作为计算机科学的一个重要领域&#xff0c;机器学习也是目前人工智能领域非常活跃的分支之一。机器学习通过分析海量数据、总结规律&#xff0c;帮助人们解决众多实际问题。随着机器学习技术的发展&#xff0c;越来越多的企业将机器学习技术作为核心竞争力&#xff0c;并运用在…

python读取vivo手机截图,将满屏图片文件移动别的路径

问题之初 python读取vivo手机截图&#xff0c; 将满屏图片文件移动别的路径好多这样的图片&#xff0c;占用手机大量的内存&#xff0c;食之无味弃之可惜&#xff01;那么会复制粘贴&#x1f440;代码的我们我们今天就把这些图片筛选清理掉。 这段代码 原有逻辑的基础上&…

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

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

边坡安全监测系统的功能优势

随着科技的进步&#xff0c;边坡安全监测系统在各种工程项目中发挥着越来越重要的作用。这款系统通过实时监测垂直、水平位移数据&#xff0c;以折线图的方式显示在监控平台中&#xff0c;为工程人员提供了直观、便捷的监控工具&#xff0c;从而能够及时掌握边坡稳定状况&#…

Altium Designer培训 | 4 - 原理图创建篇

元件的放置 器件的复制及对齐 导线及NetLabel的添加 Value值的核对 封装的统一管理 原理图的编译设置及检查

tomcat安装,创建web后端项目,部署项目过程

1&#xff0c;安装服务器&#xff0c;使用 Apache免费提供的服务器TomCat&#xff0c;注意JDK版本。 TomCat官方站点 文件解压目录。 启动服务器&#xff1a;bin目录下点击startup.bat&#xff0c;出现小黑框&#xff0c;浏览器默认访问http://127.0.0.1:8080/ 关闭服务器&…

正点原子嵌入式linux驱动开发——Linux内核顶层Makefile详解

之前的几篇学习笔记重点讲解了如何移植uboot到STM32MP157开发板上&#xff0c;从本章就开始学习如何移植Linux内核。 同uboot一样&#xff0c;在具体移植之前&#xff0c;先来学习一下Linux内核的顶层Makefile文件&#xff0c;因为顶层 Makefile控制着Linux内核的编译流程。 L…

提取歌曲伴奏?用对软件一键帮你搞定~

相信大家经常想获取某首歌曲的伴奏&#xff0c;但是不知从何下手&#xff0c;今天这篇教程给大家分享一个超神奇软件&#xff0c;一键提取歌曲伴奏&#xff01; 第一步&#xff1a;打开【音分轨】APP&#xff0c;进入首页点击【人声分离】 第二步&#xff1a;选择导入方式&…

C++ -- 学习系列 关联式容器 set 与 map

一 关联式容器是什么&#xff1f; c 中有两种容器类型&#xff1a;关联式容器与序列式容器&#xff08;顺序容器&#xff09; 关联式中的容器是按照关键字来存储与访问的&#xff0c;序列式容器&#xff08;顺序容器&#xff09;则是元素在容器中的相对位置来存储与访问的。…

开发过程教学——交友小程序

交友小程序 1. 我的基本信息2. 我的人脉2.1 我的关注2.2 我的粉丝 3. 我的视频4. 我的相册 特别注意&#xff1a;由于小程序分包限制2M以内&#xff0c;所以要注意图片和视频的处理。 1. 我的基本信息 数据库表&#xff1a; 我的基本信息我的登录退出记录我的登录状态&#x…

运营商sdwan优缺点及sdwan服务商优势

SD-WAN(软件定义广域网)作为一种重要的网络解决方案&#xff0c;已经受到了广泛的关注和采用。然而&#xff0c; 无论是由传统运营商提供的SD-WAN还是专门的SD-WAN服务提供商&#xff0c;都存在各自的优缺点。 运营商提供的SD-WAN的缺点&#xff1a; 1. 有限的灵活性&#xf…

Kubernetes概述架构与工作流程简述

文章目录 Kubernetes概述Kubernetes优势Kubernetes 集群组件控制平面组件Node 组件 Kubernetes工作流程下期预告 Kubernetes概述 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥…

如何提升爬虫IP使用效率?精打细算的方法分享

在进行爬虫数据采集时&#xff0c;爬虫IP是不可或缺的工具。然而&#xff0c;爬虫IP的费用可能是一个爬虫项目的重要开支之一。为了帮助您节省爬虫IP经费&#xff0c;本文将分享一些经济高效的方法&#xff0c;让您在使用爬虫IP时更加节约成本&#xff0c;提高经济效益。 一、优…

gitlab登录出现的Invalid login or password问题

前提 我是在一个项目里创建的gitlab账号&#xff0c;想在别的项目里登录或者官网登录发现怎么都登陆不上 原因 在GitLab中&#xff0c;有两种不同的账号类型&#xff1a;项目账号和个人账号&#xff08;官网账号&#xff09;。 项目账号&#xff1a;项目账号是在特定GitLab…

ubuntu 设置x11vnc服务

Ubuntu 18.04 设置x11vnc服务 自带的vino-server也可以用但是不好用&#xff0c;在ubuntu论坛上看见推荐的x11vnc&#xff08;ubuntu关于vnc的帮助页面&#xff09;&#xff0c;使用设置一下&#xff0c;结果发现有一些坑需要填&#xff0c;所以写下来方便下次使用 转载请说明…

云服务仿真:完全模拟 AWS 服务的本地体验 | 开源日报 No.45

localstack/localstack Stars: 48.7k License: NOASSERTION LocalStack 是一个云服务仿真器&#xff0c;可以在您的笔记本电脑或 CI 环境中以单个容器运行。它提供了一个易于使用的测试/模拟框架&#xff0c;用于开发云应用程序。主要功能包括&#xff1a; 在本地机器上完全…

Java——StringBuffer类常用操作示例

Java——StringBuffer类常用操作 package com.yushifu.javaAPI;import java.sql.SQLOutput;//StringBuffer类&#xff08;字符串缓冲区&#xff09; //StringBuffer类与String的区别————StringBuffer的内容和长度都是可以改的 //StringBuffer类似于一个字符容器&#xff0…

通过ElementUi在Vue搭建的项目中实现CRUD

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Vue》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这个专栏…

Linux设备驱动的精髓在哪?为何感觉写驱动就像写八股文?

Linux设备驱动的精髓在哪&#xff1f;为何感觉写驱动就像写八股文&#xff1f; 话题背景&#xff1a;随着互联网尤其是移动互联网的发展&#xff0c;Android手机操作系统得到了广泛应用&#xff0c;而Android系统是基于Linux系统开发的。另外&#xff0c;大数据、云计算等技术也…