云网牛站
所在位置:首页 > Linux云服务器 > 使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤

使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤

2019-09-16 16:06:25作者:戴进稿源:云网牛站

部署Production ready Kubernetes集群有多种方式,在本文中,我们将重点介绍使用Ansible和Kubespray部署生产级Kubernetes集群。使用Kubespray,可以在AWS、GCE、Azure、OpenStack、vSphere、Packet或Baremetal上快速部署高可用性Kubernetes集群,它支持大多数流行的Linux发行版,如Debian、Ubuntu、CentOS、RHEL、Fedora、CoreOS、openSUSE和Oracle Linux 7。

 

第1步:基础设施准备

你需要首先创建在部署Kubernetes集群期间使用的虚拟机/服务器,这涉及选择你喜欢的Linux发行版,在我的设置中,我将使用CentOS 7作为所有部署的基本操作系统。

我的masters/workers/etcd节点将使用m1.medium风格,如果你希望群集中有大量工作负载,则会有更多资源:

$ openstack flavor list

使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤

我将使用openstack CLI创建我的VM,三个控制器/etcd节点和两个工作节点:

for i in master0 master1 master2 worker0 worker1; do

 openstack server create \

 --image CentOS-7 \

 --key-name jmutai \

 --flavor m1.medium \

 --security-group  7fffea2a-b756-473a-a13a-219dd0f1913a  \

 --network private  \

 $i

done

所有控制器节点也将运行etcd服务,这是我创建的服务器:

$ openstack server list

使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤

 

第2步:克隆kubespray项目

克隆项目存储库:

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

Cloning into 'kubespray'...

remote: Enumerating objects: 17, done.

remote: Counting objects: 100% (17/17), done.

remote: Compressing objects: 100% (16/16), done.

remote: Total 38488 (delta 2), reused 2 (delta 0), pack-reused 38471

Receiving objects: 100% (38488/38488), 11.06 MiB | 548.00 KiB/s, done.

Resolving deltas: 100% (21473/21473), done.

切换到项目目录:

$ cd kubespray

此目录包含用于部署Kubernetes的清单文件和手册。

 

第3步:准备本地计算机

在你将从中运行部署的本地计算机上,需要安装pip Python包管理器:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

python get-pip.py --user

参考:在Debian 10系统上为Python 2/3安装和使用Pip的方法

 

第4步:创建Kubernetes集群清单文件和安装依赖项

库存由3组组成:

1、kube-node:pod将运行的kubernetes节点列表。

2、kube-master:将运行kubernetes主组件(apiserver、scheduler、controller)的服务器列表。

3、etcd:组成etcd服务器的服务器列表,你应该至少有3台服务器用于故障转移。

还有两个特殊群体:

1、calico-rr:解释了先进的Calico网络案例

2、bastion:如果你的节点无法直接访问,请配置堡垒主机。

创建库存文件:

cp -rfp inventory/sample inventory/mycluster

使用服务器的IP地址定义清单,并映射到正确的节点目的:

$ vim inventory/mycluster/inventory.ini

master0   ansible_host=10.10.1.126 ip=10.10.1.126

master1   ansible_host=10.10.1.194 ip=10.10.1.194

master2   ansible_host=10.10.1.134 ip=10.10.1.134

worker0   ansible_host=10.10.1.146 ip=10.10.1.146

worker1   ansible_host=10.10.1.122 ip=10.10.1.122

# ## configure a bastion host if your nodes are not directly reachable

# bastion ansible_host=x.x.x.x ansible_user=some_user

[kube-master]

master0

master1

master2

[etcd]

master0

master1

master2

[kube-node]

worker0

worker1

[calico-rr]

[k8s-cluster:children]

kube-master

kube-node

calico-rr

将记录添加到工作站上的/etc/hosts:

$ sudo tee -a /etc/hosts <<EOF

10.10.1.126 master0

10.10.1.194 master1

10.10.1.134 master2

10.10.1.146 worker0

10.10.1.122 worker1

EOF

如果你的私有ssh密钥有密码,请在开始部署之前保存它:

$ eval `ssh-agent -s` && ssh-add

Agent pid 4516

Enter passphrase for /home/centos/.ssh/id_rsa: 

Identity added: /home/centos/.ssh/id_rsa (/home/centos/.ssh/id_rsa)

从requirements.txt安装依赖项:

