Docker Kubernetes1.5.2集羣環境搭建(CentOS)

部署環境

由於是測試搭建kubernetes集羣環境,所以我只用了兩臺機器進行,一臺用作Master節點,一臺用作Node節點。不過原理上是一樣的,即使加機器,搭建步驟也是一樣的。

Kubernetes Master節點:10.0.11.150

Kubernetes Node節點:10.0.11.152

部署軟件

docker:1.12.6

kubernetes:1.5.2

CentOS:7.3

關閉防火牆

在每臺機器上執行下面的命令,關閉防火牆並啓用ntp

// 關閉防火牆
systemctl stop firewalld
// 禁用防火牆
systemctl disable firewalld

//安裝ntp
yum -y install ntp
//啓用ntp
systemctl start ntpd
//加入開機啓動
systemctl enable ntpd

Kubernetes Master節點的安裝與配置

Kubernetes Master指的是集羣控制節點,每個Kubernetes集羣裏需要有一個Master節點來負責整個集羣的管理和控制,基本上Kubernetes的所有控制命令都發給他,他來負責具體的執行過程,我們後面執行的所有命令基本上都是在Master節點上運行的。Master節點通常會佔據一個獨立的服務器(高可用部署建議用3臺服務器),其主要原因是他太重要了,是整個集羣的首腦,如果宕機或者不可用,那麼對集羣內容器應用的管理都將失效。

Master節點上運行以下一組關鍵進程:
1. Kubernetes API Serverkube-apiserver):提供了HTTP Rest接口的關鍵服務進程,是Kubernetes裏所有資源的增刪改查等操作的唯一入口,也是集羣控制的入口進程。
2. Kubernetes Controller Managerkube-controller-manager):Kubernetes裏所有資源對象的自動化控制中心,可以理解爲資源對象的大總管。
3. Kubernetes Schedulerkube-scheduler):負責資源調度(Pod調度)的進程,相當於公交公司的調度室。

另外,在Master節點上需要啓動一個etcd服務,因爲Kubernetes裏的所有資源對象的數據全部是保存在etcd中的。

安裝etcd、docker、kubernetes

yum -y install etcd docker kubernetes

etcd配置

配置文件位置:/etc/etcd/etcd.conf

etcd配置主要是ETCD_LISTEN_CLIENT_URLSETCD_ADVERTISE_CLIENT_URLS這兩項。

// 節點名稱
ETCD_NAME=default

// 數據存放位置
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

// 監聽客戶端地址,這裏要注意,設置成0.0.0.0,並且Master節點、Node節點端口要一致
// 這樣Master才能和Node節點互通,否則Node節點的flanneld無法正常啓動
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

// 通知客戶端地址,本地地址
ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379"

其中ETCD_LISTEN_CLIENT_URLS=”http://0.0.0.0:2379”表示etcd在2379端口上監聽所有網絡接口。

Kubernetes配置

config配置文件位置:/etc/kubernetes/config

kubernetes配置主要配置KUBE_MASTER,其他項使用默認即可。

KUBE_LOGTOSTDERR="--logtostderr=true"

KUBE_LOG_LEVEL="--v=0"

KUBE_ALLOW_PRIV="--allow-privileged=false"

// 本機IP:PORT
KUBE_MASTER="--master=http://10.0.11.150:8080"

KUBE_MASTER="--master=http://10.0.11.150:8080"是將Kubernetesapiserver進程的服務地址告訴Kubernetescontroller-manager, schedulerproxy進程。

apiserver配置文件位置:/etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

KUBE_API_PORT="--port=8080"

KUBELET_PORT="--kubelet-port=10250"

// 本機IP:PORT
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"

KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"

KUBE_API_ARGS=""

這些配置讓apiserver進程在8080端口上監聽所有網絡接口,並告訴apiserver進程etcd服務的地址。

flannel網絡配置

配置etcd中關於flannelkey(這個只在安裝了etcd的機器上操作,這裏只在Master節點安裝etcd)

flannel使用etcd進行配置,來保證多個flannel實例之間的配置一致性,所以需要在etcd上進行如下配置:

// 直接在linux命令行執行下面這條命令,前提是安裝etcd
etcdctl mk /atomic.io/network/config '{"Network":"10.1.0.0/16"}'

'/atomic.io/network'這個key要與後面配置的Master節點和Node節點中/etc/sysconfig/flannel中的配置項FLANNEL_ETCD_PREFIX相對應,錯誤的話啓動就好報錯。

