kubectl声明式资源管理命令

一、声明式资源管理介绍:

  1. 适合于对资源的修改操作
  2. 声明式资源管理方法依赖于资源配置清单文件对资源进行管理
  3. 资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)
  4. 对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里

二、声明式相关命令:

 1. 语法格式:

kubectl create/apply/delete -f xxxx.yaml

 2. 查看资源配置清单:

kubectl get deployment nginx -o yaml

 3. 解释资源配置清单:

kubectl explain deployment.metadata

 4. 修改资源配置清单并应用:

  4.1 离线修改:

修改yaml文件,并用 
kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源kubectl get service nginx -o yaml > nginx-svc.yaml
vim nginx-svc.yaml				#修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
kubectl get svc

  4.2 在线修改:

直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)PS:此修改方式不会对yaml文件内容修改

 5. 删除资源配置清单:

陈述式删除:
kubectl delete service nginx声明式删除:
kubectl delete -f nginx-svc.yaml

三、yaml文件详解:

 1. deployment.yaml文件详解:

apiVersion: extensions/v1beta1   #接口版本
kind: Deployment                 #接口类型
metadata:name: cango-demo               #Deployment名称namespace: cango-prd           #命名空间labels:app: cango-demo              #标签
spec:replicas: 3strategy:rollingUpdate:  ##由于replicas为3,则整个升级,pod个数在2-4个之间maxSurge: 1      #滚动升级时会先启动1个podmaxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数template:         metadata:labels:app: cango-demo  #模板名称必填sepc: #定义容器模板,该模板可以包含多个容器containers:                                                                   - name: cango-demo                                                           #镜像名称image: swr.cn-east-2.myhuaweicloud.com/cango-prd/cango-demo:0.0.1-SNAPSHOT #镜像地址command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ]    #启动命令args:                                                                #启动参数- '-storage.local.retention=$(STORAGE_RETENTION)'- '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'- '-config.file=/etc/prometheus/prometheus.yml'- '-alertmanager.url=http://alertmanager:9093/alertmanager'- '-web.external-url=$(EXTERNAL_URL)'#如果command和args均没有写,那么用Docker默认的配置。#如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。#如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args。#如果如果command和args都写了,那么Docker默认的配置被忽略,使用.yaml的配置。imagePullPolicy: IfNotPresent  #如果不存在则拉取livenessProbe:       #表示container是否处于live状态。如果LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉container,并根据RestarPolicy进行进一步的操作。默认情况下LivenessProbe在第一次检测之前初始化值为Success,如果container没有提供LivenessProbe,则也认为是Success;httpGet:path: /health #如果没有心跳检测接口就为/port: 8080scheme: HTTPinitialDelaySeconds: 60 ##启动后延时多久开始运行检测timeoutSeconds: 5successThreshold: 1failureThreshold: 5readinessProbe:httpGet:path: /health #如果没有心跳检测接口就为/port: 8080scheme: HTTPinitialDelaySeconds: 30 ##启动后延时多久开始运行检测timeoutSeconds: 5successThreshold: 1failureThreshold: 5resources:              ##CPU内存限制requests:cpu: 2memory: 2048Milimits:cpu: 2memory: 2048Mienv:                    ##通过环境变量的方式,直接传递pod=自定义Linux OS环境变量- name: LOCAL_KEY     #本地Keyvalue: value- name: CONFIG_MAP_KEY  #局策略可使用configMap的配置Key,valueFrom:configMapKeyRef:name: special-config   #configmap中找到name为special-configkey: special.type      #找到name为special-config里data下的keyports:- name: httpcontainerPort: 8080 #对service暴露端口volumeMounts:     #挂载volumes中定义的磁盘- name: log-cachemount: /tmp/log- name: sdb       #普通用法,该卷跟随容器销毁,挂载一个目录mountPath: /data/media    - name: nfs-client-root    #直接挂载硬盘方法,如挂载下面的nfs目录到/mnt/nfsmountPath: /mnt/nfs- name: example-volume-config  #高级用法第1种,将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下,如果存在同名文件,直接覆盖。mountPath: /etc/config       - name: rbd-pvc                #高级用法第2中,挂载PVC(PresistentVolumeClaim)#使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,volumes:  # 定义磁盘给上面volumeMounts挂载- name: log-cacheemptyDir: {}- name: sdb  #挂载宿主机上面的目录hostPath:path: /any/path/it/will/be/replaced- name: example-volume-config  # 供ConfigMap文件内容到指定路径使用configMap:name: example-volume-config  #ConfigMap中名称items:- key: log-script           #ConfigMap中的Keypath: path/to/log-script  #指定目录下的一个相对路径path/to/log-script- key: backup-script        #ConfigMap中的Keypath: path/to/backup-script  #指定目录下的一个相对路径path/to/backup-script- name: nfs-client-root         #供挂载NFS存储类型nfs:server: 10.42.0.55          #NFS服务器地址path: /opt/public           #showmount -e 看一下路径- name: rbd-pvc                 #挂载PVC磁盘persistentVolumeClaim:claimName: rbd-pvc1         #挂载已经申请的pvc磁盘

 2. Pod yaml文件详解:

