设为首页 收藏本站
查看: 2360|回复: 1

[经验分享] CentOS 7实战Kubernetes部署

[复制链接]

尚未签到

发表于 2018-9-16 08:10:22 | 显示全部楼层 |阅读模式
  1. 前言
  上一节我们阐述了Kubernetes的系统架构,让大家对Kubernetes有一定的初步了解,但是就如何使用Kubernetes, 也许大家还不知如何下手。本文作者将带领大家如何在本地部署、配置Kubernetes集群网络环境以及通过实例演示跨机器服务间的通信,主要包括如下内容:

  •   部署环境介绍
  •   Kubernetes集群逻辑架构
  •   部署Open vSwitch、Kubernetes、Etcd组件
  •   演示Kubernetes管理容器
2. 部署环境

  •   VMware Workstation:10.0.3
  •   VMware Workstation网络模式:NAT
  •   操作系统信息:CentOS 7 64位
  •   Open vSwitch版本信息:2.3.0
  •   Kubernetes版本信息:0.5.2
  •   Etcd版本信息:0.4.6
  •   Docker版本信息:1.3.1
  •   服务器信息:
    RoleHostnameIP AddressAPIServerkubernetes192.168.230.3Minionminion1192.168.230.4Minionminion2192.168.230.5
3. Kubernetes集群逻辑架构
  在详细介绍部署Kubernetes集群前,先给大家展示下集群的逻辑架构。从下图可知,整个系统分为两部分,第一部分是Kubernetes APIServer,是整个系统的核心,承担集群中所有容器的管理工作;第二部分是minion,运行Container Daemon,是所有容器栖息之地,同时在minion上运行Open vSwitch程序,通过GRE Tunnel负责minion之间Pod的网络通信工作。 DSC0000.png
4. 部署Open vSwitch、Kubernetes、Etcd组件
4.1 安装Open vSwitch及配置GRE
  为了解决跨minion之间Pod的通信问题,我们在每个minion上安装Open vSwtich,并使用GRE或者VxLAN使得跨机器之间Pod能相互通信,本文使用GRE,而VxLAN通常用在需要隔离的大规模网络中。对于Open vSwitch的具体安装步骤,可参考这篇博客,我们在这里就不再详细介绍安装步骤了。安装完Open vSwitch后,接下来便建立minion1和minion2之间的隧道。首先在minion1和minion2上建立OVS Bridge,
[root@minion1 ~]# ovs-vsctl add-br obr0  接下来建立gre,并将新建的gre0添加到obr0,在minion1上执行如下命令,
[root@minion1 ~]# ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.230.5  在minion2上执行,
[root@minion2 ~]# ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.230.4  至此,minion1和minion2之间的隧道已经建立。然后我们在minion1和minion2上创建Linux网桥kbr0替代Docker默认的docker0(我们假设minion1和minion2都已安装Docker),设置minion1的kbr0的地址为172.17.1.1/24, minion2的kbr0的地址为172.17.2.1/24,并添加obr0为kbr0的接口,以下命令在minion1和minion2上执行。
[root@minion1 ~]# brctl addbr kbr0               //创建linux bridge  
[root@minion1 ~]# brctl addif kbr0 obr0          //添加obr0为kbr0的接口
  
[root@minion1 ~]# ip link set dev docker0 down   //设置docker0为down状态
  
[root@minion1 ~]# ip link del dev docker0        //删除docker0
  为了使新建的kbr0在每次系统重启后任然有效,我们在/etc/sysconfig/network-scripts/目录下新建minion1的ifcfg-kbr0如下:
DEVICE=kbr0  
ONBOOT=yes
  
BOOTPROTO=static
  
IPADDR=172.17.1.1
  
NETMASK=255.255.255.0
  
GATEWAY=172.17.1.0
  
USERCTL=no
  
TYPE=Bridge
  
IPV6INIT=no
  同样在minion2上新建ifcfg-kbr0,只需修改ipaddr为172.17.2.1和gateway为172.17.2.0即可,然后执行systemctl restart network重启系统网络服务,你能在minion1和minion2上发现kbr0都设置了相应的IP地址。为了验证我们创建的隧道是否能通信,我们在minion1和minion2上相互ping对方kbr0的IP地址,从下面的结果发现是不通的,经查找这是因为在minion1和minion2上缺少访问172.17.1.1和172.17.2.1的路由,因此我们需要添加路由保证彼此之间能通信。
[root@minion1 network-scripts]# ping 172.17.2.1  
PING 172.17.2.1 (172.17.2.1) 56(84) bytes of data.
  
^C
  
--- 172.17.2.1 ping statistics ---
  
2 packets transmitted, 0 received, 100% packet loss, time 1000ms
  

  
[root@minion2 ~]#  ping 172.17.1.1
  
PING 172.17.1.1 (172.17.1.1) 56(84) bytes of data.
  
