Kubernetes----Kubernetes中Namespace名字空间的简介与应用

【原文链接】

一、名字空间简介

在 Kubernetes 中,“名字空间(Namespace)”提供一种机制,将同一集群中的资源划分为相互隔离的组。 同一名字空间内的资源名称要唯一,但跨名字空间时没有这个要求。 名字空间作用域仅针对带有名字空间的对象,例如 Deployment、Service 等,对于类似持久化存储的对象如StorageClass、Node、PersistentVolume 等则不适用名字空间

名字空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑名字空间。当需要名称空间提供的功能时,请开始使用它们。

不必使用多个名字空间来分隔仅仅轻微不同的资源,例如同一软件的不同版本: 应该使用标签 来区分同一名字空间中的不同资源。

二、名字空间的命名规则

当你创建一个服务 时, Kubernetes 会创建一个相应的 DNS 条目。
该条目的形式是 <服务名称>.<名字空间名称>.svc.cluster.local,
为了能正确解析dns,因此,名字空间的命名必须符合规定,具体如下:

  • 最多 63 个字符
  • 只能包含小写字母、数字,以及 ‘-’
  • 须以字母数字开头
  • 须以字母数字结尾

三、默认的名字空间

3.1 查询所有名字空间

通过kubectl get namespace 命令查询,或者通过简写命令kubectl get ns,如下

[root@master demo]# kubectl get namespace
NAME                   STATUS   AGE
default                Active   5d20h
kube-node-lease        Active   5d20h
kube-public            Active   5d20h
kube-system            Active   5d20h
kubernetes-dashboard   Active   5d18h
[root@master demo]#
[root@master demo]# kubectl get ns
NAME                   STATUS   AGE
default                Active   5d20h
kube-node-lease        Active   5d20h
kube-public            Active   5d20h
kube-system            Active   5d20h
kubernetes-dashboard   Active   5d18h
[root@master demo]#

3.2 查询指定名称的名字空间

通过kubectl get namespace kube-system 命令或者简写命令kubectl get ns kube-system 查询 kube-system名字空间的信息

[root@master demo]# kubectl get namespace kube-system
NAME          STATUS   AGE
kube-system   Active   5d20h
[root@master demo]#
[root@master demo]# kubectl get ns kube-system
NAME          STATUS   AGE
kube-system   Active   5d20h
[root@master demo]#

3.3 默认名字空间的作用

  • default 没有指明使用其它名字空间的对象所使用的默认名字空间
  • kube-system Kubernetes 系统创建对象所使用的名字空间
  • kube-public 这个名字空间是自动创建的,所有用户(包括未经过身份验证的用户)都可以读取它。 这个名字空间主要用于集群使用,以防某些资源在整个集群中应该是可见和可读的。 这个名字空间的公共方面只是一种约定,而不是要求。
  • kube-node-lease 此名字空间用于与各个节点相关的 租约(Lease)对象。 节点租期允许 kubelet 发送心跳,由此控制面能够检测到节点故障

四、命令行方式对名字空间Namespace的增删改查操作

4.1 命令行创建

如下,创建名称为dev的名字空间

[root@master demo]# kubectl create namespace dev
namespace/dev created
[root@master demo]#

4.2 命令行查看

如下,查看名称为dev的名字空间

[root@master demo]# kubectl get namespace dev
NAME   STATUS   AGE
dev    Active   61s
[root@master demo]#

4.3 命令行删除

如下,删除名称为dev的名字空间

[root@master demo]# kubectl delete namespace dev
namespace "dev" deleted
[root@master demo]#

五、配置文件的方式对名字空间Namespace的增删改查操作

5.1 使用配置文件的方式创建

编写 dev_namespace.yaml文件,编辑内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: dev

使用如下命令创建

[root@master demo]# kubectl create -f dev_namespace.yaml
namespace/dev created
[root@master demo]#

5.2 使用配置文件的方式查询

查询如下:

[root@master demo]# kubectl get -f dev_namespace.yaml
NAME   STATUS   AGE
dev    Active   5s
[root@master demo]#

5.3 使用配置文件的方式删除

如下,其中dev_namespace.yaml同3.1中的内容

[root@master demo]# kubectl delete -f dev_namespace.yaml
namespace "dev" deleted
[root@master demo]#

