一步步教你如何搭建K8S集群

这篇具有很好参考价值的文章主要介绍了一步步教你如何搭建K8S集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、环境配置

三台CentOS7虚拟机,默认配置,内存2GB、处理器2核心。

先更新下系统

1 sudo yum update
2 sudo yum upgrade

二、安装并启动 docker

1 yum -y install wget
2 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo
3 yum -y install docker-ce
4 systemctl enable docker
5 systemctl start docker

三、安装 kubeadm

1、配置阿里源

一步步教你如何搭建K8S集群

官网这种带 google 的一看就会被墙,我们直接使用阿里的源:

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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

设置完源后再更新一下:

sudo yum update

2、禁用 SELinux

将 SELinux 设置为 permissive 模式,相当于将其禁用

一步步教你如何搭建K8S集群

1 sudo setenforce 0
2 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

3、关闭防火墙

1  systemctl stop firewalld
2  systemctl disable firewalld

4、关闭 swap

一步步教你如何搭建K8S集群

swapoff -a

5、安装并启用 kubelet

1 sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
2 sudo systemctl enable --now kubelet

四、部署主节点

1、查看 kubeadm 版本信息

kubeadm config print init-defaults
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.k8s.io
kind: ClusterConfiguration
kubernetesVersion: 1.27.0

其中 apiVersion 和 kubernetesVersion 需要和下面编写的 kubeadm.yml 保持一致。

2、编写 kubeadm.yaml

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: 1.27.0
imageRepository: registry.aliyuncs.com/google_containers
apiServer:
  extraArgs:
    runtime-config: "api/all=true"
etcd:
  local:
    dataDir: /data/k8s/etcd

3、运行 kubelet.service

systemctl enable kubelet.service

4、启动容器运行时

1 rm -rf /etc/containerd/config.toml
2 systemctl restart containerd

5、使网桥支持 ip6

1 cd /etc/sysctl.d/
2 vi k8s-sysctl.conf
3 #添加如下文本
4 net.bridge.bridge-nf-call-ip6tables = 1
5 net.bridge.bridge-nf-call-iptables = 1
6 #使其生效
7 sysctl -p k8s-sysctl.con

6、部署 master

kubeadm init --config kubeadm.yaml

五、ERROR

虽然上面 4~5 等步骤解决了一些警告,以及报错,但最终步骤8还是跑不起来,将版本换到 1.23.xx 再试试

一步步教你如何搭建K8S集群

1、卸载安装的 kubeadm

sudo yum remove kubelet kubeadm kubectl

2、重新安装指定版本 kubeadm

yum install kubelet-1.23.17 kubeadm-1.23.17  kubectl-1.23.17 kubernetes-cni

一步步教你如何搭建K8S集群 

3、启用 kubelet

sudo systemctl enable --now kubelet

4、查看 kubeadm 版本信息

5、修改 kubeadm.yaml 版本为 1.23.0

6、部署 master

六、ERROR

降低版本后又出现如下报错:

[init] Using Kubernetes version: v1.23.0
[preflight] Running pre-flight checks
    [WARNING SystemVerification]: this Docker version is not on the list of validated versions: 24.0.2. Latest validated version: 20.10
error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
    [ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
    [ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
    [ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists
    [ERROR Port-10250]: Port 10250 is in use
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

1、首先需要将 24.0.2 版本的 Docker 降级为 20.10 的版本

访问 Docker 版本 可查看 docker-ce 版本:

一步步教你如何搭建K8S集群

yum downgrade --setopt=obsoletes=0 -y docker-ce-20.10.24 docker-ce-selinux-20.10.24 containerd.io

2、重置 kubeadm

kubeadm reset

3、部署 master

7、ERROR

呕、变着花样报错:

Unfortunately, an error has occurred:
        timed out waiting for the condition

    This error is likely caused by:
        - The kubelet is not running
        - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)

    If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:
        - 'systemctl status kubelet'
        - 'journalctl -xeu kubelet'

    Additionally, a control plane component may have crashed or exited when started by the container runtime.
    To troubleshoot, list all containers using your preferred container runtimes CLI.

    Here is one example how you may list all Kubernetes containers running in docker:
        - 'docker ps -a | grep kube | grep -v pause'
        Once you have found the failing container, you can inspect its logs with:
        - 'docker logs CONTAINERID'

1、先看一下 kubelet 是否在运行

systemctl status kubelet

2、输入如下命令查看报错日志

journalctl -xefu kubelet 
May 28 23:23:50 localhost.localdomain kubelet[19052]: E0528 23:23:50.235324   19052 server.go:302] "Failed to run kubelet" err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\""
May 28 23:23:50 localhost.localdomain systemd[1]: kubelet.service: main process exited, code=exited, status=1/FAILURE
May 28 23:23:50 localhost.localdomain systemd[1]: Unit kubelet.service entered failed state.
May 28 23:23:50 localhost.localdomain systemd[1]: kubelet.service failed.

3、Google或百度下报错原因

kubelet cgroup driver: \“systemd\“ is different from docker cgroup driver: \“cgroupfs\“

上面说是 Docker 和 kubelet 的 cgroup driver 不一样,kubelet 的是 systemd,docker 的是 cgroupfs。

一步步教你如何搭建K8S集群

一步步教你如何搭建K8S集群

3.1 将 docker 的改成 systemd:

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://gmkz82n7.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]  
}
EOF

