首先,确保您的Ansible主机和目标机器都已经安装了Ansible。接下来,创建一个名为kubernetes-cluster.yml的Ansible Playbook,并在其中添加以下内容:
- hosts: k8s_nodes
become: yes
serial: 1
roles: - k8s_install
在上面的Playbook中,我们指定了目标主机组为k8s_nodes,并运行了一个名为k8s_install的角色。这个角色将在每台目标机器上执行安装Kubernetes的命令。
接下来,我们创建一个名为roles/k8s_install/tasks/main.yml的文件,并在其中添加以下内容:
- name: 安装Docker
apt:
name: docker.io
state: present
tags: docker - name: 配置Docker参数
lineinfile:
dest: /etc/docker/daemon.json
line: ‘{
“registry-mirrors”: [“https://“],
“experimental”: true
}’
tags: docker - name: 重启Docker服务
service:
name: docker
state: restarted
tags: docker - name: 安装Kubernetes组件
apt:
name: kubelet kubeadm kubectl kubernetes-cni
state: present
tags: kubernetes - name: 配置网络插件
template:
src: /tmp/flanneld.conf
dest: /etc/systemd/system/flanneld.service
tags: network - name: 启动网络插件
service:
name: flanneld
state: started
tags: network - name: 初始化Kubernetes集群
kubeadm:
init:
kubelet-extra-args: “{{ kubelet_extra_args }}”
api-advertise-addresses: “{{ inventory_hostname }}”
discovery-file: “{{ ansible_dir }}/files/kubeadm-discovery.yaml”
api-bind-address: “{{ ansible_default_ipv4.address }}”
feature-gates: “{{ feature_gates }}”
pod-network-cidr: “{{ pod_network_cidr }}”
tags: kubernetes
在上面的Playbook中,我们首先安装了Docker,然后配置了Docker参数,重启了Docker服务。接下来,我们安装了Kubernetes组件,包括kubelet、kubeadm、kubectl和kubernetes-cni。然后,我们配置了网络插件Flanneld,并启动了该服务。最后,我们使用kubeadm初始化Kubernetes集群。请注意,在kubeadm命令中,我们指定了一些参数,如kubelet-extra-args、api-advertise-addresses、discovery-file等。这些参数可以根据您的需求进行修改。
现在,您可以使用以下命令运行Playbook:
ansible-playbook -i hosts kubernetes-cluster.yml -k -K —ask-sudo-pass —limit k8s_nodes
运行成功后,您将在每台目标机器上自动安装和配置Kubernetes集群。请注意,您需要具有适当的权限才能运行此命令。