K8s 安裝部署

k8s爲何叫k8s呢?
由於k8s是Kubernetes的簡稱,由於K和S之間有8個字母,因此纔會被稱爲k8s。
k8s最初是在Google公司內部使用了10多年的技術,它的前身是叫作Borg(博格),直到2015年才被Google公司捐贈爲開源項目。node

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

關於k8s詳細介紹可參考k8s中文文檔git

1、環境準備github

主機名 IP 角色 基於服務
docker-k8s01 192.168.171.151 master docker
docker-k8s02 192.168.171.150 node01 docker
docker-k8s03 192.168.171.152 node02 docker

注:上述三臺centos 7.3服務器,均運行docker服務,若是是測試環境,那麼內存最少2G,CPU至少雙核,而且docker服務的版本不建議太高,最好是18.09及如下
.
部署docker服務可參考:部署 Docker docker

2、部署前準備工做
一、檢查docker版本、關閉防火牆及Selinux、清空iptables規則、禁用Swap交換分區shell

注:如下操做須要在三臺docker主機上分別配置一次,哪怕是在生產環境,都須要進行如下操做,由於k8s有它本身的安全策略apache

#查看當前docker版本
[root@docker-k8s01 ~]# docker -v
Docker version 18.09.0, build 4d60db4
#關閉防火牆
[root@docker-k8s01 ~]# systemctl stop firewalld
[root@docker-k8s01 ~]# systemctl disable firewalld
#禁用selinux
[root@docker-k8s01 ~]# setenforce 0
setenforce: SELinux is disabled
[root@docker-k8s01 ~]# vim /etc/sysconfig/selinux 
SELINUX=disabled           # 修改成disabled
#清空iptables規則
[root@docker-k8s01 ~]# iptables -F
#重啓docker服務
[root@docker-k8s01 ~]# systemctl daemon-reload 
[root@docker-k8s01 ~]# systemctl restart docker 
#禁用swap交換分區
[root@docker-k8s01 ~]# swapoff -a           # 臨時禁用交換分區
[root@docker-k8s01 ~]# vim /etc/fstab         # 編輯自動掛載的配置文件,將swap配置項註釋掉
#/dev/mapper/cl-swap     swap                    swap    defaults        0 0
[root@docker-k8s01 ~]# mount -a            # 從新加載配置文件
[root@docker-k8s01 ~]# free -h          # 查看分區信息,肯定swap行都爲0
              total        used        free      shared  buff/cache   available
Mem:           1.8G        469M        841M         18M        508M        1.2G
Swap:            0B          0B          0B

二、配置ssh免密登陸、主機名解析及yum源
在master主機上操做便可,配置文件可直接複製到兩臺nodevim

#配置ssh免密登陸(爲了方便在主機間複製配置文件,可忽略)
[root@docker-k8s01 ~]# ssh-keygen -t rsa
[root@docker-k8s01 ~]# ssh-copy-id docker-k8s02
[root@docker-k8s01 ~]# ssh-copy-id docker-k8s03
#配置域名解析
[root@docker-k8s01 ~]# tail -3 /etc/hosts
192.168.171.151 docker-k8s01
192.168.171.150 docker-k8s02
192.168.171.152 docker-k8s03
#將更改後的hosts文件發送到node01及node02
[root@docker-k8s01 ~]# scp /etc/hosts docker-k8s02:/etc/
[root@docker-k8s01 ~]# scp /etc/hosts docker-k8s03:/etc/
#配置k8s yum源,這裏配置的阿里雲的源,可上官網自行查看
[root@docker-k8s01 ~]# cat /etc/yum.repos.d/kubernetes.repo 
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
#查看剛剛配置的yum源中有沒有可用的包
[root@docker-k8s01 ~]# yum repolist 
Loaded plugins: fastestmirror, langpacks
kubernetes                                     Kubernetes                                           551                # 返回的這一行不可爲0
[root@docker-k8s01 ~]# yum makecache           # 製做yum源緩存
#將yum源的配置文件複製到另外兩臺節點主機上
[root@docker-k8s01 ~]# scp /etc/yum.repos.d/kubernetes.repo docker-k8s02:/etc/yum.repos.d/
[root@docker-k8s01 ~]# scp /etc/yum.repos.d/kubernetes.repo docker-k8s03:/etc/yum.repos.d/
#在另外兩臺主機上,都需執行如下兩條命令
[root@docker-k8s02 ~]# yum repolist 
kubernetes                                     Kubernetes                                           551          # 切記這一行不可爲0
[root@docker-k8s02 ~]# yum makecache

