系列:4.1、Kubernetes 对象

4.1 Kubernetes 对象

与 Kubernetes 中的 kube-apiserver 通信,最简单、最安全的方式是使用命令行界面 kubectl,我们在上一篇文章中已经安装了它。

当然,与 kube-apiserver 通信的另一种方式是通过 REST 调用。 你可以使用以下命令:

kubectl proxy

在编程中调用,可以参考: 客户端库API EndPoints

1、Kubernetes 对象

Kubernetes 对象是 Kubernetes 系统中的持久实体。 Kubernetes 使用这些实体来表示集群的状态。

一些 Kubernetes 对象有 Pod、NameSpace(命名空间)、StatefulSet、Service(服务)等。

通过 kubectl 创建 Kubernetes 对象有两种方法:命令式或声明式。

2、创建Kubernetes 对象

2.1 命令式

run一个Nginx镜像的pod

kubectl run nginx --image=nginx

在这里插入图片描述

查看是否被创建

kubectl get pods

在这里插入图片描述

现在删除这个pod,然后用声明式创建。

kubectl delete pod nginx

在这里插入图片描述

2.2 声明式

要以声明方式创建相同的 pod,我们需要创建一个 YAML 文件。 Kubernetes 中任何资源的 YAML 文件都必须具有 3 个键值:apiVersion、kind、metadata。 并且根据资源,可能有spec、data等。

apiVersion:您使用哪个版本的 Kubernetes API 创建此对象

kind:你想创建什么样的对象

metadata:有助于唯一标识对象的数据,包括名称字符串、UID 和可选的命名空间

Spec:您希望对象处于什么状态

因此,用于创建相同 pod 的 YAML 文件(我们称之为 nginx.yaml)将如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx          
    image: nginx

它使用 apiVersion v1(这是创建 pod 的正确 API 版本),kind 是 Pod,在metadata部分我们定义了 pod 的pod, namespace, labels等。在spec中,我们定义了 pod 内部的容器 。

创建对象:

kubectl apply -f nginx.yaml

“-f” 指文件
在这里插入图片描述
可以使用同样的方法删除nginx 的pod

kubectl delete -f nginx.yaml

在这里插入图片描述

命令式方法似乎更快更容易使用,但它的功能有限。

声明式方式可能有点难以学习和应用,但它可以在 Kubernetes 中创建所有对象,并且是在处理项目时使用 Kubernetes 的一种便捷方式,因为这样您可以跟踪更改的历史和/或重新 轻松应用新更改。

3、 使用kubernetes对象

3.1 Labels 与 Environments

Labels(标签)是附加到对象的键/值对。 它可以用于轻松分类对象或将对象组合在一起。

标签不是唯一的。 这意味着一个标签可以用于多个对象。

我们可以使用Labels创建2个nginx pod。
在这里插入图片描述

根据label获取标签信息

kubectl get pods -l <label key=label value>

可以参考 推荐 Label

3.2 Namespaces

Namespaces 命名空间旨在用于许多用户分布在多个团队或项目中的环境。 而对于这种需求,Kubernetes 支持由同一个物理集群支持的多个虚拟集群。 这些虚拟集群称为命名空间。

基本上,如果我们有大系统并且我们希望它们被隔离,我们需要将它们放在不同的命名空间中。

在实际的学习测试中,在同一个命名空间中拥有两个 pod 不会是一个大问题。

查看已存在的namespaces

kubectl get namespaces

或者

kubectl get ns

在这里插入图片描述

创建 namespaces

kubectl create namespace  namespace1
kubectl create namespace namespace2

在这里插入图片描述

将我们的 nginx pod 部署到两个命名空间。 我们需要使用“–namespace”或“-n”参数在指定的命名空间中创建这些资源。

kubectl run nginx --image nginx --namespace=namespace1
kubectl run nginx --image nginx --namespace=namespace2

在这里插入图片描述

查看pod
在这里插入图片描述

加上 namespace
在这里插入图片描述
如果你删除 namespace, 该命名空间里的资源都会自动被删除。

namespace命名空间在 YAML 文件中的“metadata.namespace”下表示。

apiVersion: v1
kind: Namespace
metadata:
  name: samplenamespace

系列:1、Kubernetes 简介

系列:2、创建Kubernetes集群

系列:3、Kubectl 的使用

系列:4.1、Kubernetes 对象 (本文)

系列:4.2、Kubernetes 工作负载

系列:4.3、Kubernetes 服务

系列:4.4、Kubernetes 存储

系列:4.5、Kubernetes 配置对象

系列:5、Kubernetes中的调度

系列:6、Kubernetes 的升级与部署策略

系列:7、 Kubernetes 安全性

系列:8、部署一个全栈应用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值