k8s-学习总结(资源清单、自主Pod、标签)

本文总结了Kubernetes中的资源清单概念,详细介绍了POD资源清单对象的元数据和规格,以及自主Pod的创建、删除和查询。探讨了多容器POD的资源争抢问题,并讲解了如何创建不冲突的容器。此外,还涵盖了标签的使用,包括查询、创建、修改以及如何通过标签将Pod调度到特定节点。
摘要由CSDN通过智能技术生成

概念

  • 资源含义:k8s中所有的内容都被抽象为资源,资源实例化之后,叫做对象。

  • 资源分类:

    • 工作负载:pod、rs(ReplicasSet)、deploy(Deployment)、sts(StatefulSet)、ds(DaemonSet)、job、cronjob
    • 服务发现及负载均衡:svc(Service)、ing(Ingress)
    • 配置与存储:cm(ConfigMap)、Secret、Volume、pv( persistentvolumes )、pvc、sc(StorageClasses)DownwardAPI
    • 集群级: ns(Namespace),Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding
    • 元数据: HPA,PodTemplate,LimitRange
  • 资源清单:k8s一般都是通过定义资源清单的方式去创建资源,资源清单类似提前写好的配置文件,通过文件信息告知k8s如何进行配置,一般使用yaml格式的文件来创建符合我们预期期望的资源,这样的yaml文件我们一般称为资源清单

  • 资源清单基础格式:

apiVersion: group/apiversion  #如果没有给定group名称,那么默认为croe,可以使用kubectl api-versions 获取当前k8s版本上所有的apiVersion版本信息(每个版本可能不同)
kind:        	#资源类型
metadata:    	#元数据对象
spec:        	#期望的状态(disired state)
status:	  	#当前状态,本字段有kubernetes自身维护,用户不能去定义

#获取 apiversion 版本信息 kubectl api-versions
#获取字段设置帮助文档 kubectl explain pod|deploy...,可以通过explain查看各种资源
#apiVersion、kind、metatdata、spec、status,可用过kubectl explain pod.kind方式查询下级信息

POD资源清单对象信息

帮助信息格式

apiVersion <string>         	#表示字符串类型
metadata <Object>            	#表示需要嵌套多层字段
labels <map[string]string>  	#表示由k:v组成的映射
finalizers <[]string>       	#表示字串列表
ownerReferences <[]Object>   	#表示对象列表,如hostPID <boolean>,布尔值ture|false
								#布尔类型priority <integer>           
								#整型name <string> -required-     
								#如果类型后面接 -required-,表示为必填字段

pod.metadata(元数据):

metadata: <Object> #元数据
   annotations	<map[string]string>  
   #注释,可以作为挑选条件,作为labels的补充
     key1: value1
     key2: value2  
   clusterName	<string>
   #对象所属的集群的名称。用来区分不同集群中具有相同名称和名称空间的资源。
   creationTimestamp	<string>	
   #当前对象创建日期的时间戳
   deletionGracePeriodSeconds	<integer>
   #在从系统中删除该对象之前,对象被正常终止所允许的秒数。仅在还设置了deleteTimestamp时设置
   deletionTimestamp	<string>
   #当前对象删除日期的时间戳
   generation	<integer>
   #用于表示当前对象目标状态的代码
   labels	<map[string]string>
     key1: value1
     key2: value2
   name	<string>
   #对象名称,名称空间的同一类型中必须唯一
   namespace	<string>
   #命名空间,默认为default
   resourceVersion	<string>
   #当前对象的内部版本标识符
   uid	<string>
   #唯一表示符

pod.spec

spec: <Object> 							#必选,pod中容器的详细定义
  containers: <[]Object> -required- 	#pod中的容器列表,可以有多个容器
  - name: <string> -required- 			#容器名称
    image: <string> -required-		 	#容器的镜像名称
    imagePullPolicy: <string> (Always, Never, IfNotPresent) #获取镜像的策略,Alawys表示下载镜像 IfnotPrese
要将正在 k8s-node1 节点上运行的名为 apache-podpod 扩容到 k8s-node2 节点,并同时在这两个节点上运行 pod,请按照以下步骤操作: 1. 创建一个 deployment,指定 pod 的副本数为 2,并使用 nodeSelector 将这两个 pod 分别调度到 k8s-node1 和 k8s-node2 节点上。可以使用以下 YAML 文件创建 deployment: ``` apiVersion: apps/v1 kind: Deployment metadata: name: apache-pod spec: replicas: 2 selector: matchLabels: app: apache-pod template: metadata: labels: app: apache-pod spec: nodeSelector: kubernetes.io/hostname: k8s-node1 containers: - name: apache-container image: httpd:latest ports: - containerPort: 80 ``` 在这个 YAML 文件中,我们使用 nodeSelector 将第一个 pod 调度到 k8s-node1 节点上,第二个 pod 调度到 k8s-node2 节点上。注意,我们在 template.spec.containers 中指定了容器的镜像和端口号,这里使用的是 httpd 镜像,端口号是 80。 2. 使用 kubectl apply 命令应用这个 YAML 文件: ``` kubectl apply -f deployment.yaml ``` 3. 使用 kubectl get pods 命令检查 pod 状态,确认这两个 pod 都在运行: ``` kubectl get pods -o wide ``` 在输出中,你会看到两个 apache-pod 的副本都在运行,其中一个在 k8s-node1 节点上,另一个在 k8s-node2 节点上。 需要注意的是,使用 nodeSelector 指定 pod 调度到特定节点上可能会降低集群的灵活性,因为这样做会使节点的资源分配不均衡。如果你的集群中有多个节点,最好使用 Kubernetes 的调度器来自动地将 pod 调度到空闲节点上。你可以使用 nodeAffinity 和 podAntiAffinity 等特性来控制 pod 的调度行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值