Kubernetes——集群環(huán)境搭建

Kubernetes集群幾種部署方式

minikube

Minikube是一個工具窒升,可以在本地快速運行一個單點的Kubernetes,嘗試Kubernetes或日常開發(fā)的用戶使用慕匠。不能用于生產(chǎn)環(huán)境饱须。
部署地址:https://kubernetes.io/docs/setup/minikube/

kubeadm

Kubeadm也是一個工具,提供kubeadm init和kubeadm join台谊,用于快速部署Kubernetes集群冤寿。
部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

二進制

從官方下載發(fā)行版的二進制包,手動部署每個組件青伤,組成Kubernetes集群督怜。
下載地址:https://github.com/kubernetes/kubernetes/releases

小結(jié): 生產(chǎn)環(huán)境中部署Kubernetes集群,有Kubeadm和二進制方式可選狠角,Kubeadm降低部署門檻号杠,但屏蔽了很多細節(jié),遇到問題很難排查丰歌。使用二進制包部署Kubernetes集群姨蟋,雖然手動部署麻煩點,但能學(xué)習(xí)很多工作原理立帖,更有利于后期維護眼溶。

本文使用kubeadm方式部署,二進制部署的方式還是交給專業(yè)的運維去完成吧

Kubernetes集群節(jié)點

環(huán)境規(guī)劃

集群類型

kubernetes集群大體上分為兩類:一主多從多主多從晓勇。

  • 一主多從:一臺Master節(jié)點和多臺Node節(jié)點堂飞,搭建簡單灌旧,但是有單機故障風(fēng)險,適合用于測試環(huán)境绰筛。
  • 多主多從:多臺Master節(jié)點和多臺Node節(jié)點枢泰,搭建麻煩,安全性高铝噩,適合用于生產(chǎn)環(huán)境衡蚂。

主機規(guī)劃

作用 IP地址 操作系統(tǒng) 配置
Master 192.168.109.101 Centos7.9 基礎(chǔ)設(shè)施服務(wù)器 2顆CPU 2G內(nèi)存 30G硬盤
Node1 192.168.109.102 Centos7.9 基礎(chǔ)設(shè)施服務(wù)器 2顆CPU 2G內(nèi)存 30G硬盤
Node2 192.168.109.103 Centos7.9 基礎(chǔ)設(shè)施服務(wù)器 2顆CPU 2G內(nèi)存 30G硬盤

環(huán)境搭建

本次環(huán)境搭建需要安裝三臺Centos服務(wù)器(一主二從),然后在每臺服務(wù)器中分別安裝docker(18.06.3)骏庸,kubeadm(1.17.17)毛甲、kubelet(1.17.17)丽啡、kubectl(1.17.17)程序补箍。

主機安裝

安裝虛擬機過程中注意下面選項的設(shè)置:

  • 操作系統(tǒng)環(huán)境:CPU(2C) 內(nèi)存(2G) 硬盤(30G)

  • 語言選擇:中文簡體

  • 軟件選擇:基礎(chǔ)設(shè)施服務(wù)器

  • 分區(qū)選擇:自動分區(qū)

  • 網(wǎng)絡(luò)配置:按照下面配置網(wǎng)路地址信息

網(wǎng)絡(luò)地址:192.168.171.128 (每臺主機都不一樣 分別為128坑雅、129裹粤、130)
子網(wǎng)掩碼:255.255.255.0
默認(rèn)網(wǎng)關(guān):192.168.171.2
DNS: 223.5.5.5

主機名設(shè)置:按照下面信息設(shè)置主機名

master節(jié)點: master
node節(jié)點: node1
node節(jié)點: node2

環(huán)境初始化

  1. 檢查操作系統(tǒng)的版本
# 此方式下安裝kubernetes集群要求Centos版本要在7.5或之上
[root@master ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

2) 主機名解析
為了方便后面集群節(jié)點間的直接調(diào)用,在這配置一下主機名解析噪叙,企業(yè)中推薦使用內(nèi)部DNS服務(wù)器

# 主機名成解析 編輯三臺服務(wù)器的/etc/hosts文件睁蕾,添加下面內(nèi)容
192.168.171.128  master
192.168.171.129  node1
192.168.171.130  node2

3) 時間同步
kubernetes要求集群中的節(jié)點時間必須精確一致子眶,這里直接使用chronyd服務(wù)從網(wǎng)絡(luò)同步時間臭杰。

企業(yè)中建議配置內(nèi)部的時間同步服務(wù)器

CentOS7 已經(jīng)默認(rèn)安裝有 Chrony 工具渴杆,其既可作時間服務(wù)器服務(wù)端,也可作客戶端脉顿。而且性能比 ntp 要好很多艾疟、配置簡單蔽莱、管理方便盗冷。

# 安裝服務(wù)
[root@master ~]# yum install -y chrony

# 啟動chronyd服務(wù)
[root@master ~]# systemctl start chronyd

# 設(shè)置chronyd服務(wù)開機自啟
[root@master ~]# systemctl enable chronyd