5.4 使用配置文件的方式修改

编写 dev_namespace.yaml文件,编辑内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: dev

当不存在dev空间时,使用如下命令为创建

[root@master demo]# kubectl apply -f dev_namespace.yaml
namespace/dev created
[root@master demo]# 

查询如下:

[root@master demo]# kubectl get namespace dev
NAME   STATUS   AGE
dev    Active   6s
[root@master demo]#

编辑dev_namespace.yaml文件,增加labels内容,如下:

apiVersion: v1
kind: Namespace
metadata:
  name: dev
  labels:
    env: test

再次使用如下命令,此时为更新

[root@master demo]# kubectl apply -f dev_namespace.yaml
namespace/dev configured
[root@master demo]#

使用如下命令查询

[root@master demo]# kubectl describe namespace dev
Name:         dev
Labels:       env=test
              kubernetes.io/metadata.name=dev
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.
[root@master demo]#

注意apply -f 只能创建或者更新,是不能删除的,删除还是使用如下命令:

[root@master demo]# kubectl delete -f dev_namespace.yaml
namespace "dev" deleted
[root@master demo]#

六、查看是否属于名字空间的资源

使用如下命令查询

# 位于名字空间中的资源
kubectl api-resources --namespaced=true

# 不在名字空间中的资源
kubectl api-resources --namespaced=false

结果如下:

