Kubernetes(K8S)入門(mén)與安裝配置

什么是K8S

Kubernetes 是一個(gè)跨主機(jī)集群的開(kāi)源的容器調(diào)度平臺(tái)昧捷,它可以自動(dòng)化應(yīng)用容器的部署、擴(kuò)展和操作 , 提供以容器為中心的基礎(chǔ)架構(gòu)。谷歌旗下開(kāi)源軟件唆涝,江湖人稱K8S。

K8S能做什么

  • 自動(dòng)化容器部署和復(fù)制
  • 隨時(shí)擴(kuò)展和收縮容器規(guī)模
  • 容器分組Group唇辨,并且提供容器間的負(fù)載均衡
  • 實(shí)時(shí)監(jiān)控廊酣,及時(shí)故障發(fā)現(xiàn),自動(dòng)替換
    只需要通過(guò)腳本規(guī)劃好容器在哪臺(tái)服務(wù)器運(yùn)行赏枚、運(yùn)行多少副本亡驰,K8S都能自動(dòng)創(chuàng)建部署,K8S還支持自動(dòng)或者手動(dòng)的調(diào)節(jié)容器規(guī)模饿幅,例如數(shù)據(jù)庫(kù)壓力大時(shí)凡辱,動(dòng)態(tài)增加數(shù)據(jù)的計(jì)算單元,服務(wù)器壓力小時(shí)動(dòng)態(tài)縮減tomcat的數(shù)量栗恩。K8S還支持容器間的負(fù)載均衡透乾,通常在項(xiàng)目中做集群部署,大多使用Nginx做前置服務(wù)器分發(fā)請(qǐng)求磕秤,但是現(xiàn)在完全可以交給K8S去做負(fù)載均衡续徽,因?yàn)镵8S提供了容器間的負(fù)載均衡。K8S還支持實(shí)時(shí)監(jiān)控亲澡,自動(dòng)處理故障钦扭,當(dāng)某個(gè)應(yīng)用服務(wù)掛掉時(shí),K8S會(huì)剔除掉對(duì)應(yīng)服務(wù)并嘗試自動(dòng)重啟服務(wù)床绪。

K8S的幾個(gè)關(guān)鍵概念

  • pod
  • container(容器)
  • Label(標(biāo)簽)
  • Replication Controller(復(fù)制控制器)
  • service(服務(wù))
  • Node(節(jié)點(diǎn))
  • Kubernetes Master(K8S主節(jié)點(diǎn))
k8s架構(gòu)圖

上圖是一個(gè)通過(guò)K8S搭建的集群環(huán)境客情,采用三臺(tái)物理機(jī)搭建(三臺(tái)機(jī)器是K8S搭建集群的最低要求),我先簡(jiǎn)單介紹一下幾個(gè)重點(diǎn)名詞癞己。

  1. Kubernetes Master 是K8S的主服務(wù)器膀斋,容器的部署、發(fā)布痹雅、復(fù)制都是通過(guò)它發(fā)起的命令仰担,一般是部署在單獨(dú)的物理機(jī)上。同時(shí)所有外界的數(shù)據(jù)包也都是先經(jīng)過(guò)Kubernetes Master绩社,由它來(lái)進(jìn)行分配摔蓝。

  2. Node 是集群的節(jié)點(diǎn),它可以是一個(gè)獨(dú)立的物理機(jī)愉耙,也可以是一個(gè)虛擬機(jī)贮尉,在每個(gè)節(jié)點(diǎn)中都有一個(gè)以上的pod。Node里面的功能都是通過(guò)docker朴沿、kubelet猜谚、kube-proxy這三個(gè)應(yīng)用程序?qū)崿F(xiàn)败砂。

    • docker,K8S容器編排技術(shù)就是dokcer容器實(shí)現(xiàn)的魏铅,必備組件昌犹。
    • kubelet是用來(lái)處理master 下發(fā)的任務(wù), 管理pod 中的容器, 注冊(cè)自身所在的節(jié)點(diǎn),以系統(tǒng)服務(wù)的方式呈現(xiàn)览芳。
    • kube-proxy用于實(shí)現(xiàn)K8S跨主機(jī)跨容器的網(wǎng)路通信斜姥,之前我們提到的Pod與Pod之間、容器與容器之間(Pause)的通信都是通過(guò)它來(lái)實(shí)現(xiàn)路操。
  1. pod是K8S獨(dú)有的概念疾渴,也是最基礎(chǔ)最重要的概念。 中文釋義有豆莢屯仗,豌豆的意思搞坝。它是K8S里面最小的控制單元,相比docker中容器是最小的控制單元魁袜,他們之間又有什么聯(lián)系與區(qū)別呢?
    • Pod是“容器”的容器桩撮,可以包含多個(gè)”Container”,這就是與docker容器的區(qū)別峰弹,Pod就像一個(gè)豌豆莢包含了多個(gè)豆子店量,他包含了多個(gè)容器

    • Pod是K8S最小可部署單元,一個(gè)Pod就是一個(gè)進(jìn)程鞠呈,擁有自己獨(dú)立的資源

    • Pod都是部署完整的應(yīng)用或模塊融师,一般情況下一個(gè)Pod中應(yīng)該是一整套完整的服務(wù),或者一整套功能性的模塊

    • Pod內(nèi)部容器網(wǎng)絡(luò)互通的(通過(guò)Pause實(shí)現(xiàn))蚁吝,每個(gè)Pod都有獨(dú)立虛擬IP旱爆,Pod與Pod之間的通信通過(guò)Service服務(wù)實(shí)現(xiàn),所有的通信底層都是基于kube-proxy的窘茁。

      1. Pause是Pod的組成部分之一怀伦,Pause的一個(gè)作用是讓同一個(gè)Pod的容器間可以直接使用localhost加端口號(hào)的形式互相訪問(wèn)
      2. Pause還提供同一個(gè)Pod內(nèi)所有容器的公共數(shù)據(jù)卷掛載功能
