草庐IT

Kubernetes-namespace

程序猿Go师傅 2023-03-28 原文

Kubernetes namespace

什么是 Kubernetes namespace

在 Kubernetes 中,名字空间(Namespace)提供一种机制,将同一集群中的资源划分为相互隔离的组。

同一 namespace 内的资源名称要唯一,但跨 namespace 时没有这个要求。

namespace 作用域仅针对带有 namespace 的对象,例如 Deployment、Service 等,这种作用域对集群访问的对象不适用,例如 StorageClass、Node、PersistentVolume 等。

什么时候使用 Kubernetes namespace

namespace 适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑 namespace。

在多个用户之间划分集群资源的时候,可以使用 namespace。

什么时候不必使用 Kubernetes namespace

不必使用多个 namespace 来分隔仅仅轻微不同的资源,例如同一软件的不同版本,应该使用标签(label)来区分同一 namespace 中的不同资源。

如何使用 namespace

说明: 避免使用前缀 kube- 创建 namespace,因为它是为 Kubernetes 系统 namespace 保留的。

查看 namespace

你可以使用以下命令列出集群中现存的 namespace:

kubectl get namespace

Kubernetes 会创建四个初始 namespace:

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

为请求设置 namespace

要为当前请求设置 namespace,请使用 --namespace 参数。

kubectl run nginx --image=nginx --namespace=<namespace 名称>
kubectl get pods --namespace=<namespace 名称>

设置 namespace 偏好

你可以永久保存 namespace,以用于对应上下文中所有后续 kubectl 命令。

kubectl config set-context --current --namespace=<namespace 名称>

namespace 和 DNS

当你创建一个 service 时, Kubernetes 会创建一个相应的 DNS 条目。

该条目的形式是 <service 名称>.<namespace 名称>.svc.cluster.local,这意味着如果容器只使用 <service 名称>,它将被解析到本地 namespace 的 service。这对于跨多个 namespace(如开发、测试和生产)使用相同的配置非常有用。如果你希望跨 namespace 访问,则需要使用完全限定域名(FQDN)。

并非所有对象都在 namespace 中

大多数 kubernetes 资源(例如 Pod、Service、副本控制器等)都位于某些 namespace 中。但是 namespace 资源本身并不在 namespace 中。而且底层资源,例如节点和持久化卷不属于任何 namespace。

# 位于 namespace 中的资源
kubectl api-resources --namespaced=true

# 不在 namespace 中的资源
kubectl api-resources --namespaced=false

参考资料

思维导图

视频学习

B站学习

从零开始学习k8s:k8s namespace

抖音学习

