Ansible与Kubernetes自动化部署实践

自动化部署是DevOps的核心实践之一,结合Ansible和Kubernetes(K8s)能够显著提升集群管理的效率和可靠性。以下是一套基于Ansible的K8s自动化部署源码实现方案。


环境准备与工具链配置

确保已安装Ansible(2.9+)和kubectl工具,目标节点需满足K8s的硬件要求。通过Ansible清单文件(inventory)定义集群角色:

[k8s_master]
master01 ansible_host=192.168.1.10

[k8s_nodes]
node01 ansible_host=192.168.1.11
node02 ansible_host=192.168.1.12

安装Python依赖库:

pip3 install kubernetes pyyaml

核心Playbook实现

创建k8s_deploy.yml playbook,包含以下关键任务:

初始化系统配置

- name: Configure system prerequisites
  hosts: all
  tasks:
    - sysctl:
        name: "{{ item.key }}"
        value: "{{ item.value }}"
        state: present
        reload: yes
      with_items:
        - { key: 'net.ipv4.ip_forward', value: '1' }
        - { key: 'vm.swappiness', value: '0' }

Master节点部署

- name: Setup K8s master
  hosts: k8s_master
  roles:
    - role: kubernetes/control-plane
      kubeadm_init_opts: "--pod-network-cidr=10.244.0.0/16"

Node节点加入集群

- name: Join worker nodes
  hosts: k8s_nodes
  vars:
    join_command: "{{ hostvars['master01']['kubeadm_join_command'] }}"
  tasks:
    - command: "{{ join_command }}"
      register: join_result
    - debug: var=join_result.stdout

自定义模块开发

实现Ansible模块k8s_app_deploy.py用于应用部署:

from ansible.module_utils.basic import AnsibleModule
from kubernetes import client, config

def deploy_app(module):
    config.load_kube_config()
    api = client.AppsV1Api()
    # 部署逻辑实现...
    
def main():
    module = AnsibleModule(argument_spec={...})
    deploy_app(module)

if __name__ == '__main__':
    main()

应用部署模板

使用Jinja2模板生成K8s资源文件nginx-deployment.j2

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: {{ replica_count }}
  template:
    spec:
      containers:
      - name: nginx
        image: nginx:{{ nginx_version }}

通过Playbook调用模板:

- name: Deploy application
  template:
    src: nginx-deployment.j2
    dest: /tmp/nginx-deploy.yaml
  vars:
    replica_count: 3
    nginx_version: "1.21"

验证与扩展

执行部署后验证集群状态:

ansible-playbook -i inventory k8s_deploy.yml
kubectl get nodes
kubectl get pods -A

扩展建议:

  • 集成Helm进行复杂应用管理
  • 添加Prometheus监控配置
  • 实现蓝绿部署策略

完整源码参考GitHub仓库:https://github.com/example/k8s-ansible-automation(示例链接需替换为实际项目地址)


该方案通过Ansible实现K8s集群的全生命周期管理,结合模块化设计和模板化部署,适用于生产级场景。实际应用中需根据具体网络环境和安全要求调整参数配置。

更多推荐