三、打開iptables橋接功能及路由轉發
master上進行配置便可centos

#打開iptables橋接功能
[root@docker-k8s01 ~]# vim /etc/sysctl.d/k8s.conf         # 寫入
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@docker-k8s01 ~]# sysctl -p /etc/sysctl.d/k8s.conf         # 刷新並加載配置
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
# PS:若是報錯「找不到文件」,須要執行下面的命令以便加載一個模塊。
[root@docker-k8s01 ~]# modprobe br_netfilter    #加載br_netfileter模塊
#將k8s.conf文件複製到另外兩臺節點
[root@docker-k8s01 ~]# scp /etc/sysctl.d/k8s.conf docker-k8s02:/etc/sysctl.d/
[root@docker-k8s01 ~]# scp /etc/sysctl.d/k8s.conf docker-k8s03:/etc/sysctl.d/
#在兩臺node節點上也須要執行以下命令刷新配置
[root@docker-k8s02 ~]# sysctl -p /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
#開啓路由轉發(三臺docker主機上都須要進行如下操做)
[root@docker-k8s01 ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@docker-k8s01 ~]# sysctl -p
net.ipv4.ip_forward = 1

初始化須要幾個鏡像文件,在初始化過程當中會自動下載,但要是網速慢的童鞋可能會很漫長,因此這裏提早準備了須要的軟件包(提取碼:1231),一會上傳上去導入便可
3、配置k8s羣集api

一、安裝部署k8s相關工具

注:如下操做在master主機上進行

