本文参考了网上很多搭建kubernetes的文章,搭建过程中遇到了各式各样的问题,本文主要将自己搭建过程以及遇到的问题以及解决方式记录了下来,
可能会有问题,欢迎大家指正,也欢迎大家互相交流。
    
一,环境准备
    K8S 分为 master 和 slave 两类角色。
    环境说明如下表:
    对象         版本     IP             说明
    master      centos7  10.10.10.12    K8S的master所在主机
    etcd-server centos7  10.10.10.12    etcd服务所在主机,与master在同一机器 
    slave       centos7  10.10.10.13    K8S节点所在主机(如果没有两台机器,在k8s-slave上执行的所有命令都可以在k8s-master上执行)
二,安装并配置master的K8S
    1,登录 master 主机
    2,跟新yum源,请保证该主机与外网连同
       yum update -y
    3,创建yum源
        注意:master,slave都要按照以下操作创建yum源
        登录master/slave主机:
        进入目录 cd /etc/yum.repos.d/
        vi docker.repo
        加入以下内容:
        [docker]
        name=docker-common-release
        baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/
        gpgcheck=0
    4,安装服务
        执行以下命令,安装kubernetes和etcd。
        yum -y install --enablerepo=docker-common-release kubernetes etcd
    5,修改文件/etc/kubernetes/config(所有节点)
        注意,master和slave主机都要修改 
        指定master主机的ip,文件内容如下:
        $ cat /etc/kubernetes/config
        KUBE_LOGTOSTDERR="--logtostderr=true"
        KUBE_LOG_LEVEL="--v=0"
        KUBE_ALLOW_PRIV="--allow-privileged=false"
        KUBE_MASTER="--master=http://10.10.10.12:8080"
    6,禁用防火墙
        systemctl disable iptables-services firewalld
        systemctl stop iptables-services firewalld
        在master节点配置kubernetes服务
        (如果后面的访问出现8080,2379端口访问不通的情况,可以尝试允许 8080,与 2379的端口通过
          8080是slave节点的k8s node的访问api的端口
          2379是flancd返问etcd的端口
          1,允许端口访问
            iptables -I INPUT -p tcp -m multiport --dports 8080 -m comment --comment "k8s" -j ACCEPT
            iptables -I INPUT -p tcp -m multiport --dports 2379 -m comment --comment "etcd" -j ACCEPT
        )
    7,修改配置文件/etc/etcd/etcd.conf,确保etcd监听所有地址。内容如下:
        $ cat /etc/etcd/etcd.conf
        ETCD_NAME=default
        ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
        ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
    8,设置etcd网络,主要是flannel用于分别docker的网络,‘/coreos.com/network/config’ 这个字段必须与
        flannel中的"FLANNEL_ETCD_KEY="/coreos.com/network" 保持一致,但是没有 '/config'字段
       etcdctl set /coreos.com/network/config '{ "Network": "10.3.0.0/16" }'
    9,修改配置文件/etc/kubernetes/apiserver
        $cat /etc/kubernetes/apiserver
            KUBE_API_ADDRESS="--address=0.0.0.0"
            KUBE_API_PORT="--port=8080"
            KUBELET_PORT="--kubelet-port=10250"
            KUBE_ETCD_SERVERS="--etcd-servers=http://10.10.10.12:2379"
            KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
            KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
            KUBE_API_ARGS=""
    10,修改配置文件/etc/kubernetes/controller-manager,定义slave主机ip地址
        $cat /etc/kubernetes/controller-manager
            KUBELET_ADDRESSES="--machines=10.10.10.13"
    11,在master主机上,启动服务
        执行如下命令,批量启动服务
        for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
            systemctl restart $SERVICES
            systemctl enable $SERVICES
            systemctl status $SERVICES
        done