registry-mirrors 是为了配置镜像加速器,exec-opts 才是将 docker 的 cgroup driver 改成 systemd。

镜像加速器地址可以在阿里云官网搜容器镜像服务,然后找到镜像加速器。

3.2 重启 docker:

1 sudo systemctl daemon-reload
2 sudo systemctl restart docker

3.3 查看 docker 的 cgroup

docker info

3.4 重置 kubeadm

kubeadm reset

3.5 部署 master

八、主节点部署成功标志

一步步教你如何搭建K8S集群

上图说了要启动集群需要执行的命令:

1 mkdir -p $HOME/.kube
2 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
3 sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

最后,你应该部署一个 pod 网络附加组件,可参考 weaveworks网站 进行部署:

kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

检查部署状态:

kubectl get pods -n kube-system

一步步教你如何搭建K8S集群

从失败到成功大概可能要个五分钟左右吧。

九、部署工作节点

1、重复步骤 一 ~ 三,安装 kubeadmin。

一步步教你如何搭建K8S集群

提醒:

  • Docker 不要安装太高版本,或者可按步骤先安装后降级
  • Docker 的 cgroup driver 驱动需要改成 systemd
  • kubeadm 不要默认安装最新版,要安装指定版本
  • 禁用 SELinux,禁用 swap
  • 关闭防火墙

2、加入节点

kubeadm join 192.168.33.133:6443 --token rodccq.t8fooat0paxcof56 \
    --discovery-token-ca-cert-hash sha256:64e91a185d8929b23c987683ffae359e62b09fb94e035322d511addbd065fb02

十、ERROR

一步步教你如何搭建K8S集群

说是 token 过期了,不过我主节点出现这个 token 到部署 WorkNode 不过一小时。

那么重新生成一下 Token 看看:

kubeadm token create --print-join-command

出现如下命令:

kubeadm join 192.168.33.133:6443 --token vz24u8.4h5vuriszbns3cfi --discovery-token-ca-cert-hash sha256:64e91a185d8929b23c987683ffae359e62b09fb94e035322d511addbd065fb02

在 WorkNode 上执行一下上面命令,过了几分钟后,还是出现同样报错。

网上搜到说本地时间错误同样会导致证书过期报错,检查一下两台机器的本地时间

date

发现确实不对,同步时间命令,两台机器都执行一下:

1 sudo yum install ntpdate
2 ntpdate ntp1.aliyun.com

MasterNode 重新生成下 token,WorkNode 执行加入节点命令。

很遗憾的是我的虚拟机上的主节点突然宕机了,并且之后换了一个 IP,然后我又立马给它起起来了。

然后再 MasterNode 重新生成下 token,WorkNode 执行加入节点命令。

继续报错,如果你们的没有像我一样突然发生宕机,可能不会出现这样的问题:

You must delete the existing Node or change the name of this new joining

然后我就给新加入的节点重命名主机名:

hostnamectl set-hostname node01

再重新加入,然后又报了一个错:

