云原生训练营作业

2021-12-12
2分钟阅读时长

资料

模块一:Go 语言特性

无作业

模块二:Go语言进阶 必做

编写一个 HTTP 服务器,大家视个人不同情况决定完成到哪个环节,但尽量把 1 都做完。

  1. 接收客户端 request,并将 request 中带的 header 写入 response header
  2. 读取当前系统的环境变量中的 VERSION 配置,并写入 response header
  3. Server 端记录访问日志包括客户端 IP,HTTP 返回码,输出到 server 端的标准输出
  4. 当访问 localhost/healthz 时,应返回 200

作业提交链接: https://jinshuju.net/f/PlZ3xg

提交截止时间:10 月 7 日晚 23:59 前

模块三:Docker核心技术 必做

  • 构建本地镜像。
  • 编写 Dockerfile 将练习 2.2 编写的 httpserver 容器化(请思考有哪些最佳实践可以引入到 Dockerfile 中来)。
  • 将镜像推送至 Docker 官方镜像仓库。
  • 通过 Docker 命令本地启动 httpserver。
  • 通过 nsenter 进入容器查看 IP 配置。

作业需编写并提交 Dockerfile 及源代码。

作业提交链接: https://jinshuju.net/f/rxeJhn 提交截止时间:10 月 17 日 23:59

模块四:Kubernetes架构原则和对象设计

本周无提交的作业,大家完成课后练习即可:

练习 1

  • 用 Kubeadm 安装 Kubernetes 集群。

练习 2

  • 启动一个 Envoy Deployment。
  • 要求 Envoy 的启动配置从外部的配置文件 Mount 进 Pod。
  • 进入 Pod 查看 Envoy 进程和配置。
  • 更改配置的监听端口并测试访问入口的变化。
  • 通过非级联删除的方法逐个删除对象。

模块五:Kubernetes控制平面组件:etcd

练习 1

  • 按照课上讲解的方法在本地构建一个单节点的基于 HTTPS 的 etcd 集群
  • 写一条数据
  • 查看数据细节
  • 删除数据

练习 2

  • 在 Kubernetes 集群中创建一个高可用的 etcd 集群

模块六:Kubernetes控制平面组件:Api Server

无作业

模块七:Kubernetes控制平面组件:调度器和控制器

无作业

模块八:生命周期管理和服务发现 必做

课后作业(第一部分)

现在你对 Kubernetes 的控制面板的工作机制是否有了深入的了解呢? 是否对如何构建一个优雅的云上应用有了深刻的认识,那么接下来用最近学过的知识把你之前编写的 http 以优雅的方式部署起来吧,你可能需要审视之前代码是否能满足优雅上云的需求。

作业要求:编写 Kubernetes 部署脚本将 httpserver 部署到 kubernetes 集群,以下是你可以思考的维度

  • 优雅启动
  • 优雅终止
  • 资源需求和 QoS 保证
  • 探活
  • 日常运维需求,日志等级
  • 配置和代码分离

作业提交链接: https://jinshuju.net/f/OfIY3L 提交截止时间:11 月 28 日 23:59

课后作业(第二部分)

除了将 httpServer 应用优雅的运行在 Kubernetes 之上,我们还应该考虑如何将服务发布给对内和对外的调用方。 来尝试用 Service, Ingress 将你的服务发布给集群外部的调用方吧 在第一部分的基础上提供更加完备的部署 spec,包括(不限于)

  • Service
  • Ingress

可以考虑的细节

  • 如何确保整个应用的高可用

  • 如何通过证书保证 httpServer 的通讯安全

  • 结合上周**模块八:课后作业(第一部分)**一起提交

  • 作业提交链接: https://jinshuju.net/f/OfIY3L

  • 提交截止时间:11 月 28 日 23:59

模块九:生产化集群管理

课后练习 9.1:测试对 cpu 的校验和准入行为

  • 定义一个 Pod,并将该 Pod 中的 nodeName 属性直接写成集群中的节点名

  • 将 Pod 的 CPU 的资源设置为超出计算节点的 CPU 的值

  • 创建该 Pod

  • 观察行为并思考

课后练习 9.2:用 Kubespray 安装集群

模块十:kubernetes 的生产化运维 必做

  1. 为 HTTPServer 添加 0-2 秒的随机延时
  2. 为 HTTPServer 项目添加延时 Metric
  3. 将 HTTPServer 部署至测试集群,并完成 Prometheus 配置
  4. 从 Promethus 界面中查询延时指标数据
  5. (可选)创建一个 Grafana Dashboard 展现延时分配情况

作业提交链接: https://jinshuju.net/f/z0Z07s 提交截止时间:12 月 12 日 23:59

模块十一:将应用迁移至Kubernetes平台

HPA 练习

安装 metrics-server(本质上是一个 aggregated Server)

cd 101/appsonk8s/hpa/metrics-server
kubectl apply -f components.yaml
 
kubectl top node
NAME      CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
k8snode   325m         5%     2148Mi          18%

模块十二:基于 Istio 的高级流量管理

把我们的 httpserver 服务以 Istio Ingress Gateway 的形式发布出来。以下是你需要考虑的几点:

  • 如何实现安全保证;
  • 七层路由规则;
  • 考虑 open tracing 的接入。

作业提交链接: https://jinshuju.net/f/ivR6S0 提交截止时间:12 月 26 日 23:59

模块十三:Kubernetes 集群联邦和Istio多集群管理

无作业

集群联邦

  • Federation
  • clusternet
  • karmada

模块十四:基于 Kubernetes 和 Istio 的安全保证

无作业

  • 12-factor

模块十五:微服务项目的开发和部署案例

无作业

img

关注公众号获得更多精彩文章

公众号:程序员大兵