有关Kubernetes-namespace的更多相关文章

  1. ruby-on-rails - 具有管理 namespace 的 Rails 3 中的 I18n - 2

    我正在根据Rails指南的建议开发Rails应用程序,以创建包含翻译的文件夹树和文件。我的文件夹树与此类似:|-defaults|---es.rb|---en.rb|-models|---book|-----es.rb|-----en.rb|-views|---defaults|-----es.rb|-----en.rb|---books|-----es.rb|-----en.rb|---users|-----es.rb|-----en.rb|---navigation|-----es.rb|-----en.rbconfig/locales/views/books/en.yml中的内容

  2. ruby-on-rails - rails : has_many through not returning correctly with namespaced models - 2

    我有3个模型。Rom::Favorite,Rom::Card,User。我在创建Userhas_manyrom_cardsthroughrom_favorites时遇到问题这是我模型的相关部分Rom::CardclassRom::Card用户classUserRom::收藏classRom::Favorite{:scope=>:user_id}self.table_name="rom_favorites"end除了之外,关联的所有实用方法都有效a=User.find(1)a.rom_cards调用a.rom_cards返回一个空数组,它似乎运行了这个SQL查询SELECT"rom_fa

  3. ruby /萨翁 : Having trouble with namespace for a soap request - 2

    我在更改正在构建的SOAPxml的命名空间时遇到问题。我不确定如何将“xmlns:env=”更改为“xmlns:soapenv=”,将“xmlns:tns=”更改为“xmlns:web=”我要构建的内容:100degreeCelsiusdegreeFahrenheit我目前得到的100degreeCelsiusdegreeFahrenheit我的代码:client=Savon.client(wsdl:"http://www.webservicex.net/ConvertTemperature.asmx?WSDL")message={temperature:'100',FromUnit:

  4. kubernetes集群划分节点 - 2

    Kubernetes(K8s)是一个用于管理容器化应用程序的开源平台,可以帮助开发人员更轻松地部署、管理和扩展应用程序。在Kubernetes中,集群划分是一种重要的概念,可以帮助我们更好地组织和管理集群中的节点和资源。本文将介绍如何使用Kubernetes对集群进行划分,并提供详细的操作示例,希望能够帮助读者更好地了解和使用Kubernetes平台。Node划分Node划分是将集群中的节点按照一定的规则进行划分。在Kubernetes中,可以使用NodeSelector和Affinity机制来实现Node划分。NodeSelectorNodeSelector是一种将Pod调度到符合特定节点标

  5. 云原生(十八) | Kubernetes篇之Kubernetes(k8s)工作负载 - 2

    文章目录Kubernetes(k8s)工作负载一、Workloads二、Pod三、Deployment四、RC、RS、DaemonSet、StatefulSet五、Job、CronJob1、Job2、CronJob六、GCKubernetes(k8s)工作负载一、Workloads什么是工作负载(Workloads)工作负载是运行在Kubernetes上的一个应用程序。一个应用很复杂,可能由单个组件或者多个组件共同完成。无论怎样我们可以用一组Pod来表示一个应用,也就是一个工作负载Pod又是一组容器(Containers)所以关系又像是这样工作负载(Workloads)控制一组PodPod控制

  6. ruby-on-rails - rails 路线 : define root to namespace - 2

    我有2个Controller:app//controllersposts_controllers.rb/mobileposts_controllers.rb我的routes.rb看起来像这样:root:to=>"posts#index"resources:postsnamespace:mobiledoroot:to=>"posts#index"resources:postsend但是当我访问/mobile时,它无论如何都会渲染第一个Controller的索引页面,也试过这个:namespace:mobiledoroot:to=>"mobile/posts#index"resources

  7. ruby-on-rails - 如何解决 Rails 模型 namespace 冲突 - 2

    到目前为止的故事:我有一个Rails应用程序,其模型名为“Term”。在尝试安装Cucumber之前一切都很好。运行时rakecucumber我明白了Termisnotaclass(TypeError)发生这种情况是因为Cucumber包含另一个gem,'term-ansicolor'(在控制台中执行漂亮的彩色文本输出),并且term-ansicolor定义了一个名为“Term”的模块。Cucumber在包含Rails模型之前包含term-ansicolor,因此在加载“Term”模型时“Term”已经被定义为一个模块。顶级模块和类在Ruby中不能有相同的名称,因此会发生冲突。不想重命

  8. ruby - ruby 中的短 namespace 首字母缩写词 - 2

    我是ruby的新手。我使用IronRuby,我的ruby​​代码有很长的命名空间:Company::Division::Group::Product::Package.new因为我多次使用这个ns有没有办法创建一个快捷方式?在c#中,我添加了一个using子句,因此我不需要指定完整的前缀。 最佳答案 您可以简单地将它分配给另一个常量,例如:Package=Company::Division::Group::Product::PackagePackage.new 关于ruby-ruby中的

  9. ruby-on-rails - 在 Controller 中找不到 namespace 内的 Ruby on Rails 模型 - 2

    我是Rails的新手,无法弄清楚这个问题...我有一个ControllerAdmin::Blog::EntriesController在app/controllers/admin/blog/entries_controller.rb中定义我有一个模型叫做Blog::Entry定义在app/model/blog/entry.rb当我尝试从Controller访问我的模型时,我从这一行得到一个"uninitializedconstantAdmin::Blog::EntriesController::Blog":@blog_entries=Blog::Entry.find(:all)很明显,

  10. idea连接远程k8s集群使用kubernetes-client - 2

    文章目录一.k8s集群修改config1.1备份当前k8s集群配置文件1.2删除当前k8s集群的apiserver的cert和key1.3生成新的apiserver的cert和key1.4刷新admin.conf1.5重启apiserver1.6刷新.kube/config二.安装kubectl2.1下载kubectl2.2配置kubectl三.使用kubernetes-client操作k8s集群3.1依赖3.2注意(可忽略)3.3创建StatefulSet3.4运行shell命令3.5删除StatefulSet3.6线上运行注意一.k8s集群修改config因为默认的是内网IP,复制出来后,

随机推荐