📋
k8s use handbook
  • 概述
  • 1. kuberbetes应用接入准则篇
    • 1.1 git分支管理规范
    • 1.2 接入elk字段格式以及约定
    • 1.3 健康检测接口规范
    • 1.4 项目命名规范
  • 2. kubernetes集群部署篇
    • 2.0 kubernetes手动安装概览
      • 201 创建跟证书和秘钥
      • 202 ETCD集群部署及维护
      • 203 kubectl部署以及基本使用
      • 204 Master节点部署及维护
        • 2041 kube-apiserver
        • 2042 kube-scheduler
        • 2043 kube-controller-manager
      • 205 Node节点部署及维护
        • 2051 Flannel部署及维护
        • 2052 kubernetes runtime部署及维护
        • 2053 kubelet
        • 2054 kube-proxy
    • 2.1 kubernetes ansible安装
    • 2.2 kubernetes kubeadm安装
    • 2.3 kubernetes 组件安装
      • 231 coredns
      • 232 kube-dashboard
  • 3. kubernetes权限控制篇
    • 认证
    • 授权
    • 准入机制
  • 4. what happens when k8s .....
    • Kubernetes使用什么方法方法来检查应用程序的运行状况?
    • 如何优雅的关闭pod?
    • TLS bootstrapping 是如何工作的?
    • 怎么编辑kubernetes的yaml文件以及kubernetes的控制是什么样的?
    • deployment如何使用不同的策略部署我们的程序?
    • Kubernetes 如何接收请求,又是如何将结果返回至客户端的?
    • Kubernetes 的调度流程是怎样的?
    • Kubelet 是如何接受调度请求并启动容器的?
    • Kube-proxy 的作用,提供的能力是什么?
    • Kubernetes 控制器是如何工作的?
    • ingress-service-deployment如何关联的?
    • 如何指定pod的运行节点?
    • Https 的通信过程?
  • 5. kubernetes私有仓库篇
  • 6. kubernetes CI/CD篇
    • 5. kubernetes cicd发布流水线
  • 6. kubernetes日志系统篇
    • 6.1 elk使用规范和指南
    • 6.2 kibana搜索简易指南
    • 6.3 基于es api进行查询的注意事项
    • 6.4 集群部署
      • 6.4.1 es规划
        • 索引的生命周期
      • 6.4.2 安装
      • 6.4.3 elasticsearch配置
      • 6.4.4 logstash配置
      • 6.4.5 kibana配置
      • 6.4.6 enable-xpack
        • 6.4.6.1 X-Pack on Elasticsearch
        • 6.4.6.2 X-Pack on Logstash
        • 6.4.6.3 X-Pack on Kibana
        • 6.4.6.4 xpack破解
        • 6.4.6.5 LDAP user authentication
      • 6.4.7 Cerebro configuration
      • 6.4.8 Curator configuration
    • 6.10 备份恢复
  • 7.0 kuberbetes服务暴露Ingress篇
    • 7.1 Ingress规划
    • 7.2 Traefik ingress controller
      • 7.2.1 Traefik配置详解
      • 7.2.2 Traefik部署
      • 7.2.3 分场景使用示例
      • 7.2.4 Traefik功能示例
      • 7.2.5 Traefik日志收集
      • 7.2.6 https证书更新
    • 7.3 Nginx ingress controller
      • 7.3.1 Nginx 配置详解
      • 7.3.2 Nginx 部署
      • 7.3.3 使用示例
    • 7.4 ingress日常运维
  • 8.0 kubernetes监控篇
    • 8.1 prometheus非k8s部署
    • 8.2 prometheusk8s部署
    • 8.3 prometheus 配置文件详解
    • 8.3 prometheus alertmanager
  • 9.0 kubernetes配置管理篇
  • 10.0 权威DNS篇
    • 10.1 PowerDNS安装部署
    • 10.1 PowerDNS zone设置
由 GitBook 提供支持
在本页
  • 02.向 etcd 写入集群 Pod 网段信息
  • 03.使用systemd管理flanneld
  • 04.启动flannel
  • 05.检查分配给各 flanneld 的 Pod 网段信息
  • 06.检查节点网络
  • 07.检查生成子网文件
  • Q&A

这有帮助吗?

  1. 2. kubernetes集群部署篇
  2. 2.0 kubernetes手动安装概览
  3. 205 Node节点部署及维护

2051 Flannel部署及维护

kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通。flannel 使用 vxlan 技术为各节点创建一个可以互通的 Pod 网络,使用的端口为 UDP 8472。

flanneld 第一次启动时,从 etcd 获取配置的 Pod 网段信息,为本节点分配一个未使用的地址段,然后创建 flannedl.1 网络接口。

flannel 将分配给自己的 Pod 网段信息写入 /run/flannel/docker 文件,docker 后续使用这个文件中的环境变量设置 docker0 网桥,从而从这个地址段为本节点的所有 Pod 容器分配 IP。

注意: flanneld 与 docker 结合使用;

01.下载和分发 flanneld 二进制文件

