使用 Kubespray 部署
Kubespray 简介
Kubespray 是 Kubernetes incubator 中的项目,目标是提供 Production Ready Kubernetes 部署方案,该项目基础是通过 Ansible Playbook 来定义系统与 Kubernetes 集群部署的任务,具有以下几个特点:
- 可以部署在 AWS, GCE, Azure, OpenStack 以及裸机上.
- 部署 High Available Kubernetes 集群.
- 可组合性 (Composable),可自行选择 Network Plugin (flannel, calico, canal, weave) 来部署.
- 支持多种 Linux distributions(CoreOS, Debian Jessie, Ubuntu 16.04, CentOS/RHEL7).
Kubespray 由一系列的 Ansible playbook、生成 inventory 的命令行工具以及生成 OS/Kubernetes 集群配置管理任务的专业知识构成。
初始化环境
主机环境:
角色 | IP |
---|
master | 172.16.1.128 |
node01 | 172.16.1.129 |
编辑/etc/hosts
文件,使各主机之间可以通过主机名互相通信:
关闭 SELinux 和防火墙:
Kubernetes 1.8 开始要求关闭系统的 Swap 交换分区,方法如下:
Docker 从 1.13 版本开始调整了默认的防火墙规则,禁用了 iptables filter
表中FOWARD
链,这样会引起 Kubernetes 集群中跨 Node 的 Pod 无法通信,在各个 Docker 节点执行下面的命令:
配置 SSH Key 认证。确保本机也可以 SSH 连接,否则下面部署失败。
更新系统内核为 4.4.x , CentOS 默认为 3.10.x 。
重启系统:reboot
增加内核配置,编辑/etc/sysctl.conf
文件:
使其内核配置生效:
安装 Kubespray
安装 Centos 的 EPEL 源:
更新缓存:
安装相关软件(Ansible 版本必须 >= 2.7):
下载源码,当前 Kubespray 项目的 Master 分支默认安装 K8s 1.13.1 版本:
安装 Kubespray 依赖,若无特殊说明,后续操作均在 ~/kubespray `目录下执行:
配置 Kubespray:
修改配置文件 inventory/mycluster/hosts.ini
:
:information_source:此处也可以用:kubespray prepare --masters master1 --etcds master1 --nodes node1 node2 node3
来自动生成inventory
文件
修改配置文件 inventory/mycluster/group_vars/all/all.yml
:
修改镜像默认的 Repo 地址,使用 Calico 三层网络,同时可以指定安装的 K8s版本,参数为 kube_version
。编辑文件inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
(在这里我能够科学上网就不做修改了):
如需设置代理,在 cluster.yml
中编辑 default 值即可:
如需设置docker pull
代理,新建/etc/systemd/system/docker.service.d/http-proxy.conf
文件,添加以下内容:
修改./roles/kubernetes-apps/ansible/templates/dashboard.yml.j2
文件,使用 NodePort
方式访问 Dashboard:
:warning: 注意:如果是单节点部署 K8s,Kubespray 默认会创建 2 个 coredns Pod,但 Deployment 中又用到了 podAntiAffinity,因此会导致其中一个 coredns pod pending,所以需要修改./roles/kubernetes-apps/ansible/templates/coredns-deployment.yml.j2
代码如下:
最后执行部署命令:
登录 Dashboard
登陆 Dashboard 支持 kubeconfig 和 token 两种认证方式,kubeconfig 也依赖 token 字段,所以生成 token 这一步是必不可少的。此处,我们获取集群管理员(拥有所有命名空间的 admin 权限)的 token。
查看 kubernetes-dashboard 暴露的端口,如下所示,这里是31777端口。
获取 admin 的 token
在 dashboard 登录页面上使用上面输出中的那个非常长的字符串作为 token 登录,即可以拥有管理员权限操作整个 kubernetes 集群中的对象。当然您也可以将这串 token 加到 admin 用户的 kubeconfig 文件中,继续使用 kubeconfig 登录,两种认证方式任您选择。
登录 dashboard:https://172.16.1.128:30548
注意:由于这里使用的 HTTPS,并未使用证书,因此使用 Google 等浏览器会终止访问。
验证 K8s 集群
其他
增加 node 节点(提前在hosts.ini
文件中增加主机节点):
将 hosts.ini
文件中的 master 和 etcd 的机器增加到多台,执行部署命令:
刪除节点,如果不指定节点就是刪除整个集群:
如果需要卸载,可以执行以下命令:
升级 K8s 集群,选择对应的 K8s 版本信息,执行升级命令。涉及文件为 upgrade-cluster.yml
:
参考链接