在CentOS7中搭建单机kubernetes集群

最近需要在自己的虚拟机中搭建一个单机的k8s集群,以便于学习k8s的基本原理和操作。但由于版本和国内网络状况的差异,根据官方和网上的各种文档都无法直接完成集群的搭建。因此在此记录一下完整的搭建过程供后续参考。

使用kubeadm搭建单机集群

在官方的安装文档https://kubernetes.io/zh/docs/tasks/tools/中,建议使用minikube、kind或kubeadm搭建集群。

笔者首先尝试了使用minikube搭建集群,但遇到的问题是minikube start命令启动后会停在一个步骤再也不动了,也没有任何报错信息。从当时的进程状态看,minikube启动执行了kubeadm init来建立集群,应该是kubeadm在建立集群时出现了问题。但是这时已经无法看到kubeadm的输出,也不知道到底遇到了什么问题,无从诊断和解决。

因此,笔者最终选择了直接使用kubeadm来搭建集群。kubeadm是k8s官方的部署工具,部署的集群可以直接用于生产环境,适用范围更广。

搭建步骤

1. 系统配置

kubeadm创建k8s集群时对系统配置有一些要求,需要预先满足:

禁用交换分区

  • 关闭已挂载的swap分区:
[root@localhost install]# swapoff -a
  • 删除swap挂载配置:将/etc/fstab中swap挂载配置删除或注释
[root@localhost install]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Fri Apr 23 00:24:11 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=67a639c9-fb0e-4d8d-ba68-e0d7329d6b9c /boot                   xfs     defaults        0 0
#/dev/mapper/centos-swap swap                    swap    defaults        0 0
  • 禁用selinux
[root@localhost install]# setenforce 0
[root@localhost install]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  • 关闭防火墙
[root@localhost zjl]# systemctl disable firewalld
[root@localhost zjl]# systemctl stop firewalld

2. 安装runtime

  • k8s需要runtime来运行容器。这里我们选择安装docker:
[root@localhost install]# yum install -y docker
  • 为docker配置代理。由于kubeadm后续安装时会使用docker pull下载k8s管理容器的镜像,而镜像下载地址k8s.gcr.io在国内不能直接访问,因此需要为其配置代理服务器来访问:
mkdir -p /etc/systemd/system/docker.service.d
cat <<EOF | sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.134.1:10809/"
Environment="HTTPS_PROXY=http://192.168.134.1:10809/"
Environment="NO_PROXY=localhost,127.0.0.1,10.96.0.1,192.168.*"
EOF
systemctl daemon-reload
systemctl restart docker

如果没有可用的代理服务器,也可以从国内的镜像站拉取镜像,然后使用docker tag将镜像标记为k8s.gcr.io的镜像。不同版本的k8s和kubeadm需要的镜像列表是不同的,需要拉取的镜像列表可以使用kubeadm config images list命令获取。

3. 安装 kubeadm、kubelet 和 kubectl

  • 配置k8s的yum repo,由于官方repo国内不能直接访问,改用阿里云的镜像repo:
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
  • 安装kubelet kubeadm kubectl
[root@localhost install]# yum install -y kubelet kubeadm kubectl
  • 启动kubelet
[root@localhost install]# systemctl enable --now kubelet

kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。

4. 使用kubeadm创建集群

  • 执行kubeadm。这里需要加上--pod-network-cidr这个参数,因为一些第三方的POD网络插件会使用到这个参数的配置,例如后面我们安装的flannel。
[root@localhost install]# kubeadm init --pod-network-cidr=10.244.0.0/16
  • 复制集群管理配置到用户路径
#普通用户
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

#root用户
export KUBECONFIG=/etc/kubernetes/admin.conf
  • 安装网络插件flannel
[root@localhost install]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

这个地址虽然是github的raw文件地址,但是在国内却因为dns的问题无法访问。因此也需要挂代理下载后使用,或者直接在https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml上将内容复制到文件中。

  • 去除主机的Master标签

默认情况下,主节点上会有一个node-role.kubernetes.io/master:NoSchedule的taint(污点),使得POD默认无法调度到这个节点上。如果要建立单机集群,最简单的方式就是将这个taint去除:

kubectl taint nodes --all  node-role.kubernetes.io/master-
  • 加入其它节点

我们这里只建立单节点集群,如果有其他节点需要加入,可以执行kubeadm init执行后提供的命令:

kubeadm join 192.168.134.128:6443 --token 4a2aip.geid6hr4t7d3pxl9 --discovery-token-ca-cert-hash sha256:fbb45dee6e25ff417b44ad69180dd22eacaf0d6b0b5c106c3ac2623e92113c1d 

需要注意的是这个命令中的token是有有效期的,默认是24小时。可以参考这篇文章中的方法来获取新的token:https://blog.csdn.net/qq_36820037/article/details/108696508

至此,k8s的单机集群就创建完成了。

5. 尝试创建容器

[root@localhost k8s_test]# kubectl create -f rc_template.yaml
[root@localhost k8s_test]# kubectl get rc
NAME    DESIRED   CURRENT   READY   AGE
mysql   1         1         1       18m

可见已经可以正常创建replica和POD。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值