使用ansible-app2k8s管理和部署服务到 kubernetes

打印 上一主题 下一主题

主题 775|帖子 775|积分 2325

ansible-app2k8s

#1 介绍

#2 主要功能


  • 镜像构建并推送到镜像仓库
  • 环境初始化(创建 namespace、储存卷、驱动等)
  • 部署监控(prometheus、grafana、loki)
  • 构建与部署服务到 k8s(主要用途)
#3 运行环境


  • 系统 Ubuntu 20
  • ansible 2.7 (高版本可能出现语法兼容性问题)
  • kubenertes(能被kubectl客户端连接即可)
#4 原理与结构

原理很简单,使用ansible管理模板,调用kubectl执行部署
ansible-templates -> deploy.yml -> kubectl -> kubenertes

执行过程使用tag标记,如-t deploy执行deploy部分
根据执行过程,大致分为以下步骤模块

  • base-build 基础镜像构建(docker build)
  • push 推送公共镜像到镜像仓库(docker pull)
  • init 环境初始化(如创建 namespace)
  • monitor 监控警报(如 prometheus)
  • build 构建服务镜像(docker build)
  • deploy 部署服务(kubectl apply )
  • ingress 配置域名访问(7 层代理)
模板目录 roles/k8s/templates
根据服务类别分为如下子目录

  • base 基础镜像 dockerfile
  • ingress 域名解析配置
  • init 环境初始化 yaml 文件
  • java jar包构建镜像和部署模板
  • jetty 使用jetty的服务构建和部署模板
  • monitor 监控警报相关 yaml
  • ms 没有单独参数文件的微服务部署模板
  • nignx 前端静态使用 nginx 容器的部署模板
针对不同k8s环境如dev、prod,使用各自参数配置如储存、镜像仓库、资源限制等
使用ansible -i 指定inventory路径并使用对应的组变量
如dev环境的k8s配置文件 group_vars/dev/k8s.yml
服务app-v1的dev环境配置 group_vars/dev/k8s_apps/app-v1.yml
prod环境使用对应配置路径 group_vars/prod/k8s_apps/app-v1.yml
运行截图

#5 dev 环境准备与配置

#5.1 快速安装 k8s
  1. export Ver=1.22.16 #k8s版本
  2. curl -ks http://elvin.vip/ks/k8s/k8s.master.ha.sh |bash
  3. # 参考https://www.cnblogs.com/elvi/p/8976305.html
复制代码
#5.2 获取 ansible-app2k8s
  1. mkdir -p /data/ansible-app2k8s
  2. cd /data/ansible-app2k8s
  3. #gitee
  4. git clone https://gitee.com/alivv/ansible-app2k8s.git ./
  5. #github
  6. #git clone https://github.com/alivv/ansible-app2k8s.git ./
复制代码
#5.3 运行 ansible-app2k8s 容器

为保证运行ansible版本一致,我做了ansible镜像
  1. #查看shell
  2. cat /data/ansible-app2k8s/files/run.ansible-app2k8s.sh
复制代码
  1. sudo docker rm -f ansible-app2k8s &>/dev/null
  2. sudo docker run -dit --net=host \
  3. --name ansible-app2k8s -h app2k8s \
  4. -w /data/ansible-app2k8s \
  5. -v /tmp:/tmp \
  6. -v /etc/hosts:/etc/hosts \
  7. -v ~/.ssh:/root/.ssh \
  8. -v /data/ansible-app2k8s:/data/ansible-app2k8s \
  9. registry.cn-shanghai.aliyuncs.com/elvin/ansible:2.7.18-focal
  10. sudo docker ps -l
复制代码
  1. #运行容器 ansible-app2k8s
  2. bash /data/ansible-app2k8s/files/run.ansible-app2k8s.sh
  3. #配置别名
  4. alias app2k8s='docker start ansible-app2k8s ; docker exec -it ansible-app2k8s bash'
  5. #linux
  6. echo "alias app2k8s='docker start ansible-app2k8s  ; docker exec -it ansible-app2k8s bash'" >>~/.bashrc
  7. #macOS
  8. echo "alias app2k8s='sudo docker start ansible-app2k8s  ; sudo docker exec -it ansible-app2k8s bash'" >>~/.zshrc
  9. #进入ansible-app2k8s容器(Ctrl+d退出)
  10. app2k8s
  11. #查看ansbile版本
  12. ansible --version
复制代码
#5.4 初始化 docker-build 节点

本实例把多个功能部署在 docker-build 单节点
为了安全,实际可根据需求可拆分为多个节点
#5.4.1 更改配置

配置 dev 节点 env/dev/k8s.inv
  1. #配置dev环境节点信息 env/dev/k8s.inv
  2. cat > env/dev/k8s.inv <<EOF
  3. [dev:children]
  4. k8s-node
  5. docker-build
  6. [docker-build]
  7. build-node1        ansible_ssh_host=192.168.23.45
  8. [k8s-node]
  9. k8s-node1          ansible_ssh_host=192.168.23.30
  10. [k8s:children]
  11. k8s-node
  12. [docker:children]
  13. docker-build
  14. registry
  15. [registry]
  16. build-node1
  17. EOF
  18. #IP地址换自己的,节点需要免密登录
  19. #节点需要安装python2
  20. # apt install -y python python2 python-apt
  21. # ln -fs /usr/bin/python2 /usr/bin/python
复制代码
#10 作者

Elvin hi@elvin.vip
主要博客 http://blog.elvin.vip
Source
https://gitee.com/alivv/ansible-app2k8s
https://github.com/alivv/ansible-app2k8s

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表