kubernetes實踐之四:Flannel網路外掛安裝
Flannel是CoreOS團隊針對Kubernetes設計的一個網路規劃服務,簡單來說,它的功能是讓叢集中的不同節點主機建立的Docker容器都具有全叢集唯一的虛擬IP地址。
在Kubernetes的網路模型中,假設了每個物理節點應該具備一段“屬於同一個內網IP段內”的“專用的子網IP”。例如:
節點1:10.1.46.0-24
節點2:10.1.77.0-24
但在預設的Docker配置中,每個節點上的Docker服務會分別負責所在節點容器的IP分配。這樣導致的一個問題是,不同節點上容器可能獲得相同的內外IP地址。並使這些容器之間能夠之間透過IP地址相互找到,也就是相互ping通。
Flannel的設計目的就是為叢集中的所有節點重新規劃IP地址的使用規則,從而使得不同節點上的容器能夠獲得“同屬一個內網”且”不重複的”IP地址,並讓屬於不同節點上的容器能夠直接透過內網IP通訊。
所有的node節點都需要安裝?絡外掛才能讓所有的Pod加入到同一個區域網中。
二:Flannel工作原理
Flannel實質上是一種“覆蓋網路(overlay network)”,也就是將TCP資料包裝在另一種網路包裡面進行路由轉發和通訊,目前已經支援UDP、VxLAN、AWS VPC和GCE路由等資料轉發方式。
1. 資料從源容器中發出後,經由所在主機的docker0虛擬網路卡轉發到flannel0虛擬網路卡,這是個P2P的虛擬網路卡,flanneld服務監聽在網路卡的另外一端。
2.Flannel透過Etcd服務維護了一張節點間的路由表。
3. 源主機的flanneld服務將原本的資料內容UDP封裝後根據自己的路由表投遞給目的節點的flanneld服務,資料到達以後被解包,然後直接進入目的節點的flannel0虛擬網路卡,然後被轉發到目的主機的docker0虛擬網路卡,最後就像本機容器通訊一下的有docker0路由到達目標容器。
三:Flannel的安裝與配置
1.透過yum install flannel安裝
2.service配置?件 /usr/lib/systemd/system/flanneld.service
點選(此處)摺疊或開啟
-
[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
-
EnvironmentFile=/etc/sysconfig/flanneld
-
EnvironmentFile=-/etc/sysconfig/docker-network
-
ExecStart=/usr/bin/flanneld-start -etcd-endpoints=${FLANNEL_ETCD_ENDPOINTS} -etcd-prefix=${FLANNEL_ETCD_PREFIX} $FLANNEL_OPTIONS
-
ExecStartPost=/usr/libexec/flannel/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
-
Restart=on-failure
-
-
[Install]
-
WantedBy=multi-user.target
- RequiredBy=docker.service
點選(此處)摺疊或開啟
-
# Flanneld configuration options
-
-
# etcd url location. Point this to the server where etcd runs
-
FLANNEL_ETCD_ENDPOINTS=""
-
-
# etcd config key. This is the configuration key that flannel queries
-
# For address range assignment
-
FLANNEL_ETCD_PREFIX="/kube-centos/network"
-
-
# Any additional options that you want to pass
- FLANNEL_OPTIONS="-etcd-cafile=/etc/kubernetes/ssl/ca.pem -etcd-certfile=/etc/kubernetes/ssl/kubernetes.pem -etcd-keyfile=/etc/kubernetes/ssl/kubernetes-key.pem"
點選(此處)摺疊或開啟
- etcdctl --endpoints=https://10.116.137.196:2379,https://10.116.82.28:2379,https://10.116.36.57:2379 --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem mk /kube-centos/network/config '{"Network":"10.1.37.0/16","SubnetLen":24,"Backend":{"Type":"vxlan"}}'
systemctl daemon-reload
systemctl enable flanneld
systemctl start flanneld
systemctl status flanneld
檢視
點選(此處)摺疊或開啟
- etcdctl --endpoints=https://10.116.137.196:2379,https://10.116.82.28:2379,https://10.116.36.57:2379 --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem ls /kube-centos/network/subnets
點選(此處)摺疊或開啟
- etcdctl --endpoints=https://10.116.137.196:2379,https://10.116.82.28:2379,https://10.116.36.57:2379 --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem get /kube-centos/network/subnets/10.1.46.0-24
因為採用的是阿里雲ECS伺服器,這裡的PublicIP設定的是ECS的公網IP(
etcdctl set /flannel/network/subnets/10.1.46.0-24 '{ "PublicIP": "120.25.220.176" }')
四:flannel啟動過程解析
flannel服務需要先於docker啟動。flannel服務啟動時主要做了以下幾步的工作:
從etcd中獲取network的配置資訊劃分subnet,並在etcd中進行註冊將子網資訊記錄到/run/flannel/subnet.env中
cat
/run/flannel/subnet.env
之後將會有一個指令碼將subnet.env轉寫成一個docker的環境變數檔案/run/flannel/docker
cat
/run/flannel/docker
systemctl show docker將會發現
在安裝flannel後自動生成配置
DropInPaths=/usr/lib/systemd/system/docker.service.d/flannel.conf
並引用
/run/flannel/docker
五: docker 配置
service檔案, /usr/lib/systemd/system/docker.service
點選(此處)摺疊或開啟
-
[Unit]
-
Description=Docker Application Container Engine
-
[Unit]
-
Description=Docker Application Container Engine
-
Documentation=http://docs.docker.com
-
After=network.target
-
Wants=docker-storage-setup.service
-
Requires=docker-cleanup.timer
-
-
[Service]
-
Type=notify
-
NotifyAccess=all
-
KillMode=process
-
EnvironmentFile=-/run/flannel/docker
-
EnvironmentFile=-/run/flannel/subnet.env
-
EnvironmentFile=-/etc/sysconfig/docker
-
EnvironmentFile=-/etc/sysconfig/docker-storage
-
EnvironmentFile=-/etc/sysconfig/docker-network
-
Environment=GOTRACEBACK=crash
-
Environment=DOCKER_HTTP_HOST_COMPAT=1
-
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
-
ExecStart=/usr/bin/dockerd \
-
--exec-opt native.cgroupdriver=systemd \
-
$DOCKER_OPT_BIP \
-
$DOCKER_OPT_IPMASQ \
-
$DOCKER_OPT_MTU \
-
-s=overlay \
-
--log-driver=json-file
-
ExecReload=/bin/kill -s HUP $MAINPID
-
LimitNOFILE=1048576
-
LimitNPROC=1048576
-
LimitCORE=infinity
-
TimeoutStartSec=0
-
Restart=on-abnormal
-
MountFlags=slave
-
-
[Install]
- WantedBy=multi-user.target
節點node1,node2上各啟動一個容器,驗證能否相互ping通
docker run -i -t centos /bin/bash
yum install net-tools -y
ifconfig
ping ip
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2151891/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ubuntu 16.04 下安裝kubernetes 1.6 之flannel網路模型Ubuntu模型
- Kubernetes網路分析之Flannel
- docker筆記31-網路外掛flannelDocker筆記
- Flannel和Calico網路外掛工作流程對比
- Kubernetes CNI網路外掛
- kubernetes實踐之六十八:部署 coredns 外掛DNS
- 四、建立覆蓋網路--Flannel
- 深入淺出Kubernetes網路:跨節點網路通訊之Flannel
- kubernetes實踐之五:網路模型模型
- GitOps實踐之kubernetes安裝argocdGitGo
- kubernetes實踐之五:Node節點安裝
- flannel網路在kubernetes中的運用
- 【kubernetes】網路虛擬網路卡對veth pair、flannel網路模型實現原理AI模型
- Activiti之eclipse外掛安裝Eclipse
- flannel網路概述
- Redmine外掛的安裝與解除安裝,知識庫外掛安裝。
- kubernetes容器網路介面(CNI) midonet網路外掛的設計與實現
- 從零開始實現ASP.NET Core MVC的外掛式開發(四) - 外掛安裝ASP.NETMVC
- retdec 外掛安裝
- Elasticsearch外掛安裝Elasticsearch
- VIM 外掛安裝
- vim實戰:外掛安裝(Vundle,NerdTree)
- kubernetes實踐之二十:網路原理
- flash外掛怎麼安裝 電腦安裝flash外掛步驟
- 修改公司網站 外掛,如何在公司網站後臺安裝和管理外掛網站
- ATOM 安裝外掛
- 如何安裝 Vim 外掛
- ubuntu 常用外掛安裝Ubuntu
- php常用外掛安裝PHP
- Sublime安裝PlantUML外掛
- Sublime使用,安裝外掛
- Python 外掛安裝Python
- vim 外掛的安裝
- vim外掛的安裝
- VS Code外掛安裝
- Flutter外掛開發之APK自動安裝FlutterAPK
- 059、安裝配置flannel(2019-03-28 週四)
- Kubernetes安裝之四:flanneld跨主機通訊