请看下面的详细攻略。
概述
Ansible是一款自动化IT操作工具,可以用它来管理和部署K8s集群。在使用Ansible部署K8s集群时,通常可以包含以下步骤:
- 准备工作环境:安装Ansible软件和其他必要的工具以及配置SSH连接。
- 准备K8s集群主机:为每个节点安装Docker、配置节点IP地址和设置K8s集群参数等。
- 配置主机清单文件:在Ansible主控节点上创建主机清单文件来定义部署环境中的所有主机。
- 创建Ansible任务剧本:编写Ansible playbook文件来定义部署K8s集群的任务。
- 执行部署:使用Ansible执行剧本来部署K8s集群。
准备工作环境
在Ansible主控节点上执行以下步骤:
- 安装Ansible软件
sudo apt update
sudo apt install ansible
- 配置SSH连接
使用ssh-keygen命令生成SSH密钥,将公钥复制到所有K8s节点的~/.ssh/authorized_keys
文件中。
ssh-keygen -t rsa
ssh-copy-id node1_ip
ssh-copy-id node2_ip
ssh-copy-id node3_ip
准备K8s集群主机
为了安装K8s,我们需要在每个节点上先安装Docker和kubeadm。
- 安装Docker:
执行以下命令以安装Docker。
sudo apt-get update
sudo apt-get -y install docker.io
sudo systemctl enable docker.service
sudo systemctl start docker.service
sudo systemctl status docker.service
- 安装Kubeadm
执行以下命令以安装Kubernetes组件。
sudo curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
- 初始化K8s master节点
在主节点上执行以下命令以初始化Kubernetes集群。
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<master_node_IP>
这里,--pod-network-cidr
需要与将要使用的CNI插件匹配,这里使用的是Flannel插件,所以CIDR值为10.244.0.0/16
。
- 加入K8s worker节点
在worker节点上执行以下命令以将其加入到K8s集群中。
sudo kubeadm join <master_node_IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
需要将<master_node_IP>, <token> and <hash>
替换为实际的值,该命令通常由master节点初始化时输出。
配置主机清单文件
在Ansible主控节点上创建名为hosts的文本文件,该文件描述了K8s集群环境中使用的所有主机。示例如下:
[k8s_master]
192.168.1.100
[k8s_worker]
192.168.1.101
192.168.1.102
这里,[k8s_master]
和[k8s_worker]
是Ansible中的组名,192.168.1.100,192.168.1.101,192.168.1.102
是主机的IP地址。
创建Ansible任务剧本
在Ansible主控节点上,创建名为k8s_deploy.yaml的文件,该文件定义了一系列任务来配置和部署K8s集群。示例如下:
- hosts: k8s_master
become: yes
gather_facts: yes
tasks:
- name: Initialize Kubernetes Cluster
shell: kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.100
- name: Copy kubeadm configuration file to k8s worker node
copy:
src: /etc/kubernetes/admin.conf
dest: /home/user/.kube/config
remote_src: yes
owner: user
group: user
mode: 0644
delegate_to: "{{ item }}"
with_items: "{{ groups['k8s_workers'] }}"
- name: Install Calico Network Addon for Kubernetes
shell: kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
become: true
- hosts: k8s_workers
become: yes
gather_facts: yes
tasks:
- name: Join K8s master node
shell: kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
该任务剧本首先连接到k8s_master主机执行任务,其次通过Kubeadm初始化K8s集群并部署Calico网络插件。接下来,复制Kubernetes ADM客户端配置文件到工作节点以便后续使用。最后创建一个独立的任务,连接到k8s_workers启动工作节点加入K8s集群。
执行部署
在Ansible主控节点上,执行以下命令启动Ansible任务。
ansible-playbook -i hosts k8s_deploy.yaml
Ansible将按照定义的任务剧本依次执行每个任务并将结果输出到控制台。
示例1
假设我们需要部署一个3节点的Kubernetes集群,主节点IP地址为192.168.1.100, 工作节点IP地址为192.168.1.101,192.168.1.102。按照上述攻略,可以执行以下步骤:
- 在Ansible主控节点上安装Ansible软件和配置SSH连接。
- 在每个K8s节点上安装Docker以及Kubeadm
- 在主控节点上创建名为hosts的文件,并编写如下内容:
[k8s_master]
192.168.1.100
[k8s_worker]
192.168.1.101
192.168.1.102
- 在主控节点上创建名为k8s_deploy.yaml的文件,并编写如下内容:
- hosts: k8s_master
become: yes
gather_facts: yes
tasks:
- name: Initialize Kubernetes Cluster
shell: kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.100
- name: Copy kubeadm configuration file to k8s worker node
copy:
src: /etc/kubernetes/admin.conf
dest: /home/user/.kube/config
remote_src: yes
owner: user
group: user
mode: 0644
delegate_to: "{{ item }}"
with_items: "{{ groups['k8s_workers'] }}"
- name: Install Calico Network Addon for Kubernetes
shell: kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
become: true
- hosts: k8s_workers
become: yes
gather_facts: yes
tasks:
- name: Join K8s master node
shell: kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
- 在主控节点上执行如下命令,以启动Ansible任务:
ansible-playbook -i hosts k8s_deploy.yaml
示例2
假设现在我们需要升级我们的Kubernetes集群,如添加新的工作节点。按照上述攻略,可以执行以下步骤:
- 在Ansible主控节点上安装Ansible软件和配置SSH连接。
- 在每个K8s节点上安装Docker以及Kubeadm
- 在主控节点上更新名为hosts的文件,并添加新的工作节点IP地址,例如:
[k8s_master]
192.168.1.100
[k8s_worker]
192.168.1.101
192.168.1.102
192.168.1.103
- 在主控节点上创建名为k8s_deploy.yaml的文件,并执行以下更新:
- hosts: k8s_master
become: yes
gather_facts: yes
tasks:
- name: Initialize Kubernetes Cluster
shell: kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.100
- name: Copy kubeadm configuration file to k8s worker node
copy:
src: /etc/kubernetes/admin.conf
dest: /home/user/.kube/config
remote_src: yes
owner: user
group: user
mode: 0644
delegate_to: "{{ item }}"
with_items: "{{ groups['k8s_workers'] }}"
- name: Install Calico Network Addon for Kubernetes
shell: kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
become: true
- hosts: k8s_workers
become: yes
gather_facts: yes
tasks:
- name: Join K8s master node
shell: kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
- 在主控节点上执行如下命令,以启动Ansible任务:
ansible-playbook -i hosts k8s_deploy.yaml
完成后,你会发现新节点已成功加入到了Kubernetes集群中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Ansible部署K8s集群的方法 - Python技术站