您的位置:首页 > 运维架构 > Docker

Kubernetes基于ovs构建docker集群

2017-08-10 00:57 896 查看

背景

Kubernets

Google公司开源的大规模容器集群管理系统,为容器化应用提供资源调试、部署、服务发现、扩展机制等功能。

ovs(Open VSwitch)

开源的高质量,多层虚拟交换机,目的是让大规模网络自动化可以通过编程扩展。

docker

开源引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。

etcd

用于共享配置和服务发现的分布式,一致性的KV存储系统。

环境

三台CentOS 7虚拟机,设置网卡名为eth0

master: 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息