如何用Ansible Kubespray部署Kubernetes集群

339 阅读5分钟

目录

各位读者大家好!在这篇博客中,我们将学习如何用Ansible Kubespray部署Kubernetes集群。我们将通过12个步骤,从设置vagrant虚拟机开始,直到运行最后的ansible-playbook。

好了,现在让我们尝试一下kubespray和kubernetes --

先决条件

在部署Kubernetes集群之前,你必须满足以下先决条件。

第1步:使用Vagrant配置虚拟机

首先,我们需要使用vagrant来配置虚拟机。

我们将建立3个虚拟机(Virtual Machine),它们的IP是唯一的。

  1. Ansible节点(ansmaster) - 100.0.0.1 - 2个CPU - 2GB内存
  2. Kubernetes主节点(kubemaster) - 100.0.0.2 - 2 CPU - 2 GB内存
  3. Kubernetes Worker Node (kubeworker) - 100.0.0.3 - 2 CPU - 2 GB 内存

以下是Vagrant文件

Vagrant.configure("2") do |config|
  config.vm.define "ansmaster" do |ansmaster|
    ansmaster.vm.box_download_insecure = true
    ansmaster.vm.box = "hashicorp/bionic64"
    ansmaster.vm.network "private_network", ip: "192.168.59.101"
    ansmaster.vm.hostname = "ansmaster"
    ansmaster.vm.provider "virtualbox" do |v|
      v.name = "ansmaster"
      v.memory = 2048
      v.cpus = 2
    end
  end

  config.vm.define "kubemaster" do |kubemaster|
    kubemaster.vm.box_download_insecure = true
    kubemaster.vm.box = "hashicorp/bionic64"
    kubemaster.vm.network "private_network", ip: "192.168.59.102"
    kubemaster.vm.hostname = "kubemaster"
    kubemaster.vm.provider "virtualbox" do |v|
      v.name = "kubemaster"
      v.memory = 2048
      v.cpus = 2
    end
  end

  config.vm.define "kubeworker" do |kubeworker|
    kubeworker.vm.box_download_insecure = true
    kubeworker.vm.box = "hashicorp/bionic64"
    kubeworker.vm.network "private_network", ip: "192.168.59.103"
    kubeworker.vm.hostname = "kubeworker"
    kubeworker.vm.provider "virtualbox" do |v|
      v.name = "kubeworker"
      v.memory = 2048
      v.cpus = 2
    end
  end

end




192.168.59.101 ansmaster.knoldus.com ansmaster
192.168.59.102 kubemaster.knoldus.com kubemaster
192.168.59.103 kubeworker.knoldus.com kubeworker

cryptography==3.4.8
declare -a IPS=(192.168.59.102 192.168.59.103)


启动vagrant盒子 -

vagrant up

第2步:更新所有节点上的/etc/hosts

启动vagrant盒子后,你需要更新每个节点上的**/etc/hosts**文件,即-ansmaster、kubemaster、kubeworker。

因此,在所有三个节点上运行以下命令

sudo vi /etc/hosts

在每个节点的hosts文件中添加以下条目(ansmaster、kubemaster、kubeworker)

192.168.59.101 ansmaster.knoldus.com ansmaster
192.168.59.102 kubemaster.knoldus.com kubemaster
192.168.59.103 kubeworker.knoldus.com kubeworker

你的/etc/hosts文件在所有三个节点上都应该是这样的,即 - ansmaster, kubemaster, kubeworker

 cat /etc/hosts 
127.0.0.1	localhost
127.0.1.1	ansmaster ansmaster

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.59.101 ansmaster.knoldus.com ansmaster
192.168.59.102 kubemaster.knoldus.com kubemaster
192.168.59.103 kubeworker.knoldus.com kubeworker

第3步:为ansible生成SSH密钥(只需要在ansible节点上运行,即ansmaster)

为了顺利设置kubespray,我们需要为**ansible master(ansmaster)**n-odes生成SSH密钥并复制SSH密钥。

odes,并将SSH密钥复制到其他节点。这样,你就不必在每次登录/ssh进入时提供用户名和密码了

每次登录/ssh到其他节点时,即 - kubemaster, kubeworker

生成SSH密钥(在生成SSH密钥的过程中,它可能会要求提供口令,所以你可以创建一个新的口令或保留它。

新的口令或留空)。

ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/vagrant/.ssh/id_rsa.
Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:LWGasiSDAqf8eY3pz5swa/nUl2rWc1IFgiPuqFTYsKs vagrant@amaster
The key's randomart image is:
+---[RSA 2048]----+
|          .      |
|   .   . o . .   |
|. . = . + . . .  |
|o+ o o = o     . |
|+.o = = S .   .  |
|. .*.++...  ..   |
|  ooo*.o ..o.    |
| E .oo* .oo+ .   |
|    .oo*+.  +    |
+----[SHA256]-----+

第4步:将SSH密钥复制到其他节点,如:kubemaster、kubeworker

我们已经生成了SSH密钥,现在我们需要将SSH密钥复制到其他节点,即:kubemaster,kub-eworker

复制到kubemaster节点(在ssh-copy-id 过程中,它会询问其他节点的密码,所以如果你没有设置任何密码,那么你可以提供默认密码,即vagrant)。