^C
  
--- 172.17.1.1 ping statistics ---
  
2 packets transmitted, 0 received, 100% packet loss, time 1000ms
  由于通过ip route add添加的路由会在下次系统重启后失效,为此我们在/etc/sysconfig/network-scripts目录下新建一个文件route-eth0存储路由,这里需要注意的是route-eth0和ifcfg-eth0的黑体部分必须保持一致,否则不能工作,这样添加的路由在下次重启后不会失效。为了保证两台minion的kbr0能相互通信,我们在minion1的route-eth0里添加路由172.17.2.0/24 via 192.168.230.5 dev eno16777736,eno16777736是minion1的网卡,同样在minion2的route-eth0里添加路由172.17.1.0/24 via 192.168.230.4 dev eno16777736。重启网络服务后再次验证,彼此kbr0的地址可以ping通,如:
[root@minion2 network-scripts]# ping 172.17.1.1  
PING 172.17.1.1 (172.17.1.1) 56(84) bytes of data.
  
64 bytes from 172.17.1.1: icmp_seq=1 ttl=64 time=2.49 ms
  
64 bytes from 172.17.1.1: icmp_seq=2 ttl=64 time=0.512 ms
  
^C
  
--- 172.17.1.1 ping statistics ---
  
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
  
rtt min/avg/max/mdev = 0.512/1.505/2.498/0.993 ms
  到现在我们已经建立了两minion之间的隧道,而且能正确的工作。下面我们将介绍如何安装Kubernetes APIServer及kubelet、proxy等服务。
4.2 安装Kubernetes APIServer
  在安装APIServer之前,我们先下载Kubernetes及Etcd,做一些准备工作。在kubernetes上的具体操作如下:
[root@kubernetes ~]# mkdir /tmp/kubernetes  
[root@kubernetes ~]# cd /tmp/kubernetes/
  
[root@kubernetes kubernetes]# wget https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v0.5.2/kubernetes.tar.gz
  
[root@kubernetes kubernetes]# wget https://github.com/coreos/etcd/releases/download/v0.4.6/etcd-v0.4.6-linux-amd64.tar.gz
  然后解压下载的kubernetes和etcd包,并在kubernetes、minion1、minion2上创建目录/opt/kubernetes/bin,
[root@kubernetes kubernetes]# mkdir -p /opt/kubernetes/bin  
[root@kubernetes kubernetes]# tar xf kubernetes.tar.gz
  
[root@kubernetes kubernetes]# tar xf etcd-v0.4.6-linux-amd64.tar.gz
  
[root@kubernetes kubernetes]# cd ~/kubernetes/server
  
[root@kubernetes server]# tar xf kubernetes-server-linux-amd64.tar.gz
  
[root@kubernetes kubernetes]# /tmp/kubernetes/kubernetes/server/kubernetes/server/bin
  复制kube-apiserver,kube-controller-manager,kube-scheduler,kubecfg到kubernetes的/opt/kubernetes/bin目录下,而kubelet,kube-proxy则复制到minion1和minion2的/opt/kubernetes/bin,并确保都是可执行的。
[root@kubernetes amd64]# cp kube-apiserver kube-controller-manager kubecfg kube-scheduler /opt/kubernetes/bin  
[root@kubernetes amd64]# scp kube-proxy kubelet root@192.168.230.4:/opt/kubernetes/bin
  
[root@kubernetes amd64]# scp kube-proxy kubelet root@192.168.230.5:/opt/kubernetes/bin
  为了简单我们只部署一台etcd服务器,如果需要部署etcd的集群,请参考官方文档,在本文中将其跟Kubernetes APIServer部署同一台机器上,而且将etcd放置在/opt/kubernetes/bin下,etcdctl跟ectd同一目录。
[root@kubernetes kubernetes]# cd /tmp/kubernetes/etcd-v0.4.6-linux-amd64  
[root@kubernetes etcd-v0.4.6-linux-amd64]# cp etcd etcdctl /opt/kubernetes/bin
  需注意的是kubernetes和minion上/opt/kubernetes/bin目录下的文件都必须是可执行的。到目前,我们准备工作已经差不多,现在开始给apiserver,controller-manager,scheduler,etcd配置unit文件。首先我们用如下脚本etcd.sh配置etcd的unit文件,
#!/bin/sh  

  
ETCD_PEER_ADDR=192.168.230.3:7001
  
ETCD_ADDR=192.168.230.3:4001
  
ETCD_DATA_DIR=/var/lib/etcd
  
ETCD_NAME=kubernetes
  

  
! test -d $ETCD_DATA_DIR && mkdir -p $ETCD_DATA_DIR
  
cat

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-584332-1-1.html 上篇帖子: Docker容器管理之Kubernetes 下篇帖子: Openvswitch GRE实现Kubernetes网络模型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表