mkdir -p /srv/kubernetes/cni/bin/flannel
mkdir -p /srv/kubernetes/cni/net.d
wget https://github.com/coreos/flannel/releases/download/v0.12.0/flannel-v0.12.0-linux-amd64.tar.gz
tar -xzvf flannel-v0.11.0-linux-amd64.tar.gz -C bin/flannel

02.向 etcd 写入集群 Pod 网段信息

写入的 Pod 网段 ${CLUSTER_CIDR} 地址段(如 /16)必须小于 SubnetLen,必须与 kube-controller-manager 的 --cluster-cidr 参数值一致;

etcd 使用ETCDCTL_API=2, 并确定etcd集群支持V2版本的api

$ ETCDCTL_API=2

$ alias etcdctl2="ETCDCTL_API=2 && /srv/kubernetes/bin/etcdctl --endpoints=https://10.40.58.153:2379,https://10.40.58.154:2379,https://10.40.61.116:2379  --cert-file=/srv/kubernetes/pki/etcd.pem --key-file=/srv/kubernetes/pki/etcd-key.pem  --ca-file /srv/kubernetes/pki/ca.pem"

$ etcdctl2 mkdir /coreos.com/network

$ etcdctl2  mk /coreos.com/network/config '{"Network":"10.243.0.0/16","SubnetLen":21,"Backend":{"Type":"vxlan"}}'

$ etcdctl2 get /coreos.com/network/config

03.使用systemd管理flanneld

export ETCD_ENDPOINTS='https://10.40.61.116:2379,https://10.40.58.153:2379,https://10.40.58.154:2379'

export FLANNEL_ETCD_PREFIX='/coreos.com/network'

cat > 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=/srv/kubernetes/cni/bin/flanneld \\
  -etcd-cafile=/srv/kubernetes/pki/ca.pem \\
  -etcd-certfile=/srv/kubernetes/pki/etcd.pem \\
  -etcd-keyfile=/srv/kubernetes/pki/etcd-key.pem \\
  -etcd-endpoints=${ETCD_ENDPOINTS} \\
  -etcd-prefix=${FLANNEL_ETCD_PREFIX} \\
  -ip-masq
ExecStartPost=/opt/k8s/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS  -d /run/flannel/docker
Restart=always
RestartSec=5
StartLimitInterval=0

[Install]
WantedBy=multi-user.target
RequiredBy=docker.service
EOF

04.启动flannel

systemctl daemon-reload
systemctl enable flanneld
systemctl start flanneld
systemctl status flanneld

05.检查分配给各 flanneld 的 Pod 网段信息

查看集群 Pod 网段(/16)

etcdctl2 get /coreos.com/network/config

输出:

{"Network":"10.243.0.0/16","SubnetLen":21,"Backend":{"Type":"vxlan"}}

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

etcdctl2 ls /coreos.com/network/subnets

输出:

/coreos.com/network/subnets/10.243.104.0-21
/coreos.com/network/subnets/10.243.128.0-21
/coreos.com/network/subnets/10.243.8.0-21

查看某一Pod网段对应的节点IP和flannel接口地址

etcdctl2 get /coreos.com/network/subnets/10.243.8.0-21

输出:

{"PublicIP":"10.40.58.154","BackendType":"vxlan","BackendData":> {"VtepMAC":"e6:b5:ae:55:96:f4"}}

10.243.8.0/21 被分配给节点10.40.58.154; VtepMAC 为10.40.58.154点的 flannel.1 网卡 MAC 地址;

06.检查节点网络

$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:3e:10:b5:e3 brd ff:ff:ff:ff:ff:ff
    inet 10.40.58.153/22 brd 10.40.59.255 scope global dynamic eth0
       valid_lft 313466837sec preferred_lft 313466837sec
3: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN
    link/ether 0e:f3:ba:47:04:40 brd ff:ff:ff:ff:ff:ff
    inet 10.243.128.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever

flannel.1 网卡的地址为分配的 Pod 子网段的第一个 IP(.0),且是 /32 的地址;

$ ip route show |grep flannel.1
10.243.8.0/21 via 10.243.8.0 dev flannel.1 onlink
10.243.104.0/21 via 10.243.104.0 dev flannel.1 onlink

到其它节点 Pod 网段请求都被转发到 flannel.1 网卡; flanneld 根据 etcd 中子网段的信息,如 $/coreos.com/network/subnets/10.243.128.0-21 ,来决定进请求发送给哪个节点的互联 IP;

07.检查生成子网文件

使用systemctl命令启动flanneld后,会自动执行mk-docker-opts.sh生成如下两个文件环境变量文件:

  • /run/flannel/subnet.env

FLANNEL_NETWORK=10.243.0.0/16
FLANNEL_SUBNET=10.243.104.1/21
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
  • /run/flannel/docker

DOCKER_OPT_BIP="--bip=10.243.104.1/21"
DOCKER_OPT_IPMASQ="--ip-masq=false"
DOCKER_OPT_MTU="--mtu=1450"
DOCKER_OPTS=" --bip=10.243.104.1/21 --ip-masq=false --mtu=1450"

Docker将会读取这两个环境变量文件作为容器启动参数。

Q&A

```

上一页205 Node节点部署及维护下一页2052 kubernetes runtime部署及维护

最后更新于5年前

这有帮助吗?