kubernetes系列03—kubeadm安裝部署K8S集羣

一、kubernetes安裝介紹

1.1 K8S架構圖

 

1.2 K8S搭建安裝示意圖

 

1.3 安裝kubernetes方法

1.3.1 方法1:使用kubeadm 安裝kubernetes(本文演示的就是此方法)
  •  優勢:你只要安裝kubeadm便可;kubeadm會幫你自動部署安裝K8S集羣;如:初始化K8S集羣、配置各個插件的證書認證、部署集羣網絡等。安裝簡易。
  •  缺點:不是本身一步一步安裝,可能對K8S的理解不會那麼深;而且有那一部分有問題,本身很差修正。

 

1.3.2 方法2:二進制安裝部署kubernetes(詳見下篇kubernetes系列04—二進制安裝部署kubernetes集羣
  •  優勢:K8S集羣全部東西,都由本身一手安裝搭建;清晰明瞭,更加深入細節的掌握K8S;哪裏出錯便於快速查找驗證。
  •  缺點:安裝較爲繁瑣麻煩,且易於出錯。

 

二、安裝kubernetes先決條件

2.1 組件版本

  •  docker 17.03.2
  •  kubeadm 1.11.1
  •  kubelet 1.11.1
  •  kubectl 1.11.1

 

2.2 集羣機器

  •  kube-master:192.168.10.103
  •  kube-node1:192.168.10.104
  •  kube-node2:192.168.10.105

 

2.3 主機名

一、設置永久主機名稱,而後從新登陸html

1
2
3
sudo  hostnamectl  set - hostname  master
sudo  hostnamectl  set - hostname  node1
sudo  hostnamectl  set - hostname  node2

  

二、修改 /etc/hostname  文件,添加主機名和 IP 的對應關係:node

1
2
3
4
$ vim  /etc/hosts
192.168.10.103 master
192.168.10.104 node1
192.168.10.105 node2

  

2.4 同步系統時間

1
2
$ yum -y  install  ntpdate
sudo  ntpdate cn.pool.ntp.org

  

2.5 關閉防火牆

在每臺機器上關閉防火牆:linux

① 關閉服務,並設爲開機不自啓git

1
2
sudo  systemctl stop firewalld
sudo  systemctl disable firewalld

② 清空防火牆規則github

1
2
sudo  iptables -F &&  sudo  iptables -X &&  sudo  iptables -F -t nat &&  sudo  iptables -X -t nat
sudo  iptables -P FORWARD ACCEPT

  

2.6 關閉 swap 分區

一、若是開啓了 swap 分區,kubelet 會啓動失敗(能夠經過將參數 --fail-swap-on 設置爲false 來忽略 swap on),故須要在每臺機器上關閉 swap 分區:docker

1
sudo  swapoff -a

  

二、爲了防止開機自動掛載 swap 分區,能夠註釋  /etc/fstab  中相應的條目:json

1
sudo  sed  -i  '/ swap / s/^\(.*\)$/#\1/g'  /etc/fstab

  

2.7 關閉 SELinux

一、關閉 SELinux,不然後續 K8S 掛載目錄時可能報錯  Permission denied  :vim

1
sudo  setenforce 0

  

二、修改配置文件,永久生效;centos

1
2
$ vim  /etc/selinux/config
SELINUX=disabled

  

三、使用kubeadm安裝K8S集羣

3.1 認識kubeadm

如下操做在3個服務器上,都要執行!api

 

3.2 配置安裝源

3.2.1 配置docker-ce 源信息

(1)添加docker-ce 源信息

1
[root@master ~] # wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

  

(2)修改docker-ce 源

1
[root@master ~] # sed -i 's@download.docker.com@mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo

  

3.2.2 配置kubernetes倉庫

1
2
3
4
5
6
7
[root@node2 ~] # cd /etc/yum.repos.d/
[root@master yum.repos.d] # vim kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https: //mirrors .aliyun.com /kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
enable =1

  

3.2.3 更新yum倉庫

1
2
3
4
5
6
7
8
[root@master yum.repos.d] # yum clean all
[root@master yum.repos.d] # yum repolist
repo  id                                  repo name                                                       status
base                                    base                                                                9,363
docker-ce-stable /x86_64          Docker CE Stable - x86_64                                     20
epel /x86_64                          Extra Packages  for  Enterprise Linux 7 - x86_64      12,663
kubernetes                          Kubernetes Repo                                                 246
repolist: 22,292

  

3.3 安裝docker、kubelet、kubeadm、kubectl

  •  kubelet:負責管理pods和它們上面的容器,維護容器的生命週期
  •  kubeadm:安裝K8S工具
  •  kubectl:K8S命令行工具

(1)安裝

1
2
[root@master ~] # yum -y install docker-ce-17.03.2.ce   下載穩定版本17.03.2
[root@master ~] # yum -y install kubeadm-1.11.1 kubelet-1.11.1 kubectl-1.11.1

  

(2)安裝docker報錯(虛擬機中可能會遇到,若是沒有報錯請忽略)

Error: Package: docker-ce-18.03.1.ce-1.el7.centos.x86_64 (docker-ce-stable)

           Requires: container-selinux >= 2.9

報錯緣由: docker-ce-selinux 版本太低

解決辦法:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/網站下載對應版本的docker-ce-selinux,安裝便可

1
[root@master ~] # yum -y install https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm

再次安裝docker 成功:

1
[root@master ~] # yum -y install docker-ce-17.03.2.ce

  

3.4 啓動服務

3.4.1 配置啓動docker服務

(1)添加加速器到配置文件

1
2
3
4
5
6
[root@master ~] # mkdir -p /etc/docker
[root@master ~] # tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors" : [ "https://registry.docker-cn.com" ]
}
EOF

  

