Kubernetes+flannnel部署

一、kubernetes(以下簡(jiǎn)稱k8s)和相關(guān)服務(wù)介紹

1.etcd:

  • key-value鍵值存儲(chǔ)數(shù)據(jù)庫(kù),用來(lái)存儲(chǔ)kubernetes的信息。

2.flannel:

  • Flannel 是 CoreOS 團(tuán)隊(duì)針對(duì) Kubernetes 設(shè)計(jì)的一個(gè)覆蓋網(wǎng)絡(luò)(Overlay Network)工具,需要另外下載部署。我們知道當(dāng)我們啟動(dòng) Docker 后會(huì)有一個(gè)用于和容器進(jìn)行交互的 IP 地址,如果不去管理的話可能這個(gè) IP 地址在各個(gè)機(jī)器上是一樣的,并且僅限于在本機(jī)上進(jìn)行通信,無(wú)法訪問(wèn)到其他機(jī)器上的 Docker 容器。Flannel 的目的就是為集群中的所有節(jié)點(diǎn)重新規(guī)劃 IP 地址的使用規(guī)則,從而使得不同節(jié)點(diǎn)上的容器能夠獲得同屬一個(gè)內(nèi)網(wǎng)且不重復(fù)的 IP 地址,并讓屬于不同節(jié)點(diǎn)上的容器能夠直接通過(guò)內(nèi)網(wǎng) IP 通信。

3.k8s master 組件:

  • Kubernetes 集群中主要存在兩種類型的節(jié)點(diǎn),分別是 master 節(jié)點(diǎn),以及 minion 節(jié)點(diǎn)。Minion 節(jié)點(diǎn)是實(shí)際運(yùn)行 Docker 容器的節(jié)點(diǎn),負(fù)責(zé)和節(jié)點(diǎn)上運(yùn)行的 Docker 進(jìn)行交互,并且提供了代理功能。
  • Master 節(jié)點(diǎn)負(fù)責(zé)對(duì)外提供一系列管理集群的 API 接口,并且通過(guò)和 Minion 節(jié)點(diǎn)交互來(lái)實(shí)現(xiàn)對(duì)集群的操作管理。整體架構(gòu)圖如下:

(1) kubectl

  • 客戶端命令行工具,將接受的命令格式化后發(fā)送給kube-apiserver,作為整個(gè)系統(tǒng)的操作入口。

(2) kube-apiserver

  • 作為整個(gè)系統(tǒng)的控制入口,以REST API服務(wù)提供接口。用戶和 kubernetes 集群交互的入口,封裝了核心對(duì)象的增刪改查操作,提供了 RESTFul 風(fēng)格的 API 接口,通過(guò) etcd 來(lái)實(shí)現(xiàn)持久化并維護(hù)對(duì)象的一致性。

(3) kube-controller-manager

  • 用來(lái)執(zhí)行整個(gè)系統(tǒng)中的后臺(tái)任務(wù),包括節(jié)點(diǎn)狀態(tài)狀況、Pod個(gè)數(shù)、Pods和Service的關(guān)聯(lián)等。主要是用于保證 replicationController 定義的復(fù)制數(shù)量和實(shí)際運(yùn)行的 pod 數(shù)量一致,另外還保證了從 service 到 pod 的映射關(guān)系總是最新的。

(4)kube-scheduler

  • 負(fù)責(zé)節(jié)點(diǎn)資源管理,接受來(lái)自kube-apiserver創(chuàng)建Pods任務(wù),并分配到某個(gè)節(jié)點(diǎn)。負(fù)責(zé)集群資源的調(diào)度和管理,例如當(dāng)有 pod 異常退出需要重新分配機(jī)器時(shí),scheduler 通過(guò)一定的調(diào)度算法從而找到最合適的節(jié)點(diǎn)。

4.k8s minion組件 :

(1) kube-proxy

