K8s(一)Pod资源——Pod介绍、创建Pod、Pod简单资源配额

目录

Pod概述

pod网络

pod存储

pod和容器对比

创建pod的方式

pod运行方式分类

Pod的创建

Pod的创建过程

通过kubectl run来创建pod

通过yaml文件创建,yaml文件简单写法

Pod简单操作

Pod的标签labels

Pod的资源配额resource

测试


Pod概述

Kubernetes

Pod | Kubernetes

Pod是Kubernetes中的最小调度单元,k8s都是以pod的方式运行服务的

一个pod可以指定镜像,封装一个或多个容器

pod需要调度到工作节点运行,节点的选择由scheduler调度器实现

pod定义时,会定义init容器、应用容器与业务容器

init用以对主容器做初始化操作,查看服务是否正常

pod网络

kubectl get pods -n kube-system -owide #查看kube-system命名空间中的pod

部分控制节点组件是和管理节点共享ip地址,除此之外的pod都是唯一地址,通过calico网络插件分配

启动Pod时,会先启动⼀个pause 的容器,然后将后续的所有容器都link到这个pause 的容器,以实网络络共享。

同一个pod内的容器会在共享环境中运行,共享同一个IP和端口

pod存储

通过挂在存储卷,可以让所有容器访问共享卷,允许共享数据

pod和容器对比

pod是容器组成的集合,可以作为一个或多个容器的载体,以pod为单位进行调度

创建pod的方式

1.使用yaml文件来创建

2.使用kubectl run创建pod

pod运行方式分类

1、自主式pod:直接定义一个pod资源

kubectl apply -f pod-tomcat.yaml

kubectl get pods -o wide

kubectl delete pods tomcat-test

2、控制器管理的Pod

常见的管理Pod的控制器:Replicaset、Deployment、Job、CronJob、Daemonset、Statefulset。 控制器管理的Pod可以确保Pod始终维持在指定的副本数运行。可以防止误删除

以下是一个举例的yaml文件

apiVersion: apps/v1
kind: Deployment    #使用deployment资源控制器
metadata:name: nginx-testlabels:app: nginx-deploy
spec:selector:matchLabels:app: nginxreplicas: 2         #副本数2template:metadata:labels:app: nginxspec:containers:- name: my-nginximage: xianchao/nginx:v1imagePullPolicy: IfNotPresentports:- containerPort: 80

Pod的创建

Pod的创建过程

kubectl会寻找环境变量kubeconfig
如果没有这个环境变量,会找/root/.kube/config文件
可以通过kubectl config view查看/root/.kube/config内容
kubectl config view
apiVersion: v1
clusters: #集群
- cluster: certificate-authority-data: DATA+OMITTEDserver: <https://192.168.8.160:6443> #集群控制节点server地址name: kubernetes
contexts: #当前环境
- context:cluster: kubernetes      #有一个集群kubernetesuser: kubernetes-admin   #系统用户name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes #用kubernetes-admin访问kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin  #k8s的系统用户,可以访问api-serveruser:client-certificate-data: DATA+OMITTEDclient-key-data: DATA+OMITTED
pod创建过程
1.kubectl apply -f nginx-deploy.yaml
找config文件,基于config文件访问指定的集群,找到api-server,把信息给api-server2.api-server把kubectl的参数或者yaml的参数,写入etcd
api-server把pod信息给scheduler调度器,调度器进行调度,并且把调度节点的信息写到etcd3.api-server调用kubelet,kubelet调用容器运行时docker/container4.容器运行时把pod信息返回给api-server,写入etcd

通过kubectl run来创建pod

kubectl run --help
Usage:kubectl run NAME --image=image [--env="key=value"] [--port=port]
[--dry-run=server|client] [--overrides=inline-json] [--command] -- [COMMAND]
[args...] [options]
kubectl run tomcat --image=ws/tomcat --image-pull-policy='IfNotPresent' \\
--port=8080

通过yaml文件创建,yaml文件简单写法

