云原生训练营作业
资料
模块一:Go 语言特性
无作业
模块二:Go语言进阶 必做
编写一个 HTTP 服务器,大家视个人不同情况决定完成到哪个环节,但尽量把 1 都做完。
- 接收客户端 request,并将 request 中带的 header 写入 response header
- 读取当前系统的环境变量中的 VERSION 配置,并写入 response header
- Server 端记录访问日志包括客户端 IP,HTTP 返回码,输出到 server 端的标准输出
- 当访问 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 安装集群
- 按照如下的教程,用 Kubespray 安装集群
- 示例中展示了 2 节点的安装方法,可按照你有的环境灵活决定装多少个节点的集群
- 附件为老师录制演示视频 kube-spray.mp4
模块十:kubernetes 的生产化运维 必做
- 为 HTTPServer 添加 0-2 秒的随机延时
- 为 HTTPServer 项目添加延时 Metric
- 将 HTTPServer 部署至测试集群,并完成 Prometheus 配置
- 从 Promethus 界面中查询延时指标数据
- (可选)创建一个 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
模块十五:微服务项目的开发和部署案例
无作业