運(yùn)行在每個(gè)計(jì)算節(jié)點(diǎn)上,負(fù)責(zé)Pod網(wǎng)絡(luò)代理。定時(shí)從etcd獲取到service信息來(lái)做相應(yīng)的策略。運(yùn)行在 minion 節(jié)點(diǎn),負(fù)責(zé)為 pod 提供代理功能,會(huì)定期從 etcd 獲取 service 信息,并根據(jù) service 信息通過(guò)修改 iptables 來(lái)實(shí)現(xiàn)流量轉(zhuǎn)發(fā)(最初的版本是直接通過(guò)程序提供轉(zhuǎn)發(fā)功能,效率較低。),將流量轉(zhuǎn)發(fā)到要訪問(wèn)的 pod 所在的節(jié)點(diǎn)上去。

(2) kubelet

運(yùn)行在每個(gè)計(jì)算節(jié)點(diǎn)上,作為agent負(fù)責(zé)和節(jié)點(diǎn)上的 Docker 交互,例如啟停容器,監(jiān)控運(yùn)行狀態(tài)等。接受分配該節(jié)點(diǎn)的Pods任務(wù)及管理容器,周期性獲取容器狀態(tài),反饋給kube-apiserver。

二、kubernetes 部署

1.安裝前工作:

(1)清理其它docker版本和依賴軟件:

yum -y remove docker
yum -y remove docker-selinux
yum remove docker-common-1.10.3-46.el7.centos.14.x86_64 -y
yum remove docker-common -y

2.安裝k8s master

yum install etcd
yum install kubernetes-master docker
  • 安裝kubernetes-node 會(huì)自動(dòng)依賴安裝docker,所以可以在kubernetes-master上先安裝kubernetes-node,借此安裝docker然后在卸載kubernetes-node。

  • etcd配置:

# vim /etc/etcd/etcd.conf  將以下幾行進(jìn)行修改,完成后保存退出。
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://10.13.32.223:2379"

ETCD參數(shù)說(shuō)明
重要的參數(shù)用途:

—data-dir 指定節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)目錄,這些數(shù)據(jù)包括節(jié)點(diǎn)ID,集群ID,集群初始化配置,Snapshot文件,若未指定—wal-dir,還會(huì)存儲(chǔ)WAL文件;
—wal-dir 指定節(jié)點(diǎn)的was文件的存儲(chǔ)目錄,若指定了該參數(shù),wal文件會(huì)和其他數(shù)據(jù)文件分開(kāi)存儲(chǔ)。
—name 節(jié)點(diǎn)名稱
—initial-advertise-peer-urls 告知集群其他節(jié)點(diǎn)url.
— listen-peer-urls 監(jiān)聽(tīng)URL,用于與其他節(jié)點(diǎn)通訊
— advertise-client-urls 告知客戶端url, 也就是服務(wù)的url
— initial-cluster-token 集群的ID
— initial-cluster 集群中所有節(jié)點(diǎn)

k8s 配置1:

#vim /etc/kubernetes/apiserver
KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.17.101:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.73.18.0/24"

k8s 配置2:

#vim /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--node-monitor-grace-period=10s --pod-eviction-timeout=10s"

k8s 配置3:

#vim /etc/kubernetes/config
 KUBE_MASTER="--master=http://192.168.17.101:8080"

啟動(dòng)順序:

systemctl enable etcd
systemctl enable kube-apiserver kube-scheduler kube-controller-manager
systemctl start etcd
systemctl start kube-apiserverkube-schedulerkube-controller-manager

最后還要執(zhí)行命令:

etcdctl mk/coreos.com/network/config'{"Network": “192.168.1.0/24" }'

這個(gè)不設(shè)置會(huì)導(dǎo)致后面flanneld起不來(lái),進(jìn)而導(dǎo)致docker啟動(dòng)不了

3.安裝k8s minion:

yum install flannel
yum install kubernetes-node

