文章目录
- 一、环境准备
- 1、准备1主2从
- 2、设置主机名与时区
- 3、添加hosts网络主机配置
- 4、关闭防火墙
- 5、验证是否配置正确
- 二、安装Kubeadm
- 1、在每个Centos上安装Docker
- 2、确保从cgroups均在同一个从groupfs
- 3、安装kubeadm集群部署工具
- 4、关闭交换区
- 5、配置网桥
- 6、通过镜像安装k8s
- 7、验证是否配置正确
- 三、利用Kubeadm构建集群
- 1、配置master
- 2、把node加入集群
- 四、Dashboard
- 1、开启Web UI Dashboard
- 2、部署集群
- 五、总结
- 1、[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
- 2、[ERROR Swap]: running with swap on is not supported. Please disable swap
- 3、The connection to the server 192.168.56.200:6443 was refused - did you specify the right host or port?
- 方案1(不管什么原因,直接操作)
- 方案2
- 4、[ERROR Port-10250]: Port 10250 is in use
- 5、[discovery] Failed to request cluster info, will try again: [Get https://10.0.2.15:6443/api/v1/namespaces/kube-public/configmaps/cluster-info: dial tcp 10.0.2.15:6443: connect: connection refused]
- 6、error execution phase kubelet-start: error uploading crisocket: timed out waiting for the condition
- 7、[kubelet-check] Initial timeout of 40s passed.
一、环境准备
国内安装K8S的四种途径
- 使用kubeadmin通过离线镜像安装
推荐使用- 购买使用阿里公有云平台k8s
需要花钱- 通过yum官方仓库安装
版本比较老旧- 二进制包的形式进行安装,kubeasz
github开源项目,不推荐使用,非官方,不知道有什么坑
1、准备1主2从
安装虚拟机,可以参考VirtualBox+Vagrant安装虚拟机
Centos 7
- Master: 192.168.56.200
- Node1: 192.168.56.201
- Node2: 192.168.56.202
2、设置主机名与时区
3台都执行
timedatectl set-timezone Asia/Shanghai
master执行
hostnamectl set-hostname master
node执行
hostnamectl set-hostname node1
hostnamectl set-hostname node2
3、添加hosts网络主机配置
三台虚拟机都要设置
vi /etc/hosts
192.168.56.200 master
192.168.56.201 node1
192.168.56.202 node2
4、关闭防火墙
三台虚拟机都要设置
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
5、验证是否配置正确
可以接受到数据,就问题不大
ping master
ping node1
ping node2
二、安装Kubeadm
上传我们的资源:https://mp.csdn.net/mp_download/manage/download/UpDetailed
1、在每个Centos上安装Docker
参考Centos7使用阿里云镜像加速服务安装Docker
2、确保从cgroups均在同一个从groupfs
docker info | grep cgroup
集群中这个值应该相同,如果不是groupfs,执行下列语句
cat << EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=cgroupfs"]
}
EOF
systemctl daemon-reload && systemctl restart docker
3、安装kubeadm集群部署工具
cd /k8s
tar -zxvf kube114-rpm.tar.gz
cd kube114-rpm
yum localinstall -y *.rpm
4、关闭交换区
临时关闭swap:swapoff -a
可永久关闭swap:删除或者注释掉swap的挂载
-sed -i ‘/swap/s/^/#/’ /etc/fstab
-vi /etc/fstab,注释掉swap这一行
看看是否已经关闭:free -m,看后一行swap 都是0
[root@master k8s]# free -m
total used free shared buff/cache available
Mem: 1837 773 75 9 988 906
Swap: 0 0 0
注:交换区:就是使用硬盘空间模拟内存
5、配置网桥
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
net.ipv4.ip_forward=1
net.ipv4.ip_forward_use_pmtu = 0
EOF
sysctl --system
/etc/sysctl.d/k8s.conf是用于存放Kubernetes相关内核参数配置的目录,系统启动时加载
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
表示允许 IPv6/IPv4 数据包通过 Linux 网桥时,调用 IPv6/IPv4 协议族的相关规则(比如防火墙规则)。其值为1表示启用,0表示禁用
控制网桥是否允许使用特定的内核防火墙模块(例如 IPv6 的 iptables、IPv4 的 iptables 和 ARP 的 arptables)
net.ipv4.ip_forward: 这个参数控制是否启用 IP 转发,即将一个接口收到的 IP 数据包转发到另一个接口。在 Kubernetes 中,通常需要将这个参数设置为 1,以便节点之间能够进行通信。
net.ipv4.ip_forward_use_pmtu: 这个参数控制是否使用路径最大传输单元(PMTU)来优化数据包传输。如果设置为 0,则禁用 PMTU 优化。
sysctl --system:生效命令
查看效果:sysctl -a|grep “ip_forward”
6、通过镜像安装k8s
加载本地镜像文件
cd /k8s
docker load -i k8s-114-images.tar.gz
docker load -i flannel-dashboard.tar.gz
7、验证是否配置正确
docker images
以上操作,3台虚拟机都要执行
三、利用Kubeadm构建集群
1、配置master
kubeadm初始化
kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.56.200
初始化成功后,会提示我们执行下面操作,返回kubeadm join...
,这个后面在node节点执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
获取 Kubernetes 集群中所有节点
kubectl get nodes
如果状态不对,执行kubectl get pod --all-namespaces
查看
基础网络组件一直处于Pending状态,缺少flannel网络组件,需要安装
kubectl create -f kube-flannel.yml
2、把node加入集群
执行前面kubeadm init返回的
kubeadm join 192.168.56.200:6443 --token hhpwkf.xq24gwed3urzugmg --discovery-token-ca-cert-hash sha256:052a21b706da880e1603484b626ee9f9665cba9b42bb8bdb244521cdfcef4d48
如果忘记了,也可以手动拼接,格式为kubeadm join masterip:6443 --token xxx1 --discovery-token-ca-cert-hash sha256:xxx2
- 查看token,替换xxx1
kubeadm token list
获取证书hash,替换xxx2
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
四、Dashboard
使用Dashboard验证一下集群是否正常
原理:master向node1、2发送创建容器指令
k8s会通过健康检查,保证容器质量
1、开启Web UI Dashboard
kubectl apply -f kubernetes-dashboard.yaml
kubectl apply -f admin-role.yaml
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml
kubectl -n kube-system get svc
2、部署集群
node节点配置node1、2镜像加速,参考:https://blog.csdn.net/qq_36433289/article/details/134499047
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://your.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
注:your替换为阿里云提供的
访问http://192.168.56.201:32000 或 http://192.168.56.202:32000,打开界面
- 192.168.56.201是我们node的ip
- 32000端口是kubernetes-dashboard.yaml文件里面配置
通过右上角的新建
填写内容,点击部署
就会自动部署Tomcat容器到我们的node节点,如下,说明已经成功了
点击上图中的副本集,查看我们对外暴露的接口
通过node的ip:31288即可访问,如下图,状态码是404就说明成功了
五、总结
1、[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
很明显,就是我们的配置低了,调整我们的CPU配置,至少为2核
2、[ERROR Swap]: running with swap on is not supported. Please disable swap
没有关闭交换区导致,需要执行swapoff -a
3、The connection to the server 192.168.56.200:6443 was refused - did you specify the right host or port?
方案1(不管什么原因,直接操作)
1、重置k8s集群
kubeadm reset
2、删除相关目录
rm -rf $HOME/.kube
rm -rf /etc/kubernetes
rm -rf /var/lib/etcd
3、重新利用Kubeadm构建集群
方案2
检查下是否有错误:systemctl status kubelet
[root@master ~]# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/usr/lib/systemd/system/kubelet.service; disabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: inactive (dead)
Docs: https://kubernetes.io/docs/
原因很明显,kubelet没启动,之前每次重启都会这样,设置开机自动启动即可
systemctl enable kubelet
4、[ERROR Port-10250]: Port 10250 is in use
找到占用的端口号的进程,杀掉即可
netstat -ntlup|grep 10250
kill -9 pid
注:如果netstat命令不支持,出现-bash: netstat: command not found,执行yum install net-tools
5、[discovery] Failed to request cluster info, will try again: [Get https://10.0.2.15:6443/api/v1/namespaces/kube-public/configmaps/cluster-info: dial tcp 10.0.2.15:6443: connect: connection refused]
这个10.0.2.15:6443访问有问题,也就是我们的ip有问题,使用Vagrant生成的虚拟机,默认网卡eth0对应IP地址10.0.2.15,kubeadm init不指定ip的话,默认生成的就是这个ip,所以初始化的时候需要指定ip,就没问题了
6、error execution phase kubelet-start: error uploading crisocket: timed out waiting for the condition
重置下集群即可:kubeadm reset -f
7、[kubelet-check] Initial timeout of 40s passed.
如果阻塞这一步,加入集群失败,重置下集群就OK了
kubeadm reset -f