[root@master object_manage]# kubectl api-resources --namespaced=true
NAME                        SHORTNAMES   APIVERSION                     NAMESPACED   KIND
bindings                                 v1                             true         Binding
configmaps                  cm           v1                             true         ConfigMap
endpoints                   ep           v1                             true         Endpoints
events                      ev           v1                             true         Event
limitranges                 limits       v1                             true         LimitRange
persistentvolumeclaims      pvc          v1                             true         PersistentVolumeClaim
pods                        po           v1                             true         Pod
podtemplates                             v1                             true         PodTemplate
replicationcontrollers      rc           v1                             true         ReplicationController
resourcequotas              quota        v1                             true         ResourceQuota
secrets                                  v1                             true         Secret
serviceaccounts             sa           v1                             true         ServiceAccount
services                    svc          v1                             true         Service
controllerrevisions                      apps/v1                        true         ControllerRevision
daemonsets                  ds           apps/v1                        true         DaemonSet
deployments                 deploy       apps/v1                        true         Deployment
replicasets                 rs           apps/v1                        true         ReplicaSet
statefulsets                sts          apps/v1                        true         StatefulSet
localsubjectaccessreviews                authorization.k8s.io/v1        true         LocalSubjectAccessReview
horizontalpodautoscalers    hpa          autoscaling/v1                 true         HorizontalPodAutoscaler
cronjobs                    cj           batch/v1                       true         CronJob
jobs                                     batch/v1                       true         Job
leases                                   coordination.k8s.io/v1         true         Lease
endpointslices                           discovery.k8s.io/v1            true         EndpointSlice
events                      ev           events.k8s.io/v1               true         Event
ingresses                   ing          extensions/v1beta1             true         Ingress
pods                                     metrics.k8s.io/v1beta1         true         PodMetrics
ingresses                   ing          networking.k8s.io/v1           true         Ingress
networkpolicies             netpol       networking.k8s.io/v1           true         NetworkPolicy
poddisruptionbudgets        pdb          policy/v1                      true         PodDisruptionBudget
rolebindings                             rbac.authorization.k8s.io/v1   true         RoleBinding
roles                                    rbac.authorization.k8s.io/v1   true         Role
csistoragecapacities                     storage.k8s.io/v1beta1         true         CSIStorageCapacity
[root@master object_manage]# kubectl api-resources --namespaced=false
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
componentstatuses                 cs           v1                                     false        ComponentStatus
namespaces                        ns           v1                                     false        Namespace
nodes                             no           v1                                     false        Node
persistentvolumes                 pv           v1                                     false        PersistentVolume
mutatingwebhookconfigurations                  admissionregistration.k8s.io/v1        false        MutatingWebhookConfiguration
validatingwebhookconfigurations                admissionregistration.k8s.io/v1        false        ValidatingWebhookConfiguration
customresourcedefinitions         crd,crds     apiextensions.k8s.io/v1                false        CustomResourceDefinition
apiservices                                    apiregistration.k8s.io/v1              false        APIService
tokenreviews                                   authentication.k8s.io/v1               false        TokenReview
selfsubjectaccessreviews                       authorization.k8s.io/v1                false        SelfSubjectAccessReview
selfsubjectrulesreviews                        authorization.k8s.io/v1                false        SelfSubjectRulesReview
subjectaccessreviews                           authorization.k8s.io/v1                false        SubjectAccessReview
certificatesigningrequests        csr          certificates.k8s.io/v1                 false        CertificateSigningRequest
flowschemas                                    flowcontrol.apiserver.k8s.io/v1beta1   false        FlowSchema
prioritylevelconfigurations                    flowcontrol.apiserver.k8s.io/v1beta1   false        PriorityLevelConfiguration
nodes                                          metrics.k8s.io/v1beta1                 false        NodeMetrics
ingressclasses                                 networking.k8s.io/v1                   false        IngressClass
runtimeclasses                                 node.k8s.io/v1                         false        RuntimeClass
podsecuritypolicies               psp          policy/v1beta1                         false        PodSecurityPolicy
clusterrolebindings                            rbac.authorization.k8s.io/v1           false        ClusterRoleBinding
clusterroles                                   rbac.authorization.k8s.io/v1           false        ClusterRole
priorityclasses                   pc           scheduling.k8s.io/v1                   false        PriorityClass
csidrivers                                     storage.k8s.io/v1                      false        CSIDriver
csinodes                                       storage.k8s.io/v1                      false        CSINode
storageclasses                    sc           storage.k8s.io/v1                      false        StorageClass
volumeattachments                              storage.k8s.io/v1                      false        VolumeAttachment
[root@master object_manage]#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要将 io.fabric8 kubernetes-client 集成到 Spring Boot 应用程序,需要进行以下步骤: 1. 在 pom.xml 文件添加以下依赖: ```xml <dependency> <groupId>io.fabric8</groupId> <artifactId>kubernetes-client</artifactId> <version>5.7.0</version> </dependency> ``` 2. 在 Spring Boot 应用程序的配置文件,添加 Kubernetes 的配置信息。例如,可以在 application.yml 文件添加以下信息: ```yaml kubernetes: masterUrl: https://your-kubernetes-master-url.com namespace: your-namespace authToken: your-auth-token ``` 其,masterUrl 指定了 Kubernetes API Server 的地址,namespace 指定了要操作的 Kubernetes 命名空间,authToken 指定了访问 Kubernetes API Server 的认证令牌。 3. 在 Spring Boot 应用程序,注入 KubernetesClient 对象。例如,可以在一个自定义的 Spring Bean 注入 KubernetesClient 对象,然后在该 Bean 实现对 Kubernetes 资源的操作。例如: ```java @Component public class KubernetesService { @Autowired private KubernetesClient kubernetesClient; public void createDeployment(Deployment deployment) { kubernetesClient.apps().deployments().inNamespace("default").create(deployment); } public void deleteDeployment(String name) { kubernetesClient.apps().deployments().inNamespace("default").withName(name).delete(); } } ``` 在上面的代码,KubernetesService 是一个自定义的 Spring Bean,其注入了 KubernetesClient 对象。然后,可以在该 Bean 实现对 Kubernetes Deployment 的创建和删除操作。 4. 最后,可以在 Spring Boot 应用程序的控制器或其他组件使用 KubernetesService Bean 的方法,以实现对 Kubernetes 资源的操作。例如: ```java @RestController public class KubernetesController { @Autowired private KubernetesService kubernetesService; @PostMapping("/deployments") public void createDeployment(@RequestBody Deployment deployment) { kubernetesService.createDeployment(deployment); } @DeleteMapping("/deployments/{name}") public void deleteDeployment(@PathVariable String name) { kubernetesService.deleteDeployment(name); } } ``` 在上面的代码,KubernetesController 是一个 Spring MVC 控制器,其注入了 KubernetesService Bean,可以通过该 Bean 的方法实现对 Kubernetes Deployment 的创建和删除操作。然后,可以通过 Spring MVC 的注解将这些方法映射到 REST API ,以供外部调用。 通过以上步骤,就可以将 io.fabric8 kubernetes-client 集成到 Spring Boot 应用程序,实现对 Kubernetes 资源的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值