以下步骤都经本人实测,可以完美运行。
官方参考网址:https://github.com/gjmzj/kubeasz/
Ansible了解
ansible是个什么东西呢?官方的title是“Ansibleis Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:
自动化部署APP;
自动化管理配置项;
自动化的持续交互;
自动化的(AWS)云服务管理;
所有的这几个目标从本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。通俗的说就是批量的在远程服务器上执行命令。当然,最主要的是它是基于 paramiko 开发的。这个paramiko是什么呢?它是一个纯Python实现的ssh协议库。因此fabric和ansible还有一个共同点就是不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。
由上面的图可以看到 Ansible 的组成由 5 个部分组成:
Ansible : 核心
Modules : 包括 Ansible 自带的核心模块及自定义模块
Plugins : 完成模块功能的补充,包括连接插件、邮件插件等
Playbooks : 剧本;定义 Ansible 多任务配置文件,由Ansible 自动执行
Inventory : 定义 Ansible 管理主机的清单
具体的命令可以查看参考(中文权威指南):http://www.ansible.com.cn/docs/intro_installation.html
安装k8s
1. 安装依赖工具
# 文档中脚本默认均以root用户执行# 安装 epel 源并更新
yum install epel-release –y(最好每台机器装一下)
yum install net-tools
yum update# 删除不要的默认安装
yum erase firewalld firewalld-filesystem python-firewall -y# 安装python
yum install python -y
2. 安装ansible
# CentOS 7
yum install git python-pip -y# pip安装ansible(国内如果安装太慢可以直接用pip阿里云加速)#pip install pip --upgrade#pip install ansible
pip install pip --upgrade -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install --no-cache-dir ansible -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
3. 在deploy节点配置免密码登陆
ssh-keygen -t rsa -b 2048 回车 回车 回车
ssh-copy-id $IPs #$IPs为所有节点地址包括自身,按照提示输入yes 和root密码
(即使是本机也需要配置)
4. 在deploy节点编排k8s安装
# 下载项目文件
git clone https://github.com/gjmzj/kubeasz.git
mv kubeasz /etc/ansible# 下载已打包好的binaries,并且解压缩到/etc/ansible/bin目录# 国内请从我分享的百度云链接下载 https://pan.baidu.com/s/1c4RFaA # 如果你有合适网络环境也可以按照/down/download.sh自行从官网下载各种tar包到 ./down目录,并执行download.sh
tar zxvf k8s.191.tar.gz
mv bin/* /etc/ansible/bin
cd /etc/ansible
cp example/hosts.m-masters.example hosts# 根据上文实际规划修改此hosts文件
vi hosts
在deploy 节点使用如下命令
ansible all -m ping
如果配置正确可以看到类似输出:
192.168.1.42 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
192.168.1.43 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
192.168.1.44 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
5. 安装集群
注意:
1)如何重复安装时,注意在执行完卸载命令后,将/etc/kubernetes目录删除
2)安装02.etcd时往往不能够一次性成功安装,如何执行过程中有错误应执行第二遍02.etcd.yml(不管使用90.setup.yml或是02.etcd.yml安装)
#ansible-playbook 01.prepare.yml
#ansible-playbook 02.etcd.yml
#ansible-playbook 03.kubectl.yml
#ansible-playbook 04.docker.yml
#ansible-playbook 05.kube-master.yml
#ansible-playbook 06.kube-node.yml
#ansible-playbook 07.calico.yml 或者 ansible-playbook 07.flannel.yml 只能选择一种网络插件
#ansible-playbook 90.setup.yml # 一步安装
#ansible-playbook 99.clean.yml # 一步安装
source /etc/profile(环境变量设置未生效,kubectl工具不能使用)
自动安装时没有环境变量,需要source一下;
单主单节点
发现问题:ansible1.8在重新安装并没有完全删除掉/etc/kubernetes中的东西,1.9没啥问题,所以1.8需要将/etc/kubernetes中的东西全部删掉再运行;否则在安装06node时csr验证会报错。
还有装02.etcd时配置文件读不到的问题,运行两次就好了;
ansible 1.9没有问题
2.安装DNS/dashboard时,注意dashboard-controller.yaml中deployment的版本为extensions/v1beta1
规律,可以先执行90.setup,然后执行2.etcd
卸载的时候注意删除掉/etc/kubernetes目录
注意:api-server是以https(用户名密码启动的),所以最后需要为用户配置角色才可以通过url进行访问:
绑定api-server的权限(否则是注册不上的)
kubectlcreate clusterrolebinding kubelet-node-clusterbinding1 --clusterrole=cluster-admin--user=admin