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

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.mzph.cn/news/621206.shtml

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

相关文章

Android Studio 如何设置中文

Android Studio 是一个为 Adndroid 平台开发程序的集成开发环境&#xff08;IDE&#xff09;。 如何安装中文插件 在 Jetbrains 家族的插件市场上&#xff0c;是能够搜到语言包插件的&#xff0c;正常情况下安装之后只需要重启即可享受中文界面&#xff0c;可AndroidStudio 中…

Python 列表、元组、字典区别

1.列表、元组和字典都是序列 2.列表字典可以修改和删除序列中的某个元素&#xff0c;而元组就是一个整体&#xff0c;不能修改和删除&#xff0c;一定要修改或删除的话&#xff0c;只能修改和删除整个元组。 3.既然元组不能删除和修改&#xff0c;有什么作用呢&#xff1f; 1…

视频剪辑软件Camtasia2024最新版本快捷键大全

Camtasia Studio是一款专门录制屏幕动作的工具&#xff0c;它能在任何颜色模式下轻松地记录 屏幕动作&#xff0c;包括影像、音效、鼠标移动轨迹、解说声音等等。 今天来给大家介绍一下Camtasia快捷键的相关内容&#xff0c;Camtasia也是一个十分好用的电脑屏幕录制与视频剪辑…

Linux系统——远程访问及控制

目录 一、OpenSSH服务器 1.SSH&#xff08;Secure Shell&#xff09;协议 2.OpenSSH 2.SSH原理 2.1公钥传输原理 2.2加密原理 &#xff08;1&#xff09;对称加密 &#xff08;2&#xff09;非对称加密 2.3远程登录 2.3.1延伸 2.3.2登录用户 3.SSH格式及选项 3.1延…

Pod调度

在默认情况下&#xff0c;一个Pod在哪个Node节点上运行&#xff0c;是由Scheduler组件采用相应的算法计算出来的&#xff0c;这个过程是不受人工控制的。但是在实际使用中&#xff0c;这并不满足的需求&#xff0c;因为很多情况下&#xff0c;我们想控制某些Pod到达某些节点上&…

跟我学c++高级篇——基础类型和POD结构体反射

一、基础类型反射 在前面以枚举体和函数进行了反射的实践&#xff0c;在其中也提到过&#xff0c;其实更应该进行反射的是类&#xff08;结构体&#xff09;。毕竟现在以面向对象编程基本已经普及&#xff0c;类&#xff08;结构体&#xff09;的应用几乎已经是无法避免的。所…

高斯Hack算法

背景 刷leetcode时&#xff0c;碰到一题需要求解n个bit中选择m个bit的所有组合集&#xff0c;我只想到了递归求解&#xff0c;没啥问题&#xff0c;但是在官方题解中看到了牛逼的方法(Gospers Hack)&#xff0c;故记录一下。 4bit中2个1的情况 0011b0101b0110b1001b1010b1100b…

基于协同过滤的零食推荐系统

介绍 协同过滤算法&#xff1a;协同过滤是推荐系统中比较常用的算法之一&#xff0c;其核心思想是寻找用户之间的相似性&#xff0c;通过发现用户之间的共性&#xff0c;向用户推荐可能喜欢的商品或服务。Python Django Vue&#xff1a;Django 是一个基于 Python 的 Web 开发框…

模型的权值平均的原理和Pytorch的实现

一、前言 模型权值平均是一种用于改善深度神经网络泛化性能的技术。通过对训练过程中不同时间步的模型权值进行平均&#xff0c;可以得到更宽的极值点&#xff08;optima&#xff09;并提高模型的泛化能力。 在PyTorch中&#xff0c;官方提供了实现模型权值平均的方法。 这里…

遥感类SCI期刊_一区二区汇总

IEEE Geoscience And Remote Sensing Magazine(Ieee地球科学与遥感杂志) h-index:19 CiteScore:17.80 1区 IEEE Geoscience and Remote Sensing Magazine | IEEE Xplore Remote Sensing Of Environment(环境遥感) h-index:238 CiteScore:24.80 1区 https://www.scienced…