# chronyd服務(wù)啟動稍等幾秒鐘仪糖,就可以使用date命令驗證時間了
[root@master ~]# date

4) 禁用iptables和firewalld服務(wù)
kubernetes和docker在運行中會產(chǎn)生大量的iptables規(guī)則锅劝,為了不讓系統(tǒng)規(guī)則跟它們混淆故爵,直接關(guān)閉系統(tǒng)的規(guī)則

# 1 關(guān)閉firewalld服務(wù)
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld

# 2 關(guān)閉iptables服務(wù)
[root@master ~]# systemctl stop iptables
[root@master ~]# systemctl disable iptables

5) 禁用selinux
selinux是linux系統(tǒng)下的一個安全服務(wù)诬垂,如果不關(guān)閉它结窘,在安裝集群中會產(chǎn)生各種各樣的奇葩問題

# 編輯 /etc/selinux/config 文件晦鞋,修改SELINUX的值為disabled
# 注意修改完畢之后需要重啟linux服務(wù)
SELINUX=disabled

6) 禁用swap分區(qū)
swap分區(qū)指的是虛擬內(nèi)存分區(qū)悠垛,它的作用是在物理內(nèi)存使用完之后娜谊,將磁盤空間虛擬成內(nèi)存來使用

啟用swap設(shè)備會對系統(tǒng)的性能產(chǎn)生非常負(fù)面的影響纱皆,因此kubernetes要求每個節(jié)點都要禁用swap設(shè)備

但是如果因為某些原因確實不能關(guān)閉swap分區(qū),就需要在集群安裝過程中通過明確的參數(shù)進行配置說明

# 編輯分區(qū)配置文件/etc/fstab铛楣,注釋掉swap分區(qū)一行
# 注意修改完畢之后需要重啟linux服務(wù)
 UUID=455cc753-7a60-4c17-a424-7741728c44a1 /boot    xfs     defaults        0 0
 /dev/mapper/centos-home /home                      xfs     defaults        0 0
# /dev/mapper/centos-swap swap                      swap    defaults        0 0

7)修改linux的內(nèi)核參數(shù)

# 修改linux的內(nèi)核參數(shù)簸州,添加網(wǎng)橋過濾和地址轉(zhuǎn)發(fā)功能
# 編輯/etc/sysctl.d/kubernetes.conf文件岸浑,添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

# 重新加載配置
[root@master ~]# sysctl -p

# 加載網(wǎng)橋過濾模塊
[root@master ~]# modprobe br_netfilter

# 查看網(wǎng)橋過濾模塊是否加載成功
[root@master ~]# lsmod | grep br_netfilter

8)配置ipvs功能

在kubernetes中service有兩種代理模型矢洲,一種是基于iptables的读虏,一種是基于ipvs的

兩者比較的話掘譬,ipvs的性能明顯要高一些呻拌,但是如果要使用它藐握,需要手動載入ipvs模塊

# 1 安裝ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadmin -y

# 2 添加需要加載的模塊寫入腳本文件
[root@master ~]# cat <<EOF >  /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

# 3 為腳本文件添加執(zhí)行權(quán)限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules

# 4 執(zhí)行腳本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules

# 5 查看對應(yīng)的模塊是否加載成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4

9) 重啟服務(wù)器
上面步驟完成之后袜炕,需要重新啟動linux系統(tǒng)

[root@master ~]# reboot

安裝docker

# 1 切換鏡像源
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 2 查看當(dāng)前鏡像源中支持的docker版本
[root@master ~]# yum list docker-ce --showduplicates

# 3 安裝特定版本的docker-ce
# 必須指定--setopt=obsoletes=0偎窘,否則yum會自動安裝更高版本
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y

# 4 添加一個配置文件
# Docker在默認(rèn)情況下使用的Cgroup Driver為cgroupfs陌知,而kubernetes推薦使用systemd來代替cgroupfs
[root@master ~]# mkdir /etc/docker
[root@master ~]# cat <<EOF >  /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF

# 5 啟動docker
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker

# 6 檢查docker狀態(tài)和版本
[root@master ~]# docker version

安裝kubernetes組件

# 由于kubernetes的鏡像源在國外仆葡,速度比較慢沿盅,這里切換成國內(nèi)的鏡像源
# 編輯/etc/yum.repos.d/kubernetes.repo,添加下面的配置 
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