apiVersion: v1			#必选,版本号,例如v1
kind: Pod				#必选,Pod
metadata:				#必选,元数据name: string			  #必选,Pod名称namespace: string		  #必选,Pod所属的命名空间labels:				  #自定义标签- name: string		    #自定义标签名字annotations:			    #自定义注释列表- name: string
spec:					#必选,Pod中容器的详细定义containers:			  #必选,Pod中容器列表- name: string		    #必选,容器名称image: string		    #必选,容器的镜像名称imagePullPolicy: [Always | Never | IfNotPresent]	#获取镜像的策略:Alawys表示总是下载镜像,IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像command: [string]		#容器的启动命令列表,如不指定,使用打包时使用的启动命令args: [string]			#容器的启动命令参数列表workingDir: string		#容器的工作目录volumeMounts:			#挂载到容器内部的存储卷配置- name: string			  #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名mountPath: string		  #存储卷在容器内mount的绝对路径,应少于512字符readOnly: boolean		  #是否为只读模式ports:					#需要暴露的端口库号列表- name: string			  #端口号名称containerPort: int	  #容器需要监听的端口号hostPort: int			  #容器所在主机需要监听的端口号,默认与Container相同protocol: string		  #端口协议,支持TCP和UDP,默认TCPenv:					#容器运行前需设置的环境变量列表- name: string			  #环境变量名称value: string			  #环境变量的值resources:				#资源限制和请求的设置limits:				  #资源限制的设置cpu: string			    #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数memory: string			#内存限制,单位可以为Mib/Gib,将用于docker run --memory参数requests:				  #资源请求的设置cpu: string			    #Cpu请求,容器启动的初始可用数量memory: string		    #内存清楚,容器启动的初始可用数量livenessProbe:     		#对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可exec:					#对Pod容器内检查方式设置为exec方式command: [string]	  #exec方式需要制定的命令或脚本httpGet:				#对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、portpath: stringport: numberhost: stringscheme: stringHttpHeaders:- name: stringvalue: stringtcpSocket:			#对Pod内个容器健康检查方式设置为tcpSocket方式port: numberinitialDelaySeconds: 0	#容器启动完成后首次探测的时间,单位为秒timeoutSeconds: 0		#对容器健康检查探测等待响应的超时时间,单位秒,默认1秒periodSeconds: 0			#对容器监控检查的定期探测时间设置,单位秒,默认10秒一次successThreshold: 0failureThreshold: 0securityContext:privileged:falserestartPolicy: [Always | Never | OnFailure]		#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该PodnodeSelector: obeject		#设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定imagePullSecrets:			#Pull镜像时使用的secret名称,以key:secretkey格式指定- name: stringhostNetwork:false			#是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络volumes:					#在该pod上定义共享存储卷列表- name: string				  #共享存储卷名称 (volumes类型有很多种)emptyDir: {}				  #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值hostPath: string			  #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录path: string			    #Pod所在宿主机的目录,将被用于同期中mount的目录secret:					#类型为secret的存储卷,挂载集群与定义的secre对象到容器内部scretname: string  items:     - key: stringpath: stringconfigMap:				#类型为configMap的存储卷,挂载预定义的configMap对象到容器内部name: stringitems:- key: string

 3. Service yaml文件详解:

