注: k8s和docker有对应适配版本,此次安装---docker-20.10.12、kubelet-1.20.5-0、kubeadm-1.20.5-0、kubectl-1.20.5-0

准备好三台服务器,一台master,两台node节点

————下边命令三台服务器均操作

1、安装前环境准备

##关闭防火墙
systemctl stop firewalld
##关闭防火墙开机自启动
systemctl disable firewalld
##关闭selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
##临时关闭selinux,服务器重启失效
setenforce 0
##验证selinux是否关闭,如下图
getenforce

k8s集群部署+kubepi部署初始化配置_k8s

###修改服务器hostname,(注意三台服务器分别运行)
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2

##上述运行完,不用重启服务器,立即生效,运行bash就行
bash
###三台服务器同步服务器时间

##安装ntp命令
yum -y install ntp
##同步时间
ntpdate cn.pool.ntp.org
##查看时间,确保三台服务器时间一致
date

2、安装docker20.10.12-3.el7

###卸载旧docker
yum remove docker docker-client docker-client-latest atest-logrotate docker-logrotate docker-selinux

##安装docker依赖包
yum -y install yum-utils device-mapper-persistent-data lvm2

##下载镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
##刷新yum源
yum makecache fast

k8s集群部署+kubepi部署初始化配置_k8s_02

##查看可安装docker版本
yum list docker-ce --showduplicates | sort -r

k8s集群部署+kubepi部署初始化配置_k8s_03

##安装docker-20.10.12
yum -y install docker-ce-20.10.12-3.el7

k8s集群部署+kubepi部署初始化配置_k8s_04

###启动docker,开启开机自启动
systemctl start docker
systemctl enable docker

##查看docker版本

docker  -v

k8s集群部署+kubepi部署初始化配置_k8s_05

3、安装kubelet-1.20.5-0、kubeadm-1.20.5-0、kubectl-1.20.5-0

---设置kubernetes.repo文件

cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0 
# 设置1会报错
repo_gpgcheck=0 
# 设置1会校验报错
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

---安装kubelet-1.20.5-0、kubeadm-1.20.5-0、kubectl-1.20.5-0

##查看可安装k8s版本
yum list kubelet  --showduplicates | sort -r

k8s集群部署+kubepi部署初始化配置_k8s_06

###安装kubelet-1.20.5-0、kubeadm-1.20.5-0、kubectl-1.20.5-0
yum -y install kubelet-1.20.5-0 kubeadm-1.20.5-0 kubectl-1.20.5-0
##配置kubelet开机自启动
systemctl  enable  kubelet

---查看镜像并下载

##查看所需镜像版本
kubeadm config images list

k8s集群部署+kubepi部署初始化配置_k8s_07

##拉取对应版本镜像,如上V1.20.5
kubeadm config images pull --kubernetes-version v1.20.5 --image-repository registry.aliyuncs.com/google_containers

拉取镜像耗时可能较长:

k8s集群部署+kubepi部署初始化配置_k8s_08

---刚拉取的镜像和kubeadm config images list查到的镜像名有些不同,需要打tag(不然后续节点Ready会有问题)

