K8s(Kubernetes)簡介及安裝部署

前言:


k8s是Kubernetes的簡稱,因爲K和S之間有8個字母,所以纔會被稱爲k8s。

k8s最初是在Google公司內部使用了10多年的技術,它的前身是叫做Borg(博格),直到2015年才被Google公司捐贈爲開源項目。

如果之前我們有接觸過OpenStack,那麼應該知道管理VM虛擬機資源可以用OpenStack。那麼管理容器所對應的開源平臺是什麼呢?k8s就是其中之一,在k8s之前也有很多容器管理平臺,有docker自身的docker swarm,也有apache推出的Mesos等等。相比較而言,雖然k8s比其他推出的晚了些,但是絲毫不影響其火爆程度,除了其功能強大外,更何況它還有個好爹。

關於k8s更詳細的介紹,可以移步至k8s中文文檔或者k8s官方網站 ,以便查看更多資料。

接下來開始安裝部署k8s。

博文大綱:
一、環境準備
二、部署前準備

  • 1、檢查docker版本、關閉防火牆及Selinux、清空iptables規則、禁用Swap交換分區
  • 2、配置ssh免密登錄、主機名解析及yum源
  • 3、打開iptables橋接功能及路由轉發
    三、配置k8s羣集
  • 1、安裝部署k8s相關工具
  • 2、初始化k8s集羣
  • 3、配置master節點狀態
  • 4、配置node01及node02加入master羣集
  • 5、部署後的優化配置

一、環境準備

K8s(Kubernetes)簡介及安裝部署

注:上述三臺centos 7.3服務器,均運行docker服務,如果是測試環境,那麼內存最少2G,CPU至少雙核,並且docker服務的版本不建議過高,最好是18.09及以下。

如需部署docker服務,可參考博文:Docker的安裝詳細配置

二、部署前準備

1、檢查docker版本、關閉防火牆及Selinux、清空iptables規則、禁用Swap交換分區

注:以下操作需要在三臺docker主機上分別配置一次,哪怕是在生產環境,都需要進行以下操作,因爲k8s有它自己的安全策略。

[root@master ~]# docker -v       #確認docker版本
Docker version 18.09.0, build 4d60db4
#關閉防火牆
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
#關閉Selinux
[root@master ~]# setenforce 0    
[root@master ~]# vim /etc/sysconfig/selinux 
SELINUX=disabled          #將此處改爲disabled
[root@master ~]# iptables -F    #清空iptables規則
#重啓docker服務
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
#禁用swap交換分區
[root@master ~]# swapoff -a   #臨時禁用swap
[root@master ~]# vim /etc/fstab     #打開自動掛載的配置文件,將swap配置項註釋掉
#/dev/mapper/cl-swap     swap                    swap    defaults        0 0
#就註釋掉上面那行
[root@node02 ~]# mount -a    #重新加載掛載的配置文件
[root@node02 ~]# free -h     #確認輸出的swap行如下(都爲0):
Swap:            0B          0B          0B

2、配置ssh免密登錄、主機名解析及yum源

注:以下沒有特別說明的操作,在master主機上操作即可

[root@master ~]# tail -3 /etc/hosts        #在該文件添加三臺主機的解析
192.168.20.6 master
192.168.20.7 node01
192.168.20.8 node02
#配置ssh免密登錄(爲了方便在主機間複製配置文件,可不做)
[root@master ~]# ssh-keygen -t rsa  
[root@master ~]# ssh-copy-id node01
[root@master ~]# ssh-copy-id node02
#將更改後的hosts文件發送到node01及node02
[root@master ~]# scp /etc/hosts node01:/etc/
[root@master ~]# scp /etc/hosts node02:/etc/
#接下來配置yum源
[root@master ~]# vim /etc/yum.repos.d/kubernetes.repo  #編輯yum文件
[kubernetes]
name=kubneters
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
#以上url是阿里開源鏡像站,可複製網址自行查看
[root@master yum.repos.d]# yum repolist    #查看剛剛配置的yum源中有沒有可用的包
kubernetes               kubneters                      421  #返回的這一行不可爲0
[root@master yum.repos.d]# yum makecache    #製作yum元數據緩存
#將yum源的配置文件複製到另外兩臺節點主機上
[root@master ~]# scp /etc/yum.repos.d/kubernetes.repo node01:/etc/yum.repos.d/
[root@master ~]# scp /etc/yum.repos.d/kubernetes.repo node02:/etc/yum.repos.d/
#在另外兩臺主機上,都需執行以下兩條命令
[root@node01 ~]# yum repolist
kubernetes               kubneters                      421  #返回的這一行不可爲0
[root@node01 ~]# yum makecache