pod內(nèi)部組成圖
  1. Label 標(biāo)簽可以理解為每一個(gè)Pod的別名
  2. Replication Controller 復(fù)制控制器的職責(zé)是對(duì)Pod數(shù)量進(jìn)行監(jiān)控,例如我們命令中需要三個(gè)Pod山林,但是現(xiàn)在只有兩個(gè)房待,那么Replication Controller會(huì)自動(dòng)創(chuàng)建一個(gè)新的Pod,當(dāng)它發(fā)現(xiàn)某個(gè)Pod沒(méi)有響應(yīng)時(shí)驼抹,Replication Controller會(huì)自動(dòng)剔除這個(gè)Pod桑孩,如果有必要會(huì)創(chuàng)建新的Pod。它讓我們可以通過(guò)一個(gè)參數(shù)直接修改Pod的數(shù)量砂蔽。

K8S安裝教程

環(huán)境準(zhǔn)備

Centos 7 Master * 1 (注意必須是雙核以上的CPU洼怔,否則無(wú)法初始化K8S)

  • 192.168.220.131

Centos 7 Node * 2

  • 192.168.220.132
  • 192.168.220.133
  1. 設(shè)置主機(jī)名與時(shí)區(qū)
timedatectl set-timezone Asia/Shanghai 
hostnamectl set-hostname master   #131執(zhí)行
hostnamectl set-hostname node1    #132執(zhí)行
hostnamectl set-hostname node2    #133執(zhí)行
  1. 為了便于區(qū)分,三臺(tái)機(jī)器均配置以下hosts
vim  /etc/hosts
192.168.220.131 master
192.168.220.132 node1
192.168.220.133 node2
  1. 關(guān)閉Linux自帶的安全增強(qiáng)模塊左驾,設(shè)置臨時(shí)生效,并且關(guān)閉防火墻
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl disable firewalld
systemctl stop firewalld

K8S安裝前置環(huán)境配置(三臺(tái)機(jī)器都要執(zhí)行)

  1. 將鏡像包上傳至服務(wù)器每個(gè)節(jié)點(diǎn),里面包含了K8S诡右、docker安岂、以及各類配置文件,后面會(huì)有概述各個(gè)文件的作用帆吻。
mkdir /usr/local/k8s-install
cd /usr/local/k8s-install

將文件上傳至該目錄
網(wǎng)盤(pán)地址:https://pan.baidu.com/s/1NiAdf0Gp24qjVx2v_HqqyQ
提取碼:aew7

  1. 每個(gè)Centos上安裝Docker域那,注意不要使用19.0以上的docker版本,目前最新的1.15版本K8S也暫時(shí)不支持19.0的版本
