某不知名博客 某不知名博客
首页
  • 《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
        • 理论练习(开放性试题)
        • 实操练习
        • 实操练习答案
          • 0. 切换集群命名空间为default
          • 1. 创建 ResourceQuota
          • 2. 创建第一个Pod
          • 3. 创建第二个Pod
          • 4. 创建LimitRange
          • 5. 创建第三个Pod
          • 6. 内存压力测试
          • 7. 在命名空间default创建一个Pod
          • 8. 在命名空间ns1创建一个Pod
          • 9. 查看pod-start的 IP 地址,然后通过curl请求网站首页,看看内容是否为Hello nginx!
          • 10. 删除my-quota、my-limit和所有 Pod
      • 练习题-5
      • 练习题-6
      • 练习题-7
      • 练习题-8
    • 常用命令及yaml配置

  • CKS教程

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

练习题-4

# 课后练习题-4

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

涵盖第 6 章的内容。

  1. 什么是延迟删除期(宽限期)?
  2. Pod 钩子是什么?
  3. 为什么需要资源限制?
  4. 如果在编写 yaml 文件的过程中,忘记了某个字段如何编写,怎么快速查看字段信息?
答案
  1. 在删除 Pod 的时候给予它一点时间,等待 Pod 将手头上的任务处理完成,以实现优雅地关闭 Pod。
  2. 钩子可以在容器启动之后,或在容器被删除之前,执行一些特定的任务。
  3. 防止 Pod/容器 占用过多计算机资源,导致物理机出现卡顿、宕机等情况。
  4. 通过kubectl explain命令,查询格式为kubectl explain <资源类型>.<字段>

# 实操练习

涵盖第 5 章和第 6 章的内容。

  1. 创建一个 ResourceQuota,要求如下:
    • ResourceQuota 名称为my-quota
    • 限制命名空间default中最多只能存在3个 Pod
  2. 创建一个 Pod,要求如下:
    • Pod 名称为pod-stop
    • 命名空间为default
    • 容器镜像为nginx,镜像下载策略为IfNotPresent
    • 宽限期设置为120秒
    • 配置一个结束钩子,在删除 Pod 的时候使用命令/usr/sbin/nginx -s quit优雅地关闭 nginx 进程
  3. 创建一个 Pod,要求如下:
    • Pod 名称为pod-start
    • 命名空间为default
    • 容器镜像为nginx,镜像下载策略为IfNotPresent
    • 配置一个启动钩子,在创建 Pod 之后修改 nginx 默认的首页内容为Hello nginx!(首页文件位于/usr/share/nginx/html/index.html)
    • 对该 Pod 施加资源限制策略,CPU 使用上限为1.2个核心,内存使用上限为1.5GiB
  4. 创建一个 LimitRange,要求如下:
    • LimitRange 名称为my-limit
    • 命名空间为default
    • 设置 CPU 使用上限为0.8个核心,内存使用上限为400 MiB
    • 限制对象为 “容器”
  5. 创建一个 Pod,要求如下:
    • Pod 名称为pod-memload
    • 命名空间为default
    • 容器镜像为centos,镜像下载策略为IfNotPresent
  6. 将内存压力测试工具memload的安装包拷贝到 Pod pod-memload中,在容器中安装工具并运行:
    • 运行memload并申请800 M 的内存,然后查看 Pod 负载信息
    • 如果无法申请到 800M 的内存,则改为申请350 M 的内存,然后查看 Pod 负载信息
  7. 通过命令行在命名空间default创建一个 Pod,看看能否创建成功。
  8. 在命名空间ns1创建一个 Pod,看看能否创建成功。
  9. 查看pod-start的 IP 地址,然后通过curl请求网站首页,看看内容是否为Hello nginx!
  10. 删除my-quota、my-limit和所有 Pod

答案分隔线


答案分隔线


答案分隔线


答案分隔线


答案分隔线


答案分隔线


答案分隔线


答案分隔线


答案分隔线


# 实操练习答案

# 0. 切换集群命名空间为default

不是必须步骤,选做。

kubectl config set-context --current --namespace default
1

# 1. 创建 ResourceQuota

创建一个 ResourceQuota,要求如下: * ResourceQuota 名称为my-quota * 限制命名空间default中最多只能存在3个 Pod

apiVersion: v1
kind: ResourceQuota
metadata:
  name: my-quota
  namespace: default
spec:
  hard:
    pods: 3
1
2
3
4
5
6
7
8
Not Found Image

# 2. 创建第一个Pod

