Centos7下搭建k8s集群(kubeadm方式)
文章目录一、搭建方式介绍二、使用(Kubeadm)部署步骤1.环境介绍2.修改hostname文件3.修改hosts文件4.关闭防火墙和关闭SELinux5.设置允许路由转发6.kube-proxy开启ipvs的前置条件6.所有节点关闭swap7.安装kubelet、kubeadm、kubectl8.部署Kubernetes Master9. Node节点加入集群一、搭建方式介绍方式一:Minik
文章目录
一、搭建方式介绍
方式一:
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。
官方地址:https://kubernetes.io/docs/setup/minikube/
方式二:
Kubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
方式三:
从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。
小结: 生产环境中部署Kubernetes集群,只有Kubeadm和二进制包可选,Kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。我们这里使用二进制包部署Kubernetes集群,我也是推荐大家使用这种方式,虽然手动部署麻烦点,但学习很多工作原理,更有利于后期维护。
二、使用(Kubeadm)部署步骤
1.环境介绍
本文是在centos7.6环境下搭建,使用的docker版本是19.03.6,Kubernetes使用版本是v1.17.0。
ip: 192.168.227.130作为k8s主节点-k8s-master;
ip: 192.168.227.131作为k8s从节点-k8s-node1;
ip: 192.168.227.133作为k8s从节点-k8s-node2;
备注: 以下第2步到第7步每个节点都要执行一遍
2.修改hostname文件
分别设置三台机器的hostname:
k8s-master下执行,hostnamectl set-hostname k8s-master
k8s-node1下执行,hostnamectl set-hostname k8s-node1
k8s-node2下执行,hostnamectl set-hostname k8s-node2
3.修改hosts文件
分别使用vim /etc/hosts命令修改三台机器的hosts文件,加入下面的内容
192.168.227.130 k8s-master
192.168.227.131 k8s-node1
192.168.227.133 k8s-node2
4.关闭防火墙和关闭SELinux
关闭防火墙操作:
systemctl stop firewalld
systemctl disable firewalld
关闭SELinux操作:
setenforce 0 临时关闭
vi /etc/sysconfig/selinux ,将改为SELINUX=disabled,设置为永久关闭
5.设置允许路由转发
设置允许路由转发,不对bridge的数据进行处理
创建文件
vi /etc/sysctl.d/k8s.conf
内容如下:
net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1 vm.swappiness = 0
执行文件
sysctl -p /etc/sysctl.d/k8s.conf
6.kube-proxy开启ipvs的前置条件
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe – ip_vs
modprobe – ip_vs_rr
modprobe – ip_vs_wrr
modprobe – ip_vs_sh
modprobe – nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash
/etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
7.所有节点关闭swap
swapoff -a 临时关闭
vi /etc/fstab 永久关闭
注释掉以下字段
/dev/mapper/cl-swap swap swap defaults 0 0
用命令free测试是否已经关闭swap
8.安装kubelet、kubeadm、kubectl
kubeadm: 用来初始化集群的指令。
kubelet: 在集群中的每个节点上用来启动 pod 和 container 等。
kubectl: 用来与集群通信的命令行工具。
清空yum缓存
yum clean all
设置yum安装源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装,其中–nogpgcheck 命令格式跳过公钥检查:
yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0 kubernetes-cni-1.17.0 --nogpgcheck
kubelet设置开机启动(注意:先不启动,现在启动的话会报错)
systemctl enable kubelet
查看版本
kubelet --version
9. 部署Kubernetes Master
(1).在k8s-master节点上,初始化kubeadm
kubeadm init \
--apiserver-advertise-address=192.168.227.130 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.17.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
执行之后会生成集群加入命令:
kubeadm join 192.168.227.130:6443 --token 0mhw98.cly7adkvr9kyk8jn \
--discovery-token-ca-cert-hash sha256:2ad130f432df2c3e8b23ed23a0881ec5864f5ed87e81d5e9bc537ff46c880a96
注意:apiserver-advertise-address这个地址必须是master机器的IP,kubernetes-version指定k8s版本号
常用错误:
错误一:[WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver
作为Docker cgroup驱动程序。,Kubernetes推荐的Docker驱动程序是“systemd”
解决方案:修改Docker的配置: vi /etc/docker/daemon.json,加入下面代码,然后重启Docker。
"exec-opts":["native.cgroupdriver=systemd"]
错误二:[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
解决方案:修改虚拟机的CPU的个数,至少为2个
(2).配置kubectl工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
下面就可以使用kubectl get node命令,看到当前的主节点的状态是NotReady
(3).安装Pod网络插件(CNI)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
(4).等待几分钟,查看所有Pod的状态,确保所有Pod都是Running状态
kubectl get pods -n kube-system
如果显示下面的结果,则证明启动成功了,如果coredns状态还是pending的话,可以在node执行完后面操作之后,三台机器再执行一下systemctl restart kubelet 服务全部重启一下,我之前也是一直处于pending状态,然后全部重启之后就可以了。
如果显示flannel还在后台拉取镜像的话,可以手动拉取镜像文件,执行下面的命令
docker pull quay.io/coreos/flannel:v0.13.1-rc1
(5).再次查看node,执行kubectl get node可以看到状态为ready
安装失败了,怎么清理环境重新安装啊?执行一条命令:
kubeadm reset
10. Node节点加入集群
(1).在node节点上执行下面的命令加入集群中:
kubeadm join 192.168.227.130:6443 --token 0mhw98.cly7adkvr9kyk8jn \
--discovery-token-ca-cert-hash sha256:2ad130f432df2c3e8b23ed23a0881ec5864f5ed87e81d5e9bc537ff46c880a96
注意,如果一直卡在 “Running pre-flight checks” 上,则很可能是时间未同步,
执行如下命令同步时间
$ ntpdate time.nist.gov
如果还有其它错误如 Port 10250 is in use,执行如下命令
kubeadm reset
然后再重新执行kubeadm join … 操作
(2).启动kubelet
systemctl start kubelet
(3).再回到master节点,执行下面命令查看节点状态
kubectl get nodes
如果显示下面结果,则证明搭建成功啦
注意如果node节点注册提示:failed to get config map: Unauthorized
错误原因,token令牌失效,解决方法:
在master节点执行下面的命令
kubeadm token create
然后再执行下面的命令重新生成注册令牌
kubeadm token create --print-join-command
然后杀死node节点所有K8S相关的进程再注册一次即可
更多推荐
所有评论(0)