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

news2025/2/27 10:28:48

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-test
  labels:
    app: nginx-deploy
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2         #副本数2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: my-nginx
        image: xianchao/nginx:v1
        imagePullPolicy: IfNotPresent
        ports:
        - 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+OMITTED
    server: <https://192.168.8.160:6443> #集群控制节点server地址
  name: kubernetes
contexts: #当前环境
- context:
    cluster: kubernetes      #有一个集群kubernetes
    user: kubernetes-admin   #系统用户
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes #用kubernetes-admin访问kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin  #k8s的系统用户,可以访问api-server
  user:
    client-certificate-data: DATA+OMITTED
    client-key-data: DATA+OMITTED
pod创建过程
1.kubectl apply -f nginx-deploy.yaml
找config文件,基于config文件访问指定的集群,找到api-server,把信息给api-server

2.api-server把kubectl的参数或者yaml的参数,写入etcd
api-server把pod信息给scheduler调度器,调度器进行调度,并且把调度节点的信息写到etcd

3.api-server调用kubelet,kubelet调用容器运行时docker/container

4.容器运行时把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: tomcat
	name: 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: 8080
			    hostPort: #映射到物理机的端口
			    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.yaml

apiVersion: v1
KIND: ResourceQuota
metadata:
  name: cpu-quota
  namespace: 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   #需要至少2G

kubectl 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名为test
  namespace: ws         #指定该pod位于ws的ns
spec:
  containers:
  - name: ws-tomcat2
    ports:
    - containerPort: 8080
    image: tomcat
    imagePullPolicy: IfNotPresent
    resources:
      requests:        #指所制定的pod必须要有如下的配置,才能成功调度
        memory: 100Mi  #至少要有100M内存
        cpu: "500m"    #500毫核即0.5核,至少要有0.5核CPU
      limits:          #最多能占用的资源
        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.coloradmin.cn/o/1382733.html

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

相关文章

【Python学习】Python学习17- File(文件) 方法

目录 [TOC](【Python学习】Python学习17- File(文件) 方法) 文章所属专区 Python学习 前言 本章节主要说明Python文件操作的具体说明 open()方法 Python open() 方法用于打开一个文件&#xff0c;并返回文件对象&#xff0c;在对文件进行处理过程都需要使用到这个函数&#…

C++ QtCreator启动执行报错的各类问题解决++持续更新!!

1.QTCreator启动报错"由于找不到 python310.dll" 在QtCreator加载自动缩进的LLVM插件后, 再次打开Qt时, 会报错找不到python310.dll 解决方法&#xff1a;下载python310.dll,随后复制到目录&#xff1a;C:\Program Files\LLVM\bin 即可解决该问题。下载路径附件如…

TensorRT(C++)基础代码解析

TensorRT(C)基础代码解析 文章目录 TensorRT(C)基础代码解析前言一、TensorRT工作流程二、C API2.1 构建阶段2.1.1 创建builder2.1.2 创建网络定义2.1.3 定义网络结构2.1.4 定义网络输入输出2.1.5 配置参数2.1.6 生成Engine2.1.7 保存为模型文件2.1.8 释放资源 2.2 运行期2.2.1…

C#--核心

CSharp核心知识点学习 学习内容有&#xff1a; 绪论&#xff1a;面向对象的概念 Lesson1&#xff1a;类和对象 练习&#xff1a; Lesson2&#xff1a;封装--成员变量和访问修饰符 练习: Lesson3:封装--成员方法 Lesson4&#xff1a;封装--构造函数和析构函数 知识点四 垃圾回收…

Web前端-移动web开发——flex布局

移动web开发——flex布局 1.0传统布局和flex布局对比 1.1传统布局 兼容性好布局繁琐局限性&#xff0c;不能再移动端很好的布局 1.2 flex布局 操作方便&#xff0c;布局极其简单&#xff0c;移动端使用比较广泛pc端浏览器支持情况比较差IE11或更低版本不支持flex或仅支持部…

SouthernBiotech抗荧光淬灭封片剂

荧光淬灭又称荧光熄灭或萃灭&#xff0c;是指导致特定物质的荧光强度和寿命减少的所有现象。引起荧光淬灭的物质称为荧光淬灭剂。SouthernBiotech专门开发的Fluoromount-G系列荧光封片剂是以甘油为基础&#xff0c;加入抗荧光淬灭剂&#xff0c;可明显降低荧光淬灭现象&#xf…

使用setdefault撰写文本索引脚本(出自Fluent Python案例)

背景介绍 由于我们主要介绍撰写脚本的方法&#xff0c;所以用一个简单的文本例子进行分析 a[(19,18),(20,53)] Although[(11,1),(16,1),(18,1)] ambiguity[(14,16)] 以上内容可以保存在一个txt文件中&#xff0c;任务是统计文件中每一个词&#xff08;包括字母&#xff0c;数…

