网络模型

This commit is contained in:
huanqing.shao
2019-11-26 21:36:59 +08:00
parent 72702d0d3a
commit 95b41e369b
13 changed files with 244 additions and 10 deletions

View File

@ -48,4 +48,6 @@ CKA证书的含金量如何考不考这个证完全取决于个人因为
[CKA每日一题 - Day 4](./daily/004.html)
[CKA每日一题 - Day 5](./daily/005.html)
<JoinCKACommunity/>

View File

@ -46,10 +46,6 @@ spec:
### 解析
## 昨日解析
**官网中调度器地址:**
https://kubernetes.io/docs/concepts/scheduling/kube-scheduler/

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

196
t/cka/daily/005.md Normal file
View File

@ -0,0 +1,196 @@
---
vssueId: 170
# layout: StepLayout
sharingTitle: CKA备考打卡 - 每日一题 - Day 5
description: CKA备考打卡 - 每日一题 - Day 5
meta:
- name: keywords
content: Kubernetes,K8S,CKA,Certified Kubernetes Administrator
---
# CKA每日一题 --- Day 5
<AdSenseTitle/>
::: tip 考题
通过命令行创建两个deployment。
- 需要集群中有2个节点
- 第1个deployment名称为cka-1122-01使用nginx镜像有2个pod并配置该deployment自身的pod之间在节点级别反亲和
- 第2个deployment名称为cka-1122-02使用nginx镜像有2个pod并配置该deployment的pod与第1个deployment的pod在节点级别亲和
**最好提交最精简的deployment yaml如果评论被限制请提交反亲和性配置块yaml也可多次评论提交**
:::
<b-button v-b-toggle.collapse-join-error variant="danger" size="sm" style="margin-top: 1rem;" v-on:click="$sendGaEvent('cka-daily', 'cka-daily', 'CKA每日一题003')">答案及解析</b-button>
<b-collapse id="collapse-join-error" class="mt-2">
<b-card style="background-color: rgb(254, 240, 240); border: solid 1px #F56C6C;">
### 答案
第一个deploymentcka-1122-01
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: cka-1122-01
name: cka-1122-01
spec:
replicas: 2
selector:
matchLabels:
app: cka-1122-01
template:
metadata:
labels:
app: cka-1122-01
spec:
containers:
- image: nginx
name: cka-1122-01
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- cka-1122-01
topologyKey: "kubernetes.io/hostname"
```
## 第二个deploymentcka-1122-02
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: cka-1122-02
name: cka-1122-02
spec:
replicas: 2
selector:
matchLabels:
app: cka-1122-02
template:
metadata:
labels:
app: cka-1122-02
spec:
containers:
- image: nginx
name: cka-1122-02
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- cka-1122-01
topologyKey: "kubernetes.io/hostname"
```
最终调度结果:
``` sh
NAME READY STATUS RESTARTS AGE IP NODE
cka-1122-01-5df9bdf8c9-qwd2v 1/1 Running 0 8m 10.192.4.2 node-1
cka-1122-01-5df9bdf8c9-r4rhs 1/1 Running 0 8m 10.192.4.3 node-2
cka-1122-02-749cd4b846-bjhzq 1/1 Running 0 10m 10.192.4.4 node-1
cka-1122-02-749cd4b846-rkgpo 1/1 Running 0 10m 10.192.4.5 node-2
```
### 解析
**考点k8s中的高级调度及用法。**
亲和性和反亲和性调度官方文档:
[https://kubernetes.io/docs/concepts/configuration/assign-pod-node/](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/)
中文文档: [https://kuboard.cn/learning/k8s-intermediate/config/assign-pod-node.html](https://kuboard.cn/learning/k8s-intermediate/config/assign-pod-node.html)
#### 将 Pod 调度到特定的 Node 上nodeSelector
nodeSelector是节点选择约束的最简单推荐形式。nodeSelector是PodSpec下的一个字段。它指定键值对的映射。为了使Pod可以在节点上运行该节点必须具有每个指定的键值对作为label。
![CKA每日一题_Day5](./005.assets/640-20191126201848208.png)
> 语法格式map[string]string
>
> 作用:
> 匹配node.labels
> 排除不包含nodeSelector中指定label的所有node
> 匹配机制 —— 完全匹配
#### nodeSelector 升级版nodeAffinity
节点亲和性在概念上类似于nodeSelector它可以根据节点上的标签来限制Pod可以被调度在哪些节点上。
![CKA每日一题_Day5](./005.assets/640-20191126201848278.png)
**红色框为硬性过滤:**排除不具备指定label的node在预选阶段起作用
**绿色框为软性评分:**不具备指定label的node打低分 降低node被选中的几率在优选阶段起作用
#### 与nodeSelector关键差异
> 引入运算符InNotIn labelselector语法 支持枚举label可能的取值如 zone in [az1, az2, az3...] 支持硬性过滤和软性评分
>
> 硬性过滤规则支持指定多条件之间的逻辑或运算 软性评分规则支持 设置条件权重值
#### 让某些 Pod 分布在同一组 Node 上podAffinity
Pod亲和性和反亲和性可以基于已经在节点上运行的Pod上的标签而不是基于节点上的标签来限制Pod调度的节点。
**规则的格式为:**
如果该X已经在运行一个或多个满足规则Y的Pod则该Pod应该或者在反亲和性的情况下不应该在X中运行。
Y表示为LabelSelector。X是一个拓扑域例如节点机架云提供者区域云提供者区域等。
![CKA每日一题_Day5](./005.assets/640-20191126201848354.png)
红框硬性过滤排除不具备指定pod的node组在预选阶段起作用绿框软性评分不具备指定pod的node组打低分 降低该组node被选中的几率在优选阶段起作用
#### 与nodeAffinity的关键差异
> 定义在PodSpec中亲和与反亲和规则具有对称性 labelSelector的匹配对象为Pod 对node分组依据label-key=topologyKey每个labelvalue取值为一组
>
> 硬性过滤规则,条件间只有逻辑与运算
#### 避免某些 Pod 分布在同一组 Node 上podAntiAffinity
![CKA每日一题_Day5](./005.assets/640-20191126201848352.png)
#### 与podAffinity的差异
> 匹配过程相同
>
> 最终处理调度结果时取反
>
> podAffinity中可调度节点在podAntiAffinity中为不可调度
> podAffinity中高分节点在podAntiAffinity中为低分
</b-card>
</b-collapse>
> CKA 考试每日一题系列,全部内容由 [我的小碗汤](https://mp.weixin.qq.com/s/5tYgb_eSzHz_TMsi0U32gw) 创作,本站仅做转载
<JoinCKACommunity/>