<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Kubernetes網絡部署方案

馬哥Linux運維 ? 來源:未知 ? 作者:李倩 ? 2018-03-21 16:18 ? 次閱讀

現在網絡上流傳很多Kubernetes的部署和搭建的文檔,其中比較出名就是Kubernetes The Hard Way

還有基于這個翻譯和衍生的版本follow-me-install-kubernetes-cluster

這兩篇文章帶我走過了Kubernetes的搭建的童年,我第一搭建成功就是抄襲的張俊的follow-me-install-kubernetes-cluster,然后隨著新版的發展,越來越多的配置參數存在各種各樣的問題,最大的問題是在CNI產生后,兩篇文章的配置參數和系統默認或者CNI配置參數有稍微的沖突導致很多人在利用CNI做網絡方案的時候會出現很多問題,這篇文章目的第一是向兩位前輩致敬,第二是共享下在Flanneld和Calico部署過程中遇到挫折和問題。

為啥只說明以下兩種方案的部署模式,因為其他網絡方案不爭氣。

Flanneld [Systemd部署模式]

Flannel部署相對來說簡單容易、坑少,直接上配置。

flannel.service

[Unit]Description=Flanneld overlay address etcd agentAfter=network.targetAfter=network-online.targetWants=network-online.targetBefore=docker.service[Service]Type=notifyExecStart=/usr/local/bin/flanneld -etcd-cafile=/etc/kubernetes/ssl/ca.pem -etcd-certfile=/etc/kubernetes/ssl/kubernetes.pem -etcd-keyfile=/etc/kubernetes/ssl/kubernetes-key.pem -etcd-endpoints=https://{Etcd IP}:2379 -iface=ens3 --ip-masqRestart=on-failure[Install]WantedBy=multi-user.targetRequiredBy=docker.service

記住一定要提前在etcd把你的backend寫進去。

HOST-GW的配置:

etcdctl --endpoints=https://{Etcd-IP}:2379 --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem set /coreos.com/network/config '{"Network":"'10.200.0.0/16'", "SubnetLen": 24, "Backend": {"Type":"host-gw"}}'

VXLAN的配置:

etcdctl --endpoints=https://{Etcd-IP}:2379 --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem set /coreos.com/network/config '{"Network":"'10.200.0.0/16'", "SubnetLen": 24, "Backend": {"Type":"vxlan"}}'

然后可以開始你的表演,如果你創建2個pod,互ping一下發現不通,你部署DNS服務,一直報錯no route to host(就是Kubernetes那個SVC對應的IP),恭喜你,你下面要做的就是:

iptables -P FORWARD ACCEPT

因為1.13版本以上Docker好似在iptable寫了這么一條策略:

iptables -P FORWARD DROP

到此為止你起來Flanneld就可以開始你的Kubernetes之旅,當然現在好似還不行記得在/etc/cni/net.d下寫一個.conf結尾的文件,當然叫什么名字無所謂。etc:

10-flanneld-cni.conf

{ "name": "cbr0", "type": "flannel", "delegate": { "isDefaultGateway": true }}

然后繼續你的表演就可以了。

Calico [Systemd部署模式]

其實吧,Calico在Kubernetes網絡方案用用的比Flanneld多,Calico懂得玩伸縮,技術也比較牛,在很多物理設備不開啟BGP的情況下做了折中,用的IP-IP雖然性能有點損失,在云上被大面積使用。Flanneld的host-gw模式性能雖然不錯,但是只能在2層玩下,過了二層路由被重寫就GG了。

開始表演IP-IP模式。

第一步創建IPpool,pool就是所有calico分配ip的池子,其實就是Kubernetes的pool,不過Calico分配出來是/26的IP,一下少很多。其實我覺得/26比較符合機器配置的現狀至少,不會造成IP的浪費。

設置pool

calicoctl apply -f - << EOFapiVersion: v1kind: ipPoolmetadata:cidr: 10.200.0.0/16spec:ipip:enabled: truemode: cross-subnetnat-outgoing: trueEOF

部署calico-node(其實就2個文件)

calico.env

ETCD_ENDPOINTS="https://{ETCD1}:2379,https://{ETCD2}:2379"ETCD_CA_FILE="/etc/kubernetes/ssl/ca.pem"ETCD_CERT_FILE="/etc/kubernetes/ssl/kubernetes.pem"ETCD_KEY_FILE="/etc/kubernetes/ssl/kubernetes-key.pem"CALICO_NODENAME="node46"CALICO_NO_DEFAULT_POOLS=""CALICO_IP="{HOST-IP}"CALICO_IP6=""CALICO_AS=""CALICO_LIBNETWORK_ENABLED=trueCALICO_NETWORKING_BACKEND=bird

