使用kubeadm部署k8s集群

Kubernetes是Google大神開源的容器管理組件,常被稱為K8s (PS:K表示第一個字母,s表示最后一個字母,8表示中間一共有8個字母:) ). 被Docker的使用者用于Docker服務(wù)的編排和管理。雖然Docker家出了Swarm用來管理Docker,但是目前來看,使用K8s的仍然居多。

K8s的幾個概念
  • Pod
    K8s部署調(diào)度的最小單元,運(yùn)行在node節(jié)點(diǎn)上。運(yùn)行在同一個Pod內(nèi)的多個容器共享相同的網(wǎng)絡(luò)命名空間、IP地址和端口。
  • RC (Replication Controller)
    RC用來保證Pod按照一定的備份數(shù)運(yùn)行。
  • Service
    Service定義了Pod的邏輯集合和訪問策略...
  • Node
    Node是k8s集群中Pod運(yùn)行的節(jié)點(diǎn)。
K8s集群部署方式

關(guān)于K8s的集群部署方式有很多,比如說tar包/rpm下載安裝,手動配置。這種方法比較麻煩。自從K8s 1.5版本后,新增了kubeadm init方法,能夠快速的安裝k8s集群。雖然目前這個方法還是beta版本,并且被警告不要在生產(chǎn)環(huán)境中使用 (: ,但是經(jīng)過筆者的測試,kubeadm init能夠方便的部署k8s,期待早日轉(zhuǎn)正 :)

以下是筆者在使用kubeadm init部署過程中整理的方法記錄,大部分來源于官方文檔: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
此外加了一些在過程中遇到的問題和解決方法,以供參考。

準(zhǔn)備條件
此處有坑1

如果不設(shè)置,在后面執(zhí)行kubeadm init時,precheck會報錯。

sysctl -w net.bridge.bridge-nf-call-iptables="1"
  • 配置k8s yum源,如果能夠連外網(wǎng)使用google的源,否則的話可以找找國內(nèi)的代理源或者自行下載kubeadm和kubelet的安裝包手動安裝。
    google的yum源如下:
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
        https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
安裝kubeadm和kubelet

本次安裝選擇的是1.6.6版本。

yum install kubelet-1.6.6*
yum install kubeadm-1.6.6*

在安裝過程中,會自動的將一些依賴安裝,如果某些依賴的源沒有在yum中配置,需要加上可以訪問的源。

使用 kubeadm init

在k8s的安裝文檔中,本步驟最簡單,只有一行命令,但是在實(shí)際操作過程中也是最容易出問題的一步。
登錄master節(jié)點(diǎn),執(zhí)行 kubeadm init,開始初始化master。

此處有坑2

這時候一般會卡到 [apiclient] Created API client, waiting for the control plane to become ready

[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.7.0
[init] Using Authorization modes: [Node RBAC]
[preflight] Running pre-flight checks
[preflight] Starting the kubelet service
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [kubeadm-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.138.0.4]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[apiclient] Created API client, waiting for the control plane to become ready

這個時候就比較抓瞎,沒有更多有價值的log輸出。這時候可以使用

journalctl -xeu kubelet

打印出log。
如果有如下錯誤log, 說明kubelet的driver設(shè)置的不對。

cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

設(shè)置 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 里的
--cgroup-driver=cgroupfs
保存后,執(zhí)行systemctl daemon-reload 讓配置生效。
再執(zhí)行kubeadm init,成功完成。

使master節(jié)點(diǎn)可以調(diào)度pod

默認(rèn)情況下,master節(jié)點(diǎn)不能被調(diào)度啟動pod,如果需要將master節(jié)點(diǎn)加入到調(diào)度中,需要執(zhí)行以下命令:

kubectl taint nodes --all node-role.kubernetes.io/master-
配置pod網(wǎng)絡(luò)插件

K8s支持以下多種網(wǎng)絡(luò)插件。在master節(jié)點(diǎn)使用 kubectl apply -f 配置網(wǎng)絡(luò)插件。

pic.png

以Weave net插件為例,可以通過如下命令配置:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

驗(yàn)證是否添加成功可以執(zhí)行:

kubectl get pods --all-namespaces

如下圖,可以看到,weave相關(guān)已經(jīng)成功創(chuàng)建并拉起。


image.png
給集群加入節(jié)點(diǎn)

master初始化完成后,可以向此K8s集群增加node節(jié)點(diǎn)。一條簡單的join命令即可完成。
登錄到node節(jié)點(diǎn),執(zhí)行:

kubeadm join --token <token> <master-ip>:<master-port>

其中token可以在master節(jié)點(diǎn)執(zhí)行 kubeadm token list 查看, 另外默認(rèn)的master-port一般是6443.

image.png

此處有坑3

根據(jù)官方文檔,執(zhí)行完此語句后,在master節(jié)點(diǎn)上通過 kubeadm get nodes 就可以查看到已經(jīng)將node節(jié)點(diǎn)加入集群。但是在實(shí)際操作中,發(fā)現(xiàn)在node節(jié)點(diǎn)上執(zhí)行join語句成功,但是在master節(jié)點(diǎn)上看不到新增的node節(jié)點(diǎn)。
在node節(jié)點(diǎn)上查看kubelet, 發(fā)現(xiàn)kubelet沒有啟動。在node節(jié)點(diǎn)上執(zhí)行 journalctl -xeu kubelet 看到和master節(jié)點(diǎn)之前一樣的問題,cgroup driver不一致。經(jīng)過相同的解決方法,成功將node節(jié)點(diǎn)拉起后,過幾秒鐘在master節(jié)點(diǎn)上查看,已經(jīng)能夠顯示新增的節(jié)點(diǎn)了。

部署簡單的K8s集群完成。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • Kubernetes作為容器應(yīng)用的管理中心,通過對Pod的數(shù)量進(jìn)行監(jiān)控,并且根據(jù)主機(jī)或容器失效的狀態(tài)將新的Pod調(diào)...
    輝耀輝耀閱讀 4,684評論 0 13
  • 安裝k8s Master高可用集群 主機(jī) 角色 組件 172.18.6.101 K8S Master Kubele...
    jony456123閱讀 8,166評論 0 9
  • 簡介:因工作要求所以學(xué)習(xí)了一下kubernetes相關(guān)知識,在這里和大家分享一下。文章中所有步驟都是在root權(quán)限...
    JellyC閱讀 691評論 0 4
  • 2017年1月3日 一、從我的成長長度審視,我覺察到每時每刻在虛度光陰而無法自拔的體會,那是如此的悔恨,可悔恨過后...
    阿甘阿干閱讀 764評論 1 1
  • 物質(zhì)的依賴和生活的習(xí)慣可以短時間隔斷和消除,因?yàn)闅埣踩硕伎梢宰粤Ω?,因?yàn)槿祟惸軌蛏嫦氯サ谋灸芫褪沁m應(yīng)新的一切。...
    凈翕閱讀 244評論 0 0

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