apiVersion: v1
kind: Service
matadata:                                #元数据name: string                           #service的名称namespace: string                      #命名空间  labels:                                #自定义标签属性列表- name: stringannotations:                           #自定义注解属性列表  - name: string
spec:                                    #详细描述selector: []                           #label selector配置,将选择具有label标签的Pod作为管理 #范围type: string                           #service的类型,指定service的访问方式,默认为 #clusterIpclusterIP: string                      #虚拟服务地址      sessionAffinity: string                #是否支持sessionports:                                 #service需要暴露的端口列表- name: string                         #端口名称protocol: string                     #端口协议,支持TCP和UDP,默认TCPport: int                            #服务监听的端口号targetPort: int                      #需要转发到后端Pod的端口号nodePort: int                        #当type = NodePort时,指定映射到物理机的端口号status:                                #当spce.type=LoadBalancer时,设置外部负载均衡器的地址loadBalancer:                        #外部负载均衡器    ingress:                           #外部负载均衡器 ip: string                       #外部负载均衡器的Ip地址值hostname: string                 #外部负载均衡器的主机名

四、yaml文件示例:

 1. 编写创建nginx-deployment,pod文件:

vim nginx-deployment.yaml
apiVersion: apps/v1		#指定api版本标签
kind: Deployment		#定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:					#定义资源的元数据信息,比如资源的名称、namespace、标签等信息name: nginx-deployment	#定义资源的名称,在同一个namespace空间中必须是唯一的labels:				#定义Deployment资源标签app: nginx	
spec:					#定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性replicas: 3			#定义副本数量selector:				#定义标签选择器matchLabels:		#定义匹配标签app: nginx		#需与 .spec.template.metadata.labels 定义的标签保持一致template:				#定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配metadata:labels:           #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致app: nginxspec:containers:				#定义容器属性- name: nginx				#定义一个容器名,一个 - name: 定义一个容器image: nginx:1.15.4		#定义容器使用的镜像以及版本ports:- containerPort: 80		#定义容器的对外的端口//创建资源对象
kubectl create -f nginx-deployment.yaml//查看创建的pod资源
kubectl get pods -o wide

 2. 创建service服务:

apiVersion: v1
kind: Service
metadata:name: nginx-servicelabels:app: nginx
spec:ports:- port: 80targetPort: 80nodePort: 30001  #指定NodePort模式node节点开启的端口(30000~32767)selector:app: nginx         #标签选择为nginxtype: NodePort//创建资源对象
kubectl apply -f nginx-service.yaml //查看创建的service
kubectl get svc

五、详解k8s中的port:

 1. port:

port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service

 2. nodePort:

nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。

 3. targetPort:

targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。

 4. containerPort:

containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。

六、试运行与文件模板:

 1. --dry-run=client试运行:

kubectl run nginx-test --image=nginx --port=80 --dry-run=clientkubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client

 2. 查看生成yaml格式:

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml

 3. 查看生成json格式:

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json

 4. 获取资源配置清单文件模板:

  4.1 . 查看已存在的资源配置的方式:

kubectl get svc nginx-service -o yaml > my-svc.yaml
或
kubectl edit svc nginx-service  #复制配置,再粘贴到新文件

  4.2 --dry-run=client 导出生成模板:

//使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml  > nginx-deploy.yaml

  4.3 复制K8S官方文档的资源配置案例

  4.4 根据 kubectl explain 命令获取字段信息

kubectl explain svc

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

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

相关文章

Zotero从安装到使用再到插件下载【适合小白,只看一篇就够!!!】

一、安装 1.安装Zotero 本人安装的是zotero6,全文是基于zotero6功能的介绍! 下载地址:Zotero下载 选择 Custom,因为Standard是标准型会默认放置C盘,并且不能更改! 选择自己的路径进行安装!…

2023年11月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名(每月更新) 2023年11月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

ElasticSearch的集群、节点、索引、分片和副本

Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,我们将Elasticsearch里存储文档数据和关系型数据库MySQL存储数据的概念进行一个类比 ES里的Index可以看做一个库,而Types相当于表,Documents则相当…

阿里云 :推出通义大模型编码助手产品【通义灵码】

本心、输入输出、结果 文章目录 阿里云 :推出通义大模型编码助手产品【通义灵码】前言通义灵码简介主要功能主要功能点 支持的语言和 IDEjetbrains IDEA 安装计费相关弘扬爱国精神 阿里云 :推出通义大模型编码助手产品【通义灵码】 编辑:简简…

交流信号继电器 DX-31BJ/AC220V JOSEF约瑟 电压启动 面板嵌入式安装

DX系列信号继电器由矩形脉冲激磁,磁钢保持。本继电器为双绕组。工作线圈可为电压型,亦可为电流型。复归线圈为电压型。继电器的工作电流或工作电压为长脉冲,亦可为脉冲不小于20mS的短脉冲。 系列型号 DX-31B信号继电器DX-31BJ信号继电器 D…