docker會(huì)自動(dòng)安裝
安裝kubernetes-node 會(huì)自動(dòng)依賴安裝docker)
安裝flannel:(k8s master 可以用不用安裝)
Flannel是CoreOS團(tuán)隊(duì)針對(duì)Kubernetes設(shè)計(jì)的一個(gè)網(wǎng)絡(luò)規(guī)劃服務(wù),簡(jiǎn)單來(lái)說(shuō),它的功能是讓集群中的不同節(jié)點(diǎn)主機(jī)創(chuàng)建的Docker容器都具有全集群唯一的虛擬IP地址。

  • flannel配置2:
#vim /etc/sysconfig/flanneld
FLANNEL_ETCD="http://10.13.32.223:2379"
FLANNEL_ETCD_KEY="/coreos.com/network"
  • k8s minion配置1:
    kubernetes node配置文件進(jìn)行修改:
#vim /etc/kubernetes/config
KUBE_MASTER="--master=http://10.13.32.223:8080"
  • k8s minion配置2:
#vim /etc/kubernetes/kubelet`
KUBELET_HOSTNAME="--hostname_override=10.73.18.81"
KUBELET_API_SERVER="--api_servers=http://10.13.32.223:8080"
啟動(dòng)順序:(非常關(guān)鍵)
  • 先啟動(dòng)docker:
systemctl enable docker
systemctl start docker
  • 再啟動(dòng)flannel:
systemctl enable flanneld.service
systemctl restart flanneld.service
  • 重啟docker:
systemctl restart docker
  • 啟動(dòng)kubelete 和kube-proxy服務(wù):
systemctl enable kubelet kube-proxy
systemctl start kubelet kube-proxy

三、注意事項(xiàng)

1.etcd 需要初始化網(wǎng)段信息

安裝完etcd服務(wù)后,還要執(zhí)行命令:

etcdctl mk/coreos.com/network/config'{"Network": “192.168.1.0/24" }'
  • 因?yàn)閒lannel 會(huì)依賴etcd的容器網(wǎng)段信息,這個(gè)不設(shè)置會(huì)導(dǎo)致后面flanneld起不來(lái),進(jìn)而導(dǎo)致docker啟動(dòng)不了。

2.etcd 集群模式啟動(dòng)配置

/usr/lib/systemd/system/etcd.service文件中通過(guò)systemd啟動(dòng):

  • docker 和k8s minion(安裝命令為yum install kubernetes-node) 會(huì)有依賴關(guān)系,安裝最好通過(guò)yum 命令來(lái)安裝讓其自動(dòng)解決。
  • 或者通過(guò)二進(jìn)制文件進(jìn)行安裝,即從git-hub上下載編譯好的k8s,把k8s組件的各個(gè)二進(jìn)制文件拷貝到對(duì)應(yīng)的master和minion上,即可使用。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Kubernetes作為容器應(yīng)用的管理中心,通過(guò)對(duì)Pod的數(shù)量進(jìn)行監(jiān)控,并且根據(jù)主機(jī)或容器失效的狀態(tài)將新的Pod調(diào)...
    輝耀輝耀閱讀 4,687評(píng)論 0 13
  • docker實(shí)現(xiàn)了更便捷的單機(jī)容器虛擬化的管理, docker的位置處于操作系統(tǒng)層與應(yīng)用層之間; 相對(duì)傳統(tǒng)虛擬化(...
    Harvey_L閱讀 20,159評(píng)論 3 44
  • 安裝k8s Master高可用集群 主機(jī) 角色 組件 172.18.6.101 K8S Master Kubele...
    jony456123閱讀 8,171評(píng)論 0 9
  • 這是一部大衛(wèi)芬奇風(fēng)格的,探索生活本意的黑色幽默片。 愛(ài)德華·諾頓扮演的被病態(tài)社會(huì)逼到精神分裂的汽車公司職員,是現(xiàn)實(shí)...
    孫亦川閱讀 1,075評(píng)論 1 5
  • 世上笑話太多,虧我早已看破,蹉跎。 人間閑言太多,可憐風(fēng)雨不盛,泡沫。 身邊慨嘆太多,曉鐘暮鼓求索,苛責(zé)。 前路迷...
    ToyIHere閱讀 188評(píng)論 0 1

友情鏈接更多精彩內(nèi)容