『高级篇』docker之kubernetes环境搭建与预先环境准备(32)
2019-02-19 00:45:07
李明
  • 访问次数: 377
  • 注册日期: 2018-07-09
  • 最后登录: 2019-10-30

原创文章,欢迎转载。转载请注明:转载自 IT人故事会 ,谢谢!原文链接地址: 『高级篇』docker之kubernetes环境搭建与预先环境准备(32)

上次讲了k8s的理论部分,从这次开始实践部分。从环境搭建的实际操作中,深入了解k8s的组件和它的架构设计。对于新手来说,搭建一个完整的k8s的环境真心困难啊,至少我在中级搭建的时候感觉很麻烦,如果你科学上网的话,可以通过kubernetes-admin的方式,但是相信大部分的老铁,还是绿色的上网环境,特别k8s的服务器,根本不具备科学上网能力的,对于这个问题,社区也推出来了很多自研的部署方案,经过迭代也踊跃了很多种的方案。都不太适合新手来,虽然好解决,但是安装节点对你来说还是个黑盒,这些方案的学习成本都非常的高,有的不够灵活,想特殊配置的。源码: https://github.com/limingios/msA-docker swarm分支 vagrant/k8s 和 https://github.com/limingios/kubernetes-starter

参考高手总结的k8s的安装

https://github.com/limingios/kubernetes-starter

  1. 绿色网络情况下愉快的安装网络集群

  2. 安装的过程加深对k8s的深入理解

尽量让部署变的简单,第一次安装,剥离了认证和授权部分,非必须安装的放在最后,从整体上把握k8s的运行机制。最后加上认证授权。k8s的难点就是认证和授权,加入进去后会让人感觉整个过程,让人感觉非常非常的复杂,所以在这里第一次安装的时候做了剥离。


v2-39f472cc4461178a4277a1da9e805e64_hd.p

脚本非常的简单,就是帮助各位老铁生成一些配置文件,因为k8s涉及到的脚本也非常多,不可能手动一点一滴的去敲,配置写成了模板,通过脚本生成适应自己环境的配置文件。比如你的机器的hostname,ip,文件的存放路径各有不同。

预先环境准备

  • 虚拟机介绍和安装

3台虚拟机还是通过vagrant来生成对应的虚拟机。vagrant已经安装了 对应的docker。

系统类型IP地址节点角色CPUMemoryHostnameCentos7192.168.66.101master12Gserver01Centos7192.168.66.102worker11Gserver02Centos7192.168.66.103worker11Gserver03


v2-d7d3f89b2990a0c3d4b5bf9c54daa528_hd.p


v2-a8519d55fc5608a5ecf290b8399c574c_hd.p


v2-c5ad80fce21b51ed2613ab3049868b2c_hd.p

  • 三台机器接受所有ip的数据包转发

$ vi /lib/systemd/system/docker.service   
#找到ExecStart=xxx,在这行上面加入一行,内容如下:(k8s的网络需要)ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT


v2-c71f949b55fce0620790e4f1e1af29d9_hd.p


v2-718dcd61e2e6b3eb57c8d380839bcd4a_hd.p


v2-3114bd07e99a00daefb8d0b8775d7444_hd.p

  • 三台机器启动服务

$ systemctl daemon-reload
$ service docker start


v2-ce2fa9d8dab4a8e4edd56696fb588dfc_hd.p

image.png


v2-f5eccaf5480597a0bcec66264f3540e7_hd.p


v2-0379265b02e81732fa5c42e9030aad7c_hd.p

系统设置(所有节点)

关闭、禁用防火墙(让所有机器之间都可以通过任意端口建立连接)

systemctl stop firewalld
systemctl disable firewalld#查看状态systemctl status firewalld


v2-1b8fc66534e4f09585fce64668e9d6b9_hd.p


v2-23c3619cc3186afbbc644ff82013353a_hd.p


v2-3326f6cc801f55b16f164368f7cf9560_hd.p

设置系统参数 - 允许路由转发,不对bridge的数据进行处理

#写入配置文件$ cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF 
#生效配置文件$ sysctl -p /etc/sysctl.d/k8s.conf


v2-ed0e590a41d0b7448e799fe7cdcf6a75_hd.p


v2-0e0de54601fb8a4a103d3c92125bd6c4_hd.p


v2-7a01ffcdbb3ba4b86a67807149178c96_hd.p

配置host文件

#配置host,使每个Node都可以通过名字解析到ip地址$ vi /etc/hosts#加入如下片段(ip地址和servername替换成自己的)192.168.66.101 server01
192.168.66.102 server02
192.168.66.103 server03


v2-ec3895afdd07bcbcdb00d797c5e39720_hd.p


v2-fcb3a38f44b475adfd5890514da9ab18_hd.p


v2-c79336919dddbf0ddc761cd83b4b553f_hd.p

准备二进制文件(所有节点)

kubernetes的安装有几种方式,不管是kube-admin还是社区贡献的部署方案都离不开这几种方式:

  • 使用现成的二进制文件

直接从官方或其他第三方下载,就是kubernetes各个组件的可执行文件。拿来就可以直接运行了。不管是centos,ubuntu还是其他的linux发行版本,只要gcc编译环境没有太大的区别就可以直接运行的。使用较新的系统一般不会有什么跨平台的问题。

  • 使用源码编译安装

编译结果也是各个组件的二进制文件,所以如果能直接下载到需要的二进制文件基本没有什么编译的必要性了。

  • 使用镜像的方式运行

