ubuntu 16.04下安裝kubernetes1.6(一)

wang_0720發表於2017-09-27

1 kubernetes 簡介

kubernetes是提供了一套元件來管理容器的叢集管理系統,kubernetes可以放便地管理跨主機執行的容器,可以對容器進行維護和擴充套件。

2 kubernetes核心元件

master端元件

2.1 apiserver

kubernetes系統的入口,封裝了核心物件的增刪改查操作,以RESTFul介面方式提供給外部客戶和內部元件呼叫。它維護的REST物件將持久化到etcd(一個分散式強一致性的key/value儲存)

2.2 controller-manager

負責執行各種控制器,目前有兩類:

endpoint-controller:定期關聯service和pod(關聯資訊由endpoint物件維護),保證service到pod的對映總是最新的。

replication-controller:定期關聯replicationController和pod,保證replicationController定義的複製數量與實際執行pod的數量總是一致的。

2.3 scheduler

負責叢集的資源排程,為新建的pod分配機器

2.4 etcd

提供pod,services等資訊的持久化儲存

minion端元件

2.5 kubelet

負責管控docker容器,如啟動/停止、監控執行狀態等。它會定期從etcd獲取分配到本機的pod,並根據pod資訊啟動或停止相應的容器。同時,它也會接收apiserver的HTTP請求,彙報pod的執行狀態

2.6 kube-proxy

負責為pod提供代理。它會定期從etcd獲取所有的service,並根據service資訊建立代理。當某個客戶pod要訪問其他pod時,訪問請求會經過本機proxy做轉發。

3 基本操作物件

3.1 pod

Kubernetes最基本的部署排程單元,可以包含一個或多個container,邏輯上表示某種應用的一個例項。比如一個web站點應用由前端、後端及資料庫構建而成,這三個元件將執行在各自的容器中,那麼我們可以建立包含三個container的pod。

3.2 service

是pod的路由代理抽象,用於解決pod之間的服務發現問題。因為pod的執行狀態可動態變化(比如切換機器了、縮容過程中被終止了等),所以訪問端不能以寫死IP的方式去訪問該pod提供的服務。service的引入旨在保證pod的動態變化對訪問端透明,訪問端只需要知道service的地址,由service來提供代理

3.3 replicationController

是pod的複製抽象,用於解決pod的擴容縮容問題。通常,分散式應用為了效能或高可用性的考慮,需要複製多份資源,並且根據負載情況動態伸縮。透過replicationController,我們可以指定一個應用需要幾份複製,Kubernetes將為每份複製建立一個pod,並且保證實際執行pod數量總是與該複製數量相等(例如,當前某個pod當機時,自動建立新的pod來替換)。

service和replicationController只是建立在pod之上的抽象,最終是要作用於pod的,那麼它們如何跟pod聯絡起來呢?這就要引入label的概念:label就是為pod加上可用於搜尋或關聯的一組key/value標籤,而service和replicationController正是透過label來與pod關聯的。建立service和replicationController時可以指定同樣的label:"xxx=yyy",再透過label selector機制,就將它們與這三個pod關聯起來了。

4 kubernetes安裝

4.1 環境準備


ubuntu 16.04下安裝kubernetes1.6(一)

4.2  用openvswitch GRE實現kubernetes的網路模型

利用openvswitch GRE通道實現跨主機間的容器通訊

分別在192.168.100.92和192.168.100.93上做下列操作

安裝openvswitch,bridge-utils,docker

apt-get install openvswitch-switch bridge-utils docker-engine

建立ovs bridge

ovs-vsctl add-br obr0

建立gre,並將新建的gre0新增到obr0

ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.100.93

在192.168.100.93上將remote_ip=192.168.100.93改為remote_ip=192.168.100.92

建立linux bridge

brctl addbr kbr0

新增obr0為kbr0的介面

brctl addif kbr0 obr0

設定docker0為down狀態

ip link set dev docker0 down

刪除docker0

ip link del dev docker0

為了是kbr0永久生效,在/etc/network/interfaces,新增如下語句

auto kbr0

iface kbr0 inet static

address 172.17.1.1

netmask 255.255.255.0

dns-nameservers 8.8.8.8

up route add -net 172.17.2.0/24 gw 192.168.100.93 dev enp0s3

在192.168.100.93的/etc/network/interfaces,新增如下語句

auto kbr0

iface kbr0 inet static

address 172.17.2.1

netmask 255.255.255.0

dns-nameservers 8.8.8.8

up route add -net 172.17.1.0/24 gw 192.168.100.92 dev enp0s3

開啟ip_forward

在/etc/sysctl.conf中開啟

net.ipv4.ip_forward=1

sysctl -p

分別在192.168.100.92上ping 172.17.2.1,在192.168.100.93上ping 172.17.1.1,如果能相互ping通則GRE通道已經打通了。

ubuntu 16.04下安裝kubernetes1.6(一)

ubuntu 16.04下安裝kubernetes1.6(一)











來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27181165/viewspace-2145485/,如需轉載,請註明出處,否則將追究法律責任。

相關文章