(2)啓動服務

1
2
3
[root@master ~] # systemctl daemon-reload
[root@master ~] # systemctl start docker
[root@master ~] # systemctl enable docker.service

  

(3)打開iptables內生的橋接相關功能,已經默認開啓了,沒開啓的自行開啓

1
2
3
4
[root@node1 ~] # cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
1
[root@node1 ~] # cat /proc/sys/net/bridge/bridge-nf-call-iptables
1

  

3.4.2 配置啓動kubelet服務

(1)修改配置文件

1
2
3
[root@master ~] # vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS= "--fail-swap-on=false"
KUBE_PROXY=MODE=ipvs

  

(2)先設爲開機自啓

1
[root@master ~] # systemctl enable kubelet.service

由於K8S集羣還未初始化,因此kubelet 服務啓動不成功,下面初始化完成,再啓動便可。

 

四、初始化kubernetes master節點

在master服務器上執行,完成如下全部操做

4.1 使用kubeadm init初始化

(1)使用kubeadm init 進行初始化(須要進行不少操做,因此要等待一段時間)

1
[root@master ~] # kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

釋:

  •  --kubernetes-version:指定kubeadm版本;我這裏下載的時候kubeadm最高時1.11.1版本
  •  --pod-network-cidr:指定pod所屬網絡
  •  --service-cidr:指定service網段
  •  --ignore-preflight-errors=Swap/all:忽略 swap/全部 報錯

注:

  由於kubeadm須要拉取必要的鏡像,這些鏡像須要「***」;因此能夠先在docker hub或其餘鏡像倉庫拉取kube-proxy、kube-scheduler、kube-apiserver、kube-controller-manager、etcd、pause鏡像;並加上 --ignore-preflight-errors=all 忽略全部報錯便可

 

(2)下載鏡像

我已經將我下載的鏡像導出,放入個人網盤,有須要的打賞一杯咖啡錢,私聊博主;博主會很快恢復的;

1
2
3
4
5
6
[root@master ~] # docker image load -i kube-apiserver-amd64.tar.gz
[root@master ~] # docker image load -i kube-proxy-amd64.tar.gz
[root@master ~] # docker image load -i kube-controller-manager-amd64.tar.gz
[root@master ~] # docker image load -i kube-scheduler-amd64.tar.gz
[root@master ~] # docker image load -i etcd-amd64.tar.gz
[root@master ~] # docker image load -i pause.tar.gz

  

(3)初始化命令成功後,建立.kube目錄

1
2
[root@master ~] # mkdir -p $HOME/.kube
[root@master ~] # cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

  

4.2 驗證

(1)拉取了必須的鏡像

1
2
3
4
5
6
7
8
[root@master ~] # docker image ls
REPOSITORY                                          TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io /kube-proxy-amd64                          v1.11.1             d5c25579d0ff        6 months ago        97.8 MB
k8s.gcr.io /kube-scheduler-amd64                      v1.11.1             272b3a60cd68        6 months ago        56.8 MB
k8s.gcr.io /kube-apiserver-amd64                      v1.11.1             816332bd9d11        6 months ago        187 MB
k8s.gcr.io /kube-controller-manager-amd64             v1.11.1             52096ee87d0e        6 months ago        155 MB
k8s.gcr.io /etcd-amd64                                3.2.18              b8df3b177be2        9 months ago        219 MB
k8s.gcr.io /pause                                     3.1                 da86e6ba6ca1        13 months ago       742 kB

  

(2)開啓了kube-apiserver 的6443端口

