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-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
#报错

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式学习-网络编程-Day4

思维导图 广播通信模型 #include <myhead.h> int main(int argc, char const *argv[]) {int rfd socket(AF_INET,SOCK_DGRAM,0);if(rfd-1){perror("socket error");return -1;}//填充地址信息结构体struct sockaddr_in rin;rin.sin_familyAF_INET;rin.sin_por…

[ceph] ceph应用

一、资源池 Pool 管理 #创建一个 Pool 资源池&#xff0c;其名字为 mypool&#xff0c;PGs 数量设置为 64&#xff0c;设置 PGs 的同时还需要设置 PGP&#xff08;通常PGs和PGP的值是相同的&#xff09;&#xff1a; PG (Placement Group)&#xff0c;pg 是一个虚拟的概念&…

基于变换域的模版匹配

模板匹配原理 图像的空间域与其他域之间的变换&#xff0c;如傅里叶变换&#xff0c;小波变换&#xff0c;轮廓波变换&#xff0c;剪切波变换等&#xff0c;实际上是图像在其他坐标领域中的表现。在空间域中&#xff0c;图像的信息是像素值和坐标位置&#xff1b;在其他域中&a…

交通流量预测HSTGCNT:Hierarchical Spatio–Temporal Graph Convolutional

Hierarchical Spatio–Temporal Graph Convolutional Networks and Transformer Network for Traffic Flow Forecasting 交通流预测的层次时空图卷积网络和Transformer网络 Abstract 图卷积网络&#xff08;GCN&#xff09;具有图形化描述道路网络不规则拓扑结构的能力&#…

【C语言】数据结构——排序三(归并与计数排序)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;1. 归并排序1.1 基本思想1.2 递归实现1.3 非递归实现 2. 计数排序2.1 基本思想2.2 代码实现 导读&#x…

如何用Python进行数据分析(保姆级教程)

有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了&#xff0c;比较复杂。 很多网上的资料都是从语法教起的&#xff0c;花了很多时间还是云里雾里&#xff0c;摸不清方向。今天就给大家来捋一捋思路&#xff01;帮助大家提高学习效率&#xff01; Pyt…

夜神安装Magisk及Delta(狐狸面具)教程

Magisk和LSPosed、EdXPosed下载 Magisk框架下载与安装教程 - 多开鸭Magisk及LSPosed在模拟器安装的详细视频教程 推荐先看一遍教程 视频教程 雷电模拟器版本教程&#xff1a;https://www.bilibili.com/video/BV1kv4y127af 夜神模拟https://www.duokaiya.com/magisk.html 夜神模…

JS遍历对象的方法及特点

1、定义一个对象 let obj {name: Tom,age: 20,sex: 男,};obj.weight 70kg;// obj的原型上定义属性Object.prototype.height 180cm;Object.prototype.major function() {console.log(专业&#xff1a;计算机应用技术);};console.log(obj, obj); 控制台输出的obj中&#xff…

C++make_pair,你真的懂了吗?

其实写这篇文章我还是很忐忑的&#xff0c;因为用C也写了快一年了&#xff0c;平时代码量个人认为还可以&#xff0c;但是最近两天频繁犯错&#xff0c;下面先说说我写的错误吧&#xff01; 我们都知道make_pair返回的是一个pair类型的函数&#xff0c;而pair这个键值对它又是…

go语言(一)----声明常量

package mainimport ("fmt""time" )func main() {fmt.Print("hello go!")time.Sleep(1 * time.Second)}运行后&#xff0c;结果如下&#xff1a; 1、golang表达式中&#xff0c;加&#xff1b;和不加&#xff1b;都可以 2、函数的{和函数名一…

二二复制模式玩法解析

这个模式和小编介绍的其他模式不同&#xff0c;其他的模式都是需要一个推荐来获得返利或者免单的&#xff0c;但是这个模式是不需要的&#xff0c;因为它可以依靠平台来完成闭环。 具体是怎么操作的呢&#xff1f;这个模式很简单&#xff0c;只有两个奖励。一个是直推奖&#x…