cd /usr/local/k8s-install/kubernetes-1.14
tar -zxvf docker-ce-18.09.tar.gz
cd docker 
yum localinstall -y *.rpm   #加載當(dāng)前目錄下的所有rpm文件自動(dòng)完成安裝
systemctl start docker
systemctl enable docker
  1. 確保cgroup driver都是 groupfs
  • cgroups是control groups的簡(jiǎn)稱猜煮,它為L(zhǎng)inux內(nèi)核提供了一種任務(wù)聚集和劃分的機(jī)制次员,通過(guò)一組參數(shù)集合將一些任務(wù)組織成一個(gè)或多個(gè)子系統(tǒng)。
  • cgroups是實(shí)現(xiàn)IaaS虛擬化(kvm王带、lxc等)淑蔚,PaaS容器沙箱(Docker等)的資源管理控制部分的底層基礎(chǔ)。
  • 子系統(tǒng)是根據(jù)cgroup對(duì)任務(wù)的劃分功能將任務(wù)按照一種指定的屬性劃分成的一個(gè)組愕撰,主要用來(lái)實(shí)現(xiàn)資源的控制刹衫。
  • 在cgroup中,劃分成的任務(wù)組以層次結(jié)構(gòu)的形式組織搞挣,多個(gè)子系統(tǒng)形成一個(gè)數(shù)據(jù)結(jié)構(gòu)中類似多根樹(shù)的結(jié)構(gòu)带迟。cgroup包含了多個(gè)孤立的子系統(tǒng),每一個(gè)子系統(tǒng)代表單一的資源
    雖然在現(xiàn)在版本的K8S會(huì)提示使用Linux自帶的“Systemd”做為cgroup driver囱桨,但Systemd與cgroupfs作用相同仓犬,只不過(guò)cgroupfs是docker自帶的,而systemd是linux系統(tǒng)自帶的舍肠。早期k8s并沒(méi)有建議使用Systemd搀继,所以一直沿用到1.14。除非是極端情況下貌夕,默認(rèn)使用docker自帶的cgroupfs即可律歼。

執(zhí)行以下命令

docker info | grep cgroup 

如果不是groupfs,執(zhí)行下列語(yǔ)句

cat << EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=cgroupfs"]
}
EOF
systemctl daemon-reload && systemctl restart docker\
  1. 安裝kubeadm,kubeadm是集群部署管理工具啡专,可用來(lái)安裝K8S的一個(gè)工具险毁,極大簡(jiǎn)化安裝流程
cd /usr/local/k8s-install/kubernetes-1.14
tar -zxvf kube114-rpm.tar.gz
cd kube114-rpm
yum localinstall -y *.rpm
  1. 關(guān)閉交換區(qū),Linux的交換區(qū)類似windows系統(tǒng)中虛擬內(nèi)存们童,不太建議使用這個(gè)選項(xiàng)畔况,關(guān)閉掉
swapoff -a
vi /etc/fstab 

將最后一行注釋

image.png
  1. 配置網(wǎng)橋,iptables是Linux的一個(gè)網(wǎng)絡(luò)規(guī)則慧库,對(duì)我們的包按規(guī)則進(jìn)行過(guò)濾跷跪。該配置讓K8S容器間通過(guò)網(wǎng)橋通訊的時(shí)候也要遵循iptables的規(guī)則,提高網(wǎng)絡(luò)傳輸安全性
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
  1. 加載k8s的docker鏡像
cd /usr/local/k8s-install/kubernetes-1.14

docker load -i k8s-114-images.tar.gz  #加載K8S鏡像
docker load -i flannel-dashboard.tar.gz  #集群可視化管理組件

運(yùn)行docker images可以看到以下幾個(gè)關(guān)鍵應(yīng)用

image.png

kube-proxy 容器間通訊代理齐板、kube-apiserver API服務(wù)端吵瞻、kube-scheduler 任務(wù)調(diào)度器葛菇、kube-controller-manager 集群控制器、coredns K8S內(nèi)置的 DNS 服務(wù)器橡羞、etcd 用于保存集群所有的網(wǎng)絡(luò)配置和對(duì)象的狀態(tài)信息眯停、pause前面已經(jīng)提到用于容器間的通訊以及數(shù)據(jù)卷的掛載。至此K8S安裝完成

K8S集群安裝配置

  1. master主服務(wù)器配置卿泽,kubernetes-version表示安裝K8S的版本莺债,pod-network-cidr設(shè)置pod的虛擬IP范圍
kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16

圖中的第一個(gè)紅框的命令是需要管理員手動(dòng)復(fù)制,然后在master服務(wù)器上執(zhí)行的签夭。

  mkdir -p $HOME/.kube    #創(chuàng)建.kube目錄
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config    #拷貝admin.conf文件到剛剛創(chuàng)建的目錄
  sudo chown $(id -u):$(id -g) $HOME/.kube/config    #進(jìn)行相應(yīng)的授權(quán)

PS: admin.conf是kubeadm集群管理的核心配置文件齐邦,包含整個(gè)集群各個(gè)節(jié)點(diǎn)的授權(quán)信息,以及本身的一些配置信息

第二個(gè)紅框中的命令是在node節(jié)點(diǎn)上執(zhí)行第租,里面包含了一個(gè)加入集群的token認(rèn)證信息以及ca證書(shū)的hashcode措拇。通過(guò)該token可以加入K8S集群.

  1. 執(zhí)行 kubectl get nodes 查看當(dāng)前集群的所有節(jié)點(diǎn)

