學(xué)習(xí)kubernetes,從快速搭建k8s集群開始

本系列文章先较,我們將在Ubuntu Server 18.04上搭建k8s環(huán)境進行入門學(xué)習(xí)携冤。為了使用原生的Ubuntu Server 18.04,我們將使用multipass來創(chuàng)建多臺Ubuntu Server 18.04虛擬環(huán)境闲勺。也就是說曾棕,如果你想完整參考本系列博客學(xué)習(xí),你電腦上應(yīng)當(dāng)安裝并能正常運行multipass菜循,如果你想了解multipass基本操作翘地,可以參考我寫的另一篇博客:https://blog.jkdev.cn/index.php/archives/327/

本文演示k8s集群搭建步驟癌幕,并不涉及k8s基礎(chǔ)知識子眶,你可能對文章的一些專業(yè)詞語感到默認(rèn),但沒有關(guān)系序芦,我們在后面會循序漸進地介紹k8s知識臭杰。

本次我們將部署一個主節(jié)點(master1)和兩個工作節(jié)點(worker1、worker2)的集群谚中。為了節(jié)省電腦資源渴杆,master1、worker1宪塔、worker2每個節(jié)點分配2個cpu磁奖、2G內(nèi)存、10G硬盤某筐。這是k8s要求的最低配置比搭,但這些配置完全足夠我們用以學(xué)習(xí)。相關(guān)操作都會在root用戶之下南誊。

一身诺、準(zhǔn)備環(huán)境

1. 創(chuàng)建Ubuntu Server 18.04虛擬機

分別創(chuàng)建2核cpu、10G硬盤抄囚、2G內(nèi)存霉赡,名為master1、worker1幔托、worker2三臺虛擬機

multipass launch -c 1 -d 10G -m 1G -n master1 18.04
multipass launch -c 1 -d 10G -m 1G -n worker1 18.04
multipass launch -c 1 -d 10G -m 1G -n worker2 18.04

使用multipass list查詢創(chuàng)建的虛擬機列表穴亏,如下

pan@pandeMacBook-Pro ~ % multipass list
Name                    State             IPv4             Image
master1                 Running           192.168.64.8     Ubuntu 18.04 LTS
worker1                 Running           192.168.64.11    Ubuntu 18.04 LTS
worker2                 Running           192.168.64.12    Ubuntu 18.04 LTS

創(chuàng)建虛擬機之后,我們需要對虛擬機進行初始化操作重挑,以下的操作需要在所有主機上進行嗓化。

2. 修改root用戶密碼

為了方便使用root用戶,我們對每一臺虛擬機進行密碼修改操作谬哀。以master1為例刺覆,如下代碼

# 進入主機
multipass shell master1
# 修改root密碼,這里我都改為123456
sudo passwd root
# 修改密碼之后玻粪,直接使用su命令切換 root用戶
su

3. 關(guān)閉防火墻和iptables

根據(jù)官方文檔隅津,防火墻和iptables可能會影響到k8s集群诬垂,所以我們需要關(guān)閉掉

# 關(guān)閉防火墻
ufw disable
# 關(guān)閉iptables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F

二、安裝docker與kubeadm

下面的很多安裝過程伦仍,我們大多使用阿里云鏡像進行安裝结窘。

1. 安裝與配置docker

安裝docker

# 安裝GPG證書
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 寫入軟件源信息
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 更新軟件庫
apt-get -y update
# 安裝程序
apt-get -y install docker-ce=5:19.03.15~3-0~ubuntu-bionic
# 固定版本
apt-mark hold docker-ce

設(shè)置docker阿里云加速鏡像倉庫

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://g6ogy192.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"] 
}
EOF
systemctl daemon-reload
systemctl restart docker

2. 安裝kubeadm, kubelet, kubectl

# 下載 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
# 安裝程序
apt-get install -y kubelet=1.18.0-00 kubeadm=1.18.0-00 kubectl=1.18.0-00
# 固定版本
apt-mark hold kubelet kubeadm kubectl

3. 集群鏡像準(zhǔn)備

使用kubeadm config images list命令查看當(dāng)前集群所需要的鏡像,鏡像版本會根據(jù)kubeadm版本而定充蓝,返回如下內(nèi)容