#安裝k8s的master所需組件
[root@docker-k8s01 ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0 kubectl-1.15.0-0 
#將kubelet加入開機自啓,但不要如今啓動
[root@docker-k8s01 ~]# systemctl enable kubelet
[root@docker-k8s01 ~]# mkdir images
[root@docker-k8s01 ~]# cd images/
#將鏡像包上傳,共8個
[root@docker-k8s01 images]# ls
coredns-1-3-1.tar  kube-apiserver-1-15.tar   kube-proxy-1-15.tar      myflannel-11-0.tar
etcd-3-3-10.tar    kube-controller-1-15.tar  kube-scheduler-1-15.tar  pause-3-1.tar
#接下來導入上傳的鏡像包到docker鏡像中
[root@docker-k8s01 ~]# pwd             # 注:腳本不要和鏡像在同一個目錄
/root
[root@docker-k8s01 ~]# vim images.sh          # 鏡像比較多,寫個小腳本代勞下
#!/bin/bash
cd /root/images/
for i in `ls`
do
        docker load < ${i}
done
echo "導入完成"
[root@docker-k8s01 ~]# sh images.sh        # 執行腳本,進行導入鏡像

二、初始化k8s集羣

[root@docker-k8s01 ~]# kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
#這裏指定的版本必須和前面yum安裝的版本一致。指定的兩個網絡則是官方建議使用的網段
#若是執行上述命令後,返回CPU相關的報錯信息,那麼須要調大CPU的核心數
#初始化成功後,首先複製下面返回的這條命令,並妥善保存
#若初始化失敗,能夠執行kubeadm reset進行重置羣集

kubeadm join 192.168.171.151:6443 --token oxgsxp.gis96136xisqgfzv \
    --discovery-token-ca-cert-hash sha256:93c5aaa4710fabb9cb5bba9178bb75ecd90031bb4c2471e7ce72939d9ee0c711 

#上面這條命令是用來其餘節點加入到當前k8s羣集中須要執行的
一旦丟失,特別麻煩,而且只有24小時有效期,每次初始化羣集後產生的都不同
#接下來呢,依次執行返回的其餘指令,以下(因爲我是root用戶,因此就省略了sudo指令)
[root@docker-k8s01 ~]# mkdir -p $HOME/.kube
[root@docker-k8s01 ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@docker-k8s01 ~]# chown $(id -u):$(id -g) $HOME/.kube/config

K8s 安裝部署
三、配置master節點狀態

[root@docker-k8s01 ~]# kubectl get nodes          # 查看羣集節點信息
NAME           STATUS     ROLES    AGE     VERSION
docker-k8s01   NotReady   master   2m57s   v1.15.0
#能夠看到master當前狀態爲未準備,不健康的

接下來能夠去github官網進行如下操做以便查看相應的命令
K8s 安裝部署
K8s 安裝部署
點擊進入後,下拉頁面到如下位置,並複製指定的命令到master節點執行一下
K8s 安裝部署

[root@docker-k8s01 ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

在網絡情況良好的狀況下建議使用上述方法(調用遠端文件執行一下)

若網速較差,建議使用如下方法

#下載到本地
[root@docker-k8s01 ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml        
#開頭連接中也有此文件可直接上傳使用
[root@docker-k8s01 ~]# ls | grep flannel.yml
kube-flannel.yml
[root@docker-k8s01 ~]# kubectl apply -f kube-flannel.yml     # 指定下載的.yml文件執行相應命令
#再次查看羣集狀態,能夠看到master狀態已經變爲「ready」
[root@docker-k8s01 ~]# kubectl get nodes
NAME           STATUS   ROLES    AGE   VERSION
docker-k8s01   Ready    master   12m   v1.15.0
[root@docker-k8s01 ~]# ls /etc/kubernetes/              # k8s的配置文件目錄 
[root@docker-k8s01 ~]# ls /etc/kubernetes/manifests/            # k8s的.yaml文件存放目錄

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

#兩臺node節點都需執行以下操做
#安裝k8s相關組件
[root@docker-k8s02 ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0
[root@docker-k8s02 ~]# systemctl enable kubelet      # 設爲開機自啓,但不啓動
[root@docker-k8s02 ~]# mkdir images
[root@docker-k8s02 ~]# cd images/
[root@docker-k8s02 images]# ls        # 上傳以下三個鏡像包
kube-proxy-1-15.tar  myflannel-11-0.tar  pause-3-1.tar
[root@docker-k8s02 images]# docker load < kube-proxy-1-15.tar 
[root@docker-k8s02 images]# docker load < myflannel-11-0.tar 
[root@docker-k8s02 images]# docker load < pause-3-1.tar 
[root@docker-k8s02 images]# kubeadm join 192.168.171.151:6443 --token oxgsxp.gis96136xisqgfzv     --discovery-token-ca-cert-hash sha256:93c5aaa4710fabb9cb5bba9178bb75ecd90031bb4c2471e7ce72939d9ee0c711                     # 執行master初始化羣集時返回的命令,以便加入到master的羣集中

K8s 安裝部署

兩臺node節點上配置完成後,再次在master上查看羣集信息

[root@docker-k8s01 ~]# kubectl get nodes                # 在master上查看節點信息都爲「Ready」
NAME           STATUS     ROLES    AGE     VERSION
docker-k8s01   Ready      master   23m     v1.15.0
docker-k8s02   Ready      <none>   3m35s   v1.15.0
docker-k8s03   NotReady   <none>   4s      v1.15.0

五、部署後的優化配置

爲了之後更爲方便的使用k8s,建議優化如下幾項:

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

1)設置table默認間距(該優化只需在master上進行配置便可,因爲常常須要編寫.yml文件因此才須要更改table間距)

[root@docker-k8s01 ~]# vim .vimrc                  # 將此參數寫入.vimrc文件
[root@docker-k8s01 ~]# bash               # 切換shell環境使配置生效

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

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

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

master主機操做以下

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

確保狀態都爲running
K8s 安裝部署
master和node節點上都須要進行如下操做,以便設置爲開機自啓

[root@docker-k8s01 ~]# systemctl enable kubelet
[root@docker-k8s01 ~]# systemctl enable docker

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

相關文章
相關標籤/搜索