转载请标明出处:

http://blog.csdn.net/forezp/article/details/82730382

本文出自方志朋的博客

Kubespray是Google开源的一个部署生产级别的Kubernetes服务器集群的开源项目,它整合了Ansible作为部署的工具。项目地址:https://github.com/kubernetes-incubator/kubespray

部署历程

目前为止,对于Kubernetes集群的部署,我只谈的上是一个入门者,涉及到了众多的运维知识,对于一个开发来说,确实挺难的。万事开头难,好事多磨,经过一个多星期的反复尝试,终于搭建好了。对比市面上的部署方式,主流的有三种方式。一是完全手动部署,非常的繁琐,容易部署。二是采用kubeAdmin开源项目进行部署,这个也是谷歌官方开源的一个项目。三是,采用kubeSpray进行部署。我的理念是有好的工具当然是用好工具,所以手动部署是不可能的,完全排除,所以Kubeadmin和KubeSpray。而我对Ansibe这个运维组件兴趣非常的大,所以我最终选择了KubeSpray进行了部署。

部署的工程是非常艰难的,在我决定搞Kubernetes之时,为了学习不难么枯燥和孤独,我专门组建了一个群,找了一些朋友一起来学习和交流,采用的方式是大家一起学习,一起写文档,一起交流,另外有主机的出主机。所以,一开始的主机是几个朋友自己的主机,不在一个局域网内,计算机操作系统也不太一样,这为后面的部署带来了一个大坑。另外由于国内的屏蔽了谷歌的网络,导致谷歌的相关镜像下载不下来,这也是一个坑。

坑点1,不在一个局域网不能部署Kubernetes?我专门打电话问了阿里云,客户说不可以,是不是真的不可以,我是不确定的。另外集群的型号不同和操作系统不同也会导致失败。

坑点2,长城屏蔽了谷歌的镜像,所以我刚开始是根据谷歌的镜像在阿里云镜像仓库一顿搜索,导致Kubernetes各个版本组件不兼容,出现了问题。

现在我也这篇文章来详细讲解我的部署过程,供其他人参考,如果有其他人想加入我们的Kubernetes兴趣群,加我微信miles02和我联系。

主机相关

主机需要在同一局域网内?所以我们重新租了三台机器,进行了操作。现在列举主机相关的信息如下:

主机 系统版本 配置 ip
Ansible CentOS 7.2 1核1G 172.31.84.154
Mater、Node CentOS 7.2 2核2G 172.31.84.155
Node CentOS 7.2 2核2G 172.31.84.156

Ansible那台主机使用KubeSpray进行部署,这台机器不做Kubernetes相关集群的部署。另外2台机器,一台既作为Master,又作为Node,另外一台是一个Node。

本次部署,使用的KubeSpray版本为v2.1.2。

Master、Node节点的操作

因为本次使用KubeSpray操作部署,所以所有的主机都需要关闭防火墙等相关的操作。

所以的主机都需要关闭selinux,执行的命令如下:

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

防火墙和网络设置,所有的主机都执行以下命令:

systemctl stop firewalld
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
sysctl -w net.ipv4.ip_forward=1

这样与Kubernetes集群相关的集群设置就完毕了。

Ansibe主机操作

Ansibe主机也需要关闭selinux和关闭防火墙以及网络设置,同上面。

在Ansible主机上设置免密码操作其它主机

首先生成ssh公钥和私钥。

ssh-keygen

按三次回车。

建立ssh通道,将秘钥分发给master主机。

ssh-copy-id root@172.31.84.155
ssh-copy-id root@172.31.84.156

安装Ansible

安装ansible和jinja2,安装命令如下。


sudo yum install epel-release
sudo yum install ansible easy_install pip
pip2 install jinja2 --upgrade

如果执行 pip2 install jinja2–upgrade 提示升级,则升级,再执行一次命令。

安装python36

sudo yum install python36 -y 

在Ansible集群上安装KubeSpray

在ansible机器上下载KubeSpray代码,并解压,执行如下的命令:

wget https://github.com/kubernetes-incubator/kubespray/archive/v2.1.2.tar.gz
tar -zxvf v2.1.2.tar.gz
mv kubespray-2.1.2 kuberspray

安装KubeSpray所需的包

执行如下命令:

cd kubespray
pip install -r requirements.txt

定义集群

执行以下的命令。

