一直用 weave,本篇记录一下 kubernetes 使用 flannel 作为网络组件,flannel 以 pod 方式部署
一、环境准备 首先有个 kubernetes 集群,集群网络处于未部署状态,集群信息如下
IP地址 节点 192.168.1.101 master 192.168.1.102 node,etcd(单点) 192.168.1.103 node
二、开搞 2.1、创建 kubernetes 集群 具体各种注意细节这里不再阐述,请参考本博客其他文章,唯一要注意一点是创建集群(init)时要增加 --pod-network-cidr 10.244.0.0/16
参数; 网段根据需要自己指定,如果不使用 --pod-network-cidr
参数,则 flannel pod 启动后会出现 failed to register network: failed to acquire lease: node "xxxxxx" pod cidr not assigned
错误,以下为部分样例命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 tee /etc/yum.repos.d/mritd.repo << EOF [mritdrepo] name=Mritd Repository baseurl=https://rpm.mritd.me/centos/7/x86_64 enabled=1 gpgcheck=1 gpgkey=https://cdn.oss.link/keys/rpm.public.key EOF yum install -y kubelet kubectl kubernetes-cni kubeadmecho "192-168-1-101.master" > /etc/hostnameecho "127.0.0.1 192-168-1-101.master" >> /etc/hosts sysctl kernel.hostname="192-168-1-101.master" images=(kube-proxy-amd64:v1.4.6 kube-discovery-amd64:1.0 kubedns-amd64:1.7 kube-scheduler-amd64:v1.4.6 kube-controller-manager-amd64:v1.4.6 kube-apiserver-amd64:v1.4.6 etcd-amd64:2.2.5 kube-dnsmasq-amd64:1.3 exechealthz-amd64:1.1 pause-amd64:3.0 kubernetes-dashboard-amd64:v1.4.1)for imageName in ${images[@]} ; do docker pull mritd/$imageName docker tag mritd/$imageName gcr.io/google_containers/$imageName docker rmi mritd/$imageName done kubeadm init --api-advertise-addresses 192.168.1.101 --external-etcd-endpoints http://192.168.1.102:2379 --use-kubernetes-version v1.4.6 --pod-network-cidr 10.244.0.0/16
2.2、创建 flannel 网络 前面如果都设置好创建网络很简单,跟 weave 一样
1 kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
有兴趣的可以把 yml 搞下来看下,由于他的镜像托管在 quay.io
,所以没有墙的问题,也可以提前 load 进来;对于 yml 上面的 ConfigMap
中的 ip 段最好与 --pod-network-cidr
一致(不一致没测试,想作死自己试吧),然后稍等片刻网络便创建成功,截图如下
2.3、网络测试 由于环境有限(virtualbox 虚拟机),所以暂时只测试一下网络互通是否有问题,关于性能啥的由于本人对网络部分也一直是个短板,需要大神们自己来了,如果可以给篇测试报告我也看看 :)
rc 如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 apiVersion: v1 kind: ReplicationController metadata: name: alpine labels: name: alpine spec: replicas: 2 selector: name: alpine template: metadata: labels: name: alpine spec: containers: - image: mritd/alpine:3.4 imagePullPolicy: Always name: alpine command : - "bash" - "-c" - "while true;do echo test;done" ports: - containerPort: 8080 name: alpine
去两个主机上分别进入容器,然后互 ping 集群 IP 可以 ping 通 ;图2 ping 错了,不重新截图了,谅解
本文只是简单搭建,其他更高级的性能测试交给各位玩网络的大神吧