ssh-copy-id 192.168.59.102

当它询问时输入 "是"--你确定要继续连接吗(是/否)? 是

Are you sure you want to continue connecting (yes/no)? yes

拷贝到kworker节点(在ssh-copy-id过程中,它会询问另一个节点的密码,所以如果你没有设置任何密码,那么你可以提供默认密码,即vagrant)。

ssh-copy-id 192.168.59.103

第5步:安装python3-pip(只需要在ansible节点上运行。)

在安装python3-pip之前,你需要从软件仓库下载并更新软件包列表。

运行以下命令(在所有节点上)。

sudo apt-get update

现在你需要安装python3-pip,使用下面的安装命令来安装python3-pip**(只需要在ansible节点上运行,即ansmaster)**。

sudo apt install python3-pip

要继续安装,按 "y"。

Do you want to continue? [Y/n] y

pip3 -V
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)

第6步:克隆kubespray的git repo(只需要在ansible节点上运行,即ansmaster)。

在接下来的步骤中,我们要克隆kubespray。使用下面的git命令来克隆kubespray

git clone https://github.com/kubernetes-sigs/kubespray.git

Cloning into 'kubespray'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 43626 (delta 0), reused 1 (delta 0), pack-reused 43623
Receiving objects: 100% (43626/43626), 12.72 MiB | 5.18 MiB/s, done.
Resolving deltas: 100% (24242/24242), done.

第7步:安装 "requirement.txt "中的kubespray包(只需要在ansible节点上运行,即ansmaster)。

跳转到 "kubespray "目录

cd kubespray

安装kubespray包

sudo pip3 install -r requirements.txt

vagrantvagrant

第8步:复制库存文件给当前用户(只需要在ansible节点上运行,即ansma-ster)。

现在我们需要使用以下命令将清单文件复制到当前用户中

cp -rfp inventory/sample inventory/mycluster

第9步:为kubespray准备host.yml,只需要在ansible节点上运行,即ansmaster。

这一步有点微不足道,因为我们需要用节点的IP更新host.yml。

现在我们要声明一个变量 "IPS "来存储其他节点的IP地址,即

kubemaster(192.168.59.102), kubeworker(192.168.59.103)

declare -a IPS=(192.168.59.102 192.168.59.103)
CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
DEBUG: Adding group all
DEBUG: Adding group kube-master
DEBUG: Adding group kube-node
DEBUG: Adding group etcd
DEBUG: Adding group k8s-cluster
DEBUG: Adding group calico-rr
DEBUG: adding host node1 to group all
DEBUG: adding host node2 to group all
DEBUG: adding host node1 to group etcd
DEBUG: adding host node1 to group kube-master
DEBUG: adding host node2 to group kube-master
DEBUG: adding host node1 to group kube-node
DEBUG: adding host node2 to group kube-node

在运行上述命令后,验证hosts.yml,它应该像----。

vi inventory/mycluster/hosts.yml

all:
  hosts:
    node1:
      ansible_host: 192.168.59.102
      ip: 192.168.59.102
      access_ip: 192.168.59.102
    node2:
      ansible_host: 192.168.59.103
      ip: 192.168.59.103
      access_ip: 192.168.59.103
  children:
    kube-master:
      hosts:
        node1:
        node2:
    kube-node:
      hosts:
        node1:
        node2:
    etcd:
      hosts:
        node1:
    k8s-cluster:
      children:
        kube-master:
        kube-node:
    calico-rr:
      hosts: {}

第10步:在ansible节点上运行ansibleplaybook.即--ansmaster(只需要在ansible节点上运行,即ansmaster)。

现在我们已经完成了运行ansible-playbook的所有先决条件。

使用下面的ansible-playbook命令来开始安装

ansible-playbook -i inventory/mycluster/hosts.yml --become --become-user=root cluster.yml

ansible-playbookansible-playbook

运行ansible playbook需要一点时间,因为它也取决于网络带宽。

在playbook运行过程中,如果你面临一个错误,你需要配置所有的需求文件,即(ansible版本应该是2.9.6)。

第二个错误会发生在ansible-core,即密码学。对于这个错误,你需要删除这一行,你可以根据以下截图进行配置。

第11步:在kubernetes主站即--kubemaster上安装kubectl(只需要在kuebernets节点即kubemaster上运行)。

现在你需要登录到kubernetes主站.即kubemaster,并下载kubectl到它上面。

curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

现在我们需要将admin.conf文件复制到**.kube**中。

sudo cp /etc/kubernetes/admin.conf /home/vagrant/config

mkdir .kube
mv config .kube/
sudo chown $(id -u):$(id -g ) $HOME/.kube/config

安装后检查kubectl的版本

kubectl version

ansibleansible

第12步:验证kubernetes节点

现在我们已经完成了使用kubespray安装kubernetes的所有必要步骤。

让我们在最后一步检查节点的状态吧

kubectl get nodes

现在你可以使用这个集群了,同时你也可以创建资源了。

总结

在这篇文章中,我们通过几个简单的步骤了解了如何用Ansible Kubespray部署Kubernetes集群。