IP=(172.31.84.155 172.31.84.156)
CONFIG_FILE=./kubespray/inventory/inventory.cfg python36 ./kubespray/contrib/inventory_builder/inventory.py ${IP[*]}

vim ~./kubespray/inventory/inventory.cfg

[all]
node1 ansible_host=172.31.84.156 ip=172.31.84.156
node2 ansible_host=172.31.84.155 ip=172.31.84.155 [kube-master]
node1 [kube-node]
node1
node2 [etcd]
node1 [k8s-cluster:children]
kube-node
kube-master [calico-rr] [vault]
node1

替换镜像

在kuberspay源码源代码中搜索包含 gcr.io/google_containersquay.io 镜像的文件,并替换为我们之前已经上传到阿里云的进行,替换脚步如下:

grc_image_files=(
./kubespray/extra_playbooks/roles/dnsmasq/templates/dnsmasq-autoscaler.yml
./kubespray/extra_playbooks/roles/download/defaults/main.yml
./kubespray/extra_playbooks/roles/kubernetes-apps/ansible/defaults/main.yml
./kubespray/roles/download/defaults/main.yml
./kubespray/roles/dnsmasq/templates/dnsmasq-autoscaler.yml
./kubespray/roles/kubernetes-apps/ansible/defaults/main.yml
)

在执行

for file in ${grc_image_files[@]} ; do
sed -i 's/gcr.io\/google_containers/registry.cn-hangzhou.aliyuncs.com\/szss_k8s/g' $file
done

同理替换quay_image:

quay_image_files=(
./kubespray/extra_playbooks/roles/download/defaults/main.yml
./kubespray/roles/download/defaults/main.yml
)

再执行:

for file in ${quay_image_files[@]} ; do
sed -i 's/quay.io\/coreos\//registry.cn-hangzhou.aliyuncs.com\/szss_quay_io\/coreos-/g' $file
sed -i 's/quay.io\/calico\//registry.cn-hangzhou.aliyuncs.com\/szss_quay_io\/calico-/g' $file
sed -i 's/quay.io\/l23network\//registry.cn-hangzhou.aliyuncs.com\/szss_quay_io\/l23network-/g' $file
done

使用ansible playbook部署Kubernetes集群

以上全部完成,执行安装操作:

cd kubespray
ansible-playbook -i inventory/inventory.cfg cluster.yml -b -v --private-key=~/.ssh/id_rsa

大约过了10分钟,如果顺利的话,集群会成功搭建。

验证几点是否成功

登录Kubernete集群的Mater集群,执行如下命令:

kubectl get no

控制台打印出了正确的Kubernetes节点信息,则安装成功。

增加节点

cd kubespray
ansible-playbook -i inventory/inventory.cfg cluster.yml -b -v --private-key=~/.ssh/id_rsa --limit node3

遇到问题卸载

ansible执行卸载操作:


ansible-playbook -i inventory/mycluster/hosts.ini reset.yml

安装失败清理Kubernetes机器


rm -rf /etc/kubernetes/
rm -rf /var/lib/kubelet
rm -rf /var/lib/etcd
rm -rf /usr/local/bin/kubectl
rm -rf /etc/systemd/system/calico-node.service
rm -rf /etc/systemd/system/kubelet.service
systemctl stop etcd.service
systemctl disable etcd.service
systemctl stop calico-node.service
systemctl disable calico-node.service
docker stop $(docker ps -q)
docker rm $(docker ps -a -q)
service docker restart

参考资料

参考了一下的文章:

https://github.com/kubernetes-incubator/kubespray

https://mp.weixin.qq.com/s/-SXuXhY7KIFl1zYvVT93ZA

https://blog.csdn.net/zhuchuangang/article/details/77712614

  • 关注我的公众号,精彩内容不能错过!