3、打開iptables橋接功能及路由轉發

同樣,沒有特別說明的配置,在master上進行配置即可。

#打開iptables橋接功能
[root@master ~]# vim /etc/sysctl.d/k8s.conf    #寫入以下配置
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf   #刷新配置
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
# PS:如果報錯“找不到文件”,需要執行下面的命令以便加載一個模塊。
[root@master ~]# modprobe br_netfilter    #加載br_netfileter模塊
#將配置的k8s.conf文件複製到另外兩臺節點
#將配置文件複製到另外兩臺節點後,需要在node01及02上分別執行下面的命令進行刷新
[root@node02 ~]# sysctl -p /etc/sysctl.d/k8s.conf     #刷新配置文件
#接下來開啓路由轉發(三臺docker主機上都需要進行以下操作)
[root@master ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
#開啓路由轉發
[root@master ~]# sysctl -p    #刷新配置
net.ipv4.ip_forward = 1

配置至此,部署前的工作就完成了。

在進行接下來的操作前,需要先下載我提供的鏡像。

三、配置k8s羣集

1、安裝部署k8s相關工具

注:以下操作在master主機上進行

[root@master ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0 kubectl-1.15.0-0  
#安裝k8s的master所需組件
[root@master ~]# systemctl enable kubelet   
#將kubelet加入開機自啓,但現在不要啓動
[root@master ~]# mkdir images     
[root@master ~]# cd images/
[root@master images]# rz   #上傳我提供的所有鏡像包,共8個鏡像包
[root@master images]# ls   #確認上傳的鏡像包
coredns-1-3-1.tar         kube-proxy-1-15.tar
etcd-3-3-10.tar           kube-scheduler-1-15.tar
kube-apiserver-1-15.tar   myflannel-11-0.tar
kube-controller-1-15.tar  pause-3-1.tar
#接下來導入上傳的鏡像包到docker鏡像中
[root@master images]# docker load < coredns-1-3-1.tar 
[root@master images]# docker load < etcd-3-3-10.tar 
[root@master images]# docker load < kube-apiserver-1-15.tar 
[root@master images]# docker load < kube-controller-1-15.tar 
[root@master images]# docker load < kube-proxy-1-15.tar 
[root@master images]# docker load < kube-scheduler-1-15.tar 
[root@master images]# docker load < pause-3-1.tar 
[root@master images]# docker load < myflannel-11-0.tar

2、初始化k8s集羣

[root@master images]# kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.224.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
                    <!--
這裏指定的版本必須和前面yum安裝的版本一致。指定的兩個網絡則是官方建議使用的網段
如果執行上述命令後,返回CPU相關的報錯信息,那麼需要調大CPU的核心數
初始化成功後,首先複製下面返回的這條命令,並妥善保存
                                              -->
kubeadm join 192.168.20.6:6443 --token xfp7g5.6f2bdfjybt8a1j7r \
    --discovery-token-ca-cert-hash sha256:17895c549344a83daae4318360dc9c9212b5dc3b1fb7d79ef84a640c63e489e2 
                    <!--
上面這條命令是用來其他節點加入到當前k8s羣集中需要執行的
一旦丟失,特別麻煩,並且只有24小時有效期,每次初始化羣集後產生的都不一樣
                                              -->
                <!--
接下來呢,依次執行返回的其他指令,如下(由於我是root用戶,所以就省略了sudo指令):
                                    -->
[root@master images]# mkdir -p $HOME/.kube
[root@master images]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master images]# chown $(id -u):$(id -g) $HOME/.kube/config

返回的信息截圖如下,供參考:

K8s(Kubernetes)簡介及安裝部署

3、配置master節點狀態

[root@master images]# kubectl get nodes    #查看羣集節點信息
NAME     STATUS     ROLES    AGE   VERSION
master   NotReady   master   14m   v1.15.0
#可以看到master當前狀態爲未準備

接下來可以去github官網進行以下操作以便查看相應的命令:

K8s(Kubernetes)簡介及安裝部署

K8s(Kubernetes)簡介及安裝部署

點擊進入後,下拉頁面到以下位置,並複製指定的命令到master節點執行一下:
K8s(Kubernetes)簡介及安裝部署

[root@master images]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#執行在github官網複製的命令

以上只是方式之一,在網絡狀況良好的情況下建議使用上述方法(調用遠端文件執行一下),若網速較差,建議使用以下方法:

[root@master images]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#將github官網指定的.yml配置文件下載到本地
[root@master images]# ls | grep flannel.yml   #確定下載到了當前目錄
kube-flannel.yml
[root@master images]# kubectl apply -f kube-flannel.yml  #指定下載的.yml文件執行相應命令

上述方法,二選一進行配置即可。

[root@master images]# kubectl get nodes   #再次查看master狀態,發現已經成爲了“Ready”
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   30m   v1.15.0
[root@master images]# ls /etc/kubernetes/    #k8s的配置文件目錄
[root@master images]# ls /etc/kubernetes/manifests/   #k8s的.yaml文件存放目錄

4、配置node01及node02加入master羣集

以下操作需要在node01及node02分別執行一次

[root@node01 ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0
#安裝k8s相關組件
[root@node01 ~]# systemctl enable kubelet.service    #設置爲開機自啓
[root@node01 ~]# mkdir images
[root@node01 ~]# cd images/
[root@node01 images]# rz   #上傳我提供的鏡像文件,共三個,是下面 ls 命令查看的三個

[root@node01 images]# ls    #需要上傳的鏡像文件如下
kube-proxy-1-15.tar  myflannel-11-0.tar  pause-3-1.tar
[root@node01 images]# docker load < kube-proxy-1-15.tar
[root@node01 images]# docker load < myflannel-11-0.tar
[root@node01 images]# docker load < pause-3-1.tar
[root@node01 images]# kubeadm join 192.168.20.6:6443 --token xfp7g5.6f2bdfjybt8a1j7r --discovery-token-ca-cert-hash sha256:17895c549344a83daae4318360dc9c9212b5dc3b1fb7d79ef84a640c63e489e2
#執行master初始化羣集時返回的命令,以便加入到master的羣集中

返回以下信息,則表示加入成功:

K8s(Kubernetes)簡介及安裝部署

自行將上述配置在node02主機上配置一次即可

當在node01及node02依次配置完成後,即可在master上進行查看節點狀態,如下:

[root@master images]# kubectl get nodes    #在master上查看節點信息都爲“Ready”
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   51m     v1.15.0
node01   Ready    <none>   4m19s   v1.15.0
node02   Ready    <none>   4m13s   v1.15.0

5、部署後的優化配置

其實配置至此,K8s已經完成了,但是爲了以後更爲方便的使用k8s,建議優化以下幾項:

  • 設置table鍵的默認間距;
  • 設置kubectl命令自動補全;
  • 優化開機自啓配置。

1)設置table默認間距(該優化只需在master上進行配置即可,由於經常需要編寫.yml文件所以才需要更改table間距)

[root@master images]# cd           #切換至宿主目錄
[root@master ~]# echo "set tabstop=2" >> .vimrc   #將此參數寫入.vimrc文件
[root@master ~]# bash    #切換shell環境,使更改生效

2)設置kubectl命令自動補全(master和node節點都可配置)

[root@master ~]# yum -y install bash-completion
[root@master ~]# source /usr/share/bash-completion/bash_completion 
[root@master ~]# source <(kubectl completion bash)
[root@master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc

3)確認k8s羣集沒有問題,並設置爲開機自啓

master主機操作如下:

[root@master ~]# kubectl get pod -n kube-system   
#查看pod資源,類似於docker中的容器,確保返回的信息都是running
#“-n kube-system”:是k8s的名稱空間

上述命令返回的信息如下:
K8s(Kubernetes)簡介及安裝部署

master和node節點上都需要進行以下操作,以便設置爲開機自啓:

[root@master ~]# systemctl enable kubelet
[root@master ~]# systemctl enable docker 

設置爲開機自啓後,k8s羣集的配置基本完成了,現在可以重啓一下這三臺服務器,如果重啓後,執行下面的命令,狀態都還是running,則表示絕對沒有問題了。

[root@master ~]# kubectl get pod -n kube-system    #重啓後驗證狀態是否還都是running

———————— 本文至此結束,感謝閱讀 ————————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章