• kubernetes部署 flannel网络组件


    创建 flannel 证书和私钥
    flannel 从 etcd 集群存取网段分配信息,而 etcd 集群启用了双向 x509 证书认证,所以需要为 flanneld 生成证书和私钥。

    cat > flanneld-csr.json <<EOF
    {
      "CN": "flanneld",
      "hosts": [],
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "ST": "ChongQing",
          "L": "ChongQing",
          "O": "k8s",
          "OU": "yunwei"
        }
      ]
    }
    EOF

    该证书只会被当做 client 证书使用,所以 hosts 字段为空;
    生成证书和私钥:

    # cfssl gencert -ca=/etc/kubernetes/ca/ca.pem
    -ca-key=/etc/kubernetes/ca/ca-key.pem
    -config=/etc/kubernetes/ca/ca-config.json
    -profile=kubernetes flanneld-csr.json | cfssljson -bare flanneld
    ls flanneld*

    将生成的证书和私钥分发到所有节点的/etc/kubernetes/ca/ 目录。
    # scp /etc/kubernetes/ca/flanneld* 192.168.111.11:/etc/kubernetes/ca/
    # scp /etc/kubernetes/ca/flanneld* 192.168.111.12:/etc/kubernetes/ca/

    添加flanneld的服务文件,三台机子都要。

    cat > /lib/systemd/system/flanneld.service << EOF
    [Unit]
    Description=Flanneld overlay address etcd agent
    After=network.target
    After=network-online.target
    Wants=network-online.target
    After=etcd.service
    Before=docker.service
    
    [Service]
    Type=notify
    ExecStart=/usr/local/bin/flanneld 
      -etcd-cafile=/etc/kubernetes/ca/ca.pem 
      -etcd-certfile=/etc/kubernetes/ca/flanneld.pem 
      -etcd-keyfile=/etc/kubernetes/ca/flanneld-key.pem 
      -etcd-endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379 
      -etcd-prefix=/kubernetes/network 
      -iface=ens33
    ExecStartPost=/usr/local/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    RequiredBy=docker.service
    EOF

    -iface=ens33,多网卡的一定要写对。

    ExecStartPost=/usr/local/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker,这是个为docker分配的网络地址,待会docker会用到。

    flannel会通过-etcd-prefix这个参数到etcd数据库获取/16段的ip地址,然后给集群的每台机器flannel网络分配一个/32段的地址,然后给docker分配一个机器ip下面的同网段的一个/24位的网络地址,然后docker给所有容器分配一段docker的ip下面的/24的ip地址,这样就达到了整个网络的连通性。

    我们这里使用172.30.0.0/16,你也可以自己定义。但是必须与 kube-controller-manager 的 --cluster-cidr 参数值一致。

    这里说个题外话,kubernetes用到的网络有三个,主机网络(就是我们的主机ip),flannel网络(/16段的ip地址)和服务网络(kubernetes用于服务发现的,可以用/24段,也可以用/16段),这三个网络不能有重合,除非是本身有公网ip,不然都是私有地址。

    向 etcd 写入集群 Pod 网段信息
    注意:本步骤只需执行一次,可以在任意主机执行。

    etcdctl
    --endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379
    --ca-file=/etc/kubernetes/ca/ca.pem
    --cert-file=/etc/kubernetes/ca/flanneld.pem
    --key-file=/etc/kubernetes/ca/flanneld-key.pem
    set /kubernetes/network/config '{"Network":"172.30.0.0/16", "SubnetLen": 24, "Backend": {"Type": "vxlan"}}'

    查看
    etcdctl
    --endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379
    --ca-file=/etc/kubernetes/ca/ca.pem
    --cert-file=/etc/kubernetes/ca/flanneld.pem
    --key-file=/etc/kubernetes/ca/flanneld-key.pem
    get /kubernetes/network/config

    flanneld 当前版本 (v0.10.0) 不支持 etcd v3,故使用 etcd v2 API 写入配置 key 和网段数据;


    启动flanneld,如果绿色就正常了,如果出问题,可以用journalctl -xe,journalctl -u flanneld,检查。
    # for SERVICES in flanneld;do systemctl enable $SERVICES;systemctl start $SERVICES;systemctl status $SERVICES ; done

    验证:

    # ip a   #有flannel.1网络

    flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN
    link/ether 26:43:34:dd:f2:79 brd ff:ff:ff:ff:ff:ff
    inet 172.30.29.0/32 scope global flannel.1
    valid_lft forever preferred_lft forever
    inet6 fe80::2443:34ff:fedd:f279/64 scope link
    valid_lft forever preferred_lft forever

    # ls /run/flannel/
    docker subnet.env

    查看已分配的 Pod 子网段列表(/24):

    # etcdctl
    --endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379
    --ca-file=/etc/kubernetes/ca/ca.pem
    --cert-file=/etc/kubernetes/ca/flanneld.pem
    --key-file=/etc/kubernetes/ca/flanneld-key.pem
    ls /kubernetes/network/subnets

    结果:

    /kubernetes/network/subnets/172.30.29.0-24
    /kubernetes/network/subnets/172.30.47.0-24
    /kubernetes/network/subnets/172.30.87.0-24

  • 相关阅读:
    如何设计一个百万级用户的抽奖系统?
    服务注册发现
    消息列队7
    消息列队6
    bzoj 4771: 七彩树
    [SDOI2013]刺客信条
    bzoj 5291: [Bjoi2018]链上二次求和
    51nod 1245 Binomial Coefficients Revenge
    bzoj 5308: [Zjoi2018]胖
    bzoj 5294: [Bjoi2018]二进制
  • 原文地址:https://www.cnblogs.com/xuyingzhong/p/9669952.html
Copyright © 2020-2023  润新知