名称空间

This commit is contained in:
huanqing.shao
2019-10-14 20:31:46 +08:00
parent 18063ef604
commit 691edd3e86
14 changed files with 495 additions and 23 deletions

View File

@ -1,16 +1,17 @@
<template>
<div class="adsense-page-top">
<!-- <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- AdSensePageTop-Display -->
<ins class="adsbygoogle"
style="display:block; text-align:center;"
data-ad-layout="in-article"
data-ad-format="fluid"
style="display:block"
data-ad-client="ca-pub-3313149841665250"
data-ad-slot="6968314981"></ins>
data-ad-slot="6238375600"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script> -->
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
</script>
<!-- <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block"
data-ad-format="fluid"
@ -19,7 +20,7 @@
data-ad-slot="4299889232"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</script> -->
</div>
</template>
@ -32,10 +33,9 @@ export default {
<style scoped>
.adsense-page-top {
/* background-color: green; */
cursor: pointer;
padding-right: 2px;
/* padding-right: 2px;
border: 1px solid #d7dae2;
height: 124px !important;
overflow: hidden;
overflow: hidden; */
}
</style>

View File

@ -4,7 +4,7 @@
<Qq></Qq> 群号: 808894550 <span style="color: red; font-weight: 500;">在线答疑</span>也可以扫描本文末尾的二维码加群
</p>
<slot></slot>
<div class="adsense-page-top">
<!-- <div class="adsense-page-top">
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block;"
@ -15,15 +15,7 @@
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<!-- <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:inline-block;width:320px;height:50px"
data-ad-client="ca-pub-3313149841665250"
data-ad-slot="7680268021"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script> -->
</div>
</div> -->
</div>
</template>

View File

@ -279,6 +279,16 @@ module.exports = {
'k8s-bg/architecture/controller',
]
},
{
title: '操作Kubernetes',
collapsable: true,
children: [
'k8s-intermediate/obj/k8s-object',
'k8s-intermediate/obj/manage',
'k8s-intermediate/obj/names',
'k8s-intermediate/obj/namespaces',
]
},
{
title: '容器',
collapsable: true,

View File

@ -0,0 +1,19 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # 运行 2 个容器化应用程序副本
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80

View File

@ -24,6 +24,9 @@
<a href="/learning/">
<span style="color: #42b983;">提供K8S免费教程</span>
</a>
<a style="margin-left: 10px;" aria-label="github">
<iframe style="display:inline-block;vertical-align:middle;" src="https://ghbtns.com/github-btn.html?user=eip-work&amp;repo=kuboard-press&amp;type=star&amp;count=true&amp;size=small" frameborder="0" scrolling="0" width="100px" height="20px"></iframe>
</a>
<a href="https://webscan.qianxin.com/safe/detail/?query=kuboard.cn"><img border="0" src="https://webscan.qianxin.com/api/authcode?code=ab3ebe0592248d28477251ecaf72154f" style="display: none;"/></a>
<!-- <span style="color: #2c3e50;">|</span>
<a href="/support/#%E5%BE%AE%E6%9C%8D%E5%8A%A1%E8%90%BD%E5%9C%B0%E5%92%A8%E8%AF%A2">

View File

@ -1,7 +1,7 @@
<template>
<main class="page">
<div class="page-nav" style="max-width: 1000px; margin-top: 56px;">
<!-- <AdSensePageTop></AdSensePageTop> -->
<AdSensePageTop></AdSensePageTop>
</div>
<!-- <AdsenseParagraph></AdsenseParagraph> -->
<slot name="top"/>

View File

@ -0,0 +1,15 @@
---
# vssueId: 135
layout: LearningLayout
description: Kubernetes教程_
meta:
- name: keywords
content: Kubernetes
---
# Resource Quotas
<AdSenseTitle />
正在撰写 ...

View File

@ -0,0 +1,82 @@
---
vssueId: 133
layout: LearningLayout
description: Kubernetes教程_本文描述了Kubernetes对象与Kubernetes_API的关系_以及您如何在.yaml格式的文件中定义Kubernetes对象
meta:
- name: keywords
content: Kubernetes对象,Kubernetes Object
---
# 什么是Kubernetes对象
<AdSenseTitle>
> 参考文档: [Understanding Kubernetes Objects](https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/)
本文描述了Kubernetes对象与Kubernetes API的关系以及您如何在 `.yaml` 格式的文件中定义Kubernetes对象。
</AdSenseTitle>
Kubernetes对象指的是Kubernetes系统的持久化实体所有这些对象合起来代表了你集群的实际情况。常规的应用里我们把应用程序的数据存储在数据库中Kubernetes将其数据以Kubernetes对象的形式通过 api server存储在 etcd 中。具体来说这些数据Kubernetes对象描述了
* 集群中运行了哪些容器化应用程序(以及在哪个节点上运行)
* 集群中对应用程序可用的资源
* 应用程序相关的策略定义,例如,重启策略、升级策略、容错策略
* 其他Kubernetes管理应用程序时所需要的信息
一个Kubernetes对象代表着用户的一个意图a record of intent一旦您创建了一个Kubernetes对象Kubernetes将持续工作以尽量实现此用户的意图。创建一个 Kubernetes对象就是告诉Kubernetes您需要的集群中的工作负载是什么集群的 **目标状态**)。请参考 [控制器](/learning/k8s-bg/architecture/controller.html)、[声明式配置](/learning/k8s-intermediate/workload/wl-deployment/#deployment-概述)
操作 Kubernetes 对象(创建、修改、删除)的方法主要有:
* [kubectl](/install/install-kubectl.html) 命令行工具
* [kuboard](/install/install-k8s-dashboard.html) 图形界面工具
kubectl、kuboard 最终都通过调用 [kubernetes API](https://kubernetes.io/docs/concepts/overview/kubernetes-api/) 来实现对 Kubernetes 对象的操作。您也可以直接在自己的程序中调用 Kubernetes API此时您可能要有用到 [Client Libraries](https://kubernetes.io/docs/reference/using-api/client-libraries/)
## 对象的spec和status
每一个 Kubernetes 对象都包含了两个重要的字段:
* `spec` 必须由您来提供,描述了您对该对象所期望的 **目标状态**
* `status` 只能由 Kubernetes 系统来修改,描述了该对象在 Kubernetes 系统中的 **实际状态**
Kubernetes通过对应的[控制器](/learning/k8s-bg/architecture/controller.html),不断地使实际状态趋向于您期望的目标状态。
例如,一个 Kubernetes Deployment 对象可以代表一个应用程序在集群中的运行状态。当您创建 Deployment 对象时,您可以通过 Deployment 的 spec 字段指定需要运行应用程序副本数假设为3。Kubernetes 从 Deployment 的 spec 中读取这些信息,并为您创建指定容器化应用程序的 3 个副本,再将实际的状态更新到 Deployment 的 status 字段。Kubernetes 系统将不断地比较 **实际状态** staus 和 **目标状态** spec 之间的差异并根据差异做出对应的调整。例如如果任何一个副本运行失败了Kubernetes 将启动一个新的副本,以替代失败的副本。
## 描述Kubernetes对象
当您在 Kubernetes 中创建一个对象时,您必须提供
* 该对象的 spec 字段,通过该字段描述您期望的 **目标状态**
* 该对象的一些基本信息,例如名字
如果使用 kubectl 创建对象,您必须编写 `.yaml` 格式的文件,如果通过 Kuboard 图形化工具创建则在Kuboard 对应的界面功能中完成表单填写即可。
下面是一个 kubectl 可以使用的 `.yaml` 文件:
<<< @/.vuepress/public/statics/learning/obj/deployment.yaml
使用 kube apply 命令可以创建该 `.yaml` 文件中的 Deployment 对象
``` sh
kubectl apply -f https://kuboard.cn/statics/learning/obj/deployment.yaml
```
输出结果如下所示:
```
deployment.apps/nginx-deployment created
```
使用 kubectl delete 命令可以删除该 `.yaml` 文件中的 Deployment 对象:
``` sh
kubectl delete -f https://kuboard.cn/statics/learning/obj/deployment.yaml
```
## 必填字段
在上述的 `.yaml` 文件中,如下字段是必须填写的:
* **apiVersion** 用来创建对象时所使用的Kubernetes API版本
* **kind** 被创建对象的类型
* **metadata** 用于唯一确定该对象的元数据:包括 `name` 和 `namespace`,如果 `namespace` 为空,则默认值为 `default`
* **spec** 描述您对该对象的期望状态
不同类型的 Kubernetes其 `spec` 对象的格式不同(含有不同的内嵌字段),通过 [API 手册](https://kubernetes.io/docs/reference/#api-reference) 可以查看 Kubernetes 对象的字段和描述。例如,假设您想了解 Pod 的 `spec` 定义,可以在 [这里](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.16/#podspec-v1-core)找到Deployment 的 `spec` 定义可以在 [这里](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.16/#deploymentspec-v1-apps) 找到

View File

@ -0,0 +1,14 @@
---
# vssueId: 133
layout: LearningLayout
description: Kubernetes教程_本文描述了Kubernetes对象与Kubernetes_API的关系_以及您如何在.yaml格式的文件中定义Kubernetes对象
meta:
- name: keywords
content: Kubernetes对象,Kubernetes Object
---
# Labels and Selectors
<AdSenseTitle />
正在撰写 ...

View File

@ -0,0 +1,169 @@
---
vssueId: 134
layout: LearningLayout
description: Kubernetes教程_kubectl_命令行工具支持多种途径以创建和管理Kubernetes对象_本文档描述了3种不同的方式
meta:
- name: keywords
content: Kubernetes对象,管理Kubernetes对象,Kubernetes Object
---
# 管理Kubernetes对象
<AdSenseTitle>
> 参考文档: [Kubernetes Object Management](https://kubernetes.io/docs/concepts/overview/working-with-objects/object-management/)
kubectl 命令行工具支持多种途径以创建和管理 Kubernetes 对象。本文档描述了3种不同的方式。更多的细节请参考 [Kubectl book](https://kubectl.docs.kubernetes.io/)
</AdSenseTitle>
## 管理方式
| 管理方式 | 操作对象 | 推荐的环境 | 参与编辑的人数 | 学习曲线 |
| ---------------- | ---------------------------- | ---------- | -------------- | -------- |
| 指令性的命令行 | Kubernetes对象 | 开发环境 | 1+ | 最低 |
| 指令性的对象配置 | 单个 yaml 文件 | 生产环境 | 1 | 适中 |
| 声明式的对象配置 | 包含多个 yaml 文件的多个目录 | 生产环境 | 1+ | 最高 |
::: danger
同一个Kubernetes对象应该只使用一种方式管理否则可能会出现不可预期的结果
:::
::: tip Kuboard
* kubectl 是 Kubernetes 官方的管理工具,由于命令行 + yaml 文件这个特性,其操作难度和学习曲线都是很高的,作为 Kubernetes 的资深用户,是需要学会如何使用 kubectl 的。在实际生产环境的使用中,作者推荐大家使用 KuboardKuboard 是一款免费的基于Kubernetes的微服务管理界面已经在许多的生产环境中得到了检验。
* Kuboard 可以和 kubectl 配合使用,但是您必须对两者都有所了解。
:::
## 指令性的命令行
当使用指令性的命令行imperative commands用户通过向 `kubectl` 命令提供参数的方式,直接操作集群中的 Kubernetes 对象。此时,用户无需编写或修改 `.yaml` 文件。
这是在 Kubernetes 集群中执行一次性任务的一个简便的办法。由于这种方式直接修改 Kubernetes 对象,也就无法提供历史配置查看的功能。
### 例子
创建一个 Deployment 对象,以运行一个 nginx 实例:
``` sh
kubectl run nginx --image nginx
```
下面的命令完成了相同的任务,但是命令格式不同:
``` sh
kubectl create deployment nginx --image nginx
```
### 优缺点
与编写 `.yaml` 文件进行配置的方式相比的优势:
* 命令简单,易学易记
* 只需要一个步骤,就可以对集群执行变更
缺点:
* 使用命令无法进行变更review的管理
* 不提供日志审计
* 没有创建新对象的模板
## 指令性的对象配置
使用指令性的对象配置imperative object configuration需要向 kubectl 命令指定具体的操作create,replace,apply,delete等可选参数以及至少一个配置文件的名字。配置文件中必须包括一个完整的对象的定义可以是 yaml 格式,也可以是 json 格式。
::: warning
`replace` 指令将直接使用对象中新的 spec 内容替换原有的 spec 内容如果原有spec中存在配置文件中没有定义的字段都将被丢弃。这种方法不能够应用在那些 spec 对象独立于配置文件进行更新的情况。例如 `LoadBalancer` 类型的 Service其 spec 中的 `externalIPs` 字段由集群更新。
:::
### 例子
通过配置文件创建对象
``` sh
kubectl create -f nginx.yaml
```
删除两个配置文件中的对象
``` sh
kubectl delete -f nginx.yaml -f redis.yaml
```
直接使用配置文件中的对象定义替换Kubernetes中对应的对象
``` sh
kubectl replace -f nginx.yaml
```
### 优缺点
与指令性命令行相比的优点:
* 对象配置文件可以存储在源代码管理系统中,例如 git
* 对象配置文件可以整合进团队的变更管理流程,并进行审计和复核
* 对象配置文件可以作为一个模板,直接用来创建新的对象
与指令性命令行相比的缺点:
* 需要理解对象配置文件的基本格式
* 需要额外编写 yaml 文件
与声明式的对象配置相比的优点:
* 指令性的对象配置更简单更易于理解
* 指令性的对象配置更成熟
与声明式的对象配置相比的缺点:
* 指令性的对象配置基于文件进行工作,而不是目录
* 如果直接更新 Kubernetes 中对象,最好也同时修改配置文件,否则在下一次替换时,这些更新将丢失
## 声明式的对象配置
当使用声明式的对象配置时用户操作本地存储的Kubernetes对象配置文件然而在将文件传递给 kubectl 命令时,并不指定具体的操作,由 kubectl 自动检查每一个对象的状态并自行决定是创建、更新、还是删除该对象。使用这种方法时,可以直接针对一个或多个文件目录进行操作(对不同的对象可能需要执行不同的操作)。
::: tip
声明式对象配置将保留其他用户对Kubernetes对象的更新即使这些更新没有合并到对象配置文件中。因为当Kubernetes中已经存在该对象时声明式对象配置使用 `patch` API接口此时会把变化的内容更新进去而不是使用 `replace` API接口该接口替换整个 spec 信息。
:::
### 例子
处理 `configs` 目录中所有配置文件中的Kubernetes对象根据情况创建对象、或更新Kubernetes中已经存在的对象。可以先执行 `diff` 指令查看具体的变更,然后执行 `apply` 指令执行变更:
``` sh
kubectl diff -f configs/
kubectl apply -f configs/
```
递归处理目录中的内容:
``` sh
kubectl diff -R -f configs/
kubectl apply -R -f configs/
```
### 优缺点
与指令性的对象配置相比,优点有:
* 直接针对Kubernetes已有对象的修改将被保留即使这些信息没有合并到配置文件中。译者注也许这是一个缺点因为我不敢相信我的配置文件了或者我要禁止使用其他手段修改Kubernetes中已有的对象
* 声明式的对象配置可以支持多文件目录的处理,可以自动探测应该对具体每一个对象执行什么操作(创建、更新、删除)
缺点:
* 声明式的对象配置复杂度更高Debug更困难
* 部分更新对象时,带来复杂的合并操作
## 延伸阅读
* [Managing Kubernetes Objects Using Imperative Commands](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/imperative-command/)
* [Managing Kubernetes Objects Using Object Configuration (Imperative)](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/imperative-config/)
* [Managing Kubernetes Objects Using Object Configuration (Declarative)](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/)
* [Managing Kubernetes Objects Using Kustomize (Declarative)](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/)
* [Kubectl Command Reference](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands/)
* [Kubectl Book](https://kubectl.docs.kubernetes.io/)
* [Kubernetes API Reference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.16/)
::: tip
作者在实际部署一个 30+ 微服务部署单元的 Spring Cloud 应用时,编写了 40 多个 YAML 文件,每个 YAML 文件多达 100-500 行配置。为了使同一套 YAML 文件能够适应开发、测试、生产环境,将其分成 base、dev、test、staging、prod 等目录,使用 [kustomize](https://github.com/kubernetes-sigs/kustomize) 将公共部分提取到 base 中。在经历了如此这般的痛苦之后,编写了 Kuboard。
从更好地学习和理解 Kubernetes 的角度来说,是一定要学会如何使用 kubectl 的,实际在 Kubernetes 上部署微服务应用时,您会发现 Kuboard 用起来更顺手。
:::

View File

@ -0,0 +1,55 @@
---
vssueId: 135
layout: LearningLayout
description: Kubernetes教程_Kubernetes_REST_API中_所有的对象都是通过_name_和_UID_唯一性确定
meta:
- name: keywords
content: Kubernetes 对象,管理Kubernetes对象,Kubernetes Object
---
# 名称
<AdSenseTitle>
Kubernetes REST API 中,所有的对象都是通过 `name``UID` 唯一性确定。查看文档 [identifiers design doc](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/identifiers.md) 可了解更多关于 `name``UID` 的规则。
* [Names](#Names)
* [UIDs](#UIDs)
</AdSenseTitle>
## Names
可以通过 `namespace` + `name` 唯一性地确定一个 RESTFUL 对象,例如:
`/api/v1/namespaces/{namespace}/pods/{name}`
参考 [名称空间](./namespaces.html)
同一个名称空间下,同一个类型的对象,可以通过 `name` 唯一性确定。如果删除该对象之后,可以再重新创建一个同名对象。
依据命名规则Kubernetes对象的名字应该
* 最长不超过 253个字符
* 必须由小写字母、数字、减号 `-`、小数点 `.` 组成
* 某些资源类型有更具体的要求
例如,下面的配置文件定义了一个 name 为 `nginx-demo` 的 Pod该 Pod 包含一个 name 为 `nginx` 的容器:
``` yaml {4,7}
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
```
## UIDs
UID 是由 Kubernetes 系统生成的,唯一标识某个 Kubernetes 对象的字符串。
Kubernetes集群中没创建一个对象都有一个唯一的 UID。用于区分多次创建的同名对象如前所述按照名字删除对象后重新再创建同名对象时两次创建的对象 name 相同,但是 UID 不同。)

View File

@ -0,0 +1,14 @@
---
# vssueId: 133
layout: LearningLayout
description: Kubernetes教程_本文描述了Kubernetes对象与Kubernetes_API的关系_以及您如何在.yaml格式的文件中定义Kubernetes对象
meta:
- name: keywords
content: Kubernetes对象,Kubernetes Object
---
# Share a Cluster with Namespaces
<AdSenseTitle />
正在撰写 ...

View File

@ -0,0 +1,97 @@
---
vssueId: 136
layout: LearningLayout
description: Kubernetes教程_Kubernetes通过名称空间namespace在同一个物理集群上支持多个虚拟集群。
meta:
- name: keywords
content: Kubernetes Ingress,Ingress
---
# 名称空间
<AdSenseTitle>
> 参考文档:
Kubernetes通过名称空间namespace在同一个物理集群上支持多个虚拟集群。
* [何时使用名称空间](#何时使用名称空间)
* [如何使用名称空间](#如何使用名称空间)
* [名称空间与DNS](#名称空间与DNS)
* [并非所有对象都在名称空间里](#并非所有对象都在名称空间里)
</AdSenseTitle>
## 何时使用名称空间
名称空间的用途是,为不同团队的用户(或项目)提供虚拟的集群空间,也可以用来区分开发环境/测试环境、准上线环境/生产环境。
名称空间为 [名称](./names.html) 提供了作用域。名称空间内部的同类型对象不能重名但是跨名称空间可以有同名同类型对象。名称空间不可以嵌套任何一个Kubernetes对象只能在一个名称空间中。
名称空间可以用来在不同的团队(用户)之间划分集群的资源,参考 [resource quota](/learning/k8s-advanced/policy/rq.html)
在 Kubernetes 将来的版本中,同名称空间下的对象将默认使用相同的访问控制策略。
当KUbernetes对象之间的差异不大时无需使用名称空间来区分例如同一个软件的不同版本只需要使用 [labels](./labels.html) 来区分即可。
## 如何使用名称空间
参考 [管理名称空间](./namespace-op.html) 了解如何创建和删除名称空间。
### 查看名称空间
执行命令 `kubectl get namespaces` 可以查看名称空间,输出结果如下所示:
```
NAME STATUS AGE
default Active 1d
kube-system Active 1d
kube-public Active 1d
```
::: tip
Kuboard 中,登录以后,集群概览页的上方就是名称空间,请参考 [名称空间管理](/guide/cluster/namespace.html)
:::
Kubernetes 安装成功后,默认有初始化了三个名称空间:
* **default** 默认名称空间,如果 Kubernetes 对象中不定义 `metadata.namespace` 字段,该对象将放在此名称空间下
* **kube-system** Kubernetes系统创建的对象放在此名称空间下
* **kube-public** 此名称空间自动在安装集群是自动创建并且所有用户都是可以读取的即使是那些未登录的用户。主要是为集群预留的例如某些情况下某些Kubernetes对象应该被所有集群用户看到。
### 在执行请求时设定namespace
执行 kubectl 命令时,可以使用 `--namespace` 参数指定名称空间,例如:
``` sh
kubectl run nginx --image=nginx --namespace=<您的名称空间>
kubectl get pods --namespace=<您的名称空间>
```
### 设置名称空间偏好
可以通过 `set-context` 命令改变当前 [kubectl 上下文](/install/config-kubectl.html#切换当前访问的集群) 的名称空间,后续所有命令都默认在此名称空间下执行。
``` sh
kubectl config set-context --current --namespace=<您的名称空间>
# 验证结果
kubectl config view --minify | grep namespace:
```
## 名称空间与DNS
当您创建一个 Service 时Kubernetes 为其创建一个对应的 [DNS 条目](/learning/k8s-intermediate/service/dns.html)。该 DNS 记录的格式为 `<service-name>.<namespace-name>.svc.cluster.local`,也就是说,如果在容器中只使用 `<service-name>`其DNS将解析到同名称空间下的 Service。这个特点在多环境的情况下非常有用例如将开发环境、测试换寂静、生产环境部署在不同的名称空间下应用程序只需要使用 `<service-name>` 即可进行服务发现无需为不同的环境修改配置。如果您想跨名称空间访问服务则必须使用完整的域名fully qualified domain nameFQDN
## 并非所有对象都在名称空间里
大部分的 Kubernetes 对象例如Pod、Service、Deployment、StatefulSet等都必须在名称空间里。但是某些更低层级的对象是不在任何名称空间中的例如 [nodes](/learning/k8s-bg/architecture/nodes.html)、[persistentVolumes](/learning/k8s-intermediate/persistent/pv.html)、[storageClass](/learning/k8s-intermediate/persistent/storage-class.html) 等
执行一下命令可查看哪些 Kubernetes 对象在名称空间里,哪些不在:
``` sh
# 在名称空间里
kubectl api-resources --namespaced=true
# 不在名称空间里
kubectl api-resources --namespaced=false
```

View File

@ -1,5 +1,5 @@
---
vssueId: 132=
vssueId: 132
layout: LearningLayout
description: Kubernetes教程_某些情况下_DNS或者其他的域名解析方法可能不太适用_您需要配置_/etc/hosts文件_在Linux下是比较容易做到的_在Kubernetes中_可以通过Pod定义中的_`hostAliases`_字段向Pod的/etc/hosts添加条目。
meta:
@ -111,7 +111,9 @@ fe00::2 ip6-allrouters
Kubelet [管理](https://github.com/kubernetes/kubernetes/issues/14633) `hosts` Pod 中每个容器的 hosts 文件,以便可以阻止 Docker 在容器启动以后 [修改](https://github.com/moby/moby/issues/17190) 该文件。
细节情况请参考两个 github issue
[https://github.com/kubernetes/kubernetes/issues/14633](https://github.com/kubernetes/kubernetes/issues/14633)
[https://github.com/moby/moby/issues/17190](https://github.com/moby/moby/issues/17190)
由于该文件已经被 Kubelet 管理起来,任何对该文件手工修改的内容,都将在 Kubelet 重启容器或者 Pod 重新调度时被覆盖。因此,最好是通过 `hostAliases` 修改 Pod 的 /etc/hosts 文件,而不是手工修改。