亲和性

This commit is contained in:
huanqing.shao
2019-12-09 22:37:45 +08:00
parent cd734142ed
commit c17ca114a5
11 changed files with 284 additions and 49 deletions

View File

@ -5,7 +5,7 @@ module.exports = [
strong: '一键离线安装', strong: '一键离线安装',
action: '去看看', action: '去看看',
url: 'https://github.com/fanux/sealos', url: 'https://github.com/fanux/sealos',
weight: 50 weight: 30
}, },
// { // {
// name: '阳明的博客', // name: '阳明的博客',
@ -25,28 +25,28 @@ module.exports = [
}, },
{ {
name: '腾讯云', name: '腾讯云',
description: '腾讯云11.11爆款1核2G云服务器首购88元免费领9888元代金券', description: '腾讯云双十二活动',
strong: '百款云产品一折起', strong: '百款云产品一折起',
action: '去抢', action: '去抢',
url: 'https://cloud.tencent.com/act/cps/redirect?redirect=1050&cps_key=2ee6baa049659f4713ddc55a51314372&from=console', url: 'https://cloud.tencent.com/act/cps/redirect?redirect=1052&cps_key=2ee6baa049659f4713ddc55a51314372&from=console',
weight: 30 weight: 60
}, },
{ {
name: '阿里云', name: '阿里云',
description: '双十All in Cloud', description: '双十二,主会场',
strong: '低至一折', strong: '低至一折',
action: '去抢', action: '去抢',
url: 'https://www.aliyun.com/1111/2019/home?userCode=obezo3pg', url: 'https://www.aliyun.com/1212/2019/home?userCode=obezo3pg',
weight: 10 weight: 60
}, },
// { {
// name: 'Kubetrain', name: 'Kubetrain',
// description: 'K8S在线直播培训首次开班优惠', description: 'K8S在线直播培训首次开班优惠',
// strong: '不满意可无条件退款', strong: '不满意可无条件退款',
// action: '再不去没名额啦', action: '现在就去',
// url: 'https://kubetrain.cn/?from=kuboard-ads', url: 'https://kubetrain.cn/?from=kuboard-ads',
// weight: 30 weight: 30
// } }
// { // {
// name: '宝塔面板', // name: '宝塔面板',

View File