注:上面flannel設置的ip網段可以任意設定,隨便設定一個網段都可以。容器的ip就是根據這個網段進行自動分配的,ip分配後,容器一般是可以對外聯網的(網橋模式,只要宿主機能上網就可以

flannel配置

問題及安裝原因

首次安裝我並沒有在master節點安裝flannel,導致再安裝了kubernetes-dashboard之後,無法通過http:masterIP:8080/ui訪問dashboard後臺(頁面顯示錯誤在下方)。經過折磨人的檢查過程,排除了配置的問題之後,發現是由於集羣內部網絡不通導致的。。再然後通過試驗發現master節點安裝配置好flannel之後就沒問題了。。所以還是在master節點安裝flannel吧。。

// kubernetes-dashboard 打開後臺報錯
kubernetes Error: 'dial tcp 10.1.93.3:9090: getsockopt: no route to host'

安裝flannel

yum -y install flannel

配置文件

打開flannel配置文件:/etc/sysconfig/flanneld

# etcd集羣master地址,即上面配置的etcd地址,若etcd和flannel安裝在同一臺集羣,則使用127.0.0.1也行
FLANNEL_ETCD_ENDPOINTS="http://127.0.0.1:2379"

# flannel網絡配置的key,上面設置的flannel網絡配置中的key前綴
FLANNEL_ETCD_PREFIX="/atomic.io/network"

啓動flannel

# 啓動flannel
systemctl start flanneld

# 重啓flannel
systemctl restart flanneld

# 查看flannel狀態
systemctl status flanneld

啓動Master服務

啓動Kubernetes Master節點上的etcd, docker, kube-apiserver, kube-controller-managerkube-scheduler進程並查看其狀態

// 一個小shell腳本,循環啓動這些服務,要按照這裏的順序啓動服務
for SERVICES  in etcd docker kube-apiserver kube-controller-manager kube-scheduler;  do
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES
done

現在我們可以使用kubectl get nodes命令來查看,當然,目前還沒有Node節點加入到該Kubernetes集羣,所以命令的執行結果是空的:
這裏寫圖片描述

Kubernetes Node節點的安裝與配置

除了MasterKubernetes集羣中的其他集羣被稱爲Node節點,在較早版本中也被稱爲Minion。與Master一樣,Node節點可以使一臺物理機,也可以是一臺虛擬機。Node節點纔是Kubernetes集羣中的工作負載節點,每個Node都會被Master分配一些工作負載(Docker容器),當某個Node宕機時,其上的工作負載會被Master自動轉移到其他節點上去。

每個Node節點都運行着以下一組關鍵進程:
1. kubelet:負責Pod對應的容器的創建、啓停等任務,同時與Master節點密切協作,實現集羣管理的基本功能。
2. kube-proxy:實現Kubernetes Service的通信與負載均衡機制的重要組件。
3. Docker Engine(docker):Docker引擎,負責本機的容器創建和管理工作。

Node節點可以在運行期間動態增加到Kubernetes集羣中,前提是這個節點上已經正確安裝、配置和啓動了上述關鍵進程,在默認情況下kubelet會向Master註冊自己,這也是Kubernetes推薦的Node管理方式。一旦Node被納入集羣管理範圍,kubelet進程就好定時向Master節點彙報自身的情報,例如操作系統、Docker版本、機器的CPU和內存情況,以及當前有哪些Pod在運行等,這樣Master可以獲知每個Node的資源使用情況。並實現高效均衡的資源調度策略。而某個Node超過指定時間不上報信息時,會被Master判定爲‘失聯’,Node的狀態被標記爲不可用(Not Ready)。隨後Master會觸發‘工作負載大轉移’的自動流程。

安裝 flannel, docker和Kubernetes

yum -y install flannel docker kubernetes

flannel 配置

配置文件位置:/etc/sysconfig/flanneld

// Master節點etcd配置IP:PORT
FLANNEL_ETCD_ENDPOINTS="http://10.0.11.150:2379"

// Master節點配置的flannel中的key
FLANNEL_ETCD_PREFIX="/atomic.io/network"

#FLANNEL_OPTIONS=""

配置信息告訴flannel進程etcd服務的位置以及在etcd上網絡配置信息的節點位置

Kubernetes配置

配置文件位置:/etc/kubernetes/config

KUBE_LOGTOSTDERR="--logtostderr=true"

KUBE_LOG_LEVEL="--v=0"

KUBE_ALLOW_PRIV="--allow-privileged=false"

//Master節點的kube url
KUBE_MASTER="--master=http://10.0.11.150:8080"

KUBE_MASTER=”–master=http://10.0.11.150:8080“是將Kubernetes的apiserver進程的服務地址告訴Kubernetes的controller-manager, scheduler和proxy進程。

kubelet配置

配置文件位置:/etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"

KUBELET_PORT="--port=10250"

// 本機IP,每個節點都不一樣
KUBELET_HOSTNAME="--hostname-override=10.0.11.152"

// Master節點配置的server
KUBELET_API_SERVER="--api-servers=http://10.0.11.150:8080"

KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

KUBELET_ARGS=""

注意:KUBELET_POD_INFRA_CONTAINER : kubelet配置文件中的KUBELET_POD_INFRA_CONTAINER該配置項指的是在Pod創建啓動時,會從該地址下載pod-infrastructure鏡像並隨pod啓動,但是默認的鏡像下載地址國內會出現下載失敗情況,導致pod啓動失敗,因此建議將該pod下載下來,並保存到本地的Docker私有庫中。然後修改該配置項的值。我這裏將該配置項修改爲:

KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.0.11.150:5000/rhel7/pod-infrastructure:v1.0.0"

啓動Node服務

啓動kube-proxy kubelet flannelddocker進程並查看其狀態

// 注意啓動順序,flanneld需要在docker前啓動
for SERVICES in kube-proxy kubelet flanneld docker; do
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES 
done

將每個服務啓動並設置成開啓啓動,然後查看服務狀態

最後,在Master節點使用kubectl get nodes命令來查看,可以看到節點信息:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章