7. Kubernetes的资源对象

在Kubernetes系统中,Kubernetes对象是持久化的实体。Kubernetes使用这些实体去表示整个集群的状态。特别地,它们描述了如下信息:

哪些容器化应用在运行(以及在哪个 Node 上)

可以被应用使用的资源

关于应用运行时表现的策略,比如重启策略、升级策略,以及容错策略

Kubernetes对象是“目标性记录”。一旦创建对象,Kubernetes系统将持续工作以确保对象存在。通过创建对象,本质上是在告知Kubernetes系统,所需要的集群工作负载看起来是什么样子的,这就是Kubernetes集群的期望状态(Desired State)。

每个Kubernetes对象包含两个嵌套的对象字段,它们负责管理对象的配置:spec(对象规约)和status(对象状态) 。 spec是必需的,它描述了对象的期望状态(Desired State)——希望对象所具有的特征。status描述了对象的实际状态(Actual State),它是由Kubernetes系统提供和更新的。在任何时刻,Kubernetes控制面一直努力地管理着对象的实际状态以与期望状态相匹配。

  • 必需字段:

在想要创建的Kubernetes对象对应的.yaml文件中,需要配置如下的字段:

apiVersion - 创建该对象所使用的 Kubernetes API 的版本

kind - 想要创建的对象的类型

metadata - 帮助识别对象唯一性的数据,包括一个 name 字符串、UID 和可选的 namespace

大部分对象也需要提供对象的spec字段。spec的精确格式对每个Kubernetes对象来说是不同的,包含了特定于该对象的嵌套字段。


命名空间Namespace

命名空间Namespace本质上也是kubernetes的一种资源对象,主要起隔离作用:

资源对象的隔离:Service、Deployment、Pod

资源配额的隔离:CPU、Memory

大多数 kubernetes 资源(例如 Pod、服务、副本控制器等)都位于某些Namespace中。 但是Namespace资源本身并不在Namespace中。

而且底层资源,例如节点和持久化卷不属于任何Namespace。

查看哪些Kubernetes资源在Namespace中,哪些不在Namespace中:

kubectl api-resources --namespaced=true             #资源在Namespace中

kubectl api-resources --namespaced=false                #资源不在Namespace中
  • 查看所有namespace:
# kubectl get namespaces

NAME              STATUS   AGE
default           Active   13d
ingress-nginx     Active   7d2h
kube-node-lease   Active   13d
kube-public       Active   13d
kube-system       Active   13d

default是默认的Namespace。当创建Service、Deployment、Pod时不指定Namespace,则会创建在default这个Namespace下。

  • 创建一个namespace:
# vim namespace-dev.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: dev
# kubectl create -f namespace-dev.yaml

# kubectl get namespaces

NAME              STATUS   AGE
default           Active   13d
dev               Active   28s
ingress-nginx     Active   7d2h
kube-node-lease   Active   13d
kube-public       Active   13d
kube-system       Active   13d
  • 在dev namespace下创建资源对象:

在yaml文件中对应的资源分别指定Namespace,或创建资源时命令行指定Namespace(-n namespace)。

# vim web-dev.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-demo
  namespace: dev                #指定namespace
spec:
  selector:
    matchLabels:
      app: web-demo
  replicas: 1
  template:
    metadata:
      labels:
        app: web-demo
    spec:
      containers:
      - name: web-demo
        image: hub.lzxlinux.cn/kubernetes/web:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: web-demo
  namespace: dev                #指定namespace
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: web-demo
  type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: web-demo
  namespace: dev                #指定namespace
spec:
  rules:
  - host: web-dev.lzxlinux.cn
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值