使用Kubespray部署Kubernetes集群的更多相关文章

  1. 和我一步步部署 kubernetes 集群

    和我一步步部署 kubernetes 集群 本系列文档介绍使用二进制部署最新 kubernetes v1.6.1 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群: 在部署的过程中, ...

  2. 使用kubeadm部署Kubernetes集群

    一.环境架构与部署准备 1.集群节点架构与各节点所需安装的服务如下图: 2.安装环境与软件版本: Master: 所需软件:docker-ce 17.03.kubelet1.11.1.kubeadm1 ...

  3. 二进制部署 Kubernetes 集群

    二进制部署 Kubernetes 集群   提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernet ...

  4. 使用Rancher的RKE快速部署Kubernetes集群

    简要说明: 本文共涉及3台Ubuntu机器,1台RKE部署机器(192.168.3.161),2台Kubernetes集群机器(3.162和3.163). 先在Windows机器上,将rke_linu ...

  5. 基于TLS证书手动部署kubernetes集群(下)

    一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已经部署好了etcd集群.flannel网络以及每个节点的docker,接下来部署master节 ...

  6. 高可用Kubernetes集群-15. 部署Kubernetes集群统一日志管理

    参考文档: Github:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsear ...

  7. 高可用Kubernetes集群-14. 部署Kubernetes集群性能监控平台

    参考文档: Github介绍:https://github.com/kubernetes/heapster Github yaml文件: https://github.com/kubernetes/h ...

  8. kubeadm部署Kubernetes集群

    Preface 通过kubeadm管理工具部署Kubernetes集群,相对离线包的二进制部署集群方式而言,更为简单与便捷.以下为个人学习总结: 两者区别在于前者部署方式使得大部分集群组件(Kube- ...

  9. 安装部署 Kubernetes 集群

    安装部署 Kubernetes 集群 阅读目录: 准备工作 部署 Master 管理节点 部署 Minion 工作节点 部署 Hello World 应用 安装 Dashboard 插件 安装 Hea ...

随机推荐

  1. Excel删除空白行和列

    Sub DeleteEmptyRows() Dim LastRow As Long, r As Long LastRow = ActiveSheet.UsedRange.Rows.Count Last ...

  2. img 加载网络图片失败 显示默认图片

    1. 概述 当从网络加载图片失败 希望显示默认图 img 标签有个 onerror属性 2. 代码 2.1 java服务端组织标签整个返回前端 String imgUrl = "javasc ...

  3. roadflow asp.net core版工作流引擎更新发布

    ROADFLOW CORE (.NET CORE工作流引擎)更新说明 1.RoadFlow全新工作流平台采用.NET CORE 2.1重构,结构更简单,逻辑梳理更清析,性能有了很大的提升. 2.表单设 ...

  4. codeforces之始

    很早就听说acmer界的CF嘞!还记得刚开始听到神犇们在讨论CF的时候我还以为是网游CF(穿越火线)呢... 今年刚开学的时候就打算开始打cf的,由于一些事情耽搁了.之后又要准备省赛所以就一直拖到现在 ...

  5. arm汇编学习(四)

    一.android jni实现1.静态实现jni:先由Java得到本地方法的声明,然后再通过JNI实现该声明方法.2.动态实现jni:先通过JNI重载JNI_OnLoad()实现本地方法,然后直接在J ...

  6. 利用Grahics 进行图片裁剪

    这两天做了一个图片对比工具,里面要处理两张大的图片,所以要对图片先进行裁剪最开始用了 /// <summary>        /// 裁剪图片        /// </summa ...

  7. 如何判断单链表是否存在环 & 判断两链表是否相交

    给定一个单链表,只给出头指针h: 1.如何判断是否存在环? 2.如何知道环的长度? 3.如何找出环的连接点在哪里? 4.带环链表的长度是多少? 解法: 1.对于问题1,使用追赶的方法,设定两个指针sl ...

  8. Oracle物化视图详解

    现实工作中会有多个数据源同步到一个数据库完成数据分析的场景,这些数据可以不是实时同步的,我们一般通过定时任务抽取数据到统计分析库给应用使用. 一般的同步方式可以通过时间戳做全量和增量数据同步(存在原数 ...

  9. 三、安装远程工具xshell,使用SFTP传输文件——Linux学习笔记

    A)远程工具 学Linux没有远程工具怎么行,百度了下,发现了xshell这个东西,重点是可以免费. 链接是多简单啊 输入地址,账号就搞定了. 打命令什么的都搞定了,真的感谢这个时代,求学有路啊! 到 ...

  10. js函数 标签: javascript 2016-08-12 16:48 56人阅读 评论(0) 收藏

    函数实际上是对象,函数名实际上也是一个指向函数对象的指针. 使用不带圆括号的函数名是访问函数指针,而非调用函数. 函数声明和函数表达式: alert(test(2,3)); function test ...