C++初阶类与对象(一):学习类与对象、访问限定符、封装、this指针

入门知识已经梳理完毕了&#xff0c;接下来就进入到面型对象的部分学习了 文章目录 1.面向过程和面向对象初步认识2.类的引入3.类的定义3.1类的结构3.2类的两种定义方式3.2.1声明和定义全部放在类体中3.2.2声明和定义分开 3.3成员变量命名规则的建议 4.类的访问限定符及封装4.1…

Java-NIO篇章(2)——Buffer缓冲区详解

Buffer类简介 Buffer类是一个抽象类&#xff0c;对应于Java的主要数据类型&#xff0c;在NIO中有8种缓冲区类&#xff0c;分别如下&#xff1a; ByteBuffer、 CharBuffer、 DoubleBuffer、 FloatBuffer、 IntBuffer、 LongBuffer、 ShortBuffer、MappedByteBuffer。 本文以它的…

【Linux】nc 网络诊断 | 文件传输 命令详解

目录 一、命令简介 二、命令使用 2.1 测试服务器 2.2 端口连通性测试 2.2.1tcp端口连通性测试 2.2.2udp端口连通性测试 2.3 文件及目录的传输 2.3.1 文件传输(TCP端口) 2.3.2 文件传输(UDP端口) 相关文章&#xff1a; 【网络】抓包工具Wireshark下载安装和基本使用教…

EasyConnect客户端 连接时提示,获取服务端配置信息失败

环境&#xff1a; EasyConnect客户端 问题描述&#xff1a; EasyConnect客户端 连接时提示&#xff0c;获取服务端配置信息失败 解决方案&#xff1a; 1.电脑上的防火墙和杀毒软件建议关闭,右键以管理员身份运行EasyConnect客户端使用(临时解决本案例) 2.用修复工具修复测…

maxwell同步全量历史数据

CentOS安装maxwell 在上篇的基础上&#xff0c;我们实现了实时同步mysql数据到kafka。maxwell不仅可以同步实时数据&#xff0c;也可以同步全量历史数据。在这里模拟一下历史数据的场景&#xff0c;创建表结构如下&#xff0c;并写入测试数据。 CREATE TABLE user_det…

手把手教你搭建3D元宇宙场景!

AMRT3D引擎一经上线&#xff0c;便立即引起了3D爱好者们的热烈反响。许多用户纷纷下载了此引擎&#xff0c;并开始认真学习和使用它。 有的用户甚至只用了一天的时间&#xff0c;就已经可以利用AMRT3D引擎搭建出一个3D项目。这充分说明了AMRT3D引擎的强大和高效&#xff0c;也…

代码随想录算法训练营第31天 | 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

目录 理论基础 455.分发饼干 &#x1f4a1;解题思路 &#x1f4bb;实现代码 376. 摆动序列 &#x1f4a1;解题思路 # 情况一&#xff1a;上下坡中有平坡 # 情况二&#xff1a;数组首尾两端 情况三&#xff1a;单调坡度有平坡 &#x1f4bb;实现代码 53. 最大子序…

matlab快速入门(读取数据并绘制散点图和拉格朗日插值

目录 1.读取excel&#xff1a;2.注释快捷键&#xff1a;3.数组/矩阵索引&#xff1a;4.绘制散点图&#xff1a;5.拉格朗日插值&#xff1a;5.1分割出非空和空的x和y两组数据&#xff1a;5.2插值&#xff1a;5.3画图&#xff1a; 小结&#xff1a; 1.读取excel&#xff1a; [nu…

抖店商家怎么维护好与达人关系?2024新版维护达人思路方法

我是王路飞。 当你找到达人给你带货&#xff0c;且积累了一些达人资源之后&#xff0c;就需要维护好与达人的关系了。 毕竟找达人带货玩法的好处&#xff0c;就是长期稳定&#xff0c;他能给你带来持续的收益。 那么抖店商家应该如何维护好与达人的关系呢&#xff1f; 这篇…