@ -274,6 +274,7 @@ module.exports = {
'k8s-intermediate/config/config-map', 'k8s-intermediate/config/config-map',
'k8s-intermediate/config/computing-resource', 'k8s-intermediate/config/computing-resource',
'k8s-intermediate/config/assign-pod-node', 'k8s-intermediate/config/assign-pod-node',
'k8s-intermediate/config/affinity',
{ {
title: '污点和容忍', title: '污点和容忍',
collapsable: true, collapsable: true,

View File

@ -14,7 +14,7 @@ Kuboard 是一款基于 Kubernetes 的微服务管理界面。目的是帮助用
## Kubernetes安装文档 ## Kubernetes安装文档
* <a href="https://kuboard.cn/install/install-k8s.html">Kubernetes (K8S)v1.16.2 安装文档</a> * <a href="https://kuboard.cn/install/install-k8s.html">Kubernetes (K8S)v1.16.3 安装文档</a>
* 每天超过 300 名网友参考此文档完成Kubernetes安装 * 每天超过 300 名网友参考此文档完成Kubernetes安装
* QQ群在线答疑 * QQ群在线答疑
* <a href="https://kuboard.cn/install/install-kubernetes.html">Kubernetes 高可用安装文档</a> * <a href="https://kuboard.cn/install/install-kubernetes.html">Kubernetes 高可用安装文档</a>

View File

@ -17,16 +17,3 @@ description: 使用Kuboard对Kubernetes上容器组的端口进行转发。
| VPC内/集群外 | tcp / udp | 同上 | 同上 | | | VPC内/集群外 | tcp / udp | 同上 | 同上 | |
| 集群内 | http / https | 日常性 | **场景1**Web层访问微服务网关<br /> **场景2**:微服务网关调用微服务,微服务之间的互相调用等。 | **场景1**Kubernetes Service ClusterIP <br />可在Kuboard中直接配置 ***访问方式/集群内访问*** <br /> **场景2**Spring Cloud中使用Eureka/Consul等服务发现<br />Kuboard中 ***访问方式/不配置*** | | 集群内 | http / https | 日常性 | **场景1**Web层访问微服务网关<br /> **场景2**:微服务网关调用微服务,微服务之间的互相调用等。 | **场景1**Kubernetes Service ClusterIP <br />可在Kuboard中直接配置 ***访问方式/集群内访问*** <br /> **场景2**Spring Cloud中使用Eureka/Consul等服务发现<br />Kuboard中 ***访问方式/不配置*** |
| 集群内 | tcp / udp | 日常性 | 微服务访问数据库、微服务访问Redis等 | Kubernetes Service ClusterIP <br />可在Kuboard中直接配置 ***访问方式/集群内访问*** | | 集群内 | tcp / udp | 日常性 | 微服务访问数据库、微服务访问Redis等 | Kubernetes Service ClusterIP <br />可在Kuboard中直接配置 ***访问方式/集群内访问*** |
## Feature planned
在作者使用 Kuboard 的运维实践中,有如下两个场景不能脱离 kubeadm / kubectl 命令行:
* 初始化集群 / 向集群添加节点
* 开发者临时需要访问数据库端口、Redis端口时通过 kubectl port-forward 进行端口转发
Kuboard 计划实现类似 kubectl port-forward 的功能,提高问题诊断过程中的便利性。

View File

@ -217,7 +217,7 @@ kubectl port-forward service/kuboard 8080:80 -n kube-system
如需要无登录访问集群概览页面,可使用如下格式的 url 进入: 如需要无登录访问集群概览页面,可使用如下格式的 url 进入:
``` ```
http://任意一个Worker节点的IP地址:32567/#/dashboard?k8sToken=yourToken http://任意一个Worker节点的IP地址:32567/#/dashboard?k8sToken=yourtoken
``` ```
::: tip 其他界面 ::: tip 其他界面
@ -228,7 +228,7 @@ http://任意一个Worker节点的IP地址:32567/#/dashboard?k8sToken=yourToken
如果想要无登录直接访问容器组的控制台,可使用如下格式的 url 进入: 如果想要无登录直接访问容器组的控制台,可使用如下格式的 url 进入:
``` ```
http://任意一个Worker节点的IP地址:32567/#/console/pzy/yourPod?containerName=yourContainer&shell=bash&k8sToken=yourToken http://任意一个Worker节点的IP地址:32567/#/console/yournamespace/yourpod?containerName=yourcontainer&shell=bash&k8sToken=yourtoken
``` ```
其中shell 参数可选取值有: 其中shell 参数可选取值有:

View File

@ -5,7 +5,7 @@ sharingTitle: K8S入门第一步---安装,装不好还有人免费远程协助
description: Kubernete安装文档_Kubernetes最新稳定版v1.16.3的快速安装文档_该文档由众多网友验证并在线提出修改意见_持续不断地更新和完善_并且通过QQ群提供免费在线答疑的服务 description: Kubernete安装文档_Kubernetes最新稳定版v1.16.3的快速安装文档_该文档由众多网友验证并在线提出修改意见_持续不断地更新和完善_并且通过QQ群提供免费在线答疑的服务
meta: meta:
- name: keywords - name: keywords
content: Kubernetes安装,K8S安装,kubeadm,Kubernetes 安装,K8S 安装 content: Kubernetes安装,K8S安装,kubeadm,Kubernetes 安装,K8S 安装,k8s搭建
--- ---
# 使用kubeadm安装kubernetes_v1.16.3 # 使用kubeadm安装kubernetes_v1.16.3
@ -20,7 +20,7 @@ meta:
## 配置要求 ## 配置要求
对于 Kubernetes 初学者,推荐在阿里云或腾讯云采购如下配置:(您也可以使用自己的虚拟机、私有云等您最容易获得的 Linux 环境) 对于 Kubernetes 初学者,在搭建K8S集群时推荐在阿里云或腾讯云采购如下配置:(您也可以使用自己的虚拟机、私有云等您最容易获得的 Linux 环境)
* 至少2台 **2核4G** 的服务器 * 至少2台 **2核4G** 的服务器
* **Cent OS 7.6** * **Cent OS 7.6**

View File

@ -6,12 +6,12 @@ sidebarDepth: 0
description: 本教程的主要依据是Kubernetes官网文档以及使用Kubernetes落地SpringCloud微服务并投产的实战经验在线答疑。适用人群_ Kubernetes 初学者_学习过 Kubernetes但在投产过程中仍有诸多疑虑和困惑的技术爱好者 description: 本教程的主要依据是Kubernetes官网文档以及使用Kubernetes落地SpringCloud微服务并投产的实战经验在线答疑。适用人群_ Kubernetes 初学者_学习过 Kubernetes但在投产过程中仍有诸多疑虑和困惑的技术爱好者
meta: meta:
- name: keywords - name: keywords
content: K8S教程,K8S 教程,K8S培训,Kubernetes培训 content: K8S教程,K8S 教程,K8S培训,Kubernetes培训,K8S搭建,kuberntes搭建
--- ---
# Kubernetes教程 # Kubernetes教程
<!-- <div class="row"> <div class="row">
<div class="col-md-4 col-sm-6"> <div class="col-md-4 col-sm-6">
<a href="#kubernetes免费教程"> <a href="#kubernetes免费教程">
<FancyImage src="/images/courses/free.png" title="免费教程" description="kubernetes.io权威资料kuboard翻译" alt="K8S培训_免费教程" type="SlideLeft2Right"/> <FancyImage src="/images/courses/free.png" title="免费教程" description="kubernetes.io权威资料kuboard翻译" alt="K8S培训_免费教程" type="SlideLeft2Right"/>
@ -27,7 +27,7 @@ meta:
<FancyImage src="/images/courses/advanced.png" title="K8S高级班" description="360讲师授课" alt="K8S培训_高薪培训" type="Rectangle"/> <FancyImage src="/images/courses/advanced.png" title="K8S高级班" description="360讲师授课" alt="K8S培训_高薪培训" type="Rectangle"/>
</a> </a>
</div> </div>
</div> --> </div>

View File

@ -16,4 +16,229 @@ meta:
`nodeSelector` 提供了一个非常简单的方式,将 Pod 限定到包含特定标签的节点上。亲和性与反亲和性affinity / anti-affinity特性则极大地扩展了限定的表达方式。主要的增强点在于 `nodeSelector` 提供了一个非常简单的方式,将 Pod 限定到包含特定标签的节点上。亲和性与反亲和性affinity / anti-affinity特性则极大地扩展了限定的表达方式。主要的增强点在于
1. 表达方式更加有效(不仅仅是多个精确匹配表达式的“和”关系) 1. 表达方式更加有效(不仅仅是多个精确匹配表达式的“和”关系)
2. 可以标识该规则为“soft” / “preference” (软性的、偏好的)而不是 hard requirement必须的此时如果调度器发现该规则不能被满足Pod 仍然可以被调度 2. 可以标识该规则为“soft” / “preference” (软性的、偏好的)而不是 hard requirement必须的此时如果调度器发现该规则不能被满足Pod 仍然可以被调度
3. 可以对比节点上(或其他拓扑域 topological domain已运行的其他 Pod 的标签,而不仅仅是节点自己的标签,此时,可以定义类似这样的规则:某类 Pod 不能在同一个节点(或拓扑域)上共存 3. 可以对比节点上(或其他拓扑域 topological domain已运行的其他 Pod 的标签,而不仅仅是节点自己的标签,此时,可以定义类似这样的规则:某类 Pod 不能在同一个节点(或拓扑域)上共存
## 节点亲和性
节点亲和性node affinity的概念与 `nodeSelector` 相似,可以基于节点的标签来限定 Pod 可以被调度到哪些节点上。
当前支持两种类型的节点亲和性, `requiredDuringSchedulingIgnoredDuringExecution` hard目标节点必须满足此条件 以及 `preferredDuringSchedulingIgnoredDuringExecution` soft目标节点最好能满足此条件。名字中 `IgnoredDuringExecution` 意味着:如果 Pod 已经调度到节点上以后节点的标签发生改变使得节点已经不再匹配该亲和性规则了Pod 仍将继续在节点上执行(这一点与 `nodeSelector` 相似。将来Kubernetes 将会提供 `requiredDuringSchedulingRequiredDuringExecution` 这个选项,该选项与 `requiredDuringSchedulingIgnoredDuringExecution` 相似不同的是当节点的标签不在匹配亲和性规则之后Pod 将被从节点上驱逐。
`requiredDuringSchedulingIgnoredDuringExecution` 的一个例子是,`只在 Intel CPU 上运行该 Pod``preferredDuringSchedulingIgnoredDuringExecution` 的一个例子是,`尽量在高可用区 XYZ 中运行这个 Pod但是如果做不到也可以在其他地方运行该 Pod`
PodSpec 中通过 `affinity.nodeAffinity` 字段来定义节点亲和性,示例文件如下:
``` yaml
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/e2e-az-name
operator: In
values:
- e2e-az1
- e2e-az2
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
containers:
- name: with-node-affinity
image: k8s.gcr.io/pause:2.0
```
此处的亲和性规则表明,该 Pod 只能被调度到包含 key 为 `kubernetes.io/e2e-az-name` 且 value 为 `e2e-az1` 或 `e2e-az2` 的标签的节点上。此外,如果节点已经满足了前述条件,将优先选择包含 key 为 `another-node-label-key` 且 value 为 `another-node-label-value` 的标签的节点。
例子中使用了操作符 `In`。节点亲和性支持如下操作符:`In`、`NotIn`、`Exists`、`DoesNotExist`、`Gt`、`Lt`。使用 `NotIn` 和 `DoesNotExist` 可以实现节点反亲和性node anti-affinity的效果或者也可以使用 [污点](/learning/k8s-intermediate/config/taints-toleration/) 为节点排斥某类 Pod。
如果某个 Pod 同时指定了 `nodeSelector` 和 `nodeAffinity`,则目标节点必须同时满足两个条件,才能将 Pod 调度到该节点上。
如果为 `nodeAffinity` 指定多个 `nodeSelectorTerms`,则目标节点只需要满足任意一个 `nodeSelectorTerms` 的要求,就可以将 Pod 调度到该节点上。
如果为 `nodeSelectorTerms` 指定多个 `matchExpressions`,则目标节点必须满足所有的 `matchExpressions` 的要求,才能将 Pod 调度到该节点上。
当 Pod 被调度到某节点上之后如果移除或者修改节点的标签Pod 将仍然继续在节点上运行。换句话说,节点亲和性规则只在调度该 Pod 时发生作用。
`preferredDuringSchedulingIgnoredDuringExecution` 中的 `weight` 字段取值范围为 1-100。对于每一个满足调度要求的节点资源请求、亲和性/反亲和性规则,等),调度器将遍历该节点匹配的 `preferredDuringSchedulingIgnoredDuringExecution` 中所有的`weight` 并求和。此求和结果将与节点的其他优先级计算的得分合并。得分最高的节点被优先选择。
## Pod亲和性与反亲和性
Pod之间的亲和性与反亲和性inter-pod affinity and anti-affinity可以基于已经运行在节点上的 Pod 的标签(而不是节点的标签)来限定 Pod 可以被调度到哪个节点上。此类规则的表现形式是:
* 当 X 已经运行了一个或者多个满足规则 Y 的 Pod 时,待调度的 Pod 应该(或者不应该 - 反亲和性)在 X 上运行
* 规则 Y 以 LabelSelector 的形式表述,附带一个可选的名称空间列表
> 与节点不一样Pod 是在名称空间中的因此Pod的标签是在名称空间中的针对 Pod 的 LabelSelector 必须同时指定对应的名称空间
* X 是一个拓扑域的概念例如节点、机柜、云供应商可用区、云供应商地域等。X 以 `topologyKey` 的形式表达,该 Key代表了节点上代表拓扑域topology domain的一个标签。
### pod affinity 的一个例子
``` yaml
apiVersion: v1
kind: Pod
metadata:
name: with-pod-affinity
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S1
topologyKey: failure-domain.beta.kubernetes.io/zone
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S2
topologyKey: failure-domain.beta.kubernetes.io/zone
containers:
- name: with-pod-affinity
image: k8s.gcr.io/pause:2.0
```
该 Pod 的 `affinity` 定义了一个 Pod 亲和性规则和一个 Pod 反亲和性规则,例子中, `podAffinity` 是 `requiredDuringSchedulingIgnoredDuringExecution`,而 `podAntiAffinity` 则是 `preferredDuringSchedulingIgnoredDuringExecution`。
* Pod 亲和性规则要求,该 Pod 可以被调度到的节点所在的可用区 `zone` 必须已经有一个已经运行的 Pod 包含标签 key=securityvalue=S1或者更准确地说节点必须满足如下条件
* 节点包含 key 为 `failure-domain.beta.kubernetes.io/zone` 的标签,假设该标签的值为 `V`
* 至少有一个包含 key 为 `failure-domain.beta.kubernetes.io/zone` 且 value 为 `V` 的标签的节点已经运行了一个包含标签 key 为 `security` 且 value 为 `S1` 的 Pod
* Pod 反亲和性规则要求,该 Pod 最好不要被调度到已经运行了包含 key 为 `security` 且 value 为 `S2` 的标签的 Pod 的节点上,或者更准确地说,必须满足如下条件:
* 如果 `topologyKey` 是 `failure-domain.beta.kubernetes.io/zone`Pod不能被调度到同一个 zone 中的已经运行了包含标签 `security: S2` 的节点上
参考 [design doc](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/podaffinity.md) 可以了解更多 Pod 亲和性与反亲和性的例子。
原则上, `topologyKey` 可以是任何合法的标签 key。然而处于性能和安全的考虑仍然对 `topologyKey` 有如下限制:
1. 对亲和性以及 `requiredDuringSchedulingIgnoredDuringExecution` Pod 反亲和性,`topologyKey` 不能为空
2. 对 `requiredDuringSchedulingIgnoredDuringExecution` Pod 反亲和性,管理控制器 `LimitPodHardAntiAffinityTopology` 被用来限制 `topologyKey` 必须为 `kubernetes.io/hostname`。如果想要使用其他的自定义 topology必须修改该管理控制器或者将其禁用
3. 对 `preferredDuringSchedulingIgnoredDuringExecution` Pod 反亲和性,如果 `topologyKey` 为空,则代表所有的 topology (此时,不局限于 `kubernetes.io/hostname`、`failure-domain.beta.kubernetes.io/zone` 和 `failure-domain.beta.kubernetes.io/region` 的组合)
4. 除了上述的情形以外,`topologyKey` 可以是任何合法的标签 Key
除了 `labelSelector` 和 `topologyKey` 以外,还可以指定一个 `namespaces` 的列表,用作 `labelSelector` 的作用范围(与 `labelSelector` 和 `topologyKey` 的定义为同一个级别)。如果不定义或者该字段为空,默认为 Pod 所在的名称空间。
所有与 `requiredDuringSchedulingIgnoredDuringExecution` 亲和性和反亲和性关联的 `matchExpressions` 必须被满足Pod 才能被调度到目标节点。
### 更多实用的例子
Pod 亲和性与反亲和性结合高级别控制器(例如 ReplicaSet、StatefulSet、Deployment 等)一起使用时,可以非常实用。此时可以很容易的将一组工作复杂调度到同一个 topology例如同一个节点。
#### 始终在同一个节点
在一个三节点的集群中,部署一个使用 redis 的 web 应用程序,并期望 web-server 尽可能与 redis 在同一个节点上。
下面是 redis deployment 的 yaml 片段,包含三个副本以及 `app=store` 标签选择器。Deployment 中配置了 `PodAntiAffinity`,确保调度器不会将三个副本调度到一个节点上:
``` yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-cache
spec:
selector:
matchLabels:
app: store
replicas: 3
template:
metadata:
labels:
app: store
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- store
topologyKey: "kubernetes.io/hostname"
containers:
- name: redis-server
image: redis:3.2-alpine
```
下面是 webserver deployment 的 yaml 片段,配置了 `podAntiAffinity` 以及 `podAffinity`。要求将其副本与 包含 `app=store` 标签的 Pod 放在同一个节点上;同时也要求 web-server 的副本不被调度到同一个节点上。
``` yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server
spec:
selector:
matchLabels:
app: web-store
replicas: 3
template:
metadata:
labels:
app: web-store
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- web-store
topologyKey: "kubernetes.io/hostname"
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- store
topologyKey: "kubernetes.io/hostname"
containers:
- name: web-app
image: nginx:1.12-alpine
```
如果创建上述两个 deployment集群将如下所示
| Node-1 | Node-2 | Node-3 |
| ------------ | ----------- | ----------- |
| web-server-1 | webserver-2 | webserver-3 |
| cache-1 | cache-2 | cache-3 |
`web-server` 的三个副本都自动与 cach 的副本运行在相同的节点上。
```sh
kubectl get pods -o wide
```
输出结果如下所示
```
NAME READY STATUS RESTARTS AGE IP NODE
redis-cache-1450370735-6dzlj 1/1 Running 0 8m 10.192.4.2 kube-node-3
redis-cache-1450370735-j2j96 1/1 Running 0 8m 10.192.2.2 kube-node-1
redis-cache-1450370735-z73mh 1/1 Running 0 8m 10.192.3.1 kube-node-2
web-server-1287567482-5d4dz 1/1 Running 0 7m 10.192.2.3 kube-node-1
web-server-1287567482-6f7v5 1/1 Running 0 7m 10.192.4.3 kube-node-3
web-server-1287567482-s330j 1/1 Running 0 7m 10.192.3.2 kube-node-2
```
#### 始终不在相同的节点上
上面的例子使用了 `PodAntiAffinity` 规则与 `topologyKey: "kubernetes.io/hostname"` 来部署 redis 集群,因此没有任何两个副本被调度到同一个节点上。参考 [ZooKeeper tutorial](https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/#tolerating-node-failure) 了解如何使用相同的方式为 StatefulSet 配置反亲和性以实现高可用。

View File

@ -84,8 +84,3 @@ nodeSelector 是 PodSpec 中的一个字段。指定了一组名值对。节点
`NodeRestriction` 管理插件可以阻止 kubelet 设置或者修改节点上以 `node-restriction.kubernetes.io/` 开头的标签。如需要使用该标签前缀作为节点隔离的目的,需要: `NodeRestriction` 管理插件可以阻止 kubelet 设置或者修改节点上以 `node-restriction.kubernetes.io/` 开头的标签。如需要使用该标签前缀作为节点隔离的目的,需要:
1. 确保 kubenetes 已经启用了 [Node authorizer](https://kubernetes.io/docs/reference/access-authn-authz/node/) 和 [NodeRestriction admission plugin](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction) 1. 确保 kubenetes 已经启用了 [Node authorizer](https://kubernetes.io/docs/reference/access-authn-authz/node/) 和 [NodeRestriction admission plugin](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
2. 添加带 `node-restriction.kubernetes.io/` 前缀的标签到节点对象,并将这些标签作为 Pod 中的节点选择器。例如: `example.com.node-restriction.kubernetes.io/fips=true``example.com.node-restriction.kubernetes.io/pci-dss=true` 2. 添加带 `node-restriction.kubernetes.io/` 前缀的标签到节点对象,并将这些标签作为 Pod 中的节点选择器。例如: `example.com.node-restriction.kubernetes.io/fips=true``example.com.node-restriction.kubernetes.io/pci-dss=true`
## Affinity and anti-affinity <Badge text="Kuboard 暂不支持" type="warn"/>
请参考 Kubernetes 官网文档 [Affinity and anti-affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity)

View File

@ -1,12 +1,7 @@
Kuboard v1.0.x 的更新说明 Kuboard v1.0.x 的更新说明
* 为什么CPU使用很低却仍然提示无法调度 * 导入导出时,需要支持 nfs 等类型的数据卷
* 节点详情页 --> 优化布局
* 节点详情页 --> 显示 total-request 和 total-limit
* 节点详情页 --> 显示 pod 的 request-limit
* 工作负载查看 --> 存储卷 --> config-volume类型的显示为JSON
* 可在 example/monitor-prometheus 中复现
* 工作负载查看 --> 未显示 SecurityContext * 工作负载查看 --> 未显示 SecurityContext
* EndPoint * EndPoint
* 导入工作负载时,如果存储类没有 annotations不应该报错 * 导入工作负载时,如果存储类没有 annotations不应该报错

View File

@ -9,10 +9,42 @@ description: 本文描述了Kuboard_v1.0.x的版本变更说明
了解如何 [升级Kuboard](/install/install-dashboard-upgrade.html) 了解如何 [升级Kuboard](/install/install-dashboard-upgrade.html)
eipwork/kuboard:latest 当前对应的版本是 kuboard v1.0.4.1 eipwork/kuboard:latest 当前对应的版本是 kuboard v1.0.5.1
Kuboard v1.0.x 的更新说明 Kuboard v1.0.x 的更新说明
## v1.0.5.1
**发布日期**
2019年12月9日
**Bug修复**
* 导入工作负载更新Service时spec.clusterIP: Invalid value: "": field is immutable
* 导入工作负载更新Service时metadata.resourceVersion: Invalid value: "": must be specified for an update
## v1.0.5
**发布日期**
2019年12月8日
**新特性**
* 节点详情页 --> 显示 total-request 和 total-limit
* 节点详情页 --> 显示 pod 的 request-limit
**优化**
* 节点详情页 --> 优化布局
* 为什么CPU使用很低却仍然提示无法调度
* 工作负载查看 --> 存储卷 --> config-volume类型的显示为JSON
**Bug修复**
* 检测 metrics-server 是否安装时处理503错误
## v1.0.5-beta.6 ## v1.0.5-beta.6
**发布日期** **发布日期**