本文收錄在容器技術學習系列文章總目錄 1、kubernetes安裝介紹 1.1 K8S架構圖 1.2 K8S搭建安裝示意圖 1.3 安裝kubernetes方法 優點:你只要安裝kubeadm即可;kubeadm會幫你自動部署安裝K8S集群;如:初始化K8S集群、配置各個插件的證書認證、部署集群網路 ...
本文收錄在容器技術學習系列文章總目錄
1、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;哪裡出錯便於快速查找驗證。
- 缺點:安裝較為繁瑣麻煩,且易於出錯。
2、安裝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 主機名
1、設置永久主機名稱,然後重新登錄
$ sudo hostnamectl set-hostname master $ sudo hostnamectl set-hostname node1 $ sudo hostnamectl set-hostname node2
2、修改 /etc/hostname 文件,添加主機名和 IP 的對應關係:
$ vim /etc/hosts 192.168.10.103 master 192.168.10.104 node1 192.168.10.105 node2
2.4 同步系統時間
$ yum -y install ntpdate $ sudo ntpdate cn.pool.ntp.org
2.5 關閉防火牆
在每台機器上關閉防火牆:
① 關閉服務,並設為開機不自啟
$ sudo systemctl stop firewalld $ sudo systemctl disable firewalld
② 清空防火牆規則
$ sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat $ sudo iptables -P FORWARD ACCEPT
2.6 關閉 swap 分區
1、如果開啟了 swap 分區,kubelet 會啟動失敗(可以通過將參數 --fail-swap-on 設置為false 來忽略 swap on),故需要在每台機器上關閉 swap 分區:
$ sudo swapoff -a
2、為了防止開機自動掛載 swap 分區,可以註釋 /etc/fstab 中相應的條目:
$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2.7 關閉 SELinux
1、關閉 SELinux,否則後續 K8S 掛載目錄時可能報錯 Permission denied :
$ sudo setenforce 0
2、修改配置文件,永久生效;
$ vim /etc/selinux/config SELINUX=disabled
3、使用kubeadm安裝K8S集群
3.1 認識kubeadm
- gitlab項目地址:https://github.com/kubernetes/kubeadm
- kubeadm 幕後發生的工作內容:https://github.com/kubernetes/kubeadm/blob/master/docs/design/design_v1.10.md
以下操作在3個伺服器上,都要執行!
3.2 配置安裝源
3.2.1 配置docker-ce 源信息
(1)添加docker-ce 源信息
[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 源
[root@master ~]# sed -i '[email protected]@mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo
3.2.2 配置kubernetes倉庫
[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倉庫
[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)安裝
[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,安裝即可
[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 成功:
[root@master ~]# yum -y install docker-ce-17.03.2.ce
3.4 啟動服務
3.4.1 配置啟動docker服務
(1)添加加速器到配置文件
[root@master ~]# mkdir -p /etc/docker [root@master ~]# tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://registry.docker-cn.com"] } EOF
(2)啟動服務
[root@master ~]# systemctl daemon-reload [root@master ~]# systemctl start docker [root@master ~]# systemctl enable docker.service
(3)打開iptables內生的橋接相關功能,已經預設開啟了,沒開啟的自行開啟
[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)修改配置文件
[root@master ~]# vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--fail-swap-on=false" KUBE_PROXY=MODE=ipvs
(2)先設為開機自啟
[root@master ~]# systemctl enable kubelet.service
因為K8S集群還未初始化,所以kubelet 服務啟動不成功,下麵初始化完成,再啟動即可。
4、初始化kubernetes master節點
在master伺服器上執行,完成以下所有操作
4.1 使用kubeadm init初始化
(1)使用kubeadm init 進行初始化(需要進行很多操作,所以要等待一段時間)
[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)下載鏡像
我已經將我下載的鏡像導出,放入我的網盤,有需要的打賞一杯咖啡錢,私聊博主;博主會很快恢復的;
[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目錄
[root@master ~]# mkdir -p $HOME/.kube [root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
4.2 驗證
(1)拉取了必須的鏡像
[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埠
[root@master ~]# ss -nutlp tcp LISTEN 0 128 :::6443 :::* users:(("kube-apiserver",pid=1609,fd=3))
(3)使用kubectl命令查詢集群信息
查詢組件狀態信息
[root@master ~]# kubectl get cs NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health": "true"}
查詢集群節點信息(因為還沒有部署好flannel,所以節點顯示為NotReady)
[root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady master 13m v1.11.1
查詢名稱空間,預設
[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 部署文件
[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 的鏡像
[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
[root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 14m v1.11.1
② 查詢kube-system名稱空間下
[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
5、初始化kubernetes node節點
在2個node 伺服器上執行,完成以下所有操作
5.1 使用kubeadm join 初始化
(1)初始化node節點;下邊的命令是master初始化完成後,下邊有提示的操作命令
[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個鏡像即可;還是我網盤中的鏡像
[root@node1 ~]# docker image load -i kube-proxy-amd64.tar.gz [root@node1 ~]# docker image load -i pause.tar.gz
5.2 驗證集群是否初始化成功
(1)查詢2個節點的鏡像
[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個從節點上下載好鏡像,初始化完成,再在主上查詢驗證
[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的信息
[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集群;詳解下篇二進位安裝部署kubernetes集群---超詳細教程