[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists

这需要重置一下 kubeadm:

kubeadm reset

再再重新加入,终于成功了:

一步步教你如何搭建K8S集群

接着我们运行一下查看节点的命令:(注意,需要在有 control-plane 组件的节点查看,目前只有主节点有)

kubectl get nodes

那我们在主节点上运行看看:

一步步教你如何搭建K8S集群

这个命令我在主节点上执行了三次,第一次是工作节点还没加入前,第二次是工作节点加入后,可以看到 node01 状态是 NotReady,过了几分钟后,我又执行了一次,node01 的状态变成了 Ready。

最后我们再按照加入子节点的步骤,再加入一台机器:

一步步教你如何搭建K8S集群

 一个主节点、两个工作节点 K8S 集群搭建完成。文章来源地址https://www.toymoban.com/news/detail-463804.html

到了这里,关于一步步教你如何搭建K8S集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8s 入门指南(一):单节点集群环境搭建

    官方文档:Kubernetes 文档 | Kubernetes 系统配置 CentOS 7.9(2 核 2 G) 本文为 k8s 入门指南专栏,将会使用 kubeadm 搭建单节点 k8s 集群,详细讲解环境搭建部署的细节,专栏后面章节会以实战代码介绍相关概念,带您快速入门 k8s k8s 集群搭建有三种方式,目前主流的搭建 k8s 集群的方

    2024年02月05日
    浏览(35)
  • 【K8S专题】一、集群环境规划配置

      Kubernetes(k8s)是一个开源的容器编排平台,它可以协调和管理容器化应用程序的生命周期。 Kubernetes集群具有以下优势: 高可用性:Kubernetes提供了多种机制来保证应用程序的高可用性,包括自动化的容器重启和故障转移机制。 可扩展性:Kubernetes可以自动扩展应用程序的

    2023年04月24日
    浏览(29)
  • K8S下如何搭建eureka集群

    传统应用上云,基于传统应用需要考虑上云的方案和改造成本,这也是传统应用上云过程中的难点,本篇介绍3台eureka搭建的方案。 此方案借助了K8S中Service的一些功能。 这种方案是传统方案的简单迁移版本,比较易于理解;pod通过k8s的service提供稳定的访问url,pod ip是会经常

    2024年02月16日
    浏览(31)
  • CentOS 7.9 环境下搭建k8s集群(一主两从)

    目录 一、硬件准备(虚拟主机) 二、环境准备 1、所有机器关闭防火墙 2、所有机器关闭selinux 3、所有机器关闭swap 4、所有机器上添加主机名与ip的对应关系 5、在所有主机上将桥接的ipv4流量传递到iptables的链 三、为所有节点安装docker 四、集群部署 1、为所有节点修改仓库,

    2024年03月14日
    浏览(40)
  • 使用kubeadm搭建生产环境的多master节点k8s高可用集群

    环境centos 7.9 目录  1.对安装 k8s 的节点进行初始化配置 2 通过 keepalived+nginx 实现 k8s apiserver 节点高可用 3、kubeadm 初始化 k8s 集群 4.扩容 k8s 控制节点,把 xuegod62 加入到 k8s 集群 5、扩容 k8s 控制节点,把 xuegod64 加入到 k8s 集群 6、扩容 k8s 集群-添加第一个工作节点  7、安装 ku

    2024年02月16日
    浏览(39)
  • K8s环境下监控告警平台搭建及配置

    Promethues是可以单机搭建的,参考 prometheus入门 [1] 本文是就Promethues+Grafana在K8s环境下的搭建及配置 启动minikube minikube start 安装helm 使用Helm Chart 安装 Prometheus Operator: helm install prometheus-operator stable/prometheus-operator -n monitoring 报错: 根据 Kubernetes和微服务监控体系 [2] (搜索\\\"降低我们

    2024年02月13日
    浏览(37)
  • k8s搭建(一、环境配置与docker安装)

    天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 k8s搭建文章: k8s搭建(一、k8s环境配置与docker安装) k8s搭建(二、k8s组件安装) k8s搭

    2024年02月21日
    浏览(35)
  • 国内环境下ubuntu22.04+kubeadm搭建v1.27.2多节点k8s集群

    按说,使用kubeadm搭建k8s集群最权威的方法、步骤,应该是直接参考kubeadm官网,里边描述了从OS基础配置到containerd,再到kubeadm安装、initjoin的全过程。 只是,kubernetes的官网对整个过程的描述并不是一种step by step的方式,而是把相关的步骤分散于各个富含上下文知识的页面中,

    2024年02月14日
    浏览(49)
  • 本地k8s集群搭建保姆级教程(3)-安装k8s集群

    1.1 增加镜像替换脚本 注意:请在master机器上执行 添加脚本内容: 1.2 查看k8s版本 1.3 执行脚本 2.1 初始化master节点 在master机器上执行如下命令: 说明: –apiserver-advertise-address= 你master节点的ip 看到如下内容,说明master节点初始化成功 图片中最后一行记得要保存起来,worker节

    2024年02月15日
    浏览(32)
  • K8s(Kubernetes)学习(二):k8s集群搭建

    minikube 只是一个 K8S 集群模拟器,只有一个节点的集群,只为测试用,master 和 worker 都在一起。 裸机安装 至少需要两台机器(主节点、工作节点个一台),需要自己安装 Kubernetes 组件,配置会稍微麻烦点。 缺点:配置麻烦,缺少生态支持,例如负载均衡器、云存储。 直接用

    2024年02月09日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包