012.Kubernetes二进制部署worker节点Flannel

一部署flannel

1.1 安装flannel

kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通。flannel 使用 vxlan 技术为各节点创建一个可以互通的 Pod 网络,使用的端口为 UDP 8472。
flanneld 第一次启动时,从 etcd 获取配置的 Pod 网段信息,为本节点分配一个未使用的地址段,然后创建 flannedl.1 网络接口(也可能是其它名称,如 flannel1 等)。
flannel 将分配给自己的 Pod 网段信息写入 /run/flannel/docker 文件,docker 后续使用这个文件中的环境变量设置 docker0 网桥,从而从这个地址段为本节点的所有 Pod 容器分配 IP。
更多flannel参考:《008.Docker Flannel+Etcd分布式网络部署》。
提示:k8smaster01节点已下载相应二进制,可直接分发至node节点。

1.2分发flannel

1 [root@k8smaster01 ~]# cd /opt/k8s/work  2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh  3 [root@k8smaster01 work]# for node_ip in ${NODE_IPS[@]}  4   do  5     echo ">>> ${node_ip}"  6     scp flannel/{flanneld,mk-docker-opts.sh} root@${node_ip}:/opt/k8s/bin/  7     ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"  8   done

1.3创建flannel证书和密钥

提示:k8smaster01节点已创建flanneld的CA证书请求文件,可直接分发至node节点。

1.4分发证书和私钥

1 [root@k8smaster01 ~]# cd /opt/k8s/work  2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh  3 [root@k8smaster01 work]# for node_ip in ${NODE_IPS[@]}  4   do  5     echo ">>> ${node_ip}"  6     ssh root@${node_ip} "mkdir -p /etc/flanneld/cert"  7     scp flanneld*.pem root@${node_ip}:/etc/flanneld/cert  8   done

1.5创建flanneld的systemd

提示:k8smaster01节点已创建创建flanneld的systemd,可直接分发至node节点。

1.6分发flannel systemd

1 [root@k8smaster01 ~]# cd /opt/k8s/work  2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh  3 [root@k8smaster01 work]# for node_ip in ${NODE_IPS[@]}  4   do  5     echo ">>> ${node_ip}"  6     scp flanneld.service root@${node_ip}:/etc/systemd/system/  7   done

二启动并验证

2.1启动flannel

1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh  2 [root@k8smaster01 ~]# for node_ip in ${NODE_IPS[@]}  3   do  4     echo ">>> ${node_ip}"  5     ssh root@${node_ip} "systemctl daemon-reload && systemctl enable flanneld && systemctl restart flanneld"  6   done

2.2检查flannel启动

1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh  2 [root@k8smaster01 ~]# for node_ip in ${NODE_IPS[@]}  3   do  4     echo ">>> ${node_ip}"  5     ssh root@${node_ip} "systemctl status flanneld|grep Active"  6   done

2.3检查pod网段信息

1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh  2 [root@k8smaster01 ~]# etcdctl   3   --endpoints=${ETCD_ENDPOINTS}   4   --ca-file=/etc/kubernetes/cert/ca.pem   5   --cert-file=/etc/flanneld/cert/flanneld.pem   6   --key-file=/etc/flanneld/cert/flanneld-key.pem   7   get ${FLANNEL_ETCD_PREFIX}/config#查看集群 Pod 网段(/16)
1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh  2 [root@k8smaster01 ~]# etcdctl   3   --endpoints=${ETCD_ENDPOINTS}   4   --ca-file=/etc/kubernetes/cert/ca.pem   5   --cert-file=/etc/flanneld/cert/flanneld.pem   6   --key-file=/etc/flanneld/cert/flanneld-key.pem   7   ls ${FLANNEL_ETCD_PREFIX}/subnets#查看已分配的 Pod 子网段列表(/24)  8 [root@k8smaster01 ~]# etcdctl   9   --endpoints=${ETCD_ENDPOINTS}  10   --ca-file=/etc/kubernetes/cert/ca.pem  11   --cert-file=/etc/flanneld/cert/flanneld.pem  12   --key-file=/etc/flanneld/cert/flanneld-key.pem  13   get ${FLANNEL_ETCD_PREFIX}/subnets/172.30.8.0-21#查看某一 Pod 网段对应的节点 IP 和 flannel 接口地址
解释:
172.30.8.0/21 被分配给节点 k8snode02 (172.24.8.75);
VtepMAC 为 k8snode02 节点的 flannel.1 网卡 MAC 地址。

2.4检查flannel网络信息

