Kubernetes基于ovs构建docker集群
2017-08-10 00:57
896 查看
背景
KubernetsGoogle公司开源的大规模容器集群管理系统,为容器化应用提供资源调试、部署、服务发现、扩展机制等功能。
ovs(Open VSwitch)
开源的高质量,多层虚拟交换机,目的是让大规模网络自动化可以通过编程扩展。
docker
开源引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。
etcd
用于共享配置和服务发现的分布式,一致性的KV存储系统。
环境
三台CentOS 7虚拟机,设置网卡名为eth0master: 172.17.1.101
slave1: 172.17.1.121
slave2: 172.17.1.122
master 上装Kubernetes(version 1.5.2),etcd(version 3.1.9)。
slave 上装Kubernetes(version 1.5.2),OpenVSwitch(version 2.5.3),Docker(version 1.12.6)。
同时关闭防火墙,关闭SELinux。
配置
master
设置etcd,kube-apiserver,kube-scheduler,kube-controller-manager服务开机自启。[root@master ~]# chkconfig etcd on [root@master ~]# chkconfig kube-apiserver on [root@master ~]# chkconfig kube-scheduler on [root@master ~]# chkconfig kube-controller-manager on
编辑/etc/etcd/etcd.conf,修改监听地址
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
编辑/etc/kubernetes/apiserver,修改API地址和etcd服务地址
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
编辑/etc/kubernetes/controller-manager,修改时间参数
KUBE_CONTROLLER_MANAGER_ARGS="--node-monitor-grace-period=10s --pod-eviction-timeout=10s"
重启etcd,kube-apiserver,kube-scheduler,kube-controller-manager服务
[root@master ~]# service etcd restart [root@master ~]# service kube-apiserver restart [root@master ~]# service kube-scheduler restart [root@master ~]# service kube-controller-manager restart
Slave1 & Slave2
注:所有不指定slave的行为均是在两台上都进行的操作。设置kube-proxy,kubelet,docker,ovs-vswitchd服务开机自启
[root@slave ~]# chkconfig kube-proxy on [root@slave ~]# chkconfig kubelet on [root@slave ~]# chkconfig docker on [root@slave ~]# chkconfig ovs-vswitchd on
编辑/etc/kubernetes/config
KUBE_MASTER="--master=http://172.17.1.101:8080"
编辑/etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_HOSTNAME="--hostname-override=172.17.1.121/122" #各自ip KUBELET_API_SERVER="--api-servers=http://172.17.1.101:8080"
重启kube-proxy,kubelet服务
[root@slave ~]# service kube-proxy restart [root@slave ~]# service kubelet restart
分别设置docker0网段,并重启docker服务
[root@slave1 ~]# vim /etc/docker/daemon.json { "bip": "172.27.1.1/24" } [root@slave1 ~]# service docker restart [root@slave2 ~]# vim /etc/docker/daemon.json { "bip": "172.27.2.1/24" } [root@slave2 ~]# service docker restart
添加ovs网桥,并互相设置vxlan连接,然后加入docker0
注:k8sbr0重启后需要重新添加到docker0里,可以用启动脚本设为开机自动添加
[root@slave ~]# ovs-vsctl add-br k8sbr0 [root@slave1 ~]# ovs-vsctl add-port k8sbr0 vx1 -- set interface vx1 type=vxlan options:remote_ip=172.17.1.122 [root@slave1 ~]# brctl addif docker0 k8sbr0 [root@slave2 ~]# ovs-vsctl add-port k8sbr0 vx1 -- set interface vx1 type=vxlan options:remote_ip=172.17.1.121 [root@slave2 ~]# brctl addif docker0 k8sbr0
添加路由并保存,不出意外应该可以ping通
注:如果ping的时候响应ip不在正确网段,可能是残留在docker0上的ip,重启一下network服务即可
[root@slave1 ~]# ip route add 172.27.2.0/24 via 172.17.1.121 dev eth0 [root@slave1 ~]# vim /etc/sysconfig/network-scripts/route-eth0 172.27.2.0/24 via 172.17.1.121 dev eth0 [root@slave2 ~]# ip route add 172.27.1.0/24 via 172.17.1.122 dev eth0 [root@slave2 ~]# vim /etc/sysconfig/network-scripts/route-eth0 172.27.1.0/24 via 172.17.1.122 dev eth0 [root@slave1 ~]# ping 172.27.2.1 PING 172.27.2.1 (172.27.2.1) 56(84) bytes of data. 64 bytes from 172.27.2.1: icmp_seq=1 ttl=64 time=0.274 ms 64 bytes from 172.27.2.1: icmp_seq=2 ttl=64 time=0.216 ms 64 bytes from 172.27.2.1: icmp_seq=3 ttl=64 time=0.218 ms [root@slave2 ~]# ping 172.27.1.1 PING 172.27.1.1 (172.27.1.1) 56(84) bytes of data. 64 bytes from 172.27.1.1: icmp_seq=1 ttl=64 time=0.320 ms 64 bytes from 172.27.1.1: icmp_seq=2 ttl=64 time=0.208 ms 64 bytes from 172.27.1.1: icmp_seq=3 ttl=64 time=0.338 ms
这时候在master端查看一下node,可能看到两个slave上的node
[root@master ~]# kubectl get node NAME STATUS AGE 172.17.1.121 Ready 2d 172.17.1.122 Ready 2d
测试
编辑一个pod,注意缩进[root@master ~]# vim web-pod.yaml apiVersion: v1 kind: Pod metadata: name: webserver labels: app: web spec: containers: - name: nginx-server image: nginx ports: - containerPort: 88
创建pod并查询
注:pod里的窗口创建可能会比较慢,需要多等一会儿
[root@master ~]# kubectl create -f web-pod.yaml [root@master ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE webserver 1/1 Running 1 13m 172.27.1.2 172.17.1.121
相关文章推荐
- 基于kubernetes构建Docker集群管理详解
- 基于kubernetes构建Docker集群-安装篇
- 基于Kubernetes构建Docker集群管理详解
- 基于kubernetes构建Docker集群管理详解-转
- 二、基于kubernetes构建Docker集群环境实战
- from: 基于Kubernetes构建Docker集群管理详解
- 基于kubernetes构建Docker集群管理详解
- 基于kubernetes构建Docker集群管理详解
- 基于kubernetes构建Docker集群管理详解
- 基于kubernetes构建Docker集群管理详解
- 基于Kubernetes构建Docker集群管理详解
- 基于kubernetes构建Docker集群管理详解 不指定
- 基于kubernetes构建Docker集群管理详解
- 基于Kubernetes构建Docker集群管理详解
- 基于openvswitch+Docker构建SDN网络测试环境 (使用ovs-docker进行构建)
- Docker笔记三:基于LVS DR模式构建WEB服务集群
- 基于 Kubernetes 的 Jenkins 构建集群实践
- 基于kubernetes的docker集群实践
- centos7上基于kubernetes的docker集群管理
- Kubernetes 和 Swarm 两种docker集群,基于ansible的自动化安装部署(已测)