注: 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
###修改服务器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
##查看可安装docker版本
yum list docker-ce --showduplicates | sort -r
##安装docker-20.10.12
yum -y install docker-ce-20.10.12-3.el7
###启动docker,开启开机自启动
systemctl start docker
systemctl enable docker
##查看docker版本
docker -v
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
###安装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
##拉取对应版本镜像,如上V1.20.5
kubeadm config images pull --kubernetes-version v1.20.5 --image-repository registry.aliyuncs.com/google_containers
拉取镜像耗时可能较长:
---刚拉取的镜像和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初始化成功,注意
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
上述下载可能会报认证问题:
可以web访问上述连接地址,手动复制文件到服务器上(注意文件名保持不变)
---修改calico.yaml文件
下述要和初始化的时候kubeadm init中pod-network-cidr保持一致
--新增自动检测此主机的IPv4地址的方法配置
##应用
kubectl apply -f calico.yaml
上述CNI插件安装完后,查看k8s--master节点状态还是NotReady
重启docker(重启docker,同时会重启docker镜像,k8s重启,刷新状态)
systemctl restart docker
###查看master节点状态
kubectl get nodes
看到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
返回上述,根据提示,在master节点查看新家node状态(刚开始可能会显示NotReady状态,稍等一会儿,再此查看,状态Ready) ,同样的node2,运行命令加入集群,都显示Ready状态,OK
————部署k8s dashboard,k8s集群图形化管理工具
8、此处用KubePi
部署KubePi(服务器资源充足的情况下,集群中随便一台服务器均可部署)
###拉取kubepi镜像
docker pull kubeoperator/kubepi-server
###运行容器
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端口
###查看端口是否映射成功
docker ps | grep kubepi
如下图,可以看到端口映射成功
---web访问登录kubepi
##web访问地址
http://192.168.170.10:8000/
##初始默认用户名密码
用户名:admin
密码:kubepi
##在k8s主节点上创建用户,并获取token
kubectl create sa kubepi-user --namespace kube-system
##其中上述kubepi-user就是要创建的用户名,可自行替换为需要的用户名
###在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
###在主节点上获取apiserver地址
kubectl config view --minify | grep server
-----登录kubepi后,添加集群