Docker學(xué)習(xí)筆記之k8s部署方法
本文記錄了如何在ubuntu 14.04裸機(jī)上部署k8s集群,參考自官方文檔。
拓?fù)浣Y(jié)構(gòu)
- 1master + 2minion
- k8s-master 192.168.0.201 master
- k8s-node1 192.168.0.202 minion
- k8s-node2 192.168.0.203 minion
準(zhǔn)備工作系統(tǒng)
安裝Ubuntu 14.04 LTS 64bit server版本系統(tǒng),配置好hostname和ip。
在更新國(guó)內(nèi)的軟件源的時(shí)候,由于GFW的原因,經(jīng)常會(huì)出現(xiàn)md5校驗(yàn)錯(cuò)誤,建議使用阿里云的源。
Docker
在minion節(jié)點(diǎn)上安裝Docker,版本需要在1.2+,此處安裝的是1.7.1。安裝方法參見(jiàn)Docker安裝(Ubuntu 64bit) 。
安裝好Docker之后,我們最好還配置一個(gè)國(guó)內(nèi)的registry mirror,加快鏡像拉取速度,參考配置國(guó)內(nèi)免費(fèi)registry mirror。
Google pause
給每個(gè)minion下載Google pause鏡像。之后的工作會(huì)用到gcr.io/google_containers/pause鏡像,國(guó)內(nèi)用戶由于GFW問(wèn)題總是會(huì)出錯(cuò),所以我們先從docker.io下載pause鏡像,并設(shè)置tag。
# docker pull docker.io/kubernetes/pause # docker tag kubernetes/pause gcr.io/google_containers/pause:0.8.0 # docker tag gcr.io/google_containers/pause:0.8.0 gcr.io/google_containers/pause
SSH
需要所有minion節(jié)點(diǎn)都能從master節(jié)點(diǎn)直接登錄,不用密碼。
在master節(jié)點(diǎn)上進(jìn)行如下操作:
$ ssh-keygen $ ssh-copy-id user@192.168.0.201 $ ssh-copy-id user@192.168.0.202 $ ssh-copy-id user@192.168.0.203
部署集群
下載
下載部署腳本及二進(jìn)制文件。
首先從K8S的github倉(cāng)庫(kù)中下載部署腳本。
$ git clone https://github.com/kubernetes/kubernetes.git
修改各組件的版本,下載所有組件的二進(jìn)制文件。此處我們使用etcd 2.2.0,flannel 0.5.0,k8s 1.0.6。
$ cd kubernetes/cluster/ubuntu $ vim build.sh #修改版本號(hào) # version setting FLANNEL_VERSION="0.5.0" ETCD_VERSION="2.2.0" KUBE_VERSION="1.0.6" $ ./build.sh
有時(shí)候使用非root賬戶下載會(huì)出現(xiàn)錯(cuò)誤,此時(shí)我們可以切換到root權(quán)限下下載,完成之后再使用chown命令將文件權(quán)限設(shè)置為原來(lái)的賬戶。
目錄binaries中出現(xiàn)如下結(jié)構(gòu)則表示成功。

配置
打開cluster/ubuntu/config-default.sh文件,修改如下字段:
export nodes=${nodes:-"wangtao@192.168.0.201 wangtao@192.168.0.202 wangtao@192.168.0.203"}
export role=${role:-"a i i"}
export NUM_MINIONS=${NUM_MINIONS:-2}
export SERVICE_CLUSTER_IP_RANGE=${SERVICE_CLUSTER_IP_RANGE:-10.0.1.0/24}
export FLANNEL_NET=${FLANNEL_NET:-172.16.0.0/16}
如果需要master節(jié)點(diǎn)也作為minion節(jié)點(diǎn)的話,只需將role中的a改為ai即可,NUM_MINIONS表示minion節(jié)點(diǎn)的個(gè)數(shù)。
service_cluster_ip_range表示集群中service所對(duì)應(yīng)的IP范圍。
flannel_net表示pod所分配的IP范圍。
部署
進(jìn)到cluster/目錄下進(jìn)行如下操作,
$ export KUBERNETES_PROVIDER=ubuntu $ ./kube-up.sh
接下來(lái)腳本就會(huì)將二進(jìn)制文件拷貝到相應(yīng)的節(jié)點(diǎn)上,不過(guò)在運(yùn)行服務(wù)的時(shí)候需要root權(quán)限,所以需要我們?yōu)槊恳粋€(gè)節(jié)點(diǎn)輸入一次密碼。
測(cè)試
我們可以使用kubectl工具進(jìn)行測(cè)試是否安裝成功。
首先我們把kubectl的路徑加入到PATH中,然后我們就可以直接使用該命令了。

我們啟動(dòng)一個(gè)Redis服務(wù)試一試。
進(jìn)入examples/guestbook目錄,修改redis-master-controller.yaml文件如下:
apiVersion: v1 kind: ReplicationController metadata: name: redis-master labels: name: redis-master spec: replicas: 2 selector: name: redis-master template: metadata: labels: name: redis-master spec: containers: - name: master image: redis ports: - containerPort: 6379
然后運(yùn)行如下命令啟動(dòng)Redis。
$ kubectl create -f redis-master-controller.yaml
然后使用kubectl get rc 和 kubectl get pods 查看是否成功。

如果每個(gè)pod的狀態(tài)都為Running則部署成功。
這里可能會(huì)遇到pod狀態(tài)一直處于Penning的問(wèn)題,此時(shí)可以通過(guò)kubectl describe pods/pod-name來(lái)查看pod信息,如果沒(méi)有出錯(cuò)信息,那么Minion一直處于下載鏡像中,下載好之后pod即會(huì)成功啟動(dòng)。
動(dòng)態(tài)管理Cluster
如果集群已經(jīng)部署好,我們希望能夠動(dòng)態(tài)地添加和刪除Minion節(jié)點(diǎn)。
一種方法是,使用kube-down.sh將所有節(jié)點(diǎn)停掉之后,修改config-default.sh文件,將新添加的節(jié)點(diǎn)信息加入進(jìn)去,或者刪掉不用的節(jié)點(diǎn)信息,然后再使用kube-up.sh腳本重新啟動(dòng)。
當(dāng)然我們希望能夠在不關(guān)掉已有節(jié)點(diǎn)的情況下動(dòng)態(tài)添加新的Minion節(jié)點(diǎn),但是目前我還沒(méi)找到方法。等以后研究出來(lái)了再更新。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用docker搭建一套開發(fā)環(huán)境全家桶的詳細(xì)教程
這篇文章主要介紹了使用docker搭建一套開發(fā)環(huán)境全家桶,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
解讀Dockerfile中CMD和ENTRYPOINT是否可以混著用
在Dockerfile中,CMD和ENTRYPOINT可以混著用,CMD指定默認(rèn)命令,ENTRYPOINT指定啟動(dòng)命令,CMD可以被docker run命令的參數(shù)覆蓋2025-03-03
Windows Docker 部署 SolrCloud的方法步驟
本文主要介紹了Windows Docker 部署 SolrCloud的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10
Dockerfile指令與基本結(jié)構(gòu)的講解
今天小編就為大家分享一篇關(guān)于Dockerfile指令與基本結(jié)構(gòu)的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
Docker 配置網(wǎng)絡(luò)使用bridge網(wǎng)絡(luò)的方法
本篇文章主要介紹了Docker 配置網(wǎng)絡(luò)使用 bridge 網(wǎng)絡(luò)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
docker Overlay目錄占用的磁盤空間過(guò)大問(wèn)題
這篇文章主要介紹了docker Overlay目錄占用的磁盤空間過(guò)大問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08

