【云原生】k8sPod基础概念

news2024/11/18 2:40:15

k8sPod基础概念

    • 一、Pod概述
      • 1、pod概念
      • 2、Pod资源限制
    • 二、Pod的两种使用方式
    • 三、资源共享
      • 1、创建Pod的方式
      • 2、Pod功能
    • 四、底层容器Pause
      • 1、Pause共享资源
      • 2、Pause主要功能
      • 3、Pod与Pause结构设计用意
    • 五、镜像的拉取策略
      • 1、Pod容器镜像拉取策略
      • 2、Pod重启策略
    • 六、容器的分类
      • 1、基础容器(infrastructure container)
      • 2、初始化容器(init container)
      • 3、应用容器(main container)
    • 七、部署Harbor 创建私有项目
      • 1、关闭防火墙 核心防护
      • 2、安装Docker及依赖环境
      • 3、上传所需包到/opt目录下
      • 4、部署Harbor服务
      • 5、在浏览器进行登录创建项目
    • 八、配置node节点连接私有仓库
      • 1、修改配置文件
      • 2、在每个node节点登录harbor私有仓库
      • 3、在一个node节点下载Tomcat镜像
      • 4、查看登录凭据
      • 5、创建 harbor 登录凭据资源清单
      • 6、创建secret资源
      • 7、查看secret资源
    • 九、创建资源从Harbor中下载镜像
      • 1、切换到/opt目录进行配置
      • 2、删除之前在 node 节点下载的 Tomcat 镜像
      • 3、创建tomcat资源
      • 4、查看Harbor网页,可以看到下载次数

一、Pod概述

1、pod概念

Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理Pod运行的StatefulSet和Deployment等控制器对象,用于暴露Pod应用的Service和Ingress对象,为Pod提供存储的PersistentVolume存储资源对象等。

2、Pod资源限制

Pod 是 kubernetes 中最小的资源管理组件,Pod 也是最小化运行容器化应用的资源对象。一个 Pod 代表着集群中运行的一个进程。kubernetes 中其他大多数组件都是围绕着 Pod 来进行支撑和扩展 Pod 功能的,例如用于管理 Pod 运行的 StatefulSet 和 Deployment 等控制器对象,用于暴露 Pod 应用的 Service 和 Ingress 对象,为 Pod 提供存储的 PersistentVolume 存储资源对象等。

二、Pod的两种使用方式

  • 一个 Pod 中运行一个容器:每个 Pod 中一个容器的模式是最常见的用法,在这种使用方式中,你可以把 Pod想象成是单个容器的封装,kubernetes 管理的是 Pod 而不是直接管理容器。

  • 在一个 Pod 中同时运行多个容器:一个 Pod中也可以同时封装几个需要紧密耦合互相协作的容器,它们之间共享资源。这些在同一个 Pod 中的容器可以互相协作成为一个 service单位,比如一个容器共享文件,另一个 sidecar 容器来更新这些文件。Pod 将这些容器的存储资源作为一个实体来管理。

三、资源共享

在Kubernetes中,Pod中的所有容器都运行在同一个网络命名空间中,它们可以通过localhost相互通信。此外,它们还可以共享相同的存储卷和配置。如果多个容器需要共享一些资源,可以将这些资源作为一个卷挂载到Pod中,然后在每个容器中使用相同的卷路径来访问这些资源。这样,每个容器都可以读取和写入这些共享资源。

1、创建Pod的方式

(1)自主式/静态pod:不被控制器管理的pod是没有自愈能力,一旦pod挂掉了不会被重新拉起,而且副本的数量也不会因为达不到期望值而在创建新的pod。

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

2、Pod功能

(1)给pod中的所有应用容器提供网络(共享IP 端口)和存储(共享存储)资源的共享。

(2)作为 pid=1的进程(init进程)来管理整个pod中容器组的生命周期。

四、底层容器Pause

1、Pause共享资源

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

存储:Pod可以指定多个共享的Volume。Pod中的所有容器都可以访问共享的Volume。Volume也可以用来持久化Pod中的存储资源,以防容器重启后文件丢失。

小结:每个Pod都有一个特殊的被称为“基础容器”的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或者多个紧密相关的用户应用容器。

2、Pause主要功能

kubernetes 中的 pause 容器主要为每个容器提供以下功能:

(1)在 pod 中担任 Linux 命名空间(如网络命令空间)共享的基础。

(2)启用 PID 命名空间,开启 init 进程。

3、Pod与Pause结构设计用意