[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.20.5 k8s.gcr.io/kube-proxy:v1.20.5
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.20.5 k8s.gcr.io/kube-apiserver:v1.20.5
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.20.5 k8s.gcr.io/kube-controller-manager:v1.20.5
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.20.5 k8s.gcr.io/kube-scheduler:v1.20.5
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2

————下边命令只在master节点运行

4、k8s--master节点初始化

##kubeadm init
kubeadm init --apiserver-advertise-address=192.168.170.11 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.20.5   --service-cidr=172.96.0.0/12 --pod-network-cidr=10.244.0.0/16

k8s集群部署+kubepi部署初始化配置_k8s_09

上述k8s初始化成功,注意

5、配置k8s环境变量

##文件赋权
chmod 666 /etc/kubernetes/admin.conf

##k8s环境变量配置
cat > /etc/profile.d/k8s.sh  <<EOF
#/bin/bash
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF

##配置环境变量生效
source /etc/profile.d/k8s.sh

6、安装CNI网络插件

###下载calico插件的yaml
wget https://docs.projectcalico.org/manifests/calico.yaml

上述下载可能会报认证问题:

k8s集群部署+kubepi部署初始化配置_k8s_10

可以web访问上述连接地址,手动复制文件到服务器上(注意文件名保持不变)

k8s集群部署+kubepi部署初始化配置_k8s_11

---修改calico.yaml文件

下述要和初始化的时候kubeadm init中pod-network-cidr保持一致

k8s集群部署+kubepi部署初始化配置_k8s_12

k8s集群部署+kubepi部署初始化配置_k8s_13

--新增自动检测此主机的IPv4地址的方法配置

k8s集群部署+kubepi部署初始化配置_k8s_14

##应用
 kubectl apply -f calico.yaml

k8s集群部署+kubepi部署初始化配置_k8s_15

上述CNI插件安装完后,查看k8s--master节点状态还是NotReady

重启docker(重启docker,同时会重启docker镜像,k8s重启,刷新状态)

systemctl restart docker
###查看master节点状态
kubectl  get  nodes

k8s集群部署+kubepi部署初始化配置_k8s_16

看到master节点Ready

————k8s新增node节点加入(在要加入集群的node节点服务器运行)

7、node节点加入k8s集群

###上述master节点初始化成功后,运行返回的kubeadm join命令,新加入node节点
kubeadm join 192.168.170.10:6443 --token 9cylmd.zzi5ayqczuv8vmao  --discovery-token-ca-cert-hash sha256:e11534c30b79b318a675251b8481ed803b9e92c8a3b522b67ff75970d1866005

k8s集群部署+kubepi部署初始化配置_k8s_17

返回上述,根据提示,在master节点查看新家node状态(刚开始可能会显示NotReady状态,稍等一会儿,再此查看,状态Ready) ,同样的node2,运行命令加入集群,都显示Ready状态,OK

k8s集群部署+kubepi部署初始化配置_k8s_18

————部署k8s dashboard,k8s集群图形化管理工具

8、此处用KubePi

部署KubePi(服务器资源充足的情况下,集群中随便一台服务器均可部署)

###拉取kubepi镜像
docker pull kubeoperator/kubepi-server

k8s集群部署+kubepi部署初始化配置_k8s_19

###运行容器
docker run --privileged -itd --restart=unless-stopped --name kube_dashboard -v /home/docker-mount/kubepi/:/var/lib/kubepi/ -p 8000:80 kubeoperator/kubepi-server
###容器内80端口,映射到服务器8000端口

k8s集群部署+kubepi部署初始化配置_k8s_20

###查看端口是否映射成功
docker ps | grep kubepi

如下图,可以看到端口映射成功

k8s集群部署+kubepi部署初始化配置_k8s_21

---web访问登录kubepi

##web访问地址
http://192.168.170.10:8000/

##初始默认用户名密码
用户名:admin
密码:kubepi

k8s集群部署+kubepi部署初始化配置_k8s_22

##在k8s主节点上创建用户,并获取token
kubectl create sa kubepi-user --namespace kube-system
##其中上述kubepi-user就是要创建的用户名,可自行替换为需要的用户名

k8s集群部署+kubepi部署初始化配置_k8s_23

k8s集群部署+kubepi部署初始化配置_k8s_24

###在master节点上获取新建的用户kubepi-user的token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubepi-user | awk '{print $1}') | grep token: | awk '{print $2}'

可以看到返回token

k8s集群部署+kubepi部署初始化配置_k8s_25

###在主节点上获取apiserver地址
kubectl config view --minify | grep server

k8s集群部署+kubepi部署初始化配置_k8s_26

-----登录kubepi后,添加集群

k8s集群部署+kubepi部署初始化配置_k8s_27

k8s集群部署+kubepi部署初始化配置_k8s_28

k8s集群部署+kubepi部署初始化配置_k8s_29

k8s集群部署+kubepi部署初始化配置_k8s_30