深度学习15—(迁移学习)冻结和解冻神经网络模型的参数

冻结与解冻代码&#xff1a; def freeze_net(net):if not net:returnfor p in net.parameters():p.requires_grad Falsedef unfreeze_net(net):if not net:returnfor p in net.parameters():p.requires_grad True 这段代码定义了两个函数&#xff1a;freeze_net 和 unfree…

webview全屏处理,即插即用

去年双十一有个直播的需求&#xff0c;听起来很简单&#xff0c;技术也都很成熟&#xff0c;但是真的开始实现后&#xff0c;还是有不少坑的&#xff0c;首先第一个uc内核不支持webRTC协议&#xff0c;需要重新开发chrome内核的webview&#xff0c;其次webview全屏处理、悬浮窗…

PYTHON通过跳板机巡检CENTOS的简单实现

实现的细节和引用的文件和以前博客记录的基本一致 https://shaka.blog.csdn.net/article/details/106927633 差别在于,这次是通过跳板机登陆获取的主机信息,只记录差异的部份 1.需要在跳板机相应的路径放置PYTHON的脚本resc.py resc.py这个脚本中有引用的文件(pm.sh,diskpn…

查询速度提升15倍!银联商务基于 Apache Doris 的数据平台升级实践

本文导读&#xff1a; 在长期服务广大规模商户的过程中&#xff0c;银联商务已沉淀了庞大、真实、优质的数据资产数据&#xff0c;这些数据不仅是银联商务开启新增长曲线的基础&#xff0c;更是进一步服务好商户的关键支撑。为更好提供数据服务&#xff0c;银联商务实现了从 H…

EI级 | Matlab实现VMD-TCN-LSTM变分模态分解结合时间卷积长短期记忆神经网络多变量光伏功率时间序列预测

EI级 | Matlab实现VMD-TCN-LSTM变分模态分解结合时间卷积长短期记忆神经网络多变量光伏功率时间序列预测 目录 EI级 | Matlab实现VMD-TCN-LSTM变分模态分解结合时间卷积长短期记忆神经网络多变量光伏功率时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【E…

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)

在讲述之前&#xff0c;各位先自行在网上下载并安装Visual Studio 2022&#xff0c;安装的时候别忘了勾选msvc 概述&#xff1a;GraalVM 本机应用程序&#xff08;Native Image&#xff09;是使用 GraalVM 的一个特性&#xff0c;允许将 Java 应用程序编译成本机二进制文件&am…

AI-数学-高中-5.求函数解析式(4种方法)

原作者视频&#xff1a;函数】3函数解析式求法&#xff08;易&#xff09;_哔哩哔哩_bilibili 1.已知函数类型-待定系数法&#xff1a;先用待定系数法把一次或二次函数一般表达式写出来&#xff1b;再用“要变一起变”左右两边同时替换&#xff0c;计算出一般表达式的常数&…

18、golang时间管理

时间 时间是非常重要的&#xff0c;离开了时间&#xff0c;几乎没有哪个生产环境数据能够有意义。 在Go语言中&#xff0c;时间定义为Time结构体。 package mainimport ("fmt""time" )func main() {var t time.Now()fmt.Println(t) fmt.Printf("%…

【嵌入式-裸机开发】kermit工具安装使用

安装ckermit sudo apt-get install ckermit配置kermit vim ~/.mykermrc set line /dev/ttyS0 set speed 115200 set carrier-watch off set handshake none set flow-control none robust set file type bi…

ZZULIOJ 1121: 电梯

题目描述 在某一高层建筑内只有一部电梯&#xff0c;当你按下一个数时&#xff0c;电梯会运行到那一层。已知电梯每上升一层需6秒&#xff0c;下降一层需4秒&#xff0c;在需要停留的那层停留5秒。现有N个整数组成的一个需求列表&#xff0c;电梯将依次响应&#xff0c;电梯从…