某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 学习建议

  • Docker命令大全
  • Kubernetes教程

    • Kubernetes(K8s)学习教程 - 前言
    • 第1章-Kubernetes集群部署
    • 第2章-便捷性设置以及集群插件的安装
    • 第3章-基础操作
    • 第4章-集群升级
    • 第5章-Pod
    • 第6章-Pod生命周期与资源限制
    • 第7章-Pod与节点
    • 第8章-控制器Deployment
    • 第9章-Deployment镜像变更和滚动更新
    • 第10章-其他控制器-以及标签表达式
    • 第11章-控制器与节点驱逐
    • 暂缓更新
    • 练习题

      • 练习题-1
      • 练习题-2
      • 练习题-3
      • 练习题-4
      • 练习题-5
        • 理论练习(开放性试题)
        • 实操练习
        • 实操练习答案
          • 1. 为 worker01 和 worker02 节点都设置标签</b>look=good。
          • 2. 为 worker01 节点设置标签</b>inside=good。
          • 3. 列出具有标签</b>look=good的节点。
          • 4. 为 worker02 添加信息。
          • 5. 创建pod-good
          • 6. 为 worker01 节点设置污点</b>this-is=Bad,效果为禁止调度。
          • 7. 找出拥有污点的所有主机。
          • 8. 创建pod-bad
          • 9. 查看pod-good的 IP 地址,切换至 worker02 的终端窗口并使用curl命令请求http:///I-am-hacker。
          • 10. 查看pod-good的命令行输出,是否有来自 worker02 的 HTTP 请求。
          • 11. 找出内存消耗最低的节点。
          • 12. 删除pod-good和pod-bad。
      • 练习题-6
      • 练习题-7
      • 练习题-8
    • 常用命令及yaml配置

  • CKS教程

  • 云原生安全
  • Kubernetes教程
  • 练习题
carsaid
2023-11-13
目录

练习题-5

# 课后练习题-5

# 理论练习(开放性试题)

涵盖第 7 章的内容。

  1. 通过kubectl get nodes查看节点信息时,列 “ROLES” 的内容是空的,如何设置?
  2. 一个 Pod 通过spec.nodeSelector字段指定了运行位置,但是没有节点满足条件,那么这个 Pod 的创建是否能成功?
  3. 一个 Pod 通过spec.nodeSelector字段指定了运行位置,但此时有多个节点满足条件,那么这个 Pod 会被调度到哪个节点上运行呢?
  4. 集群资源的标签和注释有什么区别?
  5. 污点和容忍污点是什么?
答案
  1. 为相应的节点添加一个特殊的角色标签node-role.kubernetes.io/<名称>,只需要键名,不需要值。例如:kubectl label nodes www.k11.com node-role.kubernetes.io/worker1=
  2. 不会,这个 Pod 的状态会一直停留在 “Pending”(等待),直到出现一个符合条件的节点,或直到用户主动删除它
  3. 由控制平面 在满足条件的节点中 自动选择一个最合适的(随机)
  4. 标签可以参与到资源对象的操作中,例如 “列出具有特定标签的所有 Pod”。而注释只是为了提高可读性,不会参与到资源对象的运行中
  5. 一栋房子有污点(凶宅),一般人绕道走,但如果有人可以容忍污点(不怕凶宅),则可以买房住。一个节点有污点,一般的 Pod 绕道走,但如果有 Pod 可以容忍污点,则可以在这个节点上面运行

# 实操练习

涵盖第 5/6/7 章的内容。

提示

在开始实操练习之前,请先将工作节点(worker)上的污点删除,这些污点可能是你在第 7 章的学习过程中设置的。

  1. 为 worker01 和 worker02 节点都设置标签look=good。
  2. 为 worker01 节点设置标签inside=bad,为 worker02 节点设置标签inside=good。
  3. 列出具有标签look=good的节点。
  4. 为 worker02 添加注释信息this-is=Good,然后列出其注释信息。
  5. 创建一个 Pod,要求如下:
    • 名称为pod-good
    • 镜像为nginx,镜像下载策略为IfNotPresent
    • 该 Pod 必须运行在 worker02 节点上
    • 实施资源限制策略,限制 CPU 资源使用上限为0.4个核心,限制内存资源使用上限为512 MiB
  6. 为 worker01 节点设置污点this-is=Bad,效果为禁止调度。
  7. 找出拥有污点的所有主机。
  8. 创建一个 Pod,要求如下:
    • 名称为pod-bad
    • 镜像为centos,镜像下载策略为IfNotPresent
    • 该 Pod 必须运行在 worker01 节点上
    • 启动 Pod 时运行的命令为sleep 9999999
  9. 查看pod-good的 IP 地址,切换至 worker02 的终端窗口并使用curl命令请求http://<IP地址>/I-am-hacker。
  10. 查看pod-good的命令行输出,是否有来自 worker02 的 HTTP 请求。
  11. 找出内存消耗最低的节点。
  12. 删除pod-good和pod-bad。