k8s.gcr.io/kube-apiserver:v1.18.20
k8s.gcr.io/kube-controller-manager:v1.18.20
k8s.gcr.io/kube-scheduler:v1.18.20
k8s.gcr.io/kube-proxy:v1.18.20
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

我們使用docker拉取鏡像隧枫,但是由于國內(nèi)正常訪問不到k8s.cgr.io,可以替換阿里加速鏡像地址:registry.aliyuncs.com/google_containers谓苟,執(zhí)行如下命令

docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.20
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.20
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.20
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.18.20
docker pull registry.aliyuncs.com/google_containers/pause:3.2
docker pull registry.aliyuncs.com/google_containers/etcd:3.4.3-0
docker pull registry.aliyuncs.com/google_containers/coredns:1.6.7

接下來給鏡像重命名官脓,使其和原kubeadm需要的鏡像名稱一致

docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.20 k8s.gcr.io/kube-apiserver:v1.18.20
docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.20 k8s.gcr.io/kube-controller-manager:v1.18.20
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.20 k8s.gcr.io/kube-scheduler:v1.18.20
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.18.20 k8s.gcr.io/kube-proxy:v1.18.20
docker tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker tag registry.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag registry.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

再刪除掉從阿里云下載的鏡像

docker rmi registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.20
docker rmi registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.20
docker rmi registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.20
docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.18.20
docker rmi registry.aliyuncs.com/google_containers/pause:3.2
docker rmi registry.aliyuncs.com/google_containers/etcd:3.4.3-0
docker rmi registry.aliyuncs.com/google_containers/coredns:1.6.7

三、k8s集群初始化

1. 初始化master節(jié)點

在master節(jié)點上執(zhí)行初始化命令

kubeadm init --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16  --ignore-preflight-errors=Swap

參數(shù)說明

  • --service-cidr:k8s中scv網(wǎng)絡(luò)的網(wǎng)絡(luò)段
  • --pod-network-cidr:k8s中pod使用的網(wǎng)絡(luò)段
  • --ignore-preflight-errors:忽略swap報錯

初始化結(jié)果如下

Your Kubernetes control-plane 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/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.64.8:6443 --token mzolyd.fgbta1hw9s9yml55 \
    --discovery-token-ca-cert-hash sha256:21ffa3a184bb6ed36306b483723c37169753f9913e645dc4f88bb12afcebc9dd

2. 配置集群網(wǎng)絡(luò)

根據(jù)初始化結(jié)果提示涝焙,我們需要安裝網(wǎng)絡(luò)插件卑笨。本次我們使用flannel作為集群的網(wǎng)絡(luò)插件,將flannel配置文件從互聯(lián)網(wǎng)保存到master1仑撞,文件地址為:https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml赤兴,在master1上將文件命名為kube-flannel.yml,后執(zhí)行以下命令

kubectl apply -f kube-flannel.yml

如看到如下信息隧哮,即網(wǎng)絡(luò)插件安裝成功

podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

3. 讓Linux普通用戶能操作集群

根據(jù)初始化結(jié)果提示桶良,為了讓master1上的Linux普通用戶正常操作集群,我們輸入exit按回車切換回普通用戶后執(zhí)行以下命令

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

4. 初始化集群工作節(jié)點

同時沮翔,初始化集群管理節(jié)點master1之后陨帆,我們需要將工作節(jié)點worker1和wroker2加入到集群中。將工作節(jié)點的初始化命令拷貝到worker1和worker2采蚀,使集群的工作節(jié)點(worker1疲牵、worker2)和工作節(jié)點(master1)關(guān)聯(lián)起來,如下命令

kubeadm join 192.168.64.8:6443 --token mzolyd.fgbta1hw9s9yml55 \
    --discovery-token-ca-cert-hash sha256:21ffa3a184bb6ed36306b483723c37169753f9913e645dc4f88bb12afcebc9dd

在工作節(jié)點執(zhí)行初始化命令之后搏存,我們在管理節(jié)點使用kubectl get pods --all-namespaces查看結(jié)果瑰步,如下結(jié)果

root@master1:/home/ubuntu# kubectl get pods --all-namespaces
NAMESPACE     NAME                              READY   STATUS    RESTARTS   AGE
kube-system   coredns-66bff467f8-pw9br          1/1     Running   0          13m
kube-system   coredns-66bff467f8-wsj45          1/1     Running   0          13m
kube-system   etcd-master1                      1/1     Running   0          14m
kube-system   kube-apiserver-master1            1/1     Running   0          14m
kube-system   kube-controller-manager-master1   1/1     Running   0          14m
kube-system   kube-flannel-ds-c4jnh             1/1     Running   0          3m39s
kube-system   kube-flannel-ds-rg58c             1/1     Running   0          3m14s
kube-system   kube-flannel-ds-sw85v             1/1     Running   0          3m15s
kube-system   kube-proxy-ddk88                  1/1     Running   0          3m15s
kube-system   kube-proxy-dt825                  1/1     Running   0          13m
kube-system   kube-proxy-jgm4h                  1/1     Running   0          3m14s
kube-system   kube-scheduler-master1            1/1     Running   0          14m

需要注意的是,如果你的列表中顯示的所有pod并不是處于Running狀態(tài)璧眠,你需要等待一段時間。而且读虏,你在安裝集群的過程中责静,最好處于一個優(yōu)質(zhì)的網(wǎng)絡(luò)環(huán)境。

至此盖桥,集群搭建完畢灾螃。從下一篇文章開始我們將繼續(xù)介紹k8s基礎(chǔ)知識

本文原創(chuàng)首發(fā)自wx訂閱號:極客開發(fā)者up,禁止轉(zhuǎn)載

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末揩徊,一起剝皮案震驚了整個濱河市腰鬼,隨后出現(xiàn)的幾起案子嵌赠,更是在濱河造成了極大的恐慌,老刑警劉巖熄赡,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姜挺,死亡現(xiàn)場離奇詭異,居然都是意外死亡彼硫,警方通過查閱死者的電腦和手機炊豪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拧篮,“玉大人词渤,你說我怎么就攤上這事〈ǎ” “怎么了缺虐?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長礁凡。 經(jīng)常有香客問我志笼,道長,這世上最難降的妖魔是什么把篓? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任纫溃,我火速辦了婚禮,結(jié)果婚禮上韧掩,老公的妹妹穿的比我還像新娘紊浩。我一直安慰自己,他們只是感情好疗锐,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布坊谁。 她就那樣靜靜地躺著,像睡著了一般滑臊。 火紅的嫁衣襯著肌膚如雪口芍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天雇卷,我揣著相機與錄音鬓椭,去河邊找鬼。 笑死关划,一個胖子當(dāng)著我的面吹牛小染,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贮折,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼裤翩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了调榄?” 一聲冷哼從身側(cè)響起踊赠,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤呵扛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筐带,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體今穿,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年烫堤,在試婚紗的時候發(fā)現(xiàn)自己被綠了荣赶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸽斟,死狀恐怖拔创,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情富蓄,我是刑警寧澤剩燥,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站立倍,受9級特大地震影響灭红,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜口注,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一变擒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寝志,春花似錦娇斑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乐导,卻和暖如春苦丁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背物臂。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工旺拉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹦聪。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓账阻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泽本。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容

  • k8s的搭建難度很大姻僧,這里的教程是結(jié)合是視頻规丽,博客蒲牧,官網(wǎng)各種折騰,耗時一個五一假期折騰出來的赌莺,遇到問題不要灰心冰抢,因...
    筆記本一號閱讀 2,989評論 1 12
  • 部署一套完整的企業(yè)級K8s集群 一、準(zhǔn)備環(huán)境 服務(wù)器要求: ? 建議最小硬件配置:4核CPU艘狭、4G內(nèi)存挎扰、50G硬盤...
    菜頭_355f閱讀 5,278評論 0 4
  • 個人筆記,僅供參考巢音,他人按此步驟不一定能順利搭建 1遵倦、配置阿里云docker源,安裝組件官撼,安裝docker-ce(...
    字伯約閱讀 807評論 0 0
  • 表情是什么梧躺,我認(rèn)為表情就是表現(xiàn)出來的情緒。表情可以傳達很多信息傲绣。高興了當(dāng)然就笑了掠哥,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 125,059評論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險厭惡者秃诵,不喜歡去冒險续搀,但是人生放棄了冒險,也就放棄了無數(shù)的可能菠净。 ...
    yichen大刀閱讀 6,052評論 0 4