#yaml的帮助命令
kubectl explain pod
#查看metadata下的字段可写的选项
kubectl explain pod.metadata
#底下还有网址,可以找到更多信息yaml的格式:每个字段都比上级字段多空两格,加短横-可以表示以下同级#first-pod
vim first-pod
apiVersion: v1  #api版本-v1
kind: Pod       #类型为Pod,必须大写
metadata:       #类型是object,对象类型,说明底下还有另外字段annotations:  #是注释,用以说明,没有实质意义,<map[string]string> 形式为键值对且都是字符串worker: "ws"labels:       #标签,字符串键值对app: tomcatname: ws-tomcat #pod的名字,最好带有功能描述namespace: default #ns,命名空间归属,不同环境的资源放入不同的ns内,kubectl get ns
spec: #对象类型,有另外字段activeDeadlineSeconds: #pod存活的最长时间段,可选containers: #kubectl explain pod.spec.containers,带有required就是必选- name: tomcat #容器名image: docker.io/library/tomcat #镜像名称imagePullPolicy: IfNotPresent #镜像拉取策略
#Always只在公网上拉取
#IfNotPresent先本地,再公网
#Never只用本地ports:  #kubectl explain pod.spec.containers.ports- containerPort: 8080hostPort: #映射到物理机的端口hostIP: #映射到物理机的IP
#应用
kubectl apply -f pod-first.yaml
#pod/ws-tomcat created
kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
nginx-test-5b48846ff4-7n4f6   1/1     Running   0          122m
nginx-test-5b48846ff4-mq5tm   1/1     Running   0          122m
ws-tomcat                     1/1     Running   0          50s

Pod简单操作

#进入pod
kubectl exec -it ws-tomcat -- /bin/bash
#进入pod中的指定容器,-c指定容器
kubectl exec -it ws-tomcat -c tomcat -- /bin/bash
#看所有pod
kubectl get pod
#看所有pod带IP
kubectl get pod -owide
#在k8s集群内都可以访问pod,同网段的非k8s集群主机就不行
master1 2 node1 2都可以访问pod
#指定podIP与端口就能访问到容器的指定端口
curl 10.10.234.68:8080
#指定pod的label查找
kubectl get pod -l app=tomcat
#查看pod日志
kubectl logs ws-tomcat
#查看pod详细信息
kubectl describe pods  ws-tomcat
#删除pod
kubectl delete pods ws-tomcat
kubectl delete -f pod-first.yaml
#pod可以通过kubectl apply -f进行pod的动态更新
kubectl apply -f pod-first.yaml
#展示默认命名空间下pod的标签
kubectl get pods --show-labels

Pod的标签labels

        标签label是一个键值对,能够通过标判断对象的特点,可以一开始创建pod的时候打标签,也可以创建之后打,大部分资源都可以打标签

#通过也可以yaml文件创建labels
#命令行打标签
kubectl label pods ws-tomcat user=ws
#查看默认命名空间下的pod的标签
kubectl get pods --show-labels
#指定pod查看标签
kubectl get pods ws --show-labels
#查找key是user的pod
kubectl get pods -l user
NAME        READY   STATUS    RESTARTS   AGE
ws-tomcat   1/1     Running   0          5m
#查找key是user,值是ws的pod
kubectl get pods -l user=ws
#查找key是userd的pod,显示标签
kubectl get pods -L user
NAME                          READY   STATUS    RESTARTS      AGE     USER
nginx-test-5b48846ff4-7n4f6   1/1     Running   1 (68m ago)   28h
nginx-test-5b48846ff4-mq5tm   1/1     Running   1 (68m ago)   28h
tomcat-test                   1/1     Running   0             7m3s
ws-tomcat                     1/1     Running   0             6m49s   ws
#查找所有ns下所有pod的标签
kubectl get pods --all-namespaces --show-labels

Pod的资源配额resource

        命名空间(Namespace)是Kubernetes中用于隔离和组织资源的一种机制。它可以将集群中的资源划分为逻辑上独立的单元,使不同的团队、项目或应用程序可以在同一个集群中共享底层基础设施,同时保持彼此之间的隔离性。

        通过使用命名空间,将不同的资源(如Pod、Service、Deployment等)组织在一起,并为它们提供唯一的名称。这样可以避免资源名称的冲突,并提供更好的资源管理和权限控制。

        下面的内容将以pod为例演示ns资源配额的方式

        配额指令与yaml文档写法通过kubectl explain的多级帮助目录都可以找到,也可以在k8s官网对应界面找到

#创建命名空间,名为ws
kubectl create ns ws
#查看命名空间
kubectl get ns
NAME              STATUS   AGE
default           Active   18h
kube-node-lease   Active   18h
kube-public       Active   18h
kube-system       Active   18h
ws                Active   7s#创建命名空间资源配额,可以限制pod资源的总和
#帮助文件
kubectl explain resourcequota
kubectl explain resourcequota.metadata
kubectl explain resourcequota.spec
#创建限制yaml文件
vim ns-quota.yamlapiVersion: v1
KIND: ResourceQuota
metadata:name: cpu-quotanamespace: ws    #指定要进行限制的ns
spec: #<https://kubernetes.io/docs/concepts/policy/resource-quotas/>hard:limits.cpu: "4"        #最多用4核limits.memory: 4Gi     #最多用4G requests.cpu: "2"      #需要至少2核requests.memory: 2Gi   #需要至少2Gkubectl apply -f ns-quota.yaml
#查看资源配额
kubectl get resourcequota -n ws
NAME        AGE   REQUEST             LIMIT
cpu-quota   75s   requests.cpu: 0/2   limits.cpu: 0/4
官网Resource Quotas | Kubernetes

 

