文章目录
一、环境准备
系统版本 | 主机名 | IP | 基于的服务 |
---|---|---|---|
CentOS 7.8 | master | 10.206.44.62 | Docker |
CentOS 7.8 | node01 | 10.206.44.64 | Docker |
CentOS 7.5 | node02 | 10.206.47.167 | Docker |
二、部署前准备
1、检查docker版本、关闭防火墙及Selinux、清空iptables规则、禁用Swap交换分区
三台主机均需配置
#确认docker版本
[root@master appdeploy]# docker -v
Docker version 19.03.9, build 9d988398e7
#关闭防火墙状态
[root@master appdeploy]# systemctl stop firewalld
[root@master appdeploy]# systemctl disable firewalld
[root@master appdeploy]# systemctl status firewalld
● firewalld.service
Loaded: masked (/dev/null; bad)
Active: inactive (dead)
#关闭Selinux
[root@master appdeploy]# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce: SELinux is disabled
#清空iptables规则
[root@master appdeploy]# iptables -F
#重启docker服务
[root@master appdeploy]# systemctl daemon-reload
[root@master appdeploy]# systemctl restart docker
#关闭虚拟内存
[root@master appdeploy]# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce: SELinux is disabled
#重新加载挂载的配置文件
[root@master appdeploy]# mount -a
#确认输出的swap行都为0
[root@master appdeploy]# free -h
total used free shared buff/cache available
Swap: 0B 0B 0B
2、配置ssh免密登录、主机名解析及yum源
三台主机均需配置
#添加三台主机的解析
[root@master appdeploy]# vim /etc/hosts
10.206.44.62 master
10.206.44.64 node01
10.206.47.167 node02
#配置yum源
[root@master appdeploy]# vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubneters
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
#查看配置的yum源中有没有可用的包
[root@master appdeploy]# yum repolist
repo id repo name status
kubernetes kubneters 810 #返回的这一行不可为0
#制作yum元数据缓存
[root@master appdeploy]# yum makecache
3、打开iptables桥接功能及路由转发
#打开iptables桥接功能
[root@master appdeploy]# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
#刷新配置
[root@master appdeploy]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
# PS:如果报错“找不到文件”,需要执行下面的命令以便加载一个模块。
[root@master appdeploy]# modprobe br_netfilter #加载br_netfileter模块
#开启路由转发
[root@master appdeploy]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
#刷新配置
[root@master appdeploy]# sysctl -p
net.ipv4.ip_forward = 1
三、配置k8s集群
1、安装部署k8s相关工具
三台主机均需配置
#安装kubeadm、kubectl、kubelet
[root@master appdeploy]# yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1
#设置启动开机自启kubelet服务
[root@master appdeploy]# systemctl enable kubelet.service
2、下载并导入镜像
三台主机均需配置
Kubeadm在初始化k8s集群的时候,会从谷歌云服务器取pull所需的镜像,由于国内网络的原因,无法直接从谷歌pull镜像,所以在初始化之前要先将镜像导入到k8s集群中。
下载镜像 kubeadm-basic.images.tar:https://download.csdn.net/download/qq_42124528/85582716
[root@master appdeploy]# mkdir images
[root@master appdeploy]# cd images/
#上传镜像并解压
[root@master images]# rz
[root@master images]# tar -zxvf kubeadm-basic.images.tar.gz
#确认上传的镜像包,共7个
[root@master kubeadm-basic.images]# ls
apiserver.tar coredns.tar etcd.tar kubec-con-man.tar pause.tar proxy.tar scheduler.tar
#创建load-images.sh,用于批量导入kubeadm-basic镜像
[root@master appdeploy]# vim load-images.sh
#!/bin/bash
ls /home/appdeploy/images/kubeadm-basic.images > /tmp/image-list.txt
cd /home/appdeploy/images/kubeadm-basic.images
for i in $(cat /tmp/image-list.txt)
do
docker load -i $i
done
rm -rf /tmp/image-list.txt
#给创建的脚本赋权
[root@master appdeploy]# chmod +x load-images.sh
#执行脚本批量导入镜像
[root@master appdeploy]# ./load-images.sh
Loaded image: k8s.gcr.io/kube-apiserver:v1.15.1
Loaded image: k8s.gcr.io/coredns:1.3.1
Loaded image: k8s.gcr.io/etcd:3.3.10
Loaded image: k8s.gcr.io/kube-controller-manager:v1.15.1
Loaded image: k8s.gcr.io/pause:3.1
Loaded image: k8s.gcr.io/kube-proxy:v1.15.1
Loaded image: k8s.gcr.io/kube-scheduler:v1.15.1
3、初始化主节点
只在主节点执行
[root@master appdeploy]# kubeadm init --kubernetes-version=v1.15.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
#初始化成功后,复制生成的join命令,用于其他节点加入到当前k8s集群,有效期只有24小时
#若初始化失败,可以执行kubeadm reset进行重置
#kubeadm join 10.206.44.62:6443 --token bdve5v.zc3grkcu1cizv1pe --discovery-token-ca-cert-hash sha256:a21d64843fae7e2ccfad093f7e529bf4a944960ef3a300b66e1b895ee3a24a26
# PS:如果超出24小时,则需在主节点上重新获得新的加入节点命令
[root@master appdeploy]# kubeadm token create --print-join-command
#依次执行
[root@master appdeploy]# mkdir -p $HOME/.kube
[root@master appdeploy]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master appdeploy]# chown $(id -u):$(id -g) $HOME/.kube/config
#查看节点状态
[root@master appdeploy]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 4m59s v1.15.1
#可以看到master当前状态为未准备
4、部署网络Flannel
三台主机均需配置
#方法1
[root@master appdeploy]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#方法2
#将github官网指定的.yml配置文件下载到本地
[root@master appdeploy]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#或者直接下载 flannel.yaml:https://download.csdn.net/download/qq_42124528/85582540
#指定下载的.yml文件执行相应命令
[root@master appdeploy]# kubectl apply -f flannel.yaml
#部署完成后,查看pod状态
[root@master appdeploy]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
kube-flannel-ds-skxb8 0/1 Init:ImagePullBackOff 0 42m
#若STATUS为RUNNING,则可忽略导入flanneld镜像步骤
#若STATUS为Init:ImagePullBackOff,则需进行以下步骤导入镜像
#可以到 https://github.com/coreos/flannel/releases 官方仓库下载镜像, 或者直接使用下面链接下载
#下载镜像 flanneld-v0.18.1-amd64.docker:https://download.csdn.net/download/qq_42124528/85582489
#上传镜像
[root@master appdeploy]# rz
#导入镜像
[root@master appdeploy]# docker load < flanneld-v0.18.1-amd64.docker
64242626f2eb: Loading layer [==================================================>] 5.893MB/5.893MB
ebd5ac721ae3: Loading layer [==================================================>] 12.35MB/12.35MB
2d494ab70ef9: Loading layer [==================================================>] 2.743MB/2.743MB
d022ff88f29e: Loading layer [==================================================>] 42.23MB/42.23MB
5d07ac15a06b: Loading layer [==================================================>] 5.632kB/5.632kB
b1c230abd455: Loading layer [==================================================>] 9.216kB/9.216kB
ada31875f6e2: Loading layer [==================================================>] 7.68kB/7.68kB
Loaded image: flannelcni/flannel:v0.18.1-amd64
#查看docker镜像,已有flannelcni/flannel:v0.18.1-amd64
[root@master appdeploy]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
flannelcni/flannel v0.18.1-amd64 e237e8506509 38 hours ago 62.2MB
#查看pod状态,全部为Running
[root@k8s-master01 tmp]# kubectl get pod -n kube-system
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kube-flannel-ds-cs8wf 1/1 Running 0 5h54m
kube-system kube-proxy-p5h78 1/1 Running 0 5h54m
#此时STATUS均为Running
#再次查看master状态,已经变成了Ready
[root@master appdeploy]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 20m v1.15.1
5、node01及node02加入master集群
以下操作需要在node01及node02分别执行一次
[root@node01 appdeploy]# kubeadm join 10.206.44.62:6443 --token exv0mq.0yk6wtb7zjxc5cim --discovery-token-ca-cert-hash sha256:a21d64843fae7e2ccfad093f7e529bf4a944960ef3a300b66e1b895ee3a24a26
#This node has joined the cluster
当在node01及node02依次配置完成后,即可在master上进行查看节点状态
[root@master appdeploy]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 6h v1.15.1
node01 Ready <none> 4h v1.15.1
node02 Ready <none> 21m v1.15.1