kubectl声明式资源管理命令

目录

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

二、声明式相关命令:

 1. 语法格式:

 2. 查看资源配置清单:

 3. 解释资源配置清单:

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

  4.1 离线修改:

  4.2 在线修改:

 5. 删除资源配置清单:

三、yaml文件详解:

 1. deployment.yaml文件详解:

 2. Pod yaml文件详解:

 3. Service yaml文件详解:

四、yaml文件示例:

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

 2. 创建service服务:

五、详解k8s中的port:

 1. port:

 2. nodePort:

 3. targetPort:

 4. containerPort:

六、试运行与文件模板:

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

 2. 查看生成yaml格式:

 3. 查看生成json格式:

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

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

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

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

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


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

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

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

相关文章

【qemu逃逸】XCTF 华为高校挑战赛决赛-pipeline

前言 虚拟机用户名: root 无密码 设备逆向与漏洞分析 程序没有去符合, 还是比较简单. 实例结构体如下: 先总体说一下流程: encode 为 base64 编码函数, decode 为 base64 解码函数. 然后 encPipe 和 decPipe 分别存放编码数据和解码数据, 分别有四个: 其中 EncPipeLine 中…

Unity地面交互效果——4、制作地面凹陷轨迹

大家好,我是阿赵。   上一篇介绍了曲面细分着色器的基本用法和思路,这一篇在曲面细分的基础上,制作地面凹陷的轨迹效果。 一、思路分析 这次需要达到的效果是这样的: 从效果上看,这个凹陷在地面下的轨迹&#xff0…

PostMan授权认证使用

Authorization 对于很多应用,出于安全考虑我们的接口并不希望对外公开。这个时候就需要使用授权(Authorization)机制。 授权过程验证您是否具有访问服务器所需数据的权限。 当发送请求时,通常必须包含参数,以确保请求具有访问和返回所需数据…

蓝桥杯算法竞赛第一周题型总结

本专栏内容为:蓝桥杯学习专栏,用于记录蓝桥杯的学习经验分享与总结。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库🚚 🌹&#x1f33…

skynet学习笔记02— skynet介绍、skynet基础API与环境变量

01、Skynet与Actor模型 在系统Skynet之前,先了解一下Skynet与Actor模型,下列是风云大佬的介绍以及一个大佬的博客 https://github.com/cloudwu/skynet/wiki/GettingStartedhttps://blog.csdn.net/qq769651718/article/details/79432793 02、Skynet基础…

python升级pip的时候一直失败

如图,一直提示使用 python.exe -m pip install --upgrade pip 进行升级pip,但是执行这句命令又不成功.然后综合了几篇文章以后使用了下面的命令可以升级了 python -m pip install --upgrade pip --user -i https://mirrors.aliyun.com/pypi/simple/ 主要是在推荐的语句上使用…

润色论文Prompt

你好,我现在开始写论文了,我希望你可以扮演帮我润色论文的角色我写的论文是关于xxxxx领域的xxxxx,我希望你能帮我检查段落中语句的逻辑、语法和拼写等问题我希望你能帮我检查以下段落中语句的逻辑、语法和拼写等问题同时提供润色版本以符合学…

Android Studio新建项目下载依赖慢,只需一个操作解决

新建的安卓工程,下载依赖贼慢怎么办?水一篇吧。 首先新建工程,建好以后项目就自动开始下载了,底部开始出现进度条,但是进度条一直不怎么动,网速也就十几k,要是等他下载得下一天。 直入主题&…

第四节(2):修改WORD中表格数据的方案

《VBA信息获取与处理》教程(10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网…

Django之三板斧的使用,全局配置文件介绍,request对象方法,pycharm链接数据库,Django链接数据库,ORM的增删改查

【1】三板斧(3个方法)的使用 Httpresponse() 括号内写什么字符串,返回的就是什么字符串返回的是字符串 render(request, 静态文件 ) request是固定的静态文件是写在templates文件夹里面的,如,HTML文件 redirect( 重定向的地址 ) 重…

Markdown使用教程

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

基于VSCode + PlatformIO创建运行第一个esp32程序

文章目录 使用VSCode创建项目安装驱动下载驱动安装驱动连接开发板电脑识别开发板 编写程序烧录程序第一步、编译程序第二步、烧录程序第三步、开发板观察效果 原理讲解项目源码 在之前的课程,我们已经介绍了ESP32单片机,并且也已经安装好了开发环境&…

干洗店洗鞋店管理系统app小程序;

干洗店洗鞋店管理系统是一款专业的洗衣店管理软件,集成了前台收费收银系统、会员卡管理系统和财务报表系统等强大功能。界面简洁优美,操作直观简单。这款系统为干洗店和洗衣店提供了成本分析、利润分析、洗衣流程管理等诸多实用功能,用全新的…

深度学习 opencv python 公式识别(图像识别 机器视觉) 计算机竞赛

文章目录 0 前言1 课题说明2 效果展示3 具体实现4 关键代码实现5 算法综合效果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的数学公式识别算法实现 该项目较为新颖,适合作为竞赛课题方向,学…

嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容

一百二十三、计算机相关理论 123.1 计算机的组成 目前的计算机都还是 冯诺依曼体系 ,也就是由:输入、输出、运算器、存储器、控制器,这个五个部分构成。输入:Input,常见的输入设备,比如鼠标,键…

LeetCode | 234. 回文链表

LeetCode | 234. 回文链表 O链接 这里的解法是先找到中间结点然后再将中间节点后面的节点逆序一下然后再从头开始和从中间开始挨个比较如果中间开始的指针到走最后都相等,就返回true,否则返回false 代码如下: struct ListNode* reverseLis…

18. 深度学习 - 从零理解神经网络

文章目录 本文目标预测趋势与关系波士顿房价预测 Hi, 你好。我是茶桁。 我们终于又开启新的篇章了,从今天这节课开始,我们会花几节课来理解一下深度学习的相关知识,了解神经网络,多层神经网络相关知识。并且,我们会尝…

ModStartBlog v8.5.0 评论开关布局调整,系统后台全面优化

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场,后台一键快速安装 …

吴恩达《机器学习》7-1->7-4:过拟合问题、代价函数、线性回归的正则化、正则化的逻辑回归模型

一、过拟合的本质 过拟合是指模型在训练集上表现良好,但在新数据上的泛化能力较差。考虑到多项式回归的例子,我们可以通过几个模型的比较来理解过拟合的本质。 线性模型(欠拟合): 第一个模型是一个线性模型&#xff0…

安全框架SpringSecurity-1(认证入门数据库授权)

一、Spring Security ①:什么是Spring Security Spring Security是一个能够为基于Spring的企业应用系统提供声明式(注解)的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring …