搭建kubernetes集群

        自己是个小白,因为实验原因需要搭设一个简单的kubernetes集群,实现分布式TensorFlow的运行。踩了不少的坑,下面说一下自己的一些总结。

        kubernetes集群分为master节点和n个node节点,master上运行的服务有kube-apiserver、kube-controllermanager、kube-scheduler,作用不作赘诉,node运行的服务是kubelet、kube-proxy。要安装kubernetes,首先要搭建etcd集群,而后在每个机器上安装完整的kubernetes或者相应的服务,修改配置文件使得kubernetes集群初步建成。然后利用flannel这个工具将集群内部网络打通,最后运行一个kube-dns的服务提供集群内部dns解析的工作。

        官方有搭建过程的资料,不过没什么可读性,网上有很多搭建教程博客,自己试过几个,出现bug是难免的,有时候真的挺难找到问题所在,尤其是运行dns的时候。主要原因是kubernetes版本,导入的镜像版本不尽相同。dns部分网上很多教程还是在装skydns,自从kubernetes1.4之后好像就变成了kubedns+dnsmasq的组合,而且网上的博客如果强行几个凑一起,会出现一些意料以外的错误。自己遇到很多坑,装了好几遍,在kubernetes中文社区找到了一个良心博客。网址:https://www.kubernetes.org.cn/4041.html下面说一下我的安装步骤,大致和这个社区帖相同(因为自己是个小萌新,会补上一点对萌新不友好的小疏漏):

1.  准备工具

        从百度云上下载压缩包(整体来说这个压缩包包含了搭建kubernetes集群的所有必须文件)之后,如果是搭建本地集群直接u盘拷就行了,如果是云端机器的话需要用到xshell+xftp整合版,软件装好可能会缺相应的dll和vc的两个库,https://www.portablesoft.org/xshell-xftp-integrated/。装好之后,通过ssh连接机器,利用xftp可以直接将本地文件夹复制到云端机器上。集群内的所有的机器都需要复制。

2. 安装

        也许很多博客上的第一步就是修改hosts文件,虽然这样是为了集群节点看起来比较清晰,但是相信我,没什么用,自己做实验集群小的时候没什么卵用,如果设置不当在你之后配置文件运行程序的时候会出现预料之外的bug。所以在安装过程中就按刚才说的那个博客上的步骤,所有地方都用ipv4的地址。以下是一些注意点。

        (1)tar -xzvf k8s_v1.10.0_install.tar.gz    #解压

        (2)cd /home/centos/k8s_v1.10.0_install/etcd   #进入etcd文件夹

        (3)编辑install_etcd.sh,将其中的CURRENT_HOST_IP=`ifconfig ens192 | grep 'inet ' | awk '{ print $2}'` 以及ETCD_LISTEN_IP 修改为每个机器对应的ip(源文件的最外层引号不能用的)保存。三个机器同时运行install_etcd.sh。

        (4)此时etcdctl member list是行不通的,因为bash没有这个命令,但是systemctl status etcd是active的,进入bin目录,执行./etcdctl member list 发现是没问题的,所以只是没加进环境变量而已。修改环境变量:vim /etc/profile     在结尾处加上export    PATH=$PATH:/home/centos/k8s_v1.10.0_install/etcd/bin  保存退出后source /etc/profile有效,这下就没问题了。

        (5)安装flannel和docker不需要修改install_xx.sh文件,如果机器特殊可能需要修改。直接运行即可,安装kubernetes时,node节点跟的参数也是主节点的ip,别搞错了。安装完了同样是找不到kubectl命令,这时同(4)一样将kubernetes/bin加入环境变量即可。

       (6)在node上,进入kubernetes/images文件夹,利用docker load -i xxx.tar命令将其所有镜像到本地。虽然我们的机器可以联网,但是人家配置文件上写的都是本地的镜像,改起来比较麻烦,就直接load本地就行了,方便。

         (7)   在master上,进入addons/kube-dns,修改yaml文件中的kube-master-url 为我们master的ip地址,cluster-ip没必要改。然后kubectl create -f kube-dns.yaml。利用kubectl get pods --all-namespces查看pod是否正常运行。如何status为running,可以建立一个test.yaml如下:

test.yaml

     (8)kubectl create -f test.yaml之后,kubectl get services查看mysql有自己的cluster_ip。为了验证我们的dns有解析功能,需要busybox工具,可以进入kubernetes/image文件夹,创建他给的pod,也可以自己网上查一个简单的busybox。

busybox.yaml

好了,接下来就是检测了,kubectl exec busybox -- nslookup mysql,如果解析出来,就代表成功了。

kube-dns检测

        因为我用的是亚马逊上的机器,所以dashboard没啥用就不装了。最后可以使用iptables -P FORWARD ACCEPT 将底层防火墙关掉,这个其实挺有用的,自行体会~每个人装的时候都会碰到不一样的问题,可以通过kubectl status/logs等命令查看错误原因,再多回顾一下是不是自己漏了什么。祝好~

附:给几个比较实用的链接:

https://blog.csdn.net/devopser/article/details/79953440

http://docs.kubernetes.org.cn/683.html

https://blog.csdn.net/hxpjava1/article/details/79270473

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • layout: posttitle: "Nginx虚拟主机配置"date: 2016-05-16 23:36:00...
    EwanRenton阅读 1,586评论 0 0
  • 卓麦阅读 754评论 1 1
  • 汲汲奔走,细数流年,不觉,又到了这一年夏天的大日子--入伏。在我们这里,入伏不得不算是夏季一个很重...
    幽兰悠兰阅读 2,839评论 1 3
  • 我不是文化人,却整天和文化人混在一起。两年前从某超市辞职回家后,经一番打听得知当地的一所私人办的幼儿园在招生活老师...
    灵丫头阅读 3,342评论 0 1
  • 2017年3月11日上午飘着雪花似悠闲似慵懒只是到了第二天我们才知道它们是大雪暴雪的前奏 隍庙位于甘肃省甘南藏族自...
    北书房阅读 3,021评论 1 4