ansible-app2k8s
#1 介绍
- 使用 ansible 管理和部署服务到 kubernetes
- 适用于项目容器化,多套 k8s 环境的管理,可结合CICD工具做DevOps
- 来自于项目实践,已部署多套 k8s 环境
#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
- export Ver=1.22.16 #k8s版本
- curl -ks http://elvin.vip/ks/k8s/k8s.master.ha.sh |bash
- # 参考https://www.cnblogs.com/elvi/p/8976305.html
复制代码 #5.2 获取 ansible-app2k8s
- mkdir -p /data/ansible-app2k8s
- cd /data/ansible-app2k8s
- #gitee
- git clone https://gitee.com/alivv/ansible-app2k8s.git ./
- #github
- #git clone https://github.com/alivv/ansible-app2k8s.git ./
复制代码 #5.3 运行 ansible-app2k8s 容器
为保证运行ansible版本一致,我做了ansible镜像
- #查看shell
- cat /data/ansible-app2k8s/files/run.ansible-app2k8s.sh
复制代码- sudo docker rm -f ansible-app2k8s &>/dev/null
- sudo docker run -dit --net=host \
- --name ansible-app2k8s -h app2k8s \
- -w /data/ansible-app2k8s \
- -v /tmp:/tmp \
- -v /etc/hosts:/etc/hosts \
- -v ~/.ssh:/root/.ssh \
- -v /data/ansible-app2k8s:/data/ansible-app2k8s \
- registry.cn-shanghai.aliyuncs.com/elvin/ansible:2.7.18-focal
- sudo docker ps -l
复制代码- #运行容器 ansible-app2k8s
- bash /data/ansible-app2k8s/files/run.ansible-app2k8s.sh
- #配置别名
- alias app2k8s='docker start ansible-app2k8s ; docker exec -it ansible-app2k8s bash'
- #linux
- echo "alias app2k8s='docker start ansible-app2k8s ; docker exec -it ansible-app2k8s bash'" >>~/.bashrc
- #macOS
- echo "alias app2k8s='sudo docker start ansible-app2k8s ; sudo docker exec -it ansible-app2k8s bash'" >>~/.zshrc
- #进入ansible-app2k8s容器(Ctrl+d退出)
- app2k8s
- #查看ansbile版本
- ansible --version
复制代码 #5.4 初始化 docker-build 节点
本实例把多个功能部署在 docker-build 单节点
为了安全,实际可根据需求可拆分为多个节点
#5.4.1 更改配置
配置 dev 节点 env/dev/k8s.inv- #配置dev环境节点信息 env/dev/k8s.inv
- cat > env/dev/k8s.inv <<EOF
- [dev:children]
- k8s-node
- docker-build
- [docker-build]
- build-node1 ansible_ssh_host=192.168.23.45
- [k8s-node]
- k8s-node1 ansible_ssh_host=192.168.23.30
- [k8s:children]
- k8s-node
- [docker:children]
- docker-build
- registry
- [registry]
- build-node1
- EOF
- #IP地址换自己的,节点需要免密登录
- #节点需要安装python2
- # apt install -y python python2 python-apt
- # 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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |