ubuntu 安裝 k8s

前言

本文介紹如何在ubuntu上部署k8s集群键畴,大致可以分為如下幾個(gè)步驟:

  • 修改ubuntu配置
  • 安裝docker
  • 安裝kubeadm越除、kubectl以及kubelet
  • 初始化master節(jié)點(diǎn)
  • slave節(jié)點(diǎn)加入網(wǎng)絡(luò)

如果你對(duì)上面的某些名字感到陌生,沒關(guān)系,下文會(huì)一一進(jìn)行講解八匠,如果你想先了解一下 docker 和 k8s,可以參考 10分鐘看懂Docker和K8S趴酣。好了梨树,在正式開始之前,首先看一下我們都有哪些服務(wù)器岖寞,如果你對(duì)如何組建如下虛擬機(jī)網(wǎng)絡(luò)感興趣的話抡四,可以參考 virtualbox 虛擬機(jī)組網(wǎng)

主機(jī)名 主機(jī)ip 版本 CPU 內(nèi)存
master1 192.168.56.11 Ubuntu server 18.04 2核 1G
worker1 192.168.56.21 Ubuntu server 18.04 2核 1G

因?yàn)?code>k8s分為管理節(jié)點(diǎn)和工作節(jié)點(diǎn),所以我們將要 master1上部署管理節(jié)點(diǎn)仗谆,在worker1上部署工作節(jié)點(diǎn)指巡。如果想了解如何創(chuàng)建這兩個(gè)節(jié)點(diǎn),可以參考 virtualbox 虛擬機(jī)組網(wǎng) 隶垮。服務(wù)器配置上藻雪,k8s 要求 CPU 最低為 2 核,不然在安裝過程中會(huì)報(bào)錯(cuò)狸吞,雖然這個(gè)錯(cuò)誤可以避免阔涉,但是為了穩(wěn)定起見還是把虛擬機(jī)的配置成它想要的,至于內(nèi)存 k8s 沒有硬性要求捷绒,所以我就按我電腦的性能來分配了瑰排。

注意,本文的 docker暖侨、k8s 等軟件安裝均未指定具體版本椭住,在本文完成時(shí)2019/6/27,下載到的版本如下字逗,如有特殊版本需要請(qǐng)自行指定版本京郑。

軟件名 版本
docker 18.09.5
kubectl 1.15.0-00 amd64
kubeadm 1.15.0-00 amd64
kubelet 1.15.0-00 amd64

一. 修改 ubuntu 配置

首先,k8s 要求我們的 ubuntu 進(jìn)行一些符合它要求的配置葫掉。很簡(jiǎn)單些举,包括以下兩步:關(guān)閉 Swap 內(nèi)存 以及 配置免密登錄,這一步兩臺(tái)主機(jī)都需要進(jìn)行配置俭厚。

關(guān)閉 swap 內(nèi)存

這個(gè)swap其實(shí)可以類比成 windows 上的虛擬內(nèi)存户魏,它可以讓服務(wù)器在內(nèi)存吃滿的情況下可以保持低效運(yùn)行,而不是直接卡死。但是 k8s 的較新版本都要求關(guān)閉swap叼丑。所以咱們直接動(dòng)手关翎,修改/etc/fstab文件:

sudo vi /etc/fstab

你應(yīng)該可以看到如下內(nèi)容,把第二條用#注釋掉就好了鸠信,注意第一條別注釋了纵寝,不然重啟之后系統(tǒng)有可能會(huì)報(bào)file system read-only錯(cuò)誤。

UUID=e2048966-750b-4795-a9a2-7b477d6681bf /   ext4    errors=remount-ro 0    1
# /dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0

然后輸入reboot重啟即可星立,重啟后使用top命令查看任務(wù)管理器爽茴,如果看到如下KiB Swap后均為 0 就說明關(guān)閉成功了。

關(guān)閉swap之后的任務(wù)管理器

上面說的是永久關(guān)閉swap內(nèi)存绰垂,其實(shí)也可以暫時(shí)關(guān)閉室奏,使用swapoff -a命令即可,效果會(huì)在重啟后消失辕坝。

配置免密登錄

k8s 要求 管理節(jié)點(diǎn)可以直接免密登錄工作節(jié)點(diǎn) 的原因是:在集群搭建完成后,管理節(jié)點(diǎn)的 kubelet 需要登陸工作節(jié)點(diǎn)進(jìn)行操作荐健。而至于怎么操作很簡(jiǎn)單酱畅,這里就不詳提了,可以參見文章 virtualbox 虛擬機(jī)組網(wǎng) 的最后一個(gè)章節(jié) 免密鑰登錄 江场。

二. 安裝 docker

docker 是 k8s 的基礎(chǔ)纺酸,在安裝完成之后也需要修改一些配置來適配 k8s ,所以本章分為 docker 的安裝docker 的配置 兩部分址否。如果你已經(jīng)安裝并使用了一段時(shí)間的 docker 了話餐蔬,建議使用docker -v查看已安裝的 docker 版本,并在 k8s 官網(wǎng)上查詢適合該版本的 k8s 進(jìn)行安裝佑附。這一步兩臺(tái)主機(jī)都需要進(jìn)行安裝樊诺。

docker 的安裝

docker 在 ubuntu 的安裝上真是再簡(jiǎn)單不過了,執(zhí)行如下命令即可音同,在安裝之前請(qǐng)記得把鏡像源切換到國內(nèi)词爬。

sudo apt install docker.io

等安裝完成之后使用docker -v來驗(yàn)證 docker是否可用。

docker 的配置

安裝完成之后需要進(jìn)行一些配置权均,包括 切換docker下載源為國內(nèi)鏡像站 以及 修改cgroups顿膨。

這個(gè)cgroups是啥呢,你可以把它理解成一個(gè)進(jìn)程隔離工具叽赊,docker就是用它來實(shí)現(xiàn)容器的隔離的恋沃。docker 默認(rèn)使用的是cgroupfs,而 k8s 也用到了一個(gè)進(jìn)程隔離工具systemd必指,如果使用兩個(gè)隔離組的話可能會(huì)引起異常囊咏,所以我們要把 docker 的也改成systemd

這兩者都是在/etc/docker/daemon.json里修改的,所以我們一起配置了就好了匆笤,首先執(zhí)行下述命令編輯daemon.json

sudo vi /etc/docker/daemon.json

打開后輸入以下內(nèi)容:

{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com",
    "https://quay-mirror.qiniu.com"
  ],
  "exec-opts": [ "native.cgroupdriver=systemd" ]
}

然后:wq保存后重啟 docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

然后就可以通過docker info | grep Cgroup來查看修改后的 docker cgroup 狀態(tài)研侣,發(fā)現(xiàn)變?yōu)?code>systemd即為修改成功。

三. 安裝 k8s

安裝完了 docker 就可以下載 k8s 的三個(gè)主要組件kubelet炮捧、kubeadm以及kubectl了庶诡。這一步兩臺(tái)主機(jī)都需要進(jìn)行安裝。先來簡(jiǎn)單介紹一下這三者:

  • kubelet: k8s 的核心服務(wù)
  • kubeadm: 這個(gè)是用于快速安裝 k8s 的一個(gè)集成工具咆课,我們?cè)?code>master1和worker1上的 k8s 部署都將使用它來完成末誓。
  • kubectl: k8s 的命令行工具,部署完成之后后續(xù)的操作都要用它來執(zhí)行

其實(shí)這三個(gè)的下載很簡(jiǎn)單书蚪,直接用apt-get就好了喇澡,但是因?yàn)槟承┰颍鼈兊南螺d地址不存在了殊校。所以我們需要用國內(nèi)的鏡像站來下載晴玖,也很簡(jiǎn)單,依次執(zhí)行下面五條命令即可:

# 使得 apt 支持 ssl 傳輸
apt-get update && apt-get install -y apt-transport-https
# 下載 gpg 密鑰
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
# 添加 k8s 鏡像源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# 更新源列表
apt-get update
# 下載 kubectl为流,kubeadm以及 kubelet
apt-get install -y kubelet kubeadm kubectl

直接在/etc/apt/sources.list里添加https://mirrors.aliyun.com/kubernetes/apt/是不行的呕屎,因?yàn)檫@個(gè)阿里鏡像站使用的ssl進(jìn)行傳輸?shù)模砸劝惭bapt-transport-https并下載鏡像站的密鑰才可以進(jìn)行下載敬察。

四. 安裝 master 節(jié)點(diǎn)

下載完成后就要迎來重頭戲了秀睛,初始化master節(jié)點(diǎn),這一章節(jié)只需要在管理節(jié)點(diǎn)上配置即可莲祸,大致可以分為如下幾步:

  • 初始化master節(jié)點(diǎn)
  • 部署flannel網(wǎng)絡(luò)
  • 配置kubectl工具

初始化 master 節(jié)點(diǎn)

使用kubeadminit命令就可以輕松的完成初始化蹂安,不過需要攜帶幾個(gè)參數(shù),如下锐帜。先不要直接復(fù)制執(zhí)行田盈,將賦值給--apiserver-advertise-address參數(shù)的 ip 地址修改為自己的master主機(jī)地址,然后再執(zhí)行缴阎。

kubeadm init \
--apiserver-advertise-address=192.168.56.11 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16

這里介紹一下一些常用參數(shù)的含義:

  • --apiserver-advertise-address: k8s 中的主要服務(wù)apiserver的部署地址缠黍,填自己的管理節(jié)點(diǎn) ip
  • --image-repository: 拉取的 docker 鏡像源,因?yàn)槌跏蓟臅r(shí)候kubeadm會(huì)去拉 k8s 的很多組件來進(jìn)行部署药蜻,所以需要指定國內(nèi)鏡像源瓷式,下不然會(huì)拉取不到鏡像。
  • --pod-network-cidr: 這個(gè)是 k8s 采用的節(jié)點(diǎn)網(wǎng)絡(luò)语泽,因?yàn)槲覀儗⒁褂?code>flannel作為 k8s 的網(wǎng)絡(luò)贸典,所以這里填10.244.0.0/16就好
  • --kubernetes-version: 這個(gè)是用來指定你要部署的 k8s 版本的,一般不用填踱卵,不過如果初始化過程中出現(xiàn)了因?yàn)榘姹静粚?duì)導(dǎo)致的安裝錯(cuò)誤的話廊驼,可以用這個(gè)參數(shù)手動(dòng)指定据过。
  • --ignore-preflight-errors: 忽略初始化時(shí)遇到的錯(cuò)誤,比如說我想忽略 cpu 數(shù)量不夠 2 核引起的錯(cuò)誤妒挎,就可以用--ignore-preflight-errors=CpuNum绳锅。錯(cuò)誤名稱在初始化錯(cuò)誤時(shí)會(huì)給出來。

當(dāng)你看到如下字樣是酝掩,就說明初始化成功了鳞芙,請(qǐng)把最后那行以kubeadm join開頭的命令復(fù)制下來,之后安裝工作節(jié)點(diǎn)時(shí)要用到的期虾,如果你不慎遺失了該命令原朝,可以在master節(jié)點(diǎn)上使用kubeadm token create --print-join-command命令來重新生成一條。

Your Kubernetes master has initialized successfully!
 
To start using your cluster, you need to run the following as a regular user:
 
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
 
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
 
You can now join any number of machines by running the following on each node
as root:
 
kubeadm join 192.168.56.11:6443 --token wbryr0.am1n476fgjsno6wa --discovery-token-ca-cert-hash sha256:7640582747efefe7c2d537655e428faa6275dbaff631de37822eb8fd4c054807

如果在初始化過程中出現(xiàn)了任何Error導(dǎo)致初始化終止了镶苞,使用kubeadm reset重置之后再重新進(jìn)行初始化喳坠。

配置 kubectl 工具

這一步就比較簡(jiǎn)單了,直接執(zhí)行如下命令即可:

mkdir -p /root/.kube && \
cp /etc/kubernetes/admin.conf /root/.kube/config

執(zhí)行完成后并不會(huì)刷新出什么信息茂蚓,可以通過下面兩條命令測(cè)試 kubectl是否可用:

# 查看已加入的節(jié)點(diǎn)
kubectl get nodes
# 查看集群狀態(tài)
kubectl get cs

部署 flannel 網(wǎng)絡(luò)

flannel是什么壕鹉?它是一個(gè)專門為 k8s 設(shè)置的網(wǎng)絡(luò)規(guī)劃服務(wù),可以讓集群中的不同節(jié)點(diǎn)主機(jī)創(chuàng)建的 docker 容器都具有全集群唯一的虛擬IP地址聋涨。想要部署flannel的話直接執(zhí)行下述命令即可:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

輸出如下內(nèi)容即為安裝完成:

clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created

至此晾浴,k8s 管理節(jié)點(diǎn)部署完成。

五. 將 slave 節(jié)點(diǎn)加入網(wǎng)絡(luò)

首先需要重復(fù)步驟 1 ~ 3 來安裝 docker 牛郑、k8s 以及修改服務(wù)器配置怠肋,之后執(zhí)行從步驟 4 中保存的命令即可完成加入敬鬓,注意淹朋,這條命令每個(gè)人的都不一樣,不要直接復(fù)制執(zhí)行:

kubeadm join 192.168.56.11:6443 --token wbryr0.am1n476fgjsno6wa --discovery-token-ca-cert-hash sha256:7640582747efefe7c2d537655e428faa6275dbaff631de37822eb8fd4c054807

待控制臺(tái)中輸出以下內(nèi)容后即為加入成功:

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the master to see this node join the cluster.

隨后登錄master1查看已加入節(jié)點(diǎn)狀態(tài)钉答,可以看到worker1已加入础芍,并且狀態(tài)均為就緒。至此数尿,k8s 搭建完成:

root@master1:~# kubectl get nodes
NAME      STATUS   ROLES    AGE    VERSION
master1   Ready    master   145m   v1.15.0
worker1   Ready    <none>   87m    v1.15.0

默認(rèn)網(wǎng)卡問題修復(fù)

如果你是使用virtualBox部署的虛擬機(jī)仑性,并且虛擬機(jī)直接無法使用網(wǎng)卡1的 ip 地址互相訪問的話(例如組建雙網(wǎng)卡,網(wǎng)卡1為 NAT 地址轉(zhuǎn)換用來上網(wǎng)右蹦,網(wǎng)卡2為Host-only诊杆,用于虛擬機(jī)之間訪問)。就需要執(zhí)行本節(jié)的內(nèi)容來修改 k8s 的默認(rèn)網(wǎng)卡何陆。不然會(huì)出現(xiàn)一些命令無法使用的問題晨汹。如果你的默認(rèn)網(wǎng)卡可以進(jìn)行虛擬機(jī)之間的相互訪問,則沒有該問題贷盲。

修改 kubelet 默認(rèn)地址

訪問kubelet配置文件:

sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

在最后一行ExecStart 之前 添加如下內(nèi)容:

Environment="KUBELET_EXTRA_ARGS=--node-ip=192.168.56.21"

重啟kubelet

systemctl stop kubelet.service && \
systemctl daemon-reload && \
systemctl start kubelet.service

至此修改完成淘这,更多信息詳見 kubectl logs、exec、port-forward 執(zhí)行失敗問題解決 铝穷。

修改 flannel 的默認(rèn)網(wǎng)卡

編輯flannel配置文件

sudo kubectl edit daemonset kube-flannel-ds-amd64 -n kube-system

找到spec.template.spec.containers.args字段并添加--iface=網(wǎng)卡名钠怯,例如我的網(wǎng)卡是enp0s8

- args:
  - --ip-masq
  - --kube-subnet-mgr
  # 添加到這里
  - --iface=enp0s8

:wq保存修改后輸入以下內(nèi)容刪除所有 flannel,k8s 會(huì)自動(dòng)重建:

kubectl delete pod -n kube-system -l app=flannel

至此修改完成曙聂,更多內(nèi)容請(qǐng)見 解決k8s無法通過svc訪問其他節(jié)點(diǎn)pod的問題 晦炊。

總結(jié)

至此你應(yīng)該已經(jīng)搭建好了一個(gè)完整可用的雙節(jié)點(diǎn) k8s 集群了。接下來你可以通過如下內(nèi)容繼續(xù)深入 k8s筹陵,排名分先后刽锤,推薦依次閱讀:

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市朦佩,隨后出現(xiàn)的幾起案子并思,更是在濱河造成了極大的恐慌,老刑警劉巖语稠,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宋彼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡仙畦,警方通過查閱死者的電腦和手機(jī)输涕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慨畸,“玉大人莱坎,你說我怎么就攤上這事〈缡浚” “怎么了檐什?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)弱卡。 經(jīng)常有香客問我乃正,道長(zhǎng),這世上最難降的妖魔是什么婶博? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任瓮具,我火速辦了婚禮,結(jié)果婚禮上凡人,老公的妹妹穿的比我還像新娘名党。我一直安慰自己,他們只是感情好挠轴,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布传睹。 她就那樣靜靜地躺著,像睡著了一般忠荞。 火紅的嫁衣襯著肌膚如雪蒋歌。 梳的紋絲不亂的頭發(fā)上帅掘,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音堂油,去河邊找鬼修档。 笑死,一個(gè)胖子當(dāng)著我的面吹牛府框,可吹牛的內(nèi)容都是我干的吱窝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼迫靖,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼院峡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起系宜,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤照激,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后盹牧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俩垃,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年汰寓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了口柳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡有滑,死狀恐怖跃闹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毛好,我是刑警寧澤望艺,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站睛榄,受9級(jí)特大地震影響荣茫,放射性物質(zhì)發(fā)生泄漏想帅。R本人自食惡果不足惜场靴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望港准。 院中可真熱鬧旨剥,春花似錦、人聲如沸浅缸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衩椒。三九已至蚌父,卻和暖如春哮兰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苟弛。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國打工喝滞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人膏秫。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓右遭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親缤削。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窘哈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345