目录
各位读者大家好!在这篇博客中,我们将学习如何用Ansible Kubespray部署Kubernetes集群。我们将通过12个步骤,从设置vagrant虚拟机开始,直到运行最后的ansible-playbook。
好了,现在让我们尝试一下kubespray和kubernetes --
先决条件
在部署Kubernetes集群之前,你必须满足以下先决条件。
- Kubespray
- Ansible
- Python 3.6.0
- Kubernetes
第1步:使用Vagrant配置虚拟机
首先,我们需要使用vagrant来配置虚拟机。
我们将建立3个虚拟机(Virtual Machine),它们的IP是唯一的。
- Ansible节点(ansmaster) - 100.0.0.1 - 2个CPU - 2GB内存
- Kubernetes主节点(kubemaster) - 100.0.0.2 - 2 CPU - 2 GB内存
- 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


第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 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


第12步:验证kubernetes节点
现在我们已经完成了使用kubespray安装kubernetes的所有必要步骤。
让我们在最后一步检查节点的状态吧
kubectl get nodes


现在你可以使用这个集群了,同时你也可以创建资源了。
总结
在这篇文章中,我们通过几个简单的步骤了解了如何用Ansible Kubespray部署Kubernetes集群。