一、設置永久主機名稱,而後從新登陸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
|
1
2
|
$ yum -y
install
ntpdate
$
sudo
ntpdate cn.pool.ntp.org
|
在每臺機器上關閉防火牆: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
|
一、若是開啓了 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
|
一、關閉 SELinux,不然後續 K8S 掛載目錄時可能報錯 Permission denied :vim
1
|
$
sudo
setenforce 0
|
二、修改配置文件,永久生效;centos
1
2
|
$ vim
/etc/selinux/config
SELINUX=disabled
|
如下操做在3個服務器上,都要執行!api
(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
|
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
|
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
|
(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
|
(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
|
(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 服務啓動不成功,下面初始化完成,再啓動便可。
在master服務器上執行,完成如下全部操做
(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
|
釋:
注:
由於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
|
(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
|
(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
|
在2個node 服務器上執行,完成如下全部操做
(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
|
(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集羣