ansible 一键部署 kubernetes高可用框架

ansible 一键部署 kubernetes高可用框架(kube-router版)

分享一个自己写的k8s搭建项目
github: https://github.com/Fear2014/kubernetes_ansible_deploy

框架说明

OS:Ubuntu

kubernetes1.13.1+etcd3.3.10+kube-router+coredns+descheduler0.9.0 全部采用二进制离线安装,无网络需求。

环境基础:已安装了python、ansible、docker、chrony、keepalived,配置好了主节点到其他节点的免密登陆。/offlinePackage中提供了chrony与keepalived的离线包

案例为4台服务器,组成双master和3worker的高可用集群

关于网络的说明

正常情况下,一台服务器一个网卡&一个网关,但是当遇到特殊情况,如2个网卡2个网关的时候,需要对router进行操作了,/route 提供了添加route永久生效的方法

为何使用kube-router

1、部署方便,kube-router, 它可以不仅仅作为 CNI 提供 pod 所需的网络, 以及提供 networkPolicy, 还能运行为 service proxy 替代 kube-proxy 来实现 k8s 下的 Service

2、flannel不支持Network Policy

3、kube-router使用ipvs性能损失最小,时延最小,其他网络插件性能差距不大 kube-router > calico > canal = flannel = romana

在这里插入图片描述
在这里插入图片描述

使用说明

运行startup.sh,通过ansible在master节点去部署4台服务器

框架目录结构:
/etc/ansible/ |-bin
|-down
|-roles
|-0x.xxx.yml
|-ansible.cfg
|-hosts
/k8s/ |-etcd/ |-ssl
|-cfg
|-kubernetes/ |-ssl
|-cfg
|-yml
/data/etcd
/etc/cni/net.d
/opt/cni/bin

使用了coredns与descheduler插件,分别保证域名访问与pod重调度功能,descheduler的周期建议改为一天一次,默认设置为在每日凌晨2点时启动排查

使用 ansible/99.clean.yml 可直接清理etcd、k8s,方便重新搭建

配置文件说明

1、coredns的配置文件coredns.yml.j2
Corefile: |
.:53 {
errors
health
kubernetes cluster.local {{ SERVICE_CIDR }} {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . 8.8.8.8:53 #修改为自定义的DNS地址,省去修改resolv.conf的麻烦
cache 30
loop
reload
loadbalance

2、api-server配置文件说明:
–bind-address=0.0.0.0 \ #此为设置安全端口监听的ip,选择监听所有
–advertise-address={{ MASTER_IP }} \ #此为发布给集群的api-server的地址,设置为api-server-VIP

2、controller-manager/kube-schduler配置文件说明:
–address=127.0.0.1 \ #设置为本地地址
–master=127.0.0.1:8080 \ #设置本地的api地址,保证3个组件都在同一个服务器上运行

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Ansible来实现一键部署高可用集群项目。下面是一个简单的步骤: 1. 创建一个Ansible的Inventory文件,定义你的服务器列表。例如: ``` [web] server1 ansible_host=<IP地址> ansible_user=<用户名> ansible_ssh_private_key_file=<私钥路径> [database] server2 ansible_host=<IP地址> ansible_user=<用户名> ansible_ssh_private_key_file=<私钥路径> ``` 2. 创建一个Ansible的Playbook文件,用于定义你的部署任务。例如: ```yaml --- - hosts: web become: true tasks: - name: 安装依赖软件包 yum: name: "{{ item }}" state: present with_items: - package1 - package2 - name: 配置Web服务器 template: src: web.conf.j2 dest: /etc/web.conf notify: - restart web handlers: - name: 重启Web服务器 service: name: web state: restarted - hosts: database become: true tasks: - name: 安装依赖软件包 yum: name: "{{ item }}" state: present with_items: - package3 - package4 - name: 配置数据库 template: src: db.conf.j2 dest: /etc/db.conf notify: - restart db handlers: - name: 重启数据库服务 service: name: db state: restarted ``` 在上面的例子中,我们通过使用`yum`模块安装了一些软件包,并使用`template`模块配置了一些配置文件。当配置文件发生变化时,会触发相应服务的重启。 3. 创建模板文件,用于生成配置文件。例如,`web.conf.j2`可以是一个Jinja2模板文件,如下所示: ``` server_name: {{ ansible_hostname }} listen_port: 80 ``` 在模板文件中,你可以使用Jinja2的语法来插入变量。 4. 运行Ansible Playbook来执行部署任务。使用以下命令: ``` ansible-playbook -i inventory.ini playbook.yaml ``` 其中,`inventory.ini`是你的Inventory文件,`playbook.yaml`是你的Playbook文件。 通过以上步骤,你就可以使用Ansible一键部署高可用集群项目了。当然,具体的配置和任务根据你的项目需求可能会有所不同。这只是一个简单的例子,你可以根据实际情况进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值