1
2
[root@master ~] # ss -nutlp
tcp   LISTEN     0      128                   :::6443                              :::*                    users :(( "kube-apiserver" ,pid=1609,fd=3))

  

(3)使用kubectl命令查詢集羣信息

查詢組件狀態信息

1
2
3
4
5
[root@master ~] # kubectl get cs
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   { "health" "true" }

查詢集羣節點信息(由於尚未部署好flannel,因此節點顯示爲NotReady)

1
2
3
[root@master ~] # kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
master    NotReady  master    13m       v1.11.1

查詢名稱空間,默認

1
2
3
4
5
[root@master ~] # kubectl get ns
NAME            STATUS    AGE
default         Active    13m
kube-public     Active    13m
kube-system     Active    13m

  

4.3 部署網絡插件flannel

(1)直接使用kubectl 執行gitlab上的flannel 部署文件

1
2
3
4
5
6
7
8
9
10
[root@master ~] # kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
clusterrole.rbac.authorization.k8s.io /flannel  created
clusterrolebinding.rbac.authorization.k8s.io /flannel  created
serviceaccount /flannel  created
configmap /kube-flannel-cfg  created
daemonset.extensions /kube-flannel-ds-amd64  created
daemonset.extensions /kube-flannel-ds-arm64  created
daemonset.extensions /kube-flannel-ds-arm  created
daemonset.extensions /kube-flannel-ds-ppc64le  created
daemonset.extensions /kube-flannel-ds-s390x  created

  

(2)會看到下載好的flannel 的鏡像

1
2
3
[root@master ~] # docker image ls |grep flannel
quay.io /coreos/flannel                               v0.10.0-amd64       f0fad859c909        12 months ago       44.6 MB
quay.io /coreos/flannel                               v0.9.1              2b736d06ca4c        14 months ago       51.3 MB

  

(3)驗證

① master 節點已經Ready

1
2
3
[root@master ~] # kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
master    Ready     master    14m       v1.11.1

② 查詢kube-system名稱空間下

1
2
3
[root@master ~] # kubectl get pods -n kube-system(指定名稱空間) |grep flannel
NAME                             READY     STATUS    RESTARTS   AGE
kube-flannel-ds-amd64-4wck2      1 /1        Running   0          1m

  

五、初始化kubernetes node節點

在2個node 服務器上執行,完成如下全部操做

5.1 使用kubeadm join 初始化

(1)初始化node節點;下邊的命令是master初始化完成後,下邊有提示的操做命令

1
[root@node1 ~] # kubeadm join 192.168.10.103:6443 --token t56pjr.cm898tj09xm9pkqz --discovery-token-ca-cert-hash sha256:3ffe1c840e8a4b334fc2cc3d976b0e3635410e52e3653bb39585b8b557f81bc4 --ignore-preflight-errors=Swap

  

(2)從節點若是不能「***」,只需從本地上傳2個鏡像便可;仍是我網盤中的鏡像

1
2
[root@node1 ~] # docker image load -i kube-proxy-amd64.tar.gz
[root@node1 ~] # docker image load -i pause.tar.gz

  

5.2 驗證集羣是否初始化成功

(1)查詢2個節點的鏡像

1
2
3
4
5
[root@node1 ~] # docker image ls  
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io /kube-proxy-amd64    v1.11.1             d5c25579d0ff        6 weeks ago         97.8 MB
quay.io /coreos/flannel         v0.10.0-amd64       f0fad859c909        7 months ago        44.6 MB
k8s.gcr.io /pause               3.1                 da86e6ba6ca1        8 months ago        742 kB

  

(2)等2個從節點上下載好鏡像,初始化完成,再在主上查詢驗證

1
2
3
4
5
[root@master ~] # kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
master    Ready     master    28m       v1.11.1
node1     Ready     <none>    7m        v1.11.1
node2     Ready     <none>    2m        v1.11.1

  

(3)在主節點查詢kube-system名稱空間下關於node節點pod的信息

1
2
3
4
5
[root@master ~] # kubectl get pods -n kube-system -o wide |grep node
kube-flannel-ds-amd64-fcm9x             1 /1        Running   15         91d       192.168.130.105   node2
kube-flannel-ds-amd64-hzkp7             1 /1        Running   17         91d       192.168.130.104   node1
kube-proxy-f2kkn                        1 /1        Running   34         139d      192.168.130.104   node1
kube-proxy-kkqln                        1 /1        Running   35         139d      192.168.130.105   node2

  

  至此,kubernetes集羣已經搭建安裝完成;kubeadm幫助咱們在後臺完成了全部操做;想要本身所有手動搭建kubernetes集羣

相關文章
相關標籤/搜索