前言:node
k8s是Kubernetes的簡稱,由於K和S之間有8個字母,因此纔會被稱爲k8s。linux
k8s最初是在Google公司內部使用了10多年的技術,它的前身是叫作Borg(博格),直到2015年才被Google公司捐贈爲開源項目。git
若是以前咱們有接觸過OpenStack,那麼應該知道管理VM虛擬機資源能夠用OpenStack。那麼管理容器所對應的開源平臺是什麼呢?k8s就是其中之一,在k8s以前也有不少容器管理平臺,有docker自身的docker swarm,也有apache推出的Mesos等等。相比較而言,雖然k8s比其餘推出的晚了些,可是絲絕不影響其火爆程度,除了其功能強大外,更況且它還有個好爹。github
關於k8s更詳細的介紹,能夠移步至k8s中文文檔或者k8s官方網站 ,以便查看更多資料。docker
接下來開始安裝部署k8s。shell
博文大綱:
1、環境準備
2、部署前準備apache
- 一、檢查docker版本、關閉防火牆及Selinux、清空iptables規則、禁用Swap交換分區
- 二、配置ssh免密登陸、主機名解析及yum源
- 三、打開iptables橋接功能及路由轉發
3、配置k8s羣集- 一、安裝部署k8s相關工具
- 二、初始化k8s集羣
- 三、配置master節點狀態
- 四、配置node01及node02加入master羣集
- 五、部署後的優化配置
注:上述三臺centos 7.3服務器,均運行docker服務,若是是測試環境,那麼內存最少2G,CPU至少雙核,而且docker服務的版本不建議太高,最好是18.09及如下。vim
如需部署docker服務,可參考博文:Docker的安裝詳細配置centos
注:如下操做須要在三臺docker主機上分別配置一次,哪怕是在生產環境,都須要進行如下操做,由於k8s有它本身的安全策略。api
[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
注:如下沒有特別說明的操做,在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
一樣,沒有特別說明的配置,在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
配置至此,部署前的工做就完成了。
在進行接下來的操做前,須要先下載我提供的鏡像。
注:如下操做在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
[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 reset進行重置羣集 --> 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
返回的信息截圖以下,供參考:
[root@master images]# kubectl get nodes #查看羣集節點信息 NAME STATUS ROLES AGE VERSION master NotReady master 14m v1.15.0 #能夠看到master當前狀態爲未準備
接下來能夠去github官網進行如下操做以便查看相應的命令:
點擊進入後,下拉頁面到如下位置,並複製指定的命令到master節點執行一下:
[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文件存放目錄
如下操做須要在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的羣集中
返回如下信息,則表示加入成功:
自行將上述配置在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
其實配置至此,K8s已經完成了,可是爲了之後更爲方便的使用k8s,建議優化如下幾項:
- 設置table鍵的默認間距;
- 設置kubectl命令自動補全;
- 優化開機自啓配置。
[root@master images]# cd #切換至宿主目錄 [root@master ~]# echo "set tabstop=2" >> .vimrc #將此參數寫入.vimrc文件 [root@master ~]# bash #切換shell環境,使更改生效
[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
master主機操做以下:
[root@master ~]# kubectl get pod -n kube-system #查看pod資源,相似於docker中的容器,確保返回的信息都是running #「-n kube-system」:是k8s的名稱空間
上述命令返回的信息以下:
master和node節點上都須要進行如下操做,以便設置爲開機自啓:
[root@master ~]# systemctl enable kubelet [root@master ~]# systemctl enable docker
設置爲開機自啓後,k8s羣集的配置基本完成了,如今能夠重啓一下這三臺服務器,若是重啓後,執行下面的命令,狀態都仍是running,則表示絕對沒有問題了。
[root@master ~]# kubectl get pod -n kube-system #重啓後驗證狀態是否還都是running
———————— 本文至此結束,感謝閱讀 ————————