pip install --user -r requirements.txt

确认安装:

$ ansible --version

ansible 2.7.12

config file = /home/centos/kubespray/ansible.cfg

configured module search path = [u'/home/centos/kubespray/library']

ansible python module location = /home/centos/.local/lib/python2.7/site-packages/ansible

executable location = /home/centos/.local/bin/ansible

python version = 2.7.5 (default, Jun 20 2019, 20:27:34) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

参考:在Fedora系统中获取最新的Ansible 2.8版本

查看并更改inventory/mycluster/group_vars下的参数:

cat inventory/mycluster/group_vars/all/all.yml

cat inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml

 

第5步:使用Kubespray Ansible Playbook部署Kubernetes集群

现在执行playbook以使用Ansible部署Production ready Kubernetes,请注意,目标服务器必须能够访问Internet才能获取docker镜像。

启动新的tmux会话:

tmux new -s kubespray

通过运行以下命令启动部署:

ansible-playbook -i inventory/mycluster/inventory.ini --become \

--user=centos --become-user=root cluster.yml

将centos替换为远程用户ansible将连接到节点as,你不应该执行失败的任务:

使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤

登录其中一个主节点并检查群集状态:

$ sudo su -

# kubectl config get-clusters 

# kubectl cluster-info 

# kubectl config view

# kubectl get  nodes

# kubectl get endpoints -n kube-system

使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤

你还可以在kube-system命名空间下检查群集中正在运行的Pod:

# kubectl get pods -n kube-system

使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤

 

第6步:配置HAProxy负载均衡器

让我们配置一个外部负载均衡器(LB)来为外部客户端提供访问,而内部LB只接受客户端连接到本地主机,在你用作负载均衡器的服务器上安装HAProxy软件包:

sudo yum -y install haproxy

为API配置后端服务器:

listen k8s-apiserver-https

 bind *:6443

 option ssl-hello-chk

 mode tcp

 balance roundrobin

 timeout client 3h

 timeout server 3h

 server master0 10.10.1.126:6443

 server master1 10.10.1.194:6443

 server master2 10.10.1.134:6443

启动并启用haproxy服务:

sudo systemctl enable --now haproxy

获得服务状态:

$ systemctl status haproxy

使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤

允许防火墙上的服务端口:

$ sudo firewall-cmd --add-port=6443/tcp --permanent

$ sudo firewall-cmd --reload

要连接到API服务器,外部客户端可以通过我们配置的负载均衡器。

从主服务器上的/etc/kubernetes/admin.conf位置获取kube配置文件:

$ scp root@master0_IP:/etc/kubernetes/admin.conf kubespray.conf

然后,我们可以将kubectl客户端配置为通过KUBECONFIG环境变量使用下载的配置文件:

$ export KUBECONFIG=./kubespray.conf

$ kubectl --insecure-skip-tls-verify get nodes

使用Ansible和Kubespray部署生产就绪Kubernetes集群的步骤

 

附:扩展Kubernetes集群和访问Kubernetes仪表板

1、扩展Kubernetes集群

你可能希望将worker,master或etcd节点添加到现有集群,这可以通过重新运行cluster.yml playbook来完成,或者你可以定位在工作器上安装kubelet并与主人交谈所需的最低限度。

1]、将新工作线程节点添加到相应组中的清单中。

2]、运行ansible-playbook命令:

ansible-playbook -i inventory/mycluster/inventory.ini --become \

--user=centos --become-user=root -v cluster.yml

2、访问Kubernetes仪表板

如果设置了变量dashboard_enabled(默认为true),则可以访问以下URL中的Kubernetes仪表板,系统将提示你输入帐户信息:

https://first_master:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

或者使用kubectl proxy命令在你的计算机和Kubernetes API服务器之间创建代理服务器,默认情况下,它只能在本地访问(从启动它的计算机)。

首先让我们检查kubectl是否已正确配置并且是否可以访问群集:

$ kubectl cluster-info

启动本地代理服务器:

$ kubectl proxy

Starting to serve on 127.0.0.1:8001

在浏览器中本地访问仪表板,如下:

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

至此,使用Ansible和Kubespray部署生产就绪Kubernetes集群的操作步骤全部完成了。

 

相关主题

使用Weave Net CNI在Ubuntu 18.04中设置3节点Kubernetes集群

精选文章
热门文章