云原生训练营作业 -- 部署 k8s 集群
课后作业(第一部分)
现在你对 Kubernetes 的控制面板的工作机制是否有了深入的了解呢?是否对如何构建一个优雅的云上应用有了深刻的认识,那么接下来用最近学过的知识把你之前编写的 http 以优雅的方式部署起来吧,你可能需要审视之前代码是否能满足优雅上云的需求。
作业要求:编写 Kubernetes 部署脚本将 httpserver 部署到 kubernetes 集群,以下是你可以思考的维度* 优雅启动
* 优雅终止
* 资源需求和 QoS 保证
* 探活
* 日常运维需求,日志等级
* 配置和代码分离
作业提交链接: https://jinshuju.net/f/OfIY3L
模块八:课后作业(第二部分)
除了将 httpServer 应用优雅的运行在 Kubernetes 之上,我们还应该考虑如何将服务发布给对内和对外的调用方。来尝试用 Service, Ingress 将你的服务发布给集群外部的调用方吧在第一部分的基础上提供更加完备的部署 spec,包括(不限于)
*Service
*Ingress
可以考虑的细节
*如何确保整个应用的高可用
*如何通过证书保证 httpServer 的通讯安全
容器启动和探活
优雅启动,Pod spec 的 livenessProbe 可以用命令实现,比如 cat /tmp/healthy,如果这个文件不存在,表示 Pod 还没有 ready。periodSeconds 配置为 5,表示检查周期是 5 秒。initialDelaySeconds 可以配置为 10,表示延迟 10 秒后,开始检测。可以手工 touch 这个文件后,让 Pod 起来,观察 kubectl describe pod $podname 看原因。
容器终止
pod spec 的 containers 中 lifecycle 中 preStop 一项里可以加 exec 的 command,在 pod 被动停止前加上自己的处理,比如先 killall -6 httpserver。如果需要,还可以加上当前的程序正在运行的调用栈信息等。会先执行 preStop,再执行 SIGTERM 和 SIGKILL,来停掉 container。
配置和代码分离
配置都写在 yaml 文件里,代码在 httpserver 的目录下,各 pod 不同的部分都放在配置文件里。这样只需要修改配置,就可以实现不同参数的服务。
容器资源的限制
在 pod spec 中的 containers 的 args 项中,resources 的 limits,memory 可以限制为 512Mi,表示最大用 512MiB,requests 的 memory 可以限制为 256MiB,表示一开始预留出 256MiB。cpu 可以配置为 100m
配置 Service
service 的作用是提供虚拟的 cluster IP,转换为内部 pod 的 IP,从而保障应用的高可用。当某个 pod down 掉,或者需要 scaling 扩缩容的时候,可以内部 load balance 到其他的 Pod。
可以在 Pod spec 中配置 type 为 ClusterIP,指定 ports,以及 selector 的 app 为 httpserver。
配置 Ingress
在 pod spec 中配置 tls 的 hosts, secretName,rules 中配置 host,http 的规则等,因为 ingress 是 7 层负载均衡。
生成 key 和 crt
通过 openssl 的命令来生成即可,x509 是编码方式,输出是 key 文件和 crt 文件,用的是 rsa 算法,长度是 2048 位。
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=cncamps.com/O=cncamps"
评论