创建一个 Pod,要求如下: * Pod 名称为pod-stop * 命名空间为default * 容器镜像为nginx,镜像下载策略为IfNotPresent * 宽限期设置为120秒 * 配置一个结束钩子,在删除 Pod 的时候使用命令/usr/sbin/nginx -s quit优雅地关闭 nginx 进程

apiVersion: v1
kind: Pod
metadata:
  name: pod-stop
  namespace: default
spec:
  terminationGracePeriodSeconds: 120
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: pod-stop
    lifecycle:
      preStop:
        exec:
          command: ['sh', '-c', '/usr/sbin/nginx -s quit']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Not Found Image

# 3. 创建第二个Pod

创建一个 Pod,要求如下: * Pod 名称为pod-start * 命名空间为default * 容器镜像为nginx,镜像下载策略为IfNotPresent * 配置一个启动钩子,在创建 Pod 之后修改 nginx 默认的首页内容为Hello nginx!(首页文件位于/usr/share/nginx/html/index.html) * 对该 Pod 施加资源限制策略,CPU 使用上限为1.2个核心,内存使用上限为1.5GiB

注,resources.limits.cpu设置为1.2或1200m都对,resources.limits.memory设置为1.5Gi或1536Mi都对。

apiVersion: v1
kind: Pod
metadata:
  name: pod-start
  namespace: default
spec:
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: pod-start
    lifecycle:
      postStart:
        exec:
          command: ['sh', '-c', 'echo "Hello nginx!" > /usr/share/nginx/html/index.html']
    resources:
      limits:
        cpu: 1200m
        memory: 1.5Gi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Not Found Image

# 4. 创建LimitRange

创建一个 LimitRange,要求如下: * LimitRange 名称为my-limit * 命名空间为default * 设置 CPU 使用上限为0.8个核心,内存使用上限为400 MiB * 限制对象为 “容器”

注,spec.limits.max.cpu设置为0.8或800m都对。

apiVersion: v1
kind: LimitRange
metadata:
  name: my-limit
  namespace: default
spec:
  limits:
  - max:
      cpu: 800m
      memory: 400Mi
    type: Container
1
2
3
4
5
6
7
8
9
10
11
Not Found Image

# 5. 创建第三个Pod

创建一个 Pod,要求如下: * Pod 名称为pod-memload * 命名空间为default * 容器镜像为centos,镜像下载策略为IfNotPresent * 创建 Pod 的时候执行命令sleep 99999999

apiVersion: v1
kind: Pod
metadata:
  name: pod-memload
  namespace: default
spec:
  containers:
  - image: centos
    imagePullPolicy: IfNotPresent
    name: pod-memload
    command: ['sh', '-c', 'sleep 99999999']
1
2
3
4
5
6
7
8
9
10
11
Not Found Image

# 6. 内存压力测试

将内存压力测试工具memload的安装包拷贝到 Pod pod-memload中,在容器中安装工具并运行: * 运行memload并申请800 M 的内存,然后查看 Pod 负载信息 * 如果无法申请到 800M 的内存,则改为申请350 M 的内存,然后查看 Pod 负载信息

kubectl cp ./memload-7.0-1.r29766.x86_64.rpm pod-memload:/opt
kubectl exec -it pod-memload -- bash

cd /opt
rpm -ivh ./memload-7.0-1.r29766.x86_64.rpm

memload 800
memload 350
1
2
3
4
5
6
7
8
Not Found Image
# master
kubectl top pods
1
2
Not Found Image

# 7. 在命名空间default创建一个Pod

通过命令行在命名空间default创建一个 Pod,看看能否创建成功。

kubectl run pod-default --image nginx --image-pull-policy=IfNotPresent
1

创建失败,Pod 配额达到上限。

Not Found Image

# 8. 在命名空间ns1创建一个Pod

在命名空间ns1创建一个 Pod,看看能否创建成功。

kubectl run pod-ns1 --image nginx --image-pull-policy=IfNotPresent -n ns1
1

创建成功,Pod 正常运行。

Not Found Image

# 9. 查看pod-start的 IP 地址,然后通过curl请求网站首页,看看内容是否为Hello nginx!

kubectl get pods -o wide

curl -i <IP地址>
1
2
3
Not Found Image

# 10. 删除my-quota、my-limit和所有 Pod

删除方式一,依次删除。

# ResourceQuota
kubectl delete resourcequota my-quota

# LimitRange
kubectl delete limitrange my-limit

# Pod
kubectl delete pods pod-stop pod-start pod-memload

kubectl delete pods -n ns1 pod-ns1
1
2
3
4
5
6
7
8
9
10

删除方式二,通过 yaml 文件批量删除。

kubectl delete -f . --force
1
Not Found Image
编辑 (opens new window)
练习题-3
练习题-5

← 练习题-3 练习题-5→

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