部署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
我将使用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
第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,你不应该执行失败的任务:
登录其中一个主节点并检查群集状态: $ sudo su - # kubectl config get-clusters # kubectl cluster-info # kubectl config view # kubectl get nodes # kubectl get endpoints -n kube-system
你还可以在kube-system命名空间下检查群集中正在运行的Pod: # kubectl get pods -n kube-system
第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
允许防火墙上的服务端口: $ 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
附:扩展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集群的操作步骤全部完成了。
相关主题 |