實驗環境介紹
計算機名 | IP地址 | 操作系統及內核版本 |
---|---|---|
k8s-master.mfyxw.com | 192.168.80.100 | CentOS7.6內核推薦:4.4+及以上 |
k8s-node1.mfyxw.com | 192.168.80.110 | CentOS7.6內核推薦:4.4+及以上 |
k8s-node2.mfyxw.com | 192.168.80.120 | CentOS7.6內核推薦:4.4+及以上 |
- 各節點均需要都關閉selinux和防火牆firewalld,並把防火牆自啓取消
命令:
#設置關閉selinux和防火牆,立即生效
setenforce 0 && systemctl stop firewalld && systemctl disable firewalld - 各節點均需要修改hosts文件
命令:
vi /etc/hosts
192.168.80.100 k8s-master.mfyxw.com k8s-master
192.168.80.110 k8s-node1.mfyxw.com k8s-node1
192.168.80.120 k8s-node2.mfyxw.com k8s-node2 - 各節點均需要把內核升級到4.4+及以上版本,CentOS 7.x 系統自帶的 3.10.x 內核存在一些 Bugs,導致運行的 Docker、Kubernetes 不穩定
命令:
uname -r
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
//查詢有哪些可以更新到哪些內核版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
//安裝4.4.X內核 --enablerepo 選項開啓 CentOS 系統上的指定倉庫。默認開啓的是 elrepo,這裏用 elrepo-kernel 替換。
yum -y install --enablerepo=elrepo-kernel install kernel-lt
//查詢到本機都安裝了哪些內核版本
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
grub2-set-default 0 //設置默認內核使用的版本 也可以編輯/etc/default/grub 文件,把GRUB_DEFAULT=0中的0修改爲對應查詢到的內核的序號
//或使用命令:grub2-set-default 'CentOS Linux (4.4.197-1.el7.elrepo.x86_64) 7 (Core)'
reboot //重啓系統,使新內核啓動
再次確認是否更新到最新版本的內核
uname -r
4.各節點均需要安裝iptables,因爲kube-proxy會向iptables或者ipvs寫規則
命令:
#安裝iptables服務
yum -y install iptables-services
#清空防火牆規則並保存
命令:
iptables -F
service iptables save
#啓動iptables並設置開機啓動
命令:
service iptables status
service iptables start
systemctl enable iptables
5.各節點均需要下載docker-ce的repo文件放置/etc/yum.repo.d/目錄下
如沒有wget命令,請先使用yum -y install wget來安裝
命令:
cd /etc/yum.repos.d
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6.各節點均需要在/etc/yum.repo.d/目錄下新建一個kubernetes.repo文件
命令:
vi /etc/yum.repos.d/Kubernetes.repo
內容如下:
[Kubernetes]
name=Kubernetes repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enable=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
7.各節點均需要安裝docker-ce,kubeadm,kubelet,kubectl
命令:
yum -y install docker-ce kubeadm kubectl kubelet
8.各節點均需要docker鏡像加速器(建議)
命令:
mkdir /etc/docker
vi /etc/docker/daemo.json
{
"registry-mirrors": ["https://jltw059v.mirror.aliyuncs.com"]
} - 各節點均需要把docker和kubelet加入開機自啓並啓動docker
命令:
systemctl enable docker && systemctl enable kubelet && systemctl start docker
ps aux | grep docker
10.各節點均需要檢查cat /proc/sys/net/bridge/bridge-nf-call-ip6tables和cat /proc/sys/net/bridge/bridge-nf-call-iptables的值是否都爲1,如果不是,請按如下方法修改
命令:
cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
cat /proc/sys/net/bridge/bridge-nf-call-iptables
cat <<EOF >/etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
11.在k8s-master節點新建一個sh腳本
命令:
vi k8s-master.sh
腳本內容如下:
#!/bin/bash
K8S_VERSION=v1.16.2
ETCD_VERSION=3.3.15-0
PAUSE_VERSION=3.1
DNS_VERSION=1.6.2
FLANNEL_VERSION=v0.11.0-amd64
#pull鏡像到本地
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION
docker pull quay-mirror.qiniu.com/coreos/flannel:$FLANNEL_VERSION
#修改tag,因k8s默認找鏡像的時候,會去k8s.gcr.io/coredns:XXXXX查找
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$K8S_VERSION k8s.gcr.io/kube-apiserver:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$K8S_VERSION k8s.gcr.io/kube-scheduler:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$K8S_VERSION k8s.gcr.io/kube-controller-manager:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION k8s.gcr.io/etcd:$ETCD_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION k8s.gcr.io/kube-proxy:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION k8s.gcr.io/coredns:$DNS_VERSION
docker tag quay-mirror.qiniu.com/coreos/flannel:$FLANNEL_VERSION quay.io/coreos/flannel:$FLANNEL_VERSION
給k8s-master.sh腳本添加執行權限
chmod 755 k8s-master.sh
./k8s-master.sh
12.查詢下是否鏡像下載完成
命令:
docker images -a
13.在各node節點上新建一個k8s-node.sh腳本文件,
vi /root/k8s-node.sh
添加如下內容
#!/bin/bash
K8S_VERSION=v1.16.2
PAUSE_VERSION=3.1
DNS_VERSION=1.6.2
FLANNEL_VERSION=v0.11.0-amd64
#pull鏡像到本地
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION
docker pull quay-mirror.qiniu.com/coreos/flannel:$FLANNEL_VERSION
#修改tag
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION k8s.gcr.io/kube-proxy:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION k8s.gcr.io/coredns:$DNS_VERSION
docker tag quay-mirror.qiniu.com/coreos/flannel:$FLANNEL_VERSION quay.io/coreos/flannel:$FLANNEL_VERSION
給/root/k8s-node.sh腳本添加可執行權限並執行腳本
命令
chmod 755 /root/k8s-node.sh
14.在各node節點上查看下載的鏡像
.
15.在各節點上,把swap交換空間給關閉
命令
swapoff -a //立即生效
編輯配置文件使開機自動不開啓交換空間
vi /etc/fstab在swap交換分區前面添加#號註釋
16.在k8s-master節點上使用kubeadm初始化(kubernetes版本使用1.16.2是因爲在下載鏡像下載了此鏡像版本)
命令
kubeadm init --kubernetes-version=1.16.2 --pod-network-cidr 10.244.0.0/16 --service-cidr 10.96.0.0/12
注意:kubernetes要求最低需要雙核CPU(master和node節點都需要雙核)
節點k8s-master成功完成了初始化
kubeadm join 192.168.80.100:6443 --token tlxsrq.7cilafwfvxh09k7z \
--discovery-token-ca-cert-hash sha256:8145748aa23b2563580c39065dde084863b59202c209a4566ac2df377b9f66b3
因爲是做實驗,故使用root用戶來運行,不切換到普通用戶運行如下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
17.查看pod節點和node節點
命令:
kubectl get pods -n kube-system
kubectl get nodes
在查看node上顯示NotReady(未就緒狀態)是由於flannel沒有啓動
在flannel的github(https://github.com/coreos/flannel)上說到,kubernetes1.7+以上需要使用如下命令來運行flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
flannel已經運行,再次查看nodes和pods -n kube-system
18.在各node節點上運行如下命令加入集羣
命令:
kubeadm join 192.168.80.100:6443 --token tlxsrq.7cilafwfvxh09k7z \
--discovery-token-ca-cert-hash sha256:8145748aa23b2563580c39065dde084863b59202c209a4566ac2df377b9f66b3
19.再次在k8s-master節點上運行如下命令查詢集羣所有節點情況
命令:
kubectl get nodes