1 [root@k8snode02 ~]# ip addr show
解释:flannel.1 网卡的地址为分配的 Pod 子网段的第一个 IP(.0),且是 /32 的地址。
[root@k8smaster01 ~]# ip route show |grep flannel.1
172.30.8.0/21 via 172.30.8.0 dev flannel.1 onlink
172.30.128.0/21 via 172.30.128.0 dev flannel.1 onlink
172.30.208.0/21 via 172.30.208.0 dev flannel.1 onlink
172.30.216.0/21 via 172.30.216.0 dev flannel.1 onlink
解释:
到其它节点 Pod 网段请求都被转发到 flannel.1 网卡;
flanneld 根据 etcd 中子网段的信息,如 ${FLANNEL_ETCD_PREFIX}/subnets/172.30.32.0-21 ,来决定进请求发送给哪个节点的互联 IP。

2.5验证各节点flannel

在各节点上部署 flannel 后,检查是否创建了 flannel 接口(名称可能为 flannel0、flannel.0、flannel.1 等):
1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh  2 [root@k8smaster01 ~]# for all_ip in ${ALL_IPS[@]}  3   do  4     echo ">>> ${all_ip}"  5     ssh ${all_ip} "/usr/sbin/ip addr show flannel.1|grep -w inet"  6   done
输出:
在各节点上 ping 所有 flannel 接口 IP,确保能通:
1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh  2 [root@k8smaster01 ~]# for all_ip in ${ALL_IPS[@]}  3   do  4     echo ">>> ${all_ip}"  5     ssh ${all_ip} "ping -c 1 172.30.8.0"  6     ssh ${all_ip} "ping -c 1 172.30.32.0"  7     ssh ${all_ip} "ping -c 1 172.30.128.0"  8     ssh ${all_ip} "ping -c 1 172.30.208.0"  9     ssh ${all_ip} "ping -c 1 172.30.216.0" 10   done
(0)

相关推荐

  • 007.Kubernetes二进制部署Flannel

    一部署flannel 1.1 安装flannel kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通.flannel 使用 vxlan 技术为各节点创建一个 ...

  • 容器云平台网络架构设计及优化

    [作者]顾文俊,某互联网公司,金融行业架构师.2008年南京邮电大学电路与系统专业研究生毕业,12 年职业生涯主要从事IT基础设施.云计算.容器.大数据.AI.金融科技相关领域的解决方案工作. 1 K ...

  • (48条消息) 在ubuntu18.04上安装和使用k8s集群

    一.配置虚拟机 1.官网下载VMware16 2.下载Ubuntu18.04桌面版,配置虚拟机.2核 3G 20G 3.配置root登录 https://blog.csdn.net/m0_461288 ...

  • 009.Kubernetes二进制部署kube-apiserver

    一部署master节点 1.1master节点服务 kubernetes master 节点运行如下组件: kube-apiserver kube-scheduler kube-controller- ...

  • ubuntu18安装Kubernetes 1.20.5

    在以前的文章   Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装 和  Centos 使用kubeadm安装Kubernetes 1.15.3,由于某些原因需要更新版本, ...

  • k8s中docker,pod,service之间网络通信模型

    k8s对Pods之间如何进行组网通信提出了要求,k8s对集群的网络有以下要求: 所有的Pods之间可以在不使用NAT网络地址转换的情况下相互通信 所有的Nodes之间可以在不使用NAT网络地址转换的情 ...

  • 008.Kubernetes二进制部署Nginx实现高可用

    一Nginx代理实现kube-apiserver高可用 1.1Nginx实现高可用 基于 nginx 代理的 kube-apiserver 高可用方案. 控制节点的 kube-controller-m ...

  • 013.Kubernetes二进制部署worker节点Nginx实现高可用

    一Nginx代理实现kube-apiserver高可用 1.1Nginx实现高可用 基于 nginx 代理的 kube-apiserver 高可用方案. 控制节点的 kube-controller-m ...

  • 015.Kubernetes二进制部署所有节点kubelet

    一部署 kubelet kubelet 运行在每个 worker 节点上,接收 kube-apiserver 发送的请求,管理 Pod 容器,执行交互式命令,如 exec.run.logs 等. ku ...

  • 016.Kubernetes二进制部署所有节点kube-proxy

    一部署 kube-proxy kube-proxy 运行在所有节点上,它监听 apiserver 中 service 和 endpoint 的变化情况,创建路由规则以提供服务 IP 和负载均衡功能. ...

  • 003.Kubernetes二进制部署准备

    一 前置准备 1.1 前置条件 相应的充足资源的Linux服务器: 设置相应的主机名,参考命令: 1 hostnamectl set-hostname k8smaster Mac及UUID唯一: 若未 ...

  • 014.Kubernetes二进制部署docker

    一 部署docker 1.1 部署docker组件 docker 运行和管理容器,kubelet 通过 Container Runtime Interface (CRI) 与它进行交互. 1.2 下载 ...

  • kubernetes 二进制安装部署Prometheus-4

    讲解并部署k8s监控告警工具prometheus(普罗米修斯) 官网地址:https://prometheus.io/ 一.普罗米修斯Prometheus介绍 1.什么是Prometheus? Pro ...