從圖中看到master節(jié)點(diǎn)處于NotReady狀態(tài),說(shuō)明節(jié)點(diǎn)中存在有問(wèn)題的Pod煌妈,查看存在問(wèn)題的pod儡羔,執(zhí)行以下命令查看所有Pod狀態(tài)

kubectl get pod --all-namespaces

如果某個(gè)Pod的STATUS處于CrashLoopBackOff狀態(tài)表示創(chuàng)建失敗了,那么它會(huì)不斷自動(dòng)重新創(chuàng)建璧诵。上圖中兩個(gè)coredns處于pending狀態(tài)汰蜘,原因是我們沒(méi)有配置K8S網(wǎng)絡(luò)通訊協(xié)議fannel,從上傳的文件中加載并創(chuàng)建flannel網(wǎng)絡(luò)組件

kubectl create -f kube-flannel.yml

3.在node節(jié)點(diǎn)上執(zhí)行剛剛由kubeadm生成的節(jié)點(diǎn)加入命令

kubeadm join 192.168.220.131:6443 --token 25x9dp.3k4ysps4xeuv7lm5 \
    --discovery-token-ca-cert-hash sha256:ef7751d4347df3a8b401c53588c8ee8376cb100c7f14c550c2d175a266b8b6a9 

如果出現(xiàn)反復(fù)無(wú)法加入節(jié)點(diǎn)的情況之宿,運(yùn)行 kubeadm reset 這條命令還原當(dāng)前節(jié)點(diǎn)上 kubeadm init 或者 kubeadm join 所做的所有更改族操。當(dāng)想加入新節(jié)點(diǎn)忘記token時(shí)可以使用 kubeadm token list 查看token,或者 kubeadm token create創(chuàng)建token,采用跳過(guò)ca安全認(rèn)證的方式加入節(jié)點(diǎn)比被。

kubeadm join 192.168.220.131:6443 --token 25x9dp.3k4ysps4xeuv7lm5  --discovery-token-unsafe-skip-ca-verification

4.三臺(tái)機(jī)器設(shè)置kubelet開(kāi)機(jī)自啟,至此通過(guò)kubeadm集群配置完成

systemctl enable kubelet

安裝K8S可視化儀表盤(pán)

在主節(jié)點(diǎn)上執(zhí)行以下命令色难,以下三個(gè)配件都是已經(jīng)配置好的,裝載即可等缀。

kubectl apply -f kubernetes-dashboard.yaml  # web-ui 配置文件
kubectl apply -f admin-role.yaml  # 角色配置
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml #角色的權(quán)限配置
kubectl -n kube-system get svc  #獲取系統(tǒng)命名空間下的所有服務(wù)

圖中dashboard服務(wù)已經(jīng)被創(chuàng)建枷莉,配置文件中關(guān)閉了密碼驗(yàn)證,只需要瀏覽器打開(kāi) http://192.168.220.131:32000無(wú)需登錄尺迂。

K8S儀表盤(pán)
進(jìn)入docker
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笤妙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子噪裕,更是在濱河造成了極大的恐慌蹲盘,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膳音,死亡現(xiàn)場(chǎng)離奇詭異召衔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)祭陷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)苍凛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)趣席,“玉大人,你說(shuō)我怎么就攤上這事毫深》园樱” “怎么了毒姨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵哑蔫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我弧呐,道長(zhǎng)闸迷,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任俘枫,我火速辦了婚禮腥沽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸠蚪。我一直安慰自己今阳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布茅信。 她就那樣靜靜地躺著盾舌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蘸鲸。 梳的紋絲不亂的頭發(fā)上妖谴,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音酌摇,去河邊找鬼膝舅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窑多,可吹牛的內(nèi)容都是我干的仍稀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼埂息,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼技潘!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起耿芹,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤崭篡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后吧秕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體琉闪,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年砸彬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颠毙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斯入。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蛀蜜,靈堂內(nèi)的尸體忽然破棺而出刻两,到底是詐尸還是另有隱情,我是刑警寧澤滴某,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布磅摹,位于F島的核電站,受9級(jí)特大地震影響霎奢,放射性物質(zhì)發(fā)生泄漏户誓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一幕侠、第九天 我趴在偏房一處隱蔽的房頂上張望帝美。 院中可真熱鬧,春花似錦晤硕、人聲如沸悼潭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舰褪。三九已至,卻和暖如春创译,著一層夾襖步出監(jiān)牢的瞬間抵知,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工软族, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刷喜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓立砸,卻偏偏與公主長(zhǎng)得像掖疮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颗祝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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