Ansible部署K8s集群的方法

  • Post category:Linux

Ansible部署K8s集群的方法

本文将详细介绍使用Ansible部署K8s集群的方法。

前置条件

在开始部署K8s集群之前,您需要满足以下前置条件:

  1. 确保您已经安装了Ansible工具;
  2. 准备好至少3台CentOS 7服务器作为K8s集群节点,建议服务器配置至少2核CPU、4GB内存、40GB硬盘空间;
  3. 所有服务器之间网络稳定,可以相互 Ping 通;
  4. 所有服务器已经禁止了 swap 分区;
  5. 所有服务器时间同步。

本文将以3台服务器作为K8s集群节点进行演示,分别为:

  1. 192.168.1.100
  2. 192.168.1.101
  3. 192.168.1.102

Ansible Playbook

Ansible playbook是一个文件,包含了一系列tasks,用于自动化执行部署和配置任务。本文将介绍如何编写Ansible playbook来自动化部署K8s集群。

安装必要的软件

首先,我们需要在所有节点上安装必要的软件,包括docker、kubelet、kubeadm和kubectl。

- hosts: all
  become: true
  tasks:
  - name: Install Docker
    yum:
      name: docker
      state: present
  - name: Start Docker Service
    service:
      name: docker
      state: started
  - name: Add Kubernetes Repository
    yum_repository:
      name: kubernetes
      description: Kubernetes Repository
      baseurl: https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
      gpgcheck: no
  - name: Install kubelet, kubeadm and kubectl
    yum:
      name: "{{ item }}"
      state: present
    with_items:
      - kubelet
      - kubeadm
      - kubectl

初始化Master节点

在其中一台服务器上初始化K8s Master节点。

- hosts: k8s-master
  become: true
  vars:
    k8s_pod_network_cidr: "10.244.0.0/16"
  tasks:
  - name: Initialize Kubernetes Master Node
    command: kubeadm init --pod-network-cidr "{{ k8s_pod_network_cidr }}"
    register: join_command
    become: true
    environment:
      HOME: /root
  - name: Copy kubectl Config
    command: "mkdir -p /root/.kube && cp -i /etc/kubernetes/admin.conf /root/.kube/config"
  - name: Install Weave Net Pod Network
    command: "kubectl apply -f https://git.io/weave-kube-1.6"
  - name: Show Join Command
    debug: var=join_command.stdout_lines

加入Worker节点

在其他服务器上加入K8s Worker节点,使其加入到Master节点已经初始化的集群中。

- hosts: k8s-worker
  vars:
    k8s_master_node: "192.168.1.100"
    k8s_join_token: ""
  tasks:
  - name: Get Join Token
    command: kubeadm token create --print-join-command
    register: join_command
  - name: Extract Join Token
    set_fact:
      k8s_join_token: "{{ join_command.stdout_lines | first }}"
  - name: Join Kubernetes Cluster
    command: "{{ k8s_join_token }} --discovery-token-unsafe-skip-ca-verification"

实例演示

以下演示仅展示了核心步骤,具体细节请参考完整代码。

示例1:初始化Master节点

  1. 在控制台上编辑hosts文件。
$ vim hosts
  1. 编辑hosts文件,添加K8s Master节点和Worker节点。
[k8s-master]
192.168.1.100

[k8s-worker]
192.168.1.101
192.168.1.102
  1. 通过Ansible playbook运行初始化Master节点的任务。
$ ansible-playbook -i hosts deploy-k8s.yaml --limit k8s-master

示例2:加入Worker节点

  1. 在控制台上编辑hosts文件。
$ vim hosts
  1. 编辑hosts文件,添加K8s Master节点和Worker节点。
[k8s-master]
192.168.1.100

[k8s-worker]
192.168.1.101
192.168.1.102
  1. 通过Ansible playbook运行初始化Master节点的任务。
$ ansible-playbook -i hosts deploy-k8s.yaml --limit k8s-master

$ ansible-playbook -i hosts deploy-k8s.yaml --limit k8s-worker

总结

通过Ansible playbook,我们可以很容易地自动化部署K8s集群,并加入Worker节点。Ansible的优点是易于学习和使用,而且部署后可以高效自动化维护K8s集群。我们希望本文能对您理解K8s集群自动化部署和Ansible playbook的编写有所帮助。