网络安全行业现在好混吗,工资水平怎么样?

一个离职转行员工的实话:网络安全是永远稀缺的,它的稀缺表现在你学不懂、学不够、学不通的知识与很高的技术壁垒的层面上。想混日子,这行最不缺的就是平庸之辈,想做好做强你要掂量自己有没有那个天赋!别听网上那些卖课…

DirectX3D 虚拟现实项目 三维物体的光照及着色(五个不同着色效果的旋转茶壶)

文章目录 任务要求原始代码CPP文件代码着色器文件代码 效果展示 任务要求 本篇文章是中国农业大学虚拟现实课程的一次作业内容,需要对五个茶壶模型使用不同的光照进行着色和渲染,然后旋转展示。 本人的代码也是在其他人的代码的基础上修改来的&#xf…

Android Studio导入,删除第三方库

Android项目经常用到无私的程序员们提供的第三方类库。本篇博客就是实现第三方库的导入和删除。 一、导入第三方库 1、将需要的库下载到本地; 2、新建Moudle (1)File --- New Moudle (2)选择Android Library --- Next (3)填写Moudle名 --- Finish。一个新的Mou…

TikTok shop美国小店适合哪些人做?附常见运营问题解答

一、Tiktok shop小店分类 大家都知道,美国小店可以分为5 种: 美国本土个人店: 最灵活,有扶持政策;美国法人企业店:要求高,有扶持政策;美国公司中国人占股店 (ACCU店) : 权重相对低&#xff0c…

配置资源管理

Secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。 三种类型: kubernetes.io/service-accoun…

Unity游戏开发基础之数据结构部分

设计模式 含义:帮助我们降低对象之间的耦合度常用的方法称为设计模式。使用设计模式是为了可重用代码,让代码更容易被其他人所理解,保证代码可靠性,使代码编制真正工程化,这是软件工程的基石。 分类: 创建…

如何上传自己的Jar到Maven中央仓库

在项目开发过程中,我们常常会使用 Maven 从仓库拉取开源的第三方 Jar 包。本文将带领大家将自己写好的代码或开源项目发布到 Maven中央仓库中,让其他人可以直接依赖你的 Jar 包,而不需要先下载你的代码后 install 到本地。 注册帐号 点击以…

驾考在线答题系统源码:含PC+手机版驾考宝典多题库

安装说明: 1、上传到网站根目录 2、用 phpMyadmin 导入数据库文件 db.sql 3、修改数据库链接文件 /ThinkPHP/Conf/convention.php# (记得不要用记事本修改,否则可能会出现验证码显示不了问题,建议用 Notepad 4、 帐号 admin 密码…

ChinaSoft 论坛巡礼 | 系统与网络安全论坛

2023年CCF中国软件大会(CCF ChinaSoft 2023)由CCF主办,CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办,将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

Stable Diffusion webui 源码调试(二)

Stable Diffusion webui 源码调试(二) 个人模型主页:LibLibai stable-diffusion-webui 版本:v1.4.1 内容更新随机,看心情调试代码~ 分析StableDiffusionProcessingTxt2Img类中的sample函数 Sampler /work/stable-d…

常见面试题-MySQL专栏(三)MVCC、BufferPool

typora-copy-images-to: imgs 了解 MVCC 吗? 答: MVCC(Multi-Version Concurrency Control) 是用来保证 MySQL 的事务隔离性的,对一行数据的读和写两个操作默认是不会通过加锁互斥来保证隔离性,避免了频…

安卓 车轮视图 WheelView kotlin

安卓 车轮视图 WheelView kotlin 前言一、代码解析1.初始化2.初始化数据3.onMeasure4.onDraw5.onTouchEvent6.其他 6.ItemObject二、完整代码总结 前言 有个需求涉及到类似这个视图,于是在网上找了个轮子,自己改吧改吧用,拿来主义当然后&…

idea使用lombok编译问题

idea编译报错问题如下: java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled.Your processor is: com.sun.proxy.$Proxy26Lombok supports: OpenJDK javac, ECJ解决方案 1.先将jdk替换为openjdk,随后将项目配置…

体制内人,知道这个工具,写什么都有底气

体制内,每天都在写各种材料!! 用词、结构、形式什么的都要严谨,但有时候写完又不行,还要改改改,家人们谁懂啊!!! 这个工具,输入要求就可以快速生成文案&…

基于SSM框架的共享单车管理系统小程序系统的设计和实现

基于SSM框架的共享单车管理系统小程序系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,…