同样一个功能使用二进制文件提供的服务,也可以选择使用镜像的方式。就像nginx,像mysql,我们可以使用安装版,搞一个可执行文件运行起来,也可以使用它们的镜像运行起来,提供同样的服务。kubernetes也是一样的道理,二进制文件提供的服务镜像也一样可以提供。

从上面的三种方式中其实使用镜像是比较优雅的方案,容器的好处自然不用多说。但从初学者的角度来说容器的方案会显得有些复杂,不那么纯粹,会有很多容器的配置文件以及关于类似二进制文件提供的服务如何在容器中提供的问题,容易跑偏。所以我们这里使用二进制的方式来部署。二进制文件已经这里备好,大家可以打包下载,把下载好的文件放到每个节点上,放在哪个目录随你喜欢, 放好后最好设置一下环境变量$PATH ,方便后面可以直接使用命令。(科学上网的老铁也可以自己去官网找找)

[下载地址(kubernetes 1.9.0版本)] ( https://pan.baidu.com/s/1bMnqWY )

  • 三台机器mac开通远程登录root用户下

#设置 PasswordAuthentication yesvi /etc/ssh/sshd_config
sudo systemctl restart sshd


v2-2a82c5278ab7b858170a49d57418b589_hd.p


v2-87678b017d3c31ccc684aa4e452ca789_hd.p


v2-f6ad9e199410aa6152ddb14236702377_hd.p

  • 将下载的k8s上传到linux服务器上

密码都是vagrant

scp kubernetes-bins.tar.gz root@192.168.66.101:~
scp kubernetes-bins.tar.gz root@192.168.66.102:~
scp kubernetes-bins.tar.gz root@192.168.66.103:~


v2-e610d820aa08b126ec492c5634bb9125_hd.p



v2-c7185d5299b98e33e9195a38f32e9fba_hd.p



v2-e21debf9944a8a8b846fdbb067720211_hd.p



v2-8ced4f3bcc3805e2c601ea0d048e5f36_hd.p

  • 解压k8s,改名

解压后,改名成bin就是为了不在配置环境变量

tar -xvf kubernetes-bins.tar.gz 
mv kubernetes-bins/ bin


v2-29427dbfe3f3007f5bab17a56f6b5d32_hd.p


v2-c17889bf3680f4c72d37db27b5f244d9_hd.p


v2-9beb40c93a593376b08236f8d215c394_hd.p

准备配置文件(所有节点)

上一步我们下载了kubernetes各个组件的二进制文件,这些可执行文件的运行也是需要添加很多参数的,包括有的还会依赖一些配置文件。现在我们就把运行它们需要的参数和配置文件都准备好。

下载配置文件

#安装gityum -y install git#到home目录下载项目git clone https://github.com/limingios/kubernetes-starter.git#看看git内容cd ~/kubernetes-starter && ll


v2-53f37bf81cd5884c06406d2eed619246_hd.p


v2-29fca6bed892452e59c13c0cedc588db_hd.p


v2-61af713c648aee9c9606b2519a95e6f7_hd.p

文件说明

  • gen-config.sh

shell脚本,用来根据每个老铁自己的集群环境(ip,hostname等),根据下面的模板,生成适合大家各自环境的配置文件。生成的文件会放到target文件夹下。

  • kubernetes-simple

简易版kubernetes配置模板(剥离了认证授权)。适合刚接触kubernetes的老铁,首先会让大家在和kubernetes初次见面不会印象太差(太复杂啦~~),再有就是让大家更容易抓住kubernetes的核心部分,把注意力集中到核心组件及组件的联系,从整体上把握kubernetes的运行机制。

  • kubernetes-with-ca

在simple基础上增加认证授权部分。大家可以自行对比生成的配置文件,看看跟simple版的差异,更容易理解认证授权的(认证授权也是kubernetes学习曲线较高的重要原因)

  • service-config

这个先不用关注,它是我们曾经开发的那些微服务配置。等我们熟悉了kubernetes后,实践用的,通过这些配置,把我们的微服务都运行到kubernetes集群中。

3台机器生成配置

这里会根据大家各自的环境生成kubernetes部署过程需要的配置文件。在每个节点上都生成一遍,把所有配置都生成好,后面会根据节点类型去使用相关的配置。

#cd到之前下载的git代码目录cd ~/kubernetes-starter#编辑属性配置(根据文件注释中的说明填写好每个key-value)vi config.properties#生成配置文件,确保执行过程没有异常信息


v2-fc7e8b74ebb718e608e15a62c9406447_hd.p


v2-cf000a0376ecda786bbc9b315be3d74a_hd.p


v2-c423bee4a3077c0b5b66901a662f0f44_hd.p


v2-64e3f8f74d1a9b7b77df3601966b63b9_hd.p

#生成简易版本
 ./gen-config.sh simple#查看生成的配置文件,确保脚本执行成功
 find target/ -type f


v2-32a0e048b158fdf9df614ebf5c26aff5_hd.p


v2-93176b20a138ea20a137706c6d1aa194_hd.p


v2-93525b537a325c8d9c39e5609455ed3f_hd.p

执行gen-config.sh常见问题:

  1. gen-config.sh: 3: gen-config.sh: Syntax error: "(" unexpected

  • bash版本过低,运行:bash -version查看版本,如果小于4需要升级

  • 不要使用 sh gen-config.sh的方式运行(sh和bash可能不一样哦)

  1. config.properties文件填写错误,需要重新生成再执行一次./gen-config.sh simple即可,不需要手动删除target


PS:下一步将一步一步的使用这些文件,到那个时间说说每个文件的功能。里面有写错的,192.168.1.101.2379 改成192.168.1.101:2379


v2-5e0719d9fc7dd03ce32e624534c0b631_hd.p