calico.service[Unit]Description=calico-nodeAfter=docker.serviceRequires=docker.service[Service]EnvironmentFile=/etc/calico/calico.envExecStartPre=-/usr/bin/docker rm -f calico-nodeExecStart=/usr/bin/docker run --net=host --privileged --name=calico-node -e NODENAME=${CALICO_NODENAME} -e IP=${CALICO_IP} -e IP6=${CALICO_IP6} -e CALICO_NETWORKING_BACKEND=${CALICO_NETWORKING_BACKEND} -e CALICO_STARTUP_LOGLEVEL=DEBUG -e NO_DEFAULT_POOLS=${CALICO_NO_DEFAULT_POOLS} -e FELIX_DEFAULTENDPOINTTOHOSTACTION=ACCEPT -e CALICO_LIBNETWORK_ENABLED=${CALICO_LIBNETWORK_ENABLED} -e ETCD_ENDPOINTS=${ETCD_ENDPOINTS} -e ETCD_CA_CERT_FILE=/etc/kubernetes/ssl/ca.pem -e ETCD_CERT_FILE=/etc/kubernetes/ssl/kubernetes.pem -e ETCD_KEY_FILE=/etc/kubernetes/ssl/kubernetes-key.pem -v /var/log/calico:/var/log/calico -v /run/docker/plugins:/run/docker/plugins -v /lib/modules:/lib/modules -v /var/run/calico:/var/run/calico -v /etc/kubernetes/ssl/:/etc/kubernetes/ssl/:ro quay.io/calico/node:v2.4.0ExecStop=-/usr/bin/docker stop calico-node[Install]WantedBy=multi-user.target

CNI配置文件(/etc/cni/net.d下隨便寫一個.conf結尾的文件)

calico.conf

{"name": "k8s-pod-network","cniVersion": "0.1.0","type": "calico","etcd_endpoints": "https://{ETCD1},https://{ETCD2}:2379","etcd_key_file": "/etc/kubernetes/ssl/kubernetes-key.pem","etcd_cert_file": "/etc/kubernetes/ssl/kubernetes.pem","etcd_ca_cert_file": "/etc/kubernetes/ssl/ca.pem","log_level": "info","ipam": { "type": "calico-ipam" },"kubernetes": { "kubeconfig": "/etc/kubernetes/kube-proxy.kubeconfig"}}

然后你就可以裝逼了,記得把CNI的組件calico-ipam放到/opt/cni/bin。

RR部署模式

其實就是在以上的基礎上多部署一個RR容器。

docker run --privileged --net=host -d -e IP={HOST-IP} -e ETCD_ENDPOINTS=https://{ETCD}:2379 -e ETCD_CA_CERT_FILE=/etc/kubernetes/ssl/ca.pem -e ETCD_CERT_FILE=/etc/kubernetes/ssl/kubernetes.pem -e ETCD_KEY_FILE=/etc/kubernetes/ssl/kubernetes-key.pem -v /etc/kubernetes/ssl:/etc/kubernetes/ssl:ro calico/routereflector:v0.4.0

然后把這個IP寫到etcd里。

curl --cacert /etc/kubernetes/ssl/ca.pem --cert /etc/kubernetes/ssl/kubernetes.pem --key /etc/kubernetes/ssl/kubernetes-key.pem -L https://{ETCD}:2379/v2/keys/calico/bgp/v1/rr_v4/{HOST-IP} -XPUT -d value="{"ip":"{HOST-IP}","cluster_id":"1.0.0.2"}

然后就是創建一個全局的BGPpeer。

cat << EOF | calicoctl delete -f -apiVersion: v1kind: bgpPeermetadata:peerIP: {HOST-IP}scope: globalspec:asNumber: 64567EOF

關閉 node-to-node mesh。

calicoctl config set nodeToNodeMesh off

重新啟動你所有的calico-node。

附一份calicoctl的配置文件(在/etc/calico下)

calicoctl.cfg

apiVersion: v1kind: calicoApiConfigmetadata:spec:etcdEndpoints: https://{ETCD}:2379etcdKeyFile: /etc/kubernetes/ssl/kubernetes-key.pemetcdCertFile: /etc/kubernetes/ssl/kubernetes.pemetcdCACertFile: /etc/kubernetes/ssl/ca.pem

開始你的裝逼之旅吧。

關于calico-bgp有硬件的自己嘗試吧。

附一份非標準的kube-proxy.service

[Unit]Description=Kubernetes Kube ProxyDocumentation=https://github.com/GoogleCloudPlatform/kubernetes[Service]ExecStart=/usr/local/bin/kube-proxy --hostname-override={HOST-IP} --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig --v=2Restart=on-failureRestartSec=5[Install]WantedBy=multi-user.target

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 網絡
    +關注

    關注

    14

    文章

    7280

    瀏覽量

    87706
  • kubernetes
    +關注

    關注

    0

    文章

    219

    瀏覽量

    8596