测试

创建一个带有resource的pod

vim test.yaml
apiVersion: v1
kind: Pod
metadata:name: test            #指定pod名为testnamespace: ws         #指定该pod位于ws的ns
spec:containers:- name: ws-tomcat2ports:- containerPort: 8080image: tomcatimagePullPolicy: IfNotPresentresources:requests:        #指所制定的pod必须要有如下的配置,才能成功调度memory: 100Mi  #至少要有100M内存cpu: "500m"    #500毫核即0.5核,至少要有0.5核CPUlimits:          #最多能占用的资源memory: 2Gi    #最多占用2G内存cpu: "2"       #最多占用2核CPU
kubectl apply -f test.yaml
kubectl get resourcequota -n ws #状态正常
NAME        AGE   REQUEST                                            LIMIT
cpu-quota   33m   requests.cpu: 500m/2, requests.memory: 100Mi/2Gi   limits.cpu: 2/4, limits.memory: 2Gi/4Gi修改文件
修改limits:memory: 6Gi 
kubectl apply -f test.yaml
#报错

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

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

相关文章

RHCE9学习指南 第21章 用bash写脚本

grep的用法是&#xff1a; grep 关键字 file 意思是从file中过滤出含有关键字的行。 例如&#xff0c;grep root /var/log/messages&#xff0c;意思是从/var/log/messages中过滤出含有root的行。这里很明确的是过滤含有“root”的行。 如果我要是想在/var/log/messages中过滤…

基于CPLEX的IEEE-30节点机组组合优化(MATLAB实现)

1.机组组合优化数学模型 1.1 问题分析 机组组合问题要求基于已知的系统数据&#xff0c;求解计划时间内机组决策变量的最优组合&#xff0c;使得系统总成本达到最小。该问题的决策变量由两类&#xff0c;一类是各时段机组的启停状态&#xff0c;为整数变量&#xff0c;0表示关…

android 自定义八边形进度条

自定义八边形动画效果图如下 绘制步骤&#xff1a; 1.先绘制橙色底部八边形实心 2.黑色画笔绘制第二层&#xff0c;让最外层显示一条线条宽度即可 3.再用黄色画笔绘制黄色部分 4.使用渐变画笔根据当前进度绘制覆盖黄色部分 5.使用黑色画笔根据当前进度绘制刻度条 6.黑色画笔绘制…

自动驾驶预测-决策-规划-控制学习(5):图像分割与语义分割入门

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 论文题目&#xff1a;Evolution of Image Segmentation using Deep Convolutional Neural Network: A Survey前言&#xff1a;图像分割与语义分割一、图像分割是什么…

重新认识Word——页眉页脚

重新认识Word——页眉页脚 节设置页脚第X页&#xff0c;共Y页 奇偶页不同页眉包含章节号清除页眉横线 我们之前已经全面的构建了我们的文章&#xff0c;现在我们来了解一下&#xff0c;我们毕业论文的页眉&#xff08;页面信息&#xff09;页脚&#xff08;页码&#xff09;的设…

Clickhouse: One table to rule them all!

前面几篇笔记我们讨论了存储海量行情数据的个人技术方案。它们之所以被称之为个人方案&#xff0c;并不是因为性能弱&#xff0c;而是指在这些方案中&#xff0c;数据都存储在本地&#xff0c;也只适合单机查询。 数据源很贵 – 在这个冬天&#xff0c;我们已经听说&#xff0…

JMeter请求参数Parameters,带中文或特殊字符(+/=)时,例如登录密码或者token等,需要勾选编码

以前的登录接口密码参数不包含特殊字符&#xff0c;为了安全&#xff0c;产品今天修改了需求&#xff0c;密码必须由数字&#xff0c;字母和特殊字符构成&#xff0c;之前利用JMeter接口编写的脚本报错了&#xff0c;调整了一下&#xff0c;里面踩了一点坑&#xff0c;记录下来…

给科研人的 ML 开源发布工具包

什么是开源发布工具包&#xff1f; 恭喜你的论文成功发表&#xff0c;这是一个巨大的成就&#xff01;你的研究成果将为学界做出贡献。 其实除了发表论文之外&#xff0c;你还可以通过发布研究的其他部分&#xff0c;如代码、数据集、模型等&#xff0c;来增加研究的可见度和采…

c语言嵌套循环

