使用kubeadm在Ubuntu16.04上搭建Kubernetes1.5集群

最近在準備研究生論文開題抬闯,提前搭一下要用到的Kubernetes集群練練手感。半個月前关筒,Kubernetes 1.5正式發(fā)布溶握,最大的亮點是支持了在windows下運行容器,同時也簡化了使用kubeadm安裝集群的步驟蒸播。為了緊跟最時尚的潮流睡榆,我想試試用kubeadm搭一個1.5版本的集群出來。不過由于最近又過圣誕又要跨年袍榆,所以拖拖拉拉搭了一個星期多才搭好胀屿。也碰到了很多坑,尤其是翻墻問題真的神煩 (:зゝ∠) 所以在這里把搭集群的過程寫下來包雀,造福社會K拚浮(ps:各位看官讀完后如果有想打賞我的想法,我只想說:數目無所謂2判础葡兑!

一、環(huán)境準備

我準備了三臺Ubuntu 16.04虛擬機赞草,各項參數如下:

節(jié)點 IP地址 CPU 內存
master 192.168.0.158 4核 4GB
node1 192.168.0.159 1核 2GB
node2 192.168.0.160 1核 2GB

Kubernetes官網上提到每臺機器至少要有1GB內存讹堤,不然集群起來之后,留給運行在容器內的應用的內存就很少了厨疙。同時要保證所有機器之前的網絡是互相連通的蜕劝。

這里再說一下,一開始我只給master分配了2個核轰异,但是等我把kubeadm跑起來后,docker在pull一些必需的鏡像時會出現OutOfCPU的情況暑始,大概是因為kubeadm把第一臺機器做master以及第一個node搭独,所以初始化的服務都跑在這臺機器上?所以后來我把master加到了4核廊镜。

二牙肝、搭建步驟

(1/4)安裝docker、kubelet嗤朴、kubeadm和kubectl

root用戶ssh到每臺機器上配椭,運行:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
# 先安裝docker
apt-get install -y docker.io
apt-get install -y kubelet kubeadm kubectl kubernetes-cni

(2/4)初始化master

裝好kubelet和kubectl后,在master上以root用戶運行:

kubeadm init --token=yiqian.123456

注意: 官方文檔上kubeadm init的時候是不帶token的雹姊,但我這樣運行之后股缸,console也沒給我一個默認的token(exo me???)。但其他節(jié)點在加入集群的時候是需要指定master的token的吱雏,所以我在kubeadm初始化的時候手動給master指定了一個token敦姻。

這里還有一個坑就是瘾境,如果初始化失敗了,比如像Issue#33544镰惦,那么你停掉再重新init會出錯迷守,這是因為kubeadm在安裝了相關包之后會生成/etc/kubernetes/var/lib/kubelet等目錄旺入,所以我們先需要手動清理一下再重新初始化:

systemctl stop kubelet;
docker rm -f $(docker ps -q); mount | grep "/var/lib/kubelet/*" | awk '{print $3}' | xargs umount 1>/dev/null 2>/dev/null;
rm -rf /var/lib/kubelet /etc/kubernetes /var/lib/etcd /etc/cni;
systemctl start kubelet;
kubeadm init --token=<token>

最后兑凿,init成功的運行輸出如下:

root@xyq-k8s-master:/home/administrator# kubeadm init --token=yiqian.123456
[kubeadm] WARNING: kubeadm is in alpha, please do not use it for production clusters.
[preflight] Running pre-flight checks
[init] Using Kubernetes version: v1.5.1
[tokens] Validating provided token
[tokens] Accepted provided token
[certificates] Generated Certificate Authority key and certificate.
[certificates] Generated API Server key and certificate
[certificates] Generated Service Account signing keys
[certificates] Created keys and certificates in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 14.534854 seconds
[apiclient] Waiting for at least one node to register and become ready
[apiclient] First node is ready after 0.506558 seconds
[apiclient] Creating a test deployment
[apiclient] Test deployment succeeded
[token-discovery] Created the kube-discovery deployment, waiting for it to become ready
[token-discovery] kube-discovery is ready after 2.005108 seconds
[addons] Created essential addon: kube-proxy
[addons] Created essential addon: kube-dns

Your Kubernetes master has initialized successfully!

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
    http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node:

kubeadm join --token=yiqian.123456 192.168.0.158

這個時候呢,我們可以通過kubectl看看集群當前的狀態(tài):

root@xyq-k8s-master:/home/administrator# kubectl get nodes
NAME             STATUS         AGE
xyq-k8s-master   Ready,master   1m
root@xyq-k8s-master:/home/administrator# kubectl get pods --all-namespaces
NAMESPACE     NAME                                     READY     STATUS              RESTARTS   AGE
kube-system   dummy-2088944543-gjmv4                   1/1       Running             0          1m
kube-system   etcd-xyq-k8s-master                      0/1       Pending             0          2s
kube-system   kube-apiserver-xyq-k8s-master            1/1       Running             0          20s
kube-system   kube-controller-manager-xyq-k8s-master   1/1       Running             0          22s
kube-system   kube-discovery-1769846148-9dpvt          1/1       Running             0          1m
kube-system   kube-dns-2924299975-lc4rr                0/4       ContainerCreating   0          1m
kube-system   kube-proxy-w5v9m                         1/1       Running             0          1m
kube-system   kube-scheduler-xyq-k8s-master            0/1       Pending             0          4s

可以看出來茵瘾,除了kube-dns之外礼华,其他pods都跑起來了。是因為在沒有部署集群網絡時龄捡,dns是起不來的卓嫂。So我們進入下一步!

(3/4)初始化master

官方一共給出了五種網絡addon聘殖,我選了Weave Net(因為它的安裝步驟最方便誒嘿嘿=晨雳。=),直接運行:

kubectl apply -f https://git.io/weave-kube

等weave跑起來后奸腺,kube-dns自然就跑起來啦餐禁。

root@xyq-k8s-master:/home/administrator# kubectl apply -f https://git.io/weave-kube
daemonset "weave-net" created
root@xyq-k8s-master:/home/administrator# kubectl get pods --all-namespaces
NAMESPACE     NAME                                     READY     STATUS    RESTARTS   AGE
kube-system   dummy-2088944543-gjmv4                   1/1       Running   0          3m
kube-system   etcd-xyq-k8s-master                      1/1       Running   3          1m
kube-system   kube-apiserver-xyq-k8s-master            1/1       Running   0          2m
kube-system   kube-controller-manager-xyq-k8s-master   1/1       Running   0          2m
kube-system   kube-discovery-1769846148-9dpvt          1/1       Running   0          3m
kube-system   kube-dns-2924299975-lc4rr                4/4       Running   0          3m
kube-system   kube-proxy-w5v9m                         1/1       Running   0          3m
kube-system   kube-scheduler-xyq-k8s-master            1/1       Running   0          1m
kube-system   weave-net-8j1zg                          2/2       Running   0          1m

(4/4)將其他節(jié)點加入集群

分別ssh到node1和node2上去,以root用戶運行:

kubeadm join --token=yiqian.123456 192.168.0.158

再回到我們的master節(jié)點查看nodes突照,就會發(fā)現集群已經搭好了帮非。

root@xyq-k8s-master:/home/administrator# kubectl get nodes
NAME             STATUS         AGE
xyq-k8s-master   Ready,master   10m
xyq-k8s-s1       Ready          5m
xyq-k8s-s2       Ready          5m

關于翻墻

由于我是在遠程服務器上搭建虛擬機然后ssh上去操作,所以不能設置全局代理讹蘑,只能把http proxy加到docker的配置文件/etc/default/docker中:

export http_proxy=<這個不能告訴你>
export https_proxy=<這個也不能告訴你>

重啟一下機器末盔,這樣docker在pull鏡像的時候以及kubeadm init的時候就會通過這個代理了。
但是在加了這個代理之后座慰,我仍然會碰到有的鏡像pull不下來的情況陨舱,網上查了一下,借鑒了一下漠然的方法版仔,利用Docker Hub把這個鏡像自動構建好游盲,再pull到本地,這樣就不用去谷歌的gcr.io上在線下載鏡像了蛮粮。具體做法如下益缎。

先去kubernetes源碼中找1.5版本中各個組件的版本:

鏡像名稱 版本號
gcr.io/google_containers/kubedns-amd64 1.7
gcr.io/google_containers/kube-dnsmasq-amd64 1.3
gcr.io/google_containers/exechealthz-amd64 1.1

然后創(chuàng)建一個github項目,可以fork我的repo或者原作者的repo然想。
最后在Docker Hub上分別創(chuàng)建以上三個鏡像的自動構建項目莺奔。以kube-dns為例:

創(chuàng)建好之后要手動Trigger一下編譯

等待編譯成功之后就可以在本地直接pull了。

docker pull yiqianx/kubedns-amd64

以上变泄。
有問題歡迎大家評論指正~

引用
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末弊仪,一起剝皮案震驚了整個濱河市熙卡,隨后出現的幾起案子,更是在濱河造成了極大的恐慌励饵,老刑警劉巖驳癌,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異役听,居然都是意外死亡颓鲜,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門典予,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甜滨,“玉大人,你說我怎么就攤上這事瘤袖∫履Γ” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵捂敌,是天一觀的道長艾扮。 經常有香客問我,道長占婉,這世上最難降的妖魔是什么泡嘴? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮逆济,結果婚禮上酌予,老公的妹妹穿的比我還像新娘。我一直安慰自己奖慌,他們只是感情好抛虫,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著简僧,像睡著了一般建椰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涎劈,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音阅茶,去河邊找鬼蛛枚。 笑死,一個胖子當著我的面吹牛脸哀,可吹牛的內容都是我干的蹦浦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼撞蜂,長吁一口氣:“原來是場噩夢啊……” “哼盲镶!你這毒婦竟也來了侥袜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤溉贿,失蹤者是張志新(化名)和其女友劉穎枫吧,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體宇色,經...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡九杂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了宣蠕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片例隆。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抢蚀,靈堂內的尸體忽然破棺而出镀层,到底是詐尸還是另有隱情,我是刑警寧澤皿曲,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布唱逢,位于F島的核電站,受9級特大地震影響谷饿,放射性物質發(fā)生泄漏惶我。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一博投、第九天 我趴在偏房一處隱蔽的房頂上張望绸贡。 院中可真熱鬧,春花似錦毅哗、人聲如沸听怕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尿瞭。三九已至,卻和暖如春翅睛,著一層夾襖步出監(jiān)牢的瞬間声搁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工捕发, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疏旨,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓扎酷,卻偏偏與公主長得像檐涝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容