四、资源清单
本文最后更新于105 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

可以理解为对一种资源描述的文件,写清楚了才能达到我们的期望去创建集群


1.k8s中的资源

K8s 中所有的内容都抽象为资源, 资源实例化之后,叫做对象

资源:比如人类,植物,灌木之类的,Pod就是一个资源,里面包括一些main-C,pause等等

对象:比如人类里的张三,就是对象。对象是存在的实体,并且有着资源的一切特性

k8s中存在哪些资源

名称空间级别

  • 工作负载型资源: Pod、ReplicaSet、Deployment ...

  • 服务发现及负载均衡型资源: Service、Ingress...

  • 配置与存储型资源:Volume、CSI ...

  • 特殊类型的存储卷:ConfigMap、Secre ...

    名称空间型:
    这里是非物理性的空间隔离,不是真实的,比如100个同学是个小组。
    在创建和使用的时候一定要指定名称空间

集群级资源

  • Namespace、Node、ClusterRole、ClusterRoleBinding

    集群级资源:
    比如校长就属于集群的,或者,县长,省长,主席
    使用的时候不用指定

元数据型资源

  • HPA、PodTemplate、LimitRange

    元数据型:
    没有办法单独存在,必须要依附在别的资源上
    HPA,自动扩容,依托于Pod
    PodTemplate:Pod的模板
    LimitRange:资源限制,也需要依附于Pod


2.资源清单

在 k8s 中,一般使用 yaml 格式的文件来创建符合我们预期期望的 pod或者各种资源 ,这样的 yaml 文件我们一般称为资源清单

资源清单格式

apiVersion: group/apiversion  # 如果没有给定 group 名称,那么默认为 core,可以使用 kubectl api-versions # 获取当前 k8s 版本上所有的 apiVersion 版本信息( 每个版本可能不同 )
kind:       #资源类别
metadata:  #资源元数据
   name
   namespace
   lables
   annotations   # 主要目的是方便用户阅读查找
spec: # 期望的状态(disired state)
status:# 当前状态,本字段有 Kubernetes 自身维护,用户不能去定义

配置清单主要有五个一级字段,其中status用户不能定义,有k8s自身维护
每个资源下都可以有实现对应功能的子目录,如果你想实现这些功能,那最起码要知道代码在那个目录下,也就是用的版本是哪个
V1就是核心组的V1版本,其他的组和版本都是对他的补充

资源清单的常用命令

获取 apiversion 版本信息

[root@k8s-master01 ~]# kubectl api-versions 
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
......(以下省略)

获取资源的 apiVersion 版本信息

[root@k8s-master01 ~]# kubectl explain pod
KIND:     Pod
VERSION:  v1
.....(以下省略)

[root@k8s-master01 ~]# kubectl explain Ingress
KIND:     Ingress
VERSION:  extensions/v1beta1

获取字段设置帮助文档

[root@k8s-master01 ~]# kubectl explain pod
KIND:     Pod
VERSION:  v1

DESCRIPTION:
     Pod is a collection of containers that can run on a host. This resource is
     created by clients and scheduled onto hosts.

FIELDS:
   apiVersion    <string>
     ........
     ........

字段配置格式

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

通过定义清单文件创建 Pod

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-1
    image: wangyanglinux/myapp:v1
  - name: busybox-1
    image: busybox:1.38.0
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 3600"
kubectl get pod xx.xx.xx -o yaml  
<!--使用 -o 参数 加 yaml,可以将资源的配置以 yaml的格式输出出来,也可以使用json,输出为json格式--> 


3.常用字段解释

file

file

file

file

file


扩展

golang语言的版本规则

x.x.x
比如目前的Kubernetes就是1.27.1
中间的27表示的是大版本的更新,而且27必须要兼容26或者兼容大部分。后面的1是小更新,而且在1.27.2里面必须能有1.27.1的全部功能
前面的1除非是有翻天覆地的变化才会改,比如可以直接在硬件上跑k8s了,当然,这目前只是设想

RPC协议

GRPC 远程过程调用(G就是谷歌开发的RPC)
和http协议的区别就是:rpc是二进制的数据传输。而且具备特殊编码,可以让传输数据更小

k8s中的缩写

在k8s中很多命令是可以缩写的,比如pod可以缩写为po,replicationController可以缩写为rc(复制控制器)
svc=service,configmap=cm

组件之间的交互

不是两个组件自己直接交互,而是写入etcd,由etcd帮着转发
这叫发布者和订阅者
所以实时交互的数据不是很快

Kubernetes更需要持久化,因为每次的pod都是重建,而不是重启,没有持久化的话数据就都没了,尤其是数据库的pod

如果当前的节点存储资源被占用80以上,Kubernetes会自动清空已死的容器和无用的镜像

男孩子都是香香软软的小猪
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