Ansible部署K8s集群的方法
本文将详细介绍使用Ansible部署K8s集群的方法。
前置条件
在开始部署K8s集群之前,您需要满足以下前置条件:
- 确保您已经安装了Ansible工具;
- 准备好至少3台CentOS 7服务器作为K8s集群节点,建议服务器配置至少2核CPU、4GB内存、40GB硬盘空间;
- 所有服务器之间网络稳定,可以相互 Ping 通;
- 所有服务器已经禁止了 swap 分区;
- 所有服务器时间同步。
本文将以3台服务器作为K8s集群节点进行演示,分别为:
- 192.168.1.100
- 192.168.1.101
- 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节点
- 在控制台上编辑hosts文件。
$ vim hosts
- 编辑hosts文件,添加K8s Master节点和Worker节点。
[k8s-master]
192.168.1.100
[k8s-worker]
192.168.1.101
192.168.1.102
- 通过Ansible playbook运行初始化Master节点的任务。
$ ansible-playbook -i hosts deploy-k8s.yaml --limit k8s-master
示例2:加入Worker节点
- 在控制台上编辑hosts文件。
$ vim hosts
- 编辑hosts文件,添加K8s Master节点和Worker节点。
[k8s-master]
192.168.1.100
[k8s-worker]
192.168.1.101
192.168.1.102
- 通过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的编写有所帮助。