Kubernetes 资源清单详解

1.什么是资源

资源是kubernetes 中的一切 

资源是蓝图,对象就是根据这个蓝图制造出来的实际产物?

2.资源清单的描述

 1.apiVersion 接口组/版本

值:v1

其实是 core/v1 的缩写  解释

值 的构成    group/apiversion  接口组 / 版本

kubenetes 默认的组结构 

 这里再强调一下 kubenetes启动顺序 

systemd -> docker -> cri-docker -> kubelet -> pod -> 启动完成

1.查看api-versions

kubectl api-versions

组/版本号

最下面那个 v1 其实 也是有组的 只不过被省略了 它叫 core/v1

实现了 kubenetes 的大部分的核心功能

2.不需要硬记资源类别

有个命令

kubectl explain 资源类别

比如

kubectl explain pod

 

 比如 我们查询的是 deployment  那么我们写的apiVersion就是

apps/v1

不同kubenetes它的 默认接口组 不一样 我们 必须调用上面命令进行严查 要不然找不到

2.kind 类别

如果你要创建pod 那就写 pod

创建 deployment 就写 deployment

3.metadata 元数据

1.name

名称

2.namespace

名称空间 

我们说 pod是属于 名称空间级别的 资源 。所以我们一定要 写定 我们当前的 pod 属于哪一个名称空间的资源下 名称空间不写 默认标记 为 default 

3.labels

标签

1.app

打上一系列标签  能够更好的去识别它

myapp

4.spec 规格

这是kubenetes里非常非常重要的一个概念

声明式表达

1.containers 容器 数组类型

1.name 容器名 字符串
2.image 镜像 字符串名
3.command 命令  注意 这个 command 等价于 dockerfile 里的 Entrypoint

5.status 状态

这个是由 kubenetes 在创建资源的时候 动态生成的 不是由我们去定义的

这个期望的当前状态是什么样的

1.conditions 条件 数组类型

1.lastProbeTime
2.lastTransitionTime  字符串

"2023-11-21T08:49:07z"

3.status 字符串

"True"

4.type 

Initialized

只需要去写前四个 一级对象即可

3.如何编写资源清单

1.不要记它

一条命令解决

kubectl explain [资源]

都可以查询到

包括它们的含义

资源如果是对象 那么 可以以点的形式连接 比如 我要查 pod下的 spec 

kubectl explain pod.spec

2.例子

创建一个文件夹在文件夹里创建   名称.pod.yaml文件  

比如我们创建

vim 1.pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels: 
    app: myapp
spec:
  containers:
    - name: myapp-1
      image: wangyanglinux/myapp:vl.0
    - name: busybox-1
      image: wangyanglinux/tools:busybox
      command: 
        -"/bin/sh"
        -"-C"
        - "sleep 3600"

类别要大些 pod 要写 Pod

一个pod 由我们 pause 容器组成 

pause 容器 上面是不是在去运行我们的两个容器 myapp-1容器 另一个叫做 busybox-1容器

这两个容器要跟我们的pause 去进行共享网络 共享名字空间

共享哪几个名字空间 IPC PID

它们三个容器结合在一起 就构成了我们pod的基本概念

4.创建pod

基于上一个资源清单创建 对象 实例化

kubectl create -f [清单文件.pod.yaml]
kubectl create -f 1.pod.yaml

apply -f更好,可以创建/更新

5.查看创建的pod

 kubectl get pod -n 命名空间
 kubectl get pod -n default

不加-n 默认就是 default

kube-system 是kubernetes集群的 命名空间 kubernetes 系统所在的地方

6.查看当前有哪些命名空间

kubectl get namespace

集群级别的节点 在任何命名空间下看到的结构都是相同的

7.kubectl get pod 

1.参数 -all-namespaces  缩写  -A

查询全部的pod

2.参数 -o wide 

查询更加详细的内容

 

 

 

3.进入容器内部执行命令

kubectl exec -it  [pod 名称] -c [容器名] -- [需要执行的命令]
kubectl exec -it pod-demo -c myapp-1 -- /bin/bash

再一次验证了 pod本质就是 多个容器组成的集合

 特殊的就是pause 它的工作是 初始化网络  要跟我们其他的主容器去共享我们的IPC PID 这是比较核心的点

4.显示标签 --show-labels

kubectl get pod --show-labels

5.根据标签筛选

1.-l 根据标签key筛选

kubectl get pod -l app

2.根据key=value

kubectl get pod -l app=nginx

6.查看pod日志

kubectl logs [pod名] -c [容器名]
kubectl logs pod-demo -c myapp-1

7.查看创建的pod 到什么进度了

kubectl describe pod [pod名]
kubectl describe pod pod-demo-1

案例

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo-1
  namespace: default
  labels:
    app: myapp
spec:
  containers:
    - name: myapp-1
      image: wangyanglinux/myapp:v1.0
    - name: myapp-2
      image: wangyanglinux/myapp:v2.0

起了一个pod 

但是出现错误

因为一个pod里的容器都是共享网络的  共享网络站

当第一个myapp容器启动的时候 它会绑定当前的80端口 同样一个网络站能有两个80端口吗 不能

所以端口冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值