答案分隔线


答案分隔线


答案分隔线


答案分隔线


答案分隔线


答案分隔线


答案分隔线


答案分隔线


答案分隔线


# 实操练习答案

# 1. 为 worker01 和 worker02 节点都设置标签look=good。

kubectl label nodes www.k11.com www.k12.com look=good
1
Not Found Image

# 2. 为 worker01 节点设置标签inside=bad,为 worker02 节点设置标签inside=good。

kubectl label nodes www.k11.com inside=bad
kubectl label nodes www.k12.com inside=good
1
2
Not Found Image

# 3. 列出具有标签look=good的节点。

kubectl get nodes -l look=good
1
Not Found Image

# 4. 为 worker02 添加注释信息this-is=Good,然后列出其注释信息。

kubectl annotate nodes www.k12.com this-is=Good

kubectl describe nodes www.k12.com | awk '/tations/,/C/'
1
2
3
Not Found Image

# 5. 创建pod-good

创建一个 Pod,要求如下: + 名称为pod-good + 镜像为nginx,镜像下载策略为IfNotPresent + 该 Pod 必须运行在 worker02 节点上 + 实施资源限制策略,限制 CPU 资源使用上限为0.4个核心,限制内存资源使用上限为512 MiB

# pod-good.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-good
spec:
  nodeSelector:
    inside: good
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: pod-good
    resources:
      limits:
        cpu: 400m
        memory: 512Mi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Not Found Image

对于资源限制,你也可以使用 LimitRange 来完成:

apiVersion: v1
kind: LimitRange
metadata:
  name: good-limit
spec:
  limits:
  - max:
      cpu: 400m
      memory: 512Mi
    type: Container
1
2
3
4
5
6
7
8
9
10

# 6. 为 worker01 节点设置污点this-is=Bad,效果为禁止调度。

kubectl taint nodes www.k11.com this-is=Bad:NoSchedule
1
Not Found Image

# 7. 找出拥有污点的所有主机。

kubectl describe nodes | awk '/Taint/,/Ho/' | sed 's/Taints/-------------------------\nTaints/g'
1

列出节点名称以及对应的污点。

  • awk '/Taint/,/Ho/' 匹配 “Taint” 到 “Ho...” 之间的所有字符
  • sed '...' 将字符 “Taints” 替换为 “-----\nTaints”
Not Found Image

以下是一些统计污点主机数量的方法。

# grep -c统计没有污点的主机数量
kubectl describe nodes | awk '/Taint/,/Ho/' | sed 's/Taints/-------------------------\nTaints/g' | grep -c '<none>'
1
2

一个比较流行的统计方法:

  • $(kubectl get nodes | grep Ready | awk '{print $1}'):列出所有状态为 “Ready” 的节点,并通过awk打印它们的主机名称
  • kubectl describe nodes:依次接收主机名称,列出每个节点的详细信息
  • grep -i Taint:查找污点
  • grep -c NoSchedule:统计污点主机的数量
kubectl describe nodes $(kubectl get nodes | grep Ready | awk '{print $1}') | grep -i Taint | grep -c NoSchedule
1

# 8. 创建pod-bad

创建一个 Pod,要求如下: + 名称为pod-bad + 镜像为centos,镜像下载策略为IfNotPresent + 该 Pod 必须运行在 worker01 节点上 + 启动 Pod 时运行的命令为sleep 9999999

# pod-bad.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-bad
spec:
  nodeSelector:
    inside: bad
  tolerations:
  - operator: "Equal"
    key: "this-is"
    value: "Bad"
    effect: "NoSchedule"
  containers:
  - image: centos
    imagePullPolicy: IfNotPresent
    name: pod-bad
    command: ['sh', '-c', 'sleep 9999999']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Not Found Image

# 9. 查看pod-good的 IP 地址,切换至 worker02 的终端窗口并使用curl命令请求http://<IP地址>/I-am-hacker。

# master
kubectl get pods -o wide
1
2

10.244.173.96

Not Found Image
# worker02
curl http://10.244.173.96/I-am-hacker
1
2
Not Found Image

# 10. 查看pod-good的命令行输出,是否有来自 worker02 的 HTTP 请求。

kubectl logs pod-good
1
Not Found Image

# 11. 找出内存消耗最低的节点。

kubectl top nodes --sort-by=memory
1
Not Found Image

# 12. 删除pod-good和pod-bad。

kubectl delete pods pod-good pod-bad --force
1
Not Found Image
编辑 (opens new window)
练习题-4
练习题-6

← 练习题-4 练习题-6→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式