如今分布式构件技术的发展使得大型公司都在从Monolithic Architecture向Microservice Architecture转型。在对市场上的Microservice Architecture的支撑平台和工具调研之后,最终决定学一学Kubernetes。Kubernetes更新速度太快,文档更新太慢,于是写一些新的帖子来帮助跟我一样的新手避避坑。
Kubernetes是什么?
Kubernetesis an open-source system for automating deployment, scaling, and management of containerized applications.
一个自动部署、自动扩展、自动容器化应用的管理的开源系统
——http://kubernetes.io
我个人的理解:
Kubernetes(K8s)是一个真正的平台,提供运行环境,使得复杂要求的应用在上面构建。它通过yaml语言写的配置文件,很简单快速的就能自动通过Docker镜像部署好应用环境,支持应用横向扩展,并且可以组织、编排、管理和迁移这些容器化的应用。
图1 Kubernetes架构每个组件的功能和含义,一篇博文讲不明白,之后可能在接下来的博客中分析实例的时候具体阐述一下,具体请参考:
Kubernetes官网https://kubernetes.io/
Kubernetes中文社区https://www.kubernetes.org.cn/
K8s的地位如图2所示,优点是有很好的可移植性和可扩展性。关于K8s,这两个重要的性质表现在:可移植性:K8s可以搭建在阿里云、Amazon、Microsoft Azure、Google Cloud上,也可以搭建在任何的公有云和私有云上。可扩展性:K8s在GitHub上托管,截至2017年3月1日有来自全球的1100名贡献者,为它提供了Dashboard、网络构件等扩展工具。
图2 Kubernetes地位K8s的可移植性,也就意味着,我们在本地是可以使用Kubernetes的。有环境是深入学习的第一步,所以今天这篇帖子的目的是先把环境搭建起来。
下面开始搭环境:
一.写在前面的
1、笔者是在本地两台虚拟机的Ubuntu 16.04下进行部署的,使用CentOS7和HypriotOS v1.0.1+的朋友们请转移到【2】其中有一些命令不一样,但步骤一样与本文一致,依旧可做参考;使用大公司云服务器的朋友们可以直接查这些公司提供的文档和参考【2】的左栏中相应目录,部署应该更加快速。
2、K8s从2014年发布开始持续高速发展,版本更迭非常快,版本之间的差异也有点大,使用者要做好随时可能被坑的准备。
3、之前安装步骤繁琐要一项一项安装,Kubeadm工具提供了几乎一键部署的方法,但是Kubeadm尚且是Alpha状态,笔者在2月底踩了很多坑,安装过程异常坎坷。恰巧前两天笔者发现Kubeadm进行了更新而且文档进行了更新,于是从头来了一遍并且成功记录下来了。
4、安装的过程中的提醒:首先是一定要耐心,舍得等;然后是一定要学会自己根据贴出来的问题到网上进行有效搜索并且排除问题。
二.前期准备与约束
1、多台虚拟机。(个人推荐使用VMware安装Ubuntu 16.04)
2、每台主机上至少1G内存。(个人推荐Master上面分个4G内存不会卡,Node意思一下1G可以了)
3、所有主机网络可达,且主机能翻墙。(个人推荐Cisco AnyConnect VPN,在window下连接后再虚拟机中可以直接使用;若没有条件Shadowsocks也可以用比较麻烦,参考【1】)
【笔者:虚拟机:VMware 12,
Master安装Ubuntu 16.04系统:4G内存,2核,磁盘40G
Node安装Ubuntu 16.04系统:1G内存,1核,磁盘30G
VPN:Cisco AnyConnect VPN
坑提示:在安装Master和Node时不要使用相同的主机名,不然在Node join进Master中会出现连接问题,解决方法是改掉其中的一个主机的/etc/hostname和/etc/hosts】
三 . 安装依赖和核心组件
1、安装依赖
Docker:建议安装v1.12.6版本版本,据资料v1.11.2版本和v1.12.1版本也可以。
【坑提示:Docker v1.12.5有依赖问题】
curl-shttps://packages.cloud.google.com/apt/doc/apt-key.gpg|apt-key add-
cat</etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/kubernetes-xenial main
EOF
apt-get update
apt-get install-y docker.io
2、核心组件
kubelet:安装v1.5版本
kubectl:安装v1.5版本
kubeadm:安装v1.5版本
kubernetes-cni:网络连接子
apt-get install-y kubelet kubeadm kubectl kubernetes-cni
四 . 初始化K8s-Master
Kubernetes的master节点上运行着etcd和api server等组件,所有这些组件都需要通过kubelet启动。所以不能连续两次使用初始化的命令。
如果已经有初始化过K8s-Master,先运行卸载
kubeadm reset
确认已卸载可以开始初始化Master节点:
kubeadm init --pod-network-cidr=10.244.0.0/16
因为使用flannel搭建POD网络,所以初始化命令后需要增加参数–-pod-network-cidr=10.244.0.0/16。相信我别的网络组件更坑,所以就选flannel吧。网络组件还可以用Weave,Calico等要使用的朋友参考【2】,命令运行截图如下:
初始化Master节点<1>以flannel方式初始化
<2><3>这两个地方会比较慢,如果你没有翻墙,那怕是很难拉下来
<4>坑提示:这条密钥一定要保存好,之后每当你加一个Node进来都要用到它,因为不会重现所以要珍重不然只能重装。
检查:这个时候你输入
kubectl get nodes
打印如下表示ok了:
检查Master或者http://localhost:8080出现这个也表示ok了:
检查Master五.部署Flannel网络
这个时候因为没有部署网络,所以不会正常工作。输入下面的命令查看会发现很多pods的:status是ContainerCreating状态,不要慌,装上flannel就好了。
status是ContainerCreating状态kubectl get pods --all-namespaces
所以用下面命令装flannel:
安装flannelkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
然后你会看到下图:这里要等一段时间!不要急!
Running常见的状态有RunContainerError,CrashLoopBackOff,ContainerCreating,如果你非常想要知道它的状态及详细原因,对应你自己的NameSpace和Name把下面这条命令改一下,就可以看到详细信息了。根据详细信息google即可。
kubectl describe-n kube-system po kube-proxy-b0h40
六.节点加入集群
在节点上先做步骤三装好依赖和核心组件,然后运行下面这句话,也就是前面让大家妥善保管的那句话。
kubeadm join --token=xxxxxxxxx xxx.xx.xxx.xxxxx
这个打印出来的忘记截图了,跟前面类似,而且这个速度比前面那个初始化快很多,注意网络和机器的hostname不要重复的问题,如果发生,参考本博文前面所述。
检查:
kubectl get nodes
打印如下表示ok了:
集群检查上述,这样以来环境就搭好了,之后有时间把跑的例子写一下,然后介绍一些扩展的工具。若帮助各位大侠搭成了请随意打赏啊哈~祝大家工作学习顺利,下次见~
参考
【1】http://www.jianshu.com/p/1b4f006e92a7
【2】https://kubernetes.io/docs/getting-started-guides/kubeadm/
【3】https://www.kubernetes.org.cn/1165.html
网友评论