从阿里云到aws ,从保姆式服务到自力更生
阿里云点点点就可以搭建ci/cd k8s一整套服务
aws除了买了eks外其它全要自立更生
从命令行工具aws cli ,kubectl
到写Deployment.yaml Service.yaml (全靠从阿里云抄来的yaml)
从点点点到各种命令
描述
更新流程1->2->3 这个流程一定能成功,但是会停服
4查看pod正常启动则可以访问
5常用于pod内测试(解决不能理解的问题)
6滚动更新 (会因为性能起不起来,确实能用)
8修改yaml后滚动更新(不知道为啥没效果)
9日志查看全解决
1查询所有Deployment
kubectl get Deployment
2删除Deployment
kubectl delete Deployment <name>
#example
kubectl delete Deployment <pic-chat-prod>
3新建Deployment
#进入目标文件下执行
kubectl create -f Deployment.yml
4查询所有pods详情
kubectl get pods -o wide
5进入节点
kubectl exec -ti <your-pod-name> -n <your-namespace> -- /bin/sh
#example
kubectl exec -ti pic-chat-prod-5f7d6b996c-56jhf -n default -- /bin/sh
6 平滑重启
kubectl rollout restart deployment <deployment>
7 查看滚动升级状态
kubectl rollout status deployment/<deployment>
8 修改yaml后升级
kubectl apply -f Deployment.yaml
9 日志查看
# Return snapshot logs from pod nginx with only one container
kubectl logs <podname>
# Return snapshot of previous terminated ruby container logs from pod web-1
kubectl logs -p -c <containName> <podname>
# Begin streaming the logs of the ruby container in pod web-1
kubectl logs -f -c <containName> <podname>
# Display only the most recent 20 lines of output in pod nginx
kubectl logs --tail=20 <podname>
# Show all logs from pod nginx written in the last hour
kubectl logs --since=1h <podname>
关于自动化部署
虽然aws给了cicd的解决方案,但是太过复杂以至于没搞出来,一段时间后突然剑走偏锋,想到了一个不错的解决方案。
1.dockile打包一个新镜像 push ecr
主要包含:docker aws kubectl
2.使用aws code build 监听github webhook
在源码中添加buildspace (aws基于该文件构建) 完成3步
2.1 aws ecr login
2.2 docker build
2.3 docker psuh
2.4 kubectl rollout restart deployment
3.存在问题及解决方案
3.1打包过慢:可以继续构建自己的maven image,里面下好需要的jar
3.2重复拉去限制: docker 目前设置了重复拉去限制,频繁更新会导致拉取失败,同样也可以自己打个image推到ecr
3.3滚动更新客户端感知明显:
项目为spring boot 项目:从2点出发解决。总结,合理更新基础包,少走弯路
3.3.1.k8s活检 支持 spring boot 2.3.x actuator
3.3.2.springboot 优雅停止 springboot 2.3.x 支持
3.4 oom kill
还是2个层面解决问题:
3.4.1.depolyment 限定cpu,内存大小
3.4.2 jvm限定:
3.4.2.1 jdk8老版本需要启动时设置堆栈空间 -Xms 1024M -Xmx1024M(事实上依然存在OOM异常,所以才发现了第二种方案)
3.4.2.2 jdk8新版本已经特意支持容器部署,只需要-XX:+UseContainerSupport
3.5 kubectl操作eks
3.5.1 安装aws
3.5.2 安装eks
3.5.3 安装kubectl
3.5.4 认证 aws eks --region <region-code> update-kubeconfig --name <cluster_name>
3.6 eks 挂载efs
官方教程
官方教程有个问题,就是只部署了一个efs,如果想在eks中部署多个efs,只需要在通过yaml创建多个pv,pvc即可,该教程中无pvc与pc的关联配置,所以系统默认选择空闲空间使用。如果想创建关联关系,可在pvc中添加labels
metadata:
labels:
pv: xx-pv