c语言嵌套循环 c语言嵌套循环 c语言嵌套循环一、c语言嵌套循环格式二、嵌套循环案例九九惩罚口诀 一、c语言嵌套循环格式 for(初始值&#xff1b;表达式&#xff1b;表达式) {for&#xff08;初始值&#xff1b;表达式&#xff1b;表达式&#xff09;{代码} }int main() {for (…

【java八股文】之计算机网络系列篇

1、TCP/IP和UDP模型 TCP/IP分层&#xff08;4层&#xff09;&#xff1a;应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层 网络的七层架构 &#xff08;7层&#xff09;&#xff1a;应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff…

Spring事务的四大特性+事务的传播机制+隔离机制

Spring事务的四大特性 ① 原子性 atomicity 原子性是指事务是一个不可分割的工作单位&#xff0c;事务中的操作要么都发生&#xff0c;要么都不发生。 事务是一个原子操作, 由一系列动作组成。 组成一个事务的多个数据库操作是一个不可分割的原子单元&#xff0c;只有所有的…

无需任何三方库,在 Next.js 项目在线预览 PDF 文件

前言&#xff1a; 之前在使用Vue和其它框架的时候&#xff0c;预览 PDF 都是使用的 PDFObject 这个库&#xff0c;步骤是&#xff1a;下载依赖&#xff0c;然后手动封装一个 PDF 预览组件&#xff0c;这个组件接收本地或在线的pdf地址&#xff0c;然后在页面中使用组件的车时候…

【python】爬取百度热搜排行榜Top50+可视化【附源码】【送数据分析书籍】

英杰社区https://bbs.csdn.net/topics/617804998 一、导入必要的模块&#xff1a; 这篇博客将介绍如何使用Python编写一个爬虫程序&#xff0c;从斗鱼直播网站上获取图片信息并保存到本地。我们将使用requests模块发送HTTP请求和接收响应&#xff0c;以及os模块处理文件和目录操…

SpringBoot教程(七) | SpringBoot解决跨域问题

SpringBoot教程(七) | SpringBoot解决跨域问题 上篇文章我们介绍了SpringBoot的拦截器的写法&#xff0c;其中有一个比较重要的步骤&#xff0c;就是把我们写好的拦截器注册到Spring的一个配置类中&#xff0c;这个类是实现了WebMvcConfigurer 接口&#xff0c;这个类很重要&a…

如何十分钟快速看懂一篇NLP论文?

已经2024年了&#xff0c;该出现一个写论文解读AI Agent了。 大家肯定也在经常刷论文吧。 但真正尝试过用GPT去刷论文、写论文解读的小伙伴&#xff0c;一定深有体验——费劲。其他agents也没有能搞定的&#xff0c;今天我发现了一个超级厉害的写论文解读的agent &#xff0c…

flutter动态渲染从服务器请求的列表数据

比如我们从服务器请求到的列表数据&#xff0c;需要渲染到页面上&#xff0c;但是在flutter里面还是需要使用他们的ListView或者GridView或者别的组件才可以&#xff0c;或者有children这种属性的组件上使用。 比如我们在一个有状态的组件Lists里面&#xff0c;在initState的时…

导入失败,报错:“too many filtered rows xxx, “ErrorURL“:“

一、问题&#xff1a; 注&#xff1a;前面能正常写入&#xff0c;突然就报错&#xff0c;导入失败&#xff0c;报错&#xff1a;“too many filtered rows xxx, "ErrorURL":" {"TxnId":769494,"Label":"datax_doris_writer_bf176078-…

【大数据】Flink 详解(八):SQL 篇 Ⅰ

《Flink 详解》系列&#xff08;已完结&#xff09;&#xff0c;共包含以下 10 10 10 篇文章&#xff1a; 【大数据】Flink 详解&#xff08;一&#xff09;&#xff1a;基础篇【大数据】Flink 详解&#xff08;二&#xff09;&#xff1a;核心篇 Ⅰ【大数据】Flink 详解&…

C#/WPF 设置和启动Windows屏保程序

前言 我们平时电脑启动的屏保程序其本质也是应用程序&#xff0c;只是后缀名为.scr。所以我们只需要把应用程序后缀改为.scr&#xff0c;然后右键选择安装即可启动我们自己的屏保程序。 屏保注册表参数 设置电脑屏保参数&#xff0c;在个性化设置>锁屏界面>屏幕保护程序设…

SCA|可作为有效改进策略的算法——正余弦优化算法(Matlab/Python)

正余弦优化算法(Sine cosine algorithm&#xff0c;SCA)是由Mirjalili [1]在2016年提出&#xff0c;目前WOS上引用量2K&#xff0c;谷歌学术上4K。 不得不说Seyedali Mirjalili真是位大神级的人物(下图是Mirjalili开发的部分算法) SCA的核心思想是利用正、余弦函数波动的周期性…