AI编程可视化Java项目拆解第一弹,解析本地Java项目

之前分享过一篇使用 AI 可视化 Java 项目的文章&#xff0c;同步在 AI 破局星球、知乎、掘金等地方都分享了。 原文在这里AI 编程&#xff1a;可视化 Java 项目 有很多人感兴趣&#xff0c;我打算写一个系列文章拆解这个项目&#xff0c;大家多多点赞支持~ 今天分享的是第一…

C语言之从浅入深一步一步全方位理解指针【附笔试题】

文章目录 前言从浅入深理解指针《第一阶段》一、内存和地址1.1 内存1.2 究竟该如何理解编址 二、指针变量和地址2.1 取地址操作符&#xff08;&&#xff09; 三、指针变量和解引用操作符&#xff08;*&#xff09;3.1 指针变量3.2 如何拆解指针类型3.3 解引用操作符 四、指…

OpenCV-Python的版本介绍及区别

OpenCV-Python版本介绍 OpenCV-Python有多个版本&#xff0c;每个版本都有其特定的功能和改进。以下是一些常见OpenCV-Python版本及其介绍和区别&#xff1a; OpenCV-Python 2.x版本 这是OpenCV-Python的旧版本&#xff0c;支持Python 2.x。它包含了许多传统的计算机视觉功能&…

rpc的正确打开方式|读懂Go原生net/rpc包

前言 大家好&#xff0c;这里是白泽&#xff0c;之前最近在阅读字节跳动开源RPC框架Kitex的源码&#xff0c;分析了如何借助命令行&#xff0c;由一个IDL文件&#xff0c;生成client和server的脚手架代码&#xff0c;也分析了Kitex的日志组件klog。当然Kitex还有许多其他组件&…

sqlilabs第五十三五十四关

Less-51(GET - GET - Error based - ORDER BY CLAUSE-String- Stacked injection) 手工注入 单引号闭合&#xff0c;和上一关一样堆叠注入解决 自动注入 和上一关一样 Less-52(GET - challenge - Union- 10 queries allowed -Variation 1) 手工注入 这一关开始后面的可以看…

Linux 内核如何根据设备树文件来匹配内核

一. 简介 上一篇文章学习了 Linux内核如何确定是否支持此设备&#xff0c;如果支持&#xff0c;设备就会启动 Linux 内核。 文章地址如下&#xff1a; 设备树根节点下的compatile属性的作用-CSDN博客 本文继上面文章的学习。这里简单看一下&#xff0c; Linux 内核是如何根…

学习资料: uni-app HBuilderX

编译器&#xff1a;HBuilderX HBuilderX-高效极客技巧 uni-app介绍&#xff1a;uni-app官网 uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;开发者编写一套代码&#xff0c;可发布到iOS、Android、Web&#xff08;响应式&#xff09;、以及各种小程序&#…

2023.1.13 关于在 Spring 中操作 Redis 服务器

目录 引言 前置工作 前置知识 实例演示 String 类型 List 类型 Set 类型 Hash 类型 ZSet 类型 引言 进行下述操作的前提是 你的云服务器已经配置好了 ssh 端口转发即已经将云服务器的 Redis 端口映射到本地主机 注意&#xff1a; 此处我们配置的端口号为 8888 可点击下…

C++力扣题目617--合并二叉树

给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新二叉树。合并的规则是&#xff1a;如果两个节点重叠&#…

【STM32】FLASH闪存

1 FLASH闪存简介 本节所指STM32内部闪存&#xff0c;即下载程序的时候&#xff0c;程序存储的地方。&#xff08;非易失性&#xff09; STM32F1系列的FLASH包含程序存储器、系统存储器&#xff08;bootloader&#xff0c;不允许修改&#xff09;和选项字节三个部分&#xff0…

JavaScript学习笔记——变量、作用域、var、const和let

JavaScript学习笔记——变量、作用域、var、const和let 学习链接&#xff08;原链接&#xff09;变量变量声明的三种方式 作用域作用域介绍作用域分类全局作用域局部作用域&#xff08;函数作用域&#xff09;块级作用域块级作用域和局部(函数)作用域区别 varvar的作用域(全局函…

【elastic search】详解elastic search集群

目录 1.与集群有关的一些概念 2.集群搭建 3.集群搭建 4.kibana链接集群 5.选举流程 6.请求流程 7.master的作用 1.与集群有关的一些概念 数据分片&#xff1a; 数据分片&#xff08;shard&#xff09;&#xff0c;单台服务器的存储容量是有限的&#xff0c;把一份数据…

LINUX基础培训七之进程管理

前言、本章学习目标 了解LINUX中进程和程序掌握进程管理的作用和方法熟悉进程调度优先级了解LINUX信号 一、了解LINUX进程和程序 进程是正在执行的一个程序或命令&#xff0c;每个进程都是一个运行的实体&#xff0c;都有自己的地址空间&#xff0c;并占用一定的系统资源。 …