diff --git a/.vuepress/components/AdSenseRightSide.vue b/.vuepress/components/AdSenseRightSide.vue
index 56daa72..849bfe4 100644
--- a/.vuepress/components/AdSenseRightSide.vue
+++ b/.vuepress/components/AdSenseRightSide.vue
@@ -33,7 +33,7 @@ export default {
position: fixed;
bottom: 80px;
right: 10px;
- background-color: grey;
+ /* background-color: grey; */
}
diff --git a/.vuepress/config.js b/.vuepress/config.js
index ec17ea6..3fbf5ed 100644
--- a/.vuepress/config.js
+++ b/.vuepress/config.js
@@ -290,6 +290,8 @@ module.exports = {
'k8s-intermediate/obj/namespaces',
'k8s-intermediate/obj/namespace-op',
'k8s-intermediate/obj/labels',
+ 'k8s-intermediate/obj/annotations',
+ 'k8s-intermediate/obj/field',
]
},
{
diff --git a/learning/k8s-intermediate/obj/annotations.md b/learning/k8s-intermediate/obj/annotations.md
index 1c2fbdf..3ed9d05 100644
--- a/learning/k8s-intermediate/obj/annotations.md
+++ b/learning/k8s-intermediate/obj/annotations.md
@@ -1,14 +1,87 @@
---
-# vssueId: 133
+vssueId: 138
layout: LearningLayout
-description: Kubernetes教程_标签Label是附加在Kubernetes对象上的一组名值对_其意图是按照对用户有意义的方式来标识Kubernetes对象_同时_又不对Kubernetes的核心逻辑产生影响_标签可以用来组织和选择一组Kubernetes对象
+description: Kubernetes教程_注解annotation可以用来向Kubernetes对象的metadata.annotations字段添加任意的信息_Kubernetes的客户端或者自动化工具可以存取这些信息以实现其自定义的逻辑
meta:
- name: keywords
content: Kubernetes 教程,Kubernetes Annotation,Kubernetes 注解
---
-# 注解 annotation
+# 注解annotation
+注解(annotation)可以用来向 Kubernetes 对象的 `metadata.annotations` 字段添加任意的信息。Kubernetes 的客户端或者自动化工具可以存取这些信息以实现其自定义的逻辑。
+
+[[TOC]]
+
+
+## 向Kubernetes对象添加注解
+
+Kubernetes 对象的 `metadata` 字段可以添加自定义的标签(label)或者注解(annotation)。标签用来选择对象或者用来查找符合指定条件的一组对象。与此相对,注解不是用来标记对象或者选择对象的。`metadata` 中的注解可以很大,也可以很小;可以是结构化的,也可以是非结构化的;还可以包括标签中不允许出现的字符。
+
+与标签相似,注解也是 key/value map,例如:
+``` yaml
+metadata:
+ annotations:
+ key1: value1
+ key2: value2
+```
+
+类似于下面的信息可以记录在注解中:
+* 声明式配置层用到的状态信息。
+* Build、release、image信息,例如 timestamp、release ID、git branch、PR number、image hash、registry address
+* 日志、监控、分析、审计系统的参数
+* 第三方工具所需要的信息,例如 name、version、build information、URL
+* 轻量级的发布工具用到的信息,例如,config、checkpoint
+* 负责人的联系方式,例如,电话号码、网址、电子信箱
+* 用户用来记录备忘信息的说明,例如,对标准镜像做了什么样的修改、维护过程中有什么特殊信息需要记住
+
+下面是一个来自于实际 Deployment 的注解:
+``` yaml
+metadata:
+ annotations:
+ deployment.kubernetes.io/revision: 7 # 由Deployment控制器添加,用于记录当前发布的修改次数
+ k8s.eip.work/displayName: busybox # Kuboard添加,Deployment显示在Kuboard界面上的名字
+ k8s.eip.work/ingress: false # Kuboard添加,根据此参数显示Deployment是否配置了Ingress
+ k8s.eip.work/service: none # Kuboard添加,根据此参数显示Deployment是否配置了Service
+```
+
+除了使用注解,您也可以将这类信息存放在一个外部的数据库,然而,在使用、分享这些信息的时候,可能会变得难以管理。
+
+## 句法和字符集
+
+注解是一组名值对。
+
+注解的 key 有两个部分:可选的前缀和标签名,通过 `/` 分隔。
+* 注解名:
+ * 标签名部分是必须的
+ * 不能多于 63 个字符
+ * 必须由字母、数字开始和结尾
+ * 可以包含字母、数字、减号`-`、下划线`_`、小数点`.`
+* 注解前缀:
+ * 注解前缀部分是可选的
+ * 如果指定,必须是一个DNS的子域名,例如:k8s.eip.work
+ * 不能多于 253 个字符
+ * 使用 `/` 和标签名分隔
+
+如果省略注解前缀,则注解的 key 将被认为是专属于用户的。Kubernetes的系统组件(例如,kube-scheduler、kube-controller-manager、kube-apiserver、kubectl 或其他第三方组件)向用户的Kubernetes对象添加注解时,必须指定一个前缀。
+
+`kubernetes.io/` 和 `k8s.io/` 这两个前缀是 Kubernetes 核心组件预留的。Kuboard 使用 `k8s.eip.work` 这个前缀。
+
+下面的例子中,Pod包含一个注解 `imageregistry: https://hub.docker.com/`
+``` yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: annotations-demo
+ annotations:
+ imageregistry: "https://hub.docker.com/"
+spec:
+ containers:
+ - name: nginx
+ image: nginx:1.7.9
+ ports:
+ - containerPort: 80
+```
diff --git a/learning/k8s-intermediate/obj/field.md b/learning/k8s-intermediate/obj/field.md
new file mode 100644
index 0000000..8527156
--- /dev/null
+++ b/learning/k8s-intermediate/obj/field.md
@@ -0,0 +1,77 @@
+---
+# vssueId: 138
+layout: LearningLayout
+description: Kubernetes教程_字段选择器Field_Selector可以用来基于的一个或多个字段的取值来选取一组Kubernetes对象_下面有一些示例性的字段选择器
+meta:
+ - name: keywords
+ content: Kubernetes 教程,Kubernetes Field Selector, K8S教程, K8S 教程
+---
+
+# 字段选择器
+
+
+
+
+[[TOC]]
+
+
+
+## 概述
+
+字段选择器(Field Selector)可以用来基于的一个或多个字段的取值来选取一组Kubernetes对象。下面有一些示例性的字段选择器:
+
+* `metadata.name=my-service`
+* `metadata.namespace!=default`
+* `status.phase=Pending`
+
+下面的 `kubectl` 命令选择了所有字段 `status.phase` 的取值为 `Running` 的 Pod:
+
+``` sh
+kubectl get pods --field-selector status.phase=Running
+```
+
+::: tip
+字段选择器本质上是一个 `filter`。默认情况下,没有添加 selector/filter 时,代表着指定资源类型的所有对象都被选中。下面个两个 kubectl 查询时等价的:
+
+``` sh
+kubectl get pods
+kubectl get pods --field-selector ""
+```
+:::
+
+## 支持的字段
+
+不同的 Kubernetes 对象类型,可以用来查询的字段不一样。所有的对象类型都支持的两个字段是 `metadata.name` 和 `metadata.namespace`。在字段选择器中使用不支持的字段,将报错。例如:
+
+``` sh
+kubectl get ingress --field-selector foo.bar=baz
+```
+
+输出结果为:
+
+```
+Error from server (BadRequest): Unable to find "ingresses" that match label selector "", field selector "foo.bar=baz": "foo.bar" is not a known field selector: only "metadata.name", "metadata.namespace"
+```
+
+## 支持的操作符
+
+字段选择器中可以使用的操作符有 `=`、`==`、`!=` (`=` 和 `==` 含义相同)。例如,下面的 `kubectl` 命令,查询不在 `default` 名称空间中的 Service:
+
+``` sh
+kubectl get services --all-namespaces --field-selector metadata.namespace!=default
+```
+
+## 多选择器
+
+可以指定多个字段选择器,用逗号 `,` 分隔。下面的 `kubectl` 命令查询所有的 `status.phase` 不等于 `Running` 且 `spec.restartPolicy` 等于 `Always` 的 Pod:
+
+``` sh
+kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always
+```
+
+## 多种对象类型
+
+字段选择器可以跨资源类型使用。下面的 `kubectl` 命令查询所有的不在 `default` 名称空间的 StatefulSet 和 Service:
+``` sh
+kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default
+```
diff --git a/learning/k8s-intermediate/obj/labels.md b/learning/k8s-intermediate/obj/labels.md
index 6366637..cec5556 100644
--- a/learning/k8s-intermediate/obj/labels.md
+++ b/learning/k8s-intermediate/obj/labels.md
@@ -52,13 +52,13 @@ metadata:
* 可以包含字母、数字、减号`-`、下划线`_`、小数点`.`
* 标签前缀:
* 标签前缀部分是可选的
- * 如果指定,必须是一个DNS的子域名,例如:project.company.com
+ * 如果指定,必须是一个DNS的子域名,例如:k8s.eip.work
* 不能多于 253 个字符
* 使用 `/` 和标签名分隔
如果省略标签前缀,则标签的 key 将被认为是专属于用户的。Kubernetes的系统组件(例如,kube-scheduler、kube-controller-manager、kube-apiserver、kubectl 或其他第三方组件)向用户的Kubernetes对象添加标签时,必须指定一个前缀。
-`kubernetes.io/` 和 `k8s.io/` 这两个前缀是 Kubernetes 核心组件预留的。
+`kubernetes.io/` 和 `k8s.io/` 这两个前缀是 Kubernetes 核心组件预留的。Kuboard 使用 `k8s.eip.work` 这个前缀。
标签的 value 必须:
* 不能多于 63 个字符