2021-05-15 从阿里云k8s到aws eks

从阿里云到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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容