三,slave节点配置
    1,创建yum源
        同2.3
    2,yum 安装kubernetes
        yum -y install --enablerepo=docker-common-release kubernetes flannel
    3,修改kubernetes配置文件,指定master。
        $ cat /etc/kubernetes/config
        KUBE_MASTER="--master=http://XX.XX.XX.179:8080"
        $ cat /etc/sysconfig/flanneld
        FLANNEL_ETCD="http://10.10.10.12:2379"
    4,配置
        修改flanneld的配置文件:
        $ cat /etc/sysconfig/flanneld
        FLANNEL_ETCD="http://10.10.10.12:2379"
        FLANNEL_ETCD_KEY="/coreos.com/network" 
        说明:
        /coreos.com/network 与 etcd 中设置的子网要保持一致 ,就是少了一个config
        否则会出现:network.go:53] Failed to retrieve network config: 104: Not a directory (/atomic.io/network) [366]
    5,配置kubelet服务。
        $ cat /etc/kubernetes/kubelet
        KUBELET_ADDRESS="--address=0.0.0.0"
        KUBELET_PORT="--port=10250"
        KUBELET_HOSTNAME="--hostname-override=10.10.10.13"
        KUBELET_API_SERVER="--api-servers=http://10.10.10.12:8080"
    6,启动flanneld
        systemctl restart flanneld
        systemctl enable flanneld
    7,配置docker配置文件
        查看flannel的配置文件
        $cat /run/flannel/docker 
        DOCKER_OPT_BIP="--bip=10.1.77.1/24"
        DOCKER_OPT_IPMASQ="--ip-masq=true"
        DOCKER_OPT_MTU="--mtu=1472"
        DOCKER_NETWORK_OPTIONS=" --bip=10.1.77.1/24 --ip-masq=true --mtu=1472 "
        查看dokcer的配置文件
        $cat /etc/sysconfig/docker-network 
        # /etc/sysconfig/docker-network
        DOCKER_NETWORK_OPTIONS="--bip=10.1.77.1/24 --ip-masq=true --mtu=1472"
        
        也就是将/etc/sysconfig/docker-network 中的DOCKER_NETWORK_OPTIONS改成与 /run/flannel/docker 中的DOCKER_NETWORK_OPTIONS一致
    8,在slave主机上,启动服务
        for SERVICES in kube-proxy kubelet docker flanneld; do
            systemctl restart $SERVICES
            systemctl enable $SERVICES
            systemctl status $SERVICES
        done
    9,在slave上执行: route -n ,可以看到如下信息
        Kernel IP routing table
        Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
        0.0.0.0         10.10.10.1      0.0.0.0         UG    100    0        0 eth0
        10.1.0.0        0.0.0.0         255.255.0.0     U     0      0        0 flannel0
        10.1.77.0       0.0.0.0         255.255.255.0   U     0      0        0 docker0
        10.10.10.0      0.0.0.0         255.255.255.0   U     100    0        0 eth0
四,验证
    现在登陆master,确认slave的状态
    $ kubectl get nodes
    NAME           LABELS                                STATUS    AGE
    10.10.10.13   kubernetes.io/hostname=10.10.10.13   Ready     1h
五,遇到问题
   1,flanneld 启动的时候,连接的etcd 为127.0.0.1
      $ps -ef|grep flanneld
       /usr/bin/flanneld -etcd-endpoints=http://127.0.0.1:2379 -etcd-prefix=/atomic.io/network
      修改方式:
        $ cat /etc/sysconfig/flanneld
           FLANNEL_ETCD="http://10.10.10.12:2379"
   2, flanneld 启动报:Failed to retrieve network config: client: etcd cluster is unavail...configured
      修改方式:
      (1)在etcd节点上设置
          etcdctl set /coreos.com/network/config '{ "Network": "10.3.0.0/16" }'
        (2)$ cat /etc/sysconfig/flanneld
           FLANNEL_ETCD="http://10.10.10.12:2379"
           FLANNEL_ETCD_KEY="/coreos.com/network"
   3,flanneld 无法连上 etcd,“Failed to retrieve network config: client: etcd cluster is unavail...configured”
      允许端口访问
        iptables -I INPUT -p tcp -m multiport --dports 8080 -m comment --comment "k8s" -j ACCEPT
        iptables -I INPUT -p tcp -m multiport --dports 2379 -m comment --comment "etcd" -j ACCEPT
        iptables-save|grep 2379
        service iptables save
      
六,参考文档:
1, http://blog.csdn.net/qingchi0/article/details/42538549

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