灌篮少年 发表于 2023-6-26 00:55:54

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

ansible-app2k8s

#1 介绍


[*]使用 ansible 管理和部署服务到 kubernetes
[*]适用于项目容器化,多套 k8s 环境的管理,可结合CICD工具做DevOps
[*]来自于项目实践,已部署多套 k8s 环境

[*]自建 k8s
[*]阿里云 ACK
[*]腾讯云 TEK
[*]华为云 CCE
[*]AWS EKS
[*]微软云 AKS

#2 主要功能


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


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

原理很简单,使用ansible管理模板,调用kubectl执行部署
ansible-templates -> deploy.yml -> kubectl -> kubenertes
https://imgs.elvin.vip/2023/app2k8s-1.png
执行过程使用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
运行截图
https://imgs.elvin.vip/2023/k8s_ansible_cli_v1.jpg
#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.shsudo 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

k8s-node
docker-build


build-node1      ansible_ssh_host=192.168.23.45

k8s-node1          ansible_ssh_host=192.168.23.30


k8s-node

docker-build
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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 使用ansible-app2k8s管理和部署服务到 kubernetes