Kubernetes设计这样的Pod概念和特殊组成结构有什么用意?
原因一:在一组容器作为一个单元的情况下,难以对整体的容器简单地进行判断及有效地进行行动。比如,一个容器死亡了,此时是算整体挂了么?那么引入与业务无关的Pause容器作为Pod的基础容器,以它的状态代表着整个容器组的状态,这样就可以解决该问题。

原因二:Pod里的多个应用容器共享Pause容器的IP,共享Pause容器挂载的Volume,这样简化了应用容器之间的通信问题,也解决了容器之间的文件共享问题。

五、镜像的拉取策略

1、Pod容器镜像拉取策略

(1)ifNotpresent:优先使用本地已存在的镜像,如本地没有则从仓库拉取镜像。
(2)Always:无论本地是否已经存在镜像,从仓库拉取镜像。
(3)Nerver:仅使用本地镜像,不从仓库拉取镜像。

image:nginx:latest 镜像的标签为:latest或者无标签时,默认的镜像拉取策略Always
image:nginx: 1.14 镜像的标签为非latest时,默认的镜像拉取策略为ifNotPresent

2、Pod重启策略

当pod中的容器退出时通过节点上的kubelet重启容器,适用于pod中的所有容器。

(1)Always:当容器终止退出后,总是重启容器 默认策略 。

(2)OnFailure:当容器异常退出(退出状态码非0)时,重启容器,正常退出则不重启容器。

(3)Nerver:当容器终止退出,从不重启容器。

:k8s中不支持重启pod资源,只有删除重建。

六、容器的分类

1、基础容器(infrastructure container)

给pod中的所有应用容器提供网络和存储资源的共享,进程init进程,来管理整个pod中容器组的生命周期。

  • 维护整个 Pod 网络和存储空间
  • node 节点中操作
  • 启动一个容器时,k8s会自动启动一个基础容器

2、初始化容器(init container)

阻塞或者延迟应用容器的启动,可以为应用容器事先准备运行环境和工具,多个init是容器串行启动,每个init必须在下一个init容器启动前完成启动和退出。

  • Init 容器总是运行到成功完成为止
  • 每个 Init 容器都必须在下一个 Init 容器启动之前成功完成启动和退出

如果 Pod 的 init 容器失败,k8s 会不断地重启该 Pod,直到 Init 容器成功为止。然而,如果 Pod 对应的重启策略(restartPolicy)为 Never,它不会重新启动。

3、应用容器(main container)

在所有的init容器启动和退出后应用容器才会启动。并行启动的,提供应用程序的业务。

七、部署Harbor 创建私有项目

在 Docker harbor 节点操作

1、关闭防火墙 核心防护

[root@localhost ~]#systemctl disable --now firewalld
[root@localhost ~]#setenforce 0

2、安装Docker及依赖环境

[root@Harbor ~]#yum install -y yum-utils device-mapper-persistent-data lvm2
[root@Harbor ~]#yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@Harbor ~]#yum install -y docker-ce docker-ce-cli containerd.io
[root@Harbor ~]#systemctl start docker.service
[root@Harbor ~]#systemctl enable docker.service

在这里插入图片描述

3、上传所需包到/opt目录下

[root@Harbor opt]#mv docker-compose /usr/local/bin/
[root@Harbor opt]#cd /usr/local/bin/

在这里插入图片描述

4、部署Harbor服务

[root@Harbor opt]#tar zxf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
[root@Harbor opt]#vim /usr/local/harbor/harbor.cfg
[root@Harbor opt]#cd /usr/local/harbor/
[root@Harbor harbor]#./install.sh

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

5、在浏览器进行登录创建项目

登录 Harbor WEB UI 界面,输入用户名和密码登录界面后可以创建一个新项目。点击 + 项目按钮
在这里插入图片描述
在这里插入图片描述

八、配置node节点连接私有仓库

1、修改配置文件

[root@node01 ~]# vim  /etc/docker/daemon.json
[root@node01 ~]# systemctl daemon-reload
[root@node01 ~]# systemctl restart docker  #将改好的node1配置远程输入给node2即可
[root@node02 ~]#systemctl daemon-reload
[root@node02 ~]#systemctl restart docker

在这里插入图片描述

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

[root@node01 ~]# docker login -u admin -p Harbor12345 http://192.168.10.135

在这里插入图片描述

3、在一个node节点下载Tomcat镜像

[root@node02 ~]#docker pull tomcat:8.0.52
[root@node02 ~]#docker images
[root@node02 ~]#docker tag tomcat:8.0.52 192.168.10.135/my-project/tomcat:v1
[root@node02 ~]#docker images
[root@node02 ~]#docker push 192.168.10.135/my-project/tomcat:v1

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

4、查看登录凭据

[root@node02 ~]#cat /root/.docker/config.json | base64 -w 0
ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjEwLjEzNSI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0KfQ==
#base64 -w 0:进行 base64 加密并禁止自动换行
[root@node02 ~]#

在这里插入图片描述

5、创建 harbor 登录凭据资源清单

在master节点用于 K8S 访问 Harbor 私服拉取镜像所需要的密钥权限凭证 secret 资源

[root@master01 ~]#vim harbor-pull-secret.yaml

在这里插入图片描述

6、创建secret资源

[root@master01 ~]#kubectl create -f harbor-pull-secret.yaml 

在这里插入图片描述

7、查看secret资源

[root@master01 ~]#kubectl get secret

在这里插入图片描述

九、创建资源从Harbor中下载镜像

1、切换到/opt目录进行配置

[root@master01]# cd /opt/demo
[root@master01 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 资源名称
      containers:
      - name: my-tomcat
        image: 192.168.10.135/my-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
#保存退出

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

[root@node01 ~]# docker rmi tomcat:8.0.52 
[root@node01 ~]# docker rmi 192.168.10.135/my-project/tomcat:v1

在这里插入图片描述

在这里插入图片描述

3、创建tomcat资源

[root@master01 demo]#kubectl create -f tomcat-deployment.yaml 
deployment.apps/my-tomcat created
service/my-tomcat created
[root@master01 demo]#kubectl get pods

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

[root@master01 demo]#kubectl describe pod my-tomcat-6f4dfdcb6-c4t98 

在这里插入图片描述

4、查看Harbor网页,可以看到下载次数

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

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

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

相关文章

信息收集-ip地址

1、cdn网络 CDN(Content Delivery Network)网络是一种分布式网络架构。它通过将内容(如网页、图片、视频等)缓存到公共的服务器上,以便更快速、更可靠地交付给用户所在的位置。CDN解决了Internet中的一些固有瓶颈和性…

【ROS】Ubuntu22.04安装ROS2(Humble Hawksbill)

0、版本说明 Ubuntu22.04对应的ROS2的版本为Humble Hawksbill(ros-humble) 如果不是在Ubuntu22.04中安装ROS,请参考下面Ubuntu和ROS的版本对应关系 1、更新apt包列表 $ sudo apt update2、设置编码 将ubuntu环境语言编码设置为en_US en_…

appium自动化测试实战详解及框架搭建

目录 一、Appium的介绍 二、Appium实战(以真机为例) 一、Appium的介绍 Appium是一款开源的自动化测试工具,其支持iOS和安卓平台上的原生的,基于移动浏览器的,混合的应用。 1、 使用appium进行自动化测试的好…

【C++】容器篇(一)—— vector 的基本概述以及模拟实现

前言: 在之前,我们已经对 string类进行了基本的概述,并且手动的实现了string类中常用的接口函数。本期,我将带领大家学习的是STL库中的一个容器 -- vector 的学习。相比于之前的string类,本期的 vector 相对来说实现起…

CSAPP复习(三)

CH1: 但是如果问什么时候 得到二进制文件 那就是汇编的时候 CH2 sizeof 的返回值是一个无符号数 然后i-D自动默认是一个无符号数 无符号数不能出现负数 所以出现了一个循环 所以永远不可能循环完成。 CH7链接 什么是静态库?使用静态库的优点是什么? …

在windows内使用virtualbox搭建安卓x86--以及所遇到的问题解决--3

一.ARM兼容包的植入 1.下载arm包: 2.安装arm兼容包 3.验证arm兼容包是否移植成功 二.触屏无效 三.玩游戏卡顿严重 一.ARM兼容包的植入 在AndroidX86系统内大部分应用(国内)并没有适配X86架构,安装基于arm架构的应用会出现报错的情况,如遇到此问题可…

【Linux网络】Linux防火墙

Linux防火墙 一 、Linux包过滤防火墙概述1.1iptables概述1.2netfitel与iptables的关系1.3四表五链1.3.1 四表1.3.2五链1.3.3数据包到达防火墙时,规则表之间的优先顺序**1.3.4规则链之间的匹配顺序** 二、iptables的安装与配置方法2.1iptables的安装2.2iptables的配置…

MySQL数据库基础3-基础查询

文章目录 基础查询(单表)替换查询结果排序筛选分页结果更新表删除数据截断(清空)表聚合函数分组查询 基础查询(单表) 创建表、单行插入、多行插入就不重复介绍了。 替换 当我们的程序每天都会产生大量的数据,而这些数据都是前一天或者再之前的数据更新产生&#…

0基础学习VR全景 平台篇第26章:热点功能-3D物体/空间模型

大家好,欢迎观看蛙色VR官方系列——后台使用课程! 本期为大家带来蛙色VR平台,热点功能—3D物体/空间模型操作。 热点,指在全景作品中添加各种类型图标的按钮,引导用户通过按钮产生更多的交互,增加用户的多…

opencv_c++学习(十四)

一、图像直方图的统计与绘制 如果直方图各个数字之间分布比较均衡,则其对比度就相对较低,反之亦然。同时也可以通过直方图可以大致了解图像的亮暗等。 calcHist(const Mat * images, int nimages, const int * channels, lnputArray mask, OutputArray…

【Python Xpath】零基础也能轻松掌握的学习路线与参考资料

Python是一种面向对象的编程语言。Xpath是一种在XML文档中定位信息的方法。XPath是一种语言,可以用于xml和html文档中选择和查找节点。在Python中,我们可以使用xpath来解析html页面,从而提取所需的数据。 Python xpath学习路线: …

C++中的继承、以及赋值兼容转换。

一、继承的概念及定义 继承可以使代码复用,允许在保持原有类特性的基础上进行扩展。 举个例子:就好比我现在要封装老师、学生等这些人的属性和方法,但是这些人都有重复的属性和方法,比如name、age、sex等等,那么我可…

let、const、var的区别,解构赋值,箭头函数

let、const、var的区别 使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升。使用const声明的是常量,在后面出现的代码块中,不能在修改改常量的值。 var let const 函数级作用域 块级…

Go语言核心编程-运算符和进制转换

第 4 章 运算符 4.1 运算符的基本介绍 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等 算术运算符赋值运算符比较运算符/关系运算符逻辑运算符位运算符其它运算符 4.2 算术运算符…

体验联网版 ChatGPT:优点和缺点同样明显,还藏着无限可能

ChatGPT 有点像古希腊的阿喀琉斯:它很强大,却有个致命的弱点——无法联网,这注定了它只能是一个停留在 2021 年的超人。 但很快,我们将等到一个「鱼和熊掌兼得」的时刻。 通过插件集的 Web browsing 功能,ChatGPT 就…

C++每日一练:贝博士的机械零件(补全题目)奇偶排序(巧妙快排)寻因找祖

文章目录 前言一、贝博士的机械零件1、题目2、解法 二、奇偶排序(巧用快排)三、寻因找祖 前言 今天的题目中寻因找祖最难了,明显的数学题,笔者这数学文盲水平肯定不会,用暴力搞了一波,只有50%。就去考察学…

(二十六)ATP应用测试平台——将一个微服务打包成含skywalking链路追踪的docker镜像

前言 延续前面的章节内容,本节内容我们以ht-atp的springboot应用为例,封装一个包含skywalking链路追踪的微服务docker应用。完成服务调用的链路追踪监控。skywalking采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但…

详解c++STL—容器set/multiset

目录 1、set基本概念 1.1、功能 1.2、本质: 1.3、set和multiset区别 2、set构造和赋值 2.1、功能描述 2.1、构造 2.3、赋值 2.4、示例 3、set大小和交换 3.1、功能描述 3.2、函数原型 3.2、示例 4、set插入和删除 4.1、功能描述 4.2、函数原型 4.3…

YOLO V3 SPP ultralytics 第一节:VOC 的标注文件(xml)转YOLO标注格式(txt)以及如何自定义YOLO数据样本

目录 1. 前言 2. 关于PASCAL VOC数据集xml --> YOLO txt格式 2.1 路径设定 2.2 读取xml 文件的函数 2.3 xml ---> yolo txt 2.4 yolo 的label文件 2.6 结果 2.7 代码 3. 自定义 YOLO 数据集 3.1 预备工作 3.2 打开labelimg 3.3 绘制 代码参考是b站的大佬&…

CNNs: ZFNet之CNN的可视化网络介绍

CNNs: ZFNet之CNN的可视化网络介绍 导言Deconvnet1. Unpooling2. ReLU3. Transpose conv AlexNet网络修改AlexNet Deconv网络介绍特征可视化 导言 上一个内容,我们主要学习了AlexNet网络的实现、超参数对网络结果的影响以及网络中涉及到一些其他的知识点&#xff0…