原文標題:Kubernetes網絡部署方案

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Kubernetes的Device Plugin設計解讀

    摘要: Kubernetes的生態地位已經確立,可擴展性將是其發力的主戰場。異構計算作為非常重要的新戰場,Kubernetes非常重視。而異構計算需要強大的計算力和高性能網絡,需要提供一種統一的方式
    發表于 03-12 16:23

    Kubernetes Ingress 高可靠部署最佳實踐

    摘要: 在Kubernetes集群中,Ingress作為集群流量接入層,Ingress的高可靠性顯得尤為重要,今天我們主要探討如何部署一套高性能高可靠的Ingress接入層。簡介
    發表于 04-17 14:35

    阿里云宣布推出Serverless Kubernetes服務 30秒即可完成應用部署

    ,而是更專注在編寫應用程序邏輯上。據悉,在Serverless Kubernetes模式下,開發者只需指明應用容器鏡像、CPU和內存需求,選定對外服務模式,即可直接啟動應用程序,敏捷便利部署于包括web
    發表于 05-03 15:38

    阿里云容器Kubernetes監控(二) - 使用Grafana展現Pod監控數據

    摘要: 簡介 在kubernetes的監控方案中,Heapster+Influxdb+Grafana的組合相比prometheus等開源方案而言更為簡單直接。而且Heapster在
    發表于 05-10 15:28

    再次升級!阿里云Kubernetes日志解決方案

    摘要: 今天阿里云Kubernetes日志解決方案再次升級,為您帶來以下改進: 1、極致部署體驗:只需一條命令一個參數即可完成整個K8S集群的日志解決方案
    發表于 05-28 19:08

    不吹不黑,今天我們來聊一聊 Kubernetes 落地的三種方式

    ,沒有標準的套路,只有符合自己的方案。例如美團點評結合自己已有的設施在 Kubernetes 上構建了 HULK2.0 系統,在存儲、網絡、負載生命周期管理以及應用監控等方面做了本地化改造,但是仍然保持
    發表于 10-12 16:07

    kubernetes部署與應用

    kubernetes運維筆記
    發表于 10-25 13:08

    kubernetes v112二進制方式集群部署

    kubernetes v112 二進制方式集群部署
    發表于 05-05 16:30

    請問鴻蒙系統上可以部署kubernetes集群嗎?

    鴻蒙系統上可以部署kubernetes集群嗎
    發表于 06-08 11:16

    如何部署基于Mesos的Kubernetes集群

    kubernetes是一個跨多個計算節點的管理容器化應用的系統,它提供了一系列基本的功能,如應用的自動化部署,維護和擴展等。Mesos是Apache下的開源分布式資源管理框架,它被稱為是分布式系統
    發表于 10-09 18:04 ?0次下載
    如何<b class='flag-5'>部署</b>基于Mesos的<b class='flag-5'>Kubernetes</b>集群

    如何在 Intellij IDEA 更高效地將應用部署到容器服務 Kubernetes

    前言 在之前的一篇文章中,我們介紹了? 如何將一個本地的 Java 應用程序直接部署到阿里云 ECS? ,有不少讀者反饋,如果目前已經在使用阿里云容器服務 Kubernetes 了,那該如何配合這個
    發表于 12-28 16:06 ?332次閱讀
    如何在 Intellij IDEA 更高效地將應用<b class='flag-5'>部署</b>到容器服務 <b class='flag-5'>Kubernetes</b>

    如何解決Kubernetes部署故障及技巧

    Kubernetes資源配置中的錯誤,例如在部署(Deployment)和服務(Service)里。
    發表于 05-04 07:12 ?550次閱讀
    如何解決<b class='flag-5'>Kubernetes</b>中<b class='flag-5'>部署</b>故障及技巧

    入門炫酷的Kubernetes網絡方案

    ,它的先見之名是否能轉成優勢,繼而成為 CNI 新的頭牌呢?今天我們一起來入門最 Cool Kubernetes 網絡方案 Cilium。 Cilium介紹 以下基于 Cilium官網文檔翻譯整理。 當前趨勢
    的頭像 發表于 10-13 15:19 ?1219次閱讀

    Kubernetes網絡模型的基礎知識

    Kubernetes 是為運行分布式集群而建立的,分布式系統的本質使得網絡成為 Kubernetes 的核心和必要組成部分,了解 Kubernetes
    的頭像 發表于 07-20 09:46 ?968次閱讀

    Kubernetes的集群部署

    Kubeadm是一種Kubernetes集群部署工具,通過kubeadm init命令創建master節點,通過 kubeadm join命令把node節點加入到集群中
    的頭像 發表于 02-15 10:35 ?1145次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>