# 安裝kubeadm韧掩、kubelet和kubectl
[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y

# 配置kubelet的cgroup
# 編輯/etc/sysconfig/kubelet窖铡,添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

# 4 設(shè)置kubelet開機自啟
[root@master ~]# systemctl enable kubelet

準(zhǔn)備集群鏡像

# 在安裝kubernetes集群之前万伤,必須要提前準(zhǔn)備好集群需要的鏡像呜袁,所需鏡像可以通過下面命令查看
[root@master ~]# kubeadm config images list

# 下載鏡像
# 此鏡像在kubernetes的倉庫中,由于網(wǎng)絡(luò)原因,無法連接阶界,下面提供了一種替代方案
images=(
    kube-apiserver:v1.17.17
    kube-controller-manager:v1.17.17
    kube-scheduler:v1.17.17
    kube-proxy:v1.17.17
    pause:3.1
    etcd:3.4.3-0
    coredns:1.6.5
)

for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName       k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

集群初始化

下面開始對集群進行初始化膘融,并將node節(jié)點加入到集群中

下面的操作只需要在master節(jié)點上執(zhí)行即可

kubeadm init \
    --kubernetes-version=v1.17.17 \
    --pod-network-cidr=10.244.0.0/16 \
    --service-cidr=10.96.0.0/12 \
    --apiserver-advertise-address=192.168.171.128
# 創(chuàng)建必要文件
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

下面的操作只需要在node節(jié)點上執(zhí)行即可

# 將node節(jié)點加入集群
[root@node1 ~]# kubeadm join 192.168.171.128:6443 --token i9r5jx.w55ihha474k2mujp \
>     --discovery-token-ca-cert-hash sha256:7c8e8a7b0d97ca699b69f49aff999d4780c90e08873d6822f51458324db414c3
# 查看集群狀態(tài) 此時的集群狀態(tài)為NotReady氧映,這是因為還沒有配置網(wǎng)絡(luò)插件
[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES    AGE     VERSION
master   NotReady   master   9m16s   v1.17.4
node1    NotReady   <none>   15s     v1.17.4
node2    NotReady   <none>   4s      v1.17.4

安裝網(wǎng)絡(luò)插件

kubernetes支持多種網(wǎng)絡(luò)插件律姨,比如flannel臼疫、calico烫堤、canal等等,任選一種使用即可拔创,本次選擇flannel

下面操作依舊只在master節(jié)點執(zhí)行即可伏蚊,插件使用的是DaemonSet的控制器格粪,它會在每個節(jié)點上都運行

# 獲取fannel的配置文件
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 修改文件中quay.io倉庫為quay-mirror.qiniu.com

# 使用配置文件啟動fannel
[root@master ~]# kubectl apply -f kube-flannel.yml

# 稍等片刻,再次查看集群節(jié)點的狀態(tài)
[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   22m   v1.17.4
node1    Ready    <none>   13m   v1.17.4
node2    Ready    <none>   13m   v1.17.4

至此比伏,kubernetes的集群環(huán)境搭建完成

服務(wù)部署

接下來在kubernetes集群中部署一個nginx程序赁项,測試下集群是否在正常工作悠菜。

# 部署nginx
[root@master ~]# kubectl create deployment nginx --image=nginx:1.20.1

# 暴露端口
[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort

# 查看服務(wù)狀態(tài)
[root@master ~]# kubectl get pods,service
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-5c5fd96bf9-jfv76   1/1     Running   0          47s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        85m
service/nginx        NodePort    10.98.126.27   <none>        80:31976/TCP   10s

4 最后在電腦上訪問下部署的nginx服務(wù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摩窃,一起剝皮案震驚了整個濱河市猾愿,隨后出現(xiàn)的幾起案子账阻,更是在濱河造成了極大的恐慌淘太,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異造成,居然都是意外死亡,警方通過查閱死者的電腦和手機喘蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門蕴轨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來橙弱,“玉大人棘脐,你說我怎么就攤上這事∏炅矗” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長在讶。 經(jīng)常有香客問我,道長革答,這世上最難降的妖魔是什么蝗碎? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮慈省,結(jié)果婚禮上边败,老公的妹妹穿的比我還像新娘笑窜。我一直安慰自己,他們只是感情好嫌蚤,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布脱吱。 她就那樣靜靜地躺著箱蝠,像睡著了一般宦搬。 火紅的嫁衣襯著肌膚如雪间校。 梳的紋絲不亂的頭發(fā)上撇簿,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音汉嗽,去河邊找鬼饼暑。 笑死弓叛,一個胖子當(dāng)著我的面吹牛撰筷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播毕籽,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼关筒,長吁一口氣:“原來是場噩夢啊……” “哼蒸播!你這毒婦竟也來了袍榆?” 一聲冷哼從身側(cè)響起蜡塌,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤劳曹,失蹤者是張志新(化名)和其女友劉穎琅摩,沒想到半個月后房资,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轰异,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡婴削,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年唉俗,在試婚紗的時候發(fā)現(xiàn)自己被綠了虫溜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衡楞。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡寺酪,死狀恐怖坎背,靈堂內(nèi)的尸體忽然破棺而出替劈,到底是詐尸還是另有隱情,我是刑警寧澤得滤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布陨献,位于F島的核電站,受9級特大地震影響懂更,放射性物質(zhì)發(fā)生泄漏眨业。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一沮协、第九天 我趴在偏房一處隱蔽的房頂上張望龄捡。 院中可真熱鬧,春花似錦慷暂、人聲如沸聘殖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庄岖。三九已至邦尊,卻和暖如春链峭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工典予, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捂敌。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親霎终。 傳聞我的和親對象是個殘疾皇子涎劈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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