k8s入门:裸机部署 k8s 集群

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

系列文章

第一章:✨ k8s入门:裸机部署 k8s 集群
第二章:✨ k8s入门:部署应用到 k8s 集群
第三章:✨ k8s入门:service 简单使用
第四章:✨ k8s入门:StatefulSet 简单使用
第五章:✨ k8s入门:存储(storage)
第六章:✨ K8S 配置 storageclass 使用 nfs 动态申领本地磁盘空间
第七章:✨ k8s入门:配置 ConfigMap & Secret
第八章:✨ k8s入门:k8s入门:Helm 构建 MySQL
第九章:✨ k8s入门:kubernetes-dashboard 安装
第十章:✨ k8s入门:kube-prometheus-stack 全家桶搭建(Grafana + Prometheus)



参考文章:https://k8s.easydoc.net/

一、裸机部署 k8s 集群

租用云服务器搭建比较方便,如果想使用虚拟机可参考我另一篇文章 https://blog.csdn.net/qq_41538097/article/details/124942720

下面步骤假设你已经有三台 centos 7.9 机器

1、基础环境

系统:Linux、centos 7.9 、3 台可以联网
k8s 版本:1.23.1
docker 版本:20.10.16
注意: 如果是虚拟机网关不要设置 192.168.1.2,虚拟机IP不要设置 192.168.1.x,安装 kube-flannel 会报错,下面部分错误是其他版本报的错误,有些信息和上面指定版本不同

2、添加域名映射
①、设置主机名 HostName

三台服务器分别设置为 master、node1、node2

# 192.168.25.100
hostnamectl set-hostname master 
# 192.168.25.101
hostnamectl set-hostname node1
# 192.168.25.102
hostnamectl set-hostname node2
②、三台服务器添加域名映射

三台服务器都添加内网 ip 映射关系

cat <<EOF >> /etc/hosts
192.168.25.100 master
192.168.25.101 node1
192.168.25.102 node2
EOF

测试能否 ping 通

ping master
ping node1
ping node2
3、关闭相关服务

三台服务器都关闭 SELinux、关闭防火墙

①、关闭SELinux

Linux 中关闭 SELinux 的方法(一般云服务器都已经关闭)
1、临时关闭:输入命令 setenforce 0,重启系统后还会开启。
2、永久关闭:输入命令 vim /etc/selinux/config,将 SELINUX=enforcing 改为 SELINUX=disabled,然后保存退出。

# 也可以使用 sed 命令快捷替换
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
②、关闭防火墙

云服务默认关闭

systemctl stop firewalld && systemctl disable firewalld
③、关闭 swap 分区

虚拟机搭建需要关闭

# 临时关闭
swapoff -a

# 永久关闭  
vim /etc/fstab 
#注释下面这行,或使用 sed 命令注释 sed -ri 's/.*swap.*/#&/' /etc/fstab
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

# 查看是否关闭成功
free -m
# 若都显示 0 则表示关闭成功,需要重启服务器生效,可以使用 reboot 或 shutdown -r now 命令重启
[root@node2 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3770         305        3115          11         350        3242
Swap:             0           0           0

如果修改 swap 重启服务器报错,参考 https://blog.csdn.net/weixin_45492179/article/details/102709752,注释掉 /etc/fstab 文件 UUID 即可

4、同步网络时间

可以先执行 date 查看时间是否准确,不准确则去同步网络时间,三台服务器都执行 ntpdate ntp1.aliyun.com,通过网络同步时间

# 如果没有 ntpdate ,使用如下命令安装
# yum install -y ntpdate
ntpdate ntp1.aliyun.com # 使用
date  # 2022年 05月 26日 星期四 18:03:19 +08
5、添加 yum 源

三台服务器都添加

①、添加 k8s 的yum源

添加 k8s 的yum源 (如果不指定目录,默认 kubernetes.repo 文件在当前目录)

cat <<EOF > /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=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
②、添加 docker 的 yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

如果报错 -bash: yum-config-manager: command not found 则运行 yum install -y yum-utils
如果安装 yum-utils 报错 failure: repodata/repomd.xml from kubernetes: [Errno 256] No more mirrors to try.,则设置 repo_gpgcheck=0

6、安装 k8s 组件

三台服务器都添加

若安装指定版本 docker 可运行 yum list kubelet --showduplicates | tail -n 10 查看版本号
若安装指定版本 k8s 组件可运行 yum list docker-ce --showduplicates | sort -r 查看版本号,(注意:不要选择过高版本,我安装的 1.23.1,1.24.0 会报错)

  • Kubectl: Kubectl 管理 Kubernetes 集群命令行工具
  • kubeadm:Kubeadm 是一个快捷搭建kubernetes(k8s)的安装工具,它提供了kubeadm init 以及 kubeadm join这两个命令来快速创建kubernetes集群
  • kubelet:kubelet 是在每个 Node 节点上运行的主要 “节点代理”。
yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1 docker-ce

docker 报错 : Problem 1: problem with installed package podman-2.0.5-5.module_el8.3.0+512+b3b58dca.aarch64
原因是 centos 8.0 以上版本 docker 和 podman 冲突,使用 yum erase -y podman buildah 移除 podman 即可
kubelet 报错:Error: Problem: cannot install the best candidate for the job - package kubelet does not have a compatible architecture
选的 centos 7.9 安装成功,centos 8.2 安装失败,不建议选过高版本

报错:[Errno -1] repomd.xml signature could not be verified for kubernetes Trying other mirror.
解决方法:https://github.com/kubernetes/kubernetes/issues/60134

7、启动配置服务

三台服务器都运行

①、启动 docker、kubelet 服务
systemctl enable kubelet && systemctl start kubelet # 开机自启动并启动 kubelet 服务
systemctl enable docker && systemctl start docker # 开机自启动并启动 docker 服务
②、修改 docker 配置

官方建议修改 docker Cgroup Driver 为 systemd

文件不存在如下方式添加,如果文件存在 vi 进入 /etc/docker/daemon.json 文件添加 “exec-opts”: [“native.cgroupdriver=systemd”] 即可

cat <<EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://m24eqnhh.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload && systemctl restart docker # 重启完之后可使用 docker info 查看是否修改成功
8、kubeadm 初始化集群(只需要在主节点跑)

注意: 失败了要使用用 kubeadm reset 重置

方式一

# 初始化集群控制台 Control plane
# apiserver-advertise-address: master 节点 IP
# image-repository:镜像仓库地址
# kubernetes-version: 版本号
# pod-network-cidr 和 service-cidr 不清楚如何设置,使用该默认值
# 查看其他默认值可使用命令: kubeadm config print init-defaults > kubeadm.yaml 查看默认初始化文件
kubeadm init \
--apiserver-advertise-address=192.168.25.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.23.1 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/16 

方式二

# 如果选择方式二安装,需要手动修改 kubeadm.yaml 文件中参数(具体参数参考方式一)

kubeadm config print init-defaults > kubeadm.yaml #  生成默认 kubeadm 文件

kubeadm config images list --config kubeadm.yaml # 查看组件版本号

kubeadm config images pull --config kubeadm.yaml # 提前拉取组件镜像

kubeadm init --config kubeadm.yaml # 使用 kubeadm.yaml 文件初始化集群

常见错误可参考:https://blog.csdn.net/IT_Java_Roy/article/details/104631745

1、kubeadm init 遇到的错误

错误解决方法

  • systemctl status kubelet 查看 kubelet 有没有启动(初始化失败会启动失败,初始化成功会自动重启)
  • kubectl get pods -n kube-system (查看系统 pod 运行状态)
  • kubectl describe pod [pod-name] -n kube-system(查看系统 pod 启动详情)
  • journalctl -xefu kubelet (查看 kubelet 启动日志)

错误1getting status of runtime: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService

解决方法:

rm -f /etc/containerd/config.toml
systemctl restart containerd

错误2[kubelet-check] Initial timeout of 40s passed
安装 1.24.0(如果未指定版本,默认最新版本)报错,暂未解决,指定 1.23.1 版本出初始化成功

错误3failed to run Kubelet: running with swap on is not supported, please disable swap

解决方法:

  • 方法一:kubelet 配置忽略 swap

    # vim /etc/sysconfig/kubelet 
    KUBELET_EXTRA_ARGS="--fail-swap-on=false"
    
  • 方法二:关闭 swap

    # 临时关闭
    swapoff -a
    
    # 永久关闭  
    vim /etc/fstab 
    #注释下面这行
    #/dev/mapper/centos-swap swap                    swap    defaults        0 0
    

错误4/proc/sys/net/ipv4/ip_forward contents are not set to 1

k8s入门:裸机部署 k8s 集群
解决方法

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
2、初始化成功

初始化成功,记得把 kubeadm join xxx 保存起来,忘记了重新获取:
kubeadm token create --print-join-command 默认 24h 过期
kubeadm token create --print-join-command --ttl=0 永不过期
kubeadm token list 查看是否有存活的 token
k8s入门:裸机部署 k8s 集群

9、授权节点访问控制集群

初始化成功可以看到提示信息,配置成功可以使用 kubectl 控制集群
k8s入门:裸机部署 k8s 集群

复制主节点授权文件到其他节点,以便 kubectl 的 node 节点也有权限访问集群

①、master 节点添加认证

kubectl 的 master 节点初始化成功会生成 /etc/kubernetes/admin.conf 认证文件

  • 方法一:添加环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
  • 方法二:修改认证文件访问权限
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
②、node 节点添加认证

如果上面 master 认证使用的方式二,则将 $HOME/.kube/config 文件复制到 node 节点 $HOME/.kube 路径下,node 节点也可以访问 kubectl 集群,配置环境方式类似。

# 将 master 节点 config 文件通过 scp 命令传递到 node 子节点
# 不能直接使用 scp 命令复制$HOME/.kube/config 文件,使用如下方法或文件传输工具
mkdir -p $HOME/.kube # node 节点执行
scp /etc/kubernetes/admin.conf root@node1:/root/.kube/config # master 节点
chown $(id -u):$(id -g) $HOME/.kube/config # node 节点

如果不复制文件会报错The connection to the server localhost:8080 was refused - did you specify the right host or port?

查看节点状态,发现都是 NotReady

kubectl get nodes
③、node 工作节点加入集群

把工作节点加入集群(只在工作节点跑),kubeadm master 节点初始化集群保存的 kubeadm join

kubeadm join 192.168.25.100:6443 --token b0t2j0.te29am3punpg93ir --discovery-token-ca-cert-hash sha256:90fbef8b3f2d63cb35127fdbc1214870bb9251858928c7647ce9d874a71d421b 

注意: 如果 node 节点加入集群报错,使用 journalctl -xefu kubelet 查看日志,再次执行kubeadm join 命令前使用 kubeadm reset 重置

错误x509: certificate has expired or is not yet valid

kubeadm join 报错如下
k8s入门:裸机部署 k8s 集群

解决方法:
master 主节点执行 kubeadm token create --print-join-command --ttl=0 ,token 永不过期

节点加入集群成功,使用 kubectl get nodes 查看节点信息,发现都是 NotReady,需要在主节点安装网络插件 Flannel 或 Calicos

④、安装网络插件 Flannel
  • Flannel 是一种基于 overlay 网络的跨主机容器网络解决方案,也就是将 TCP 数据包封装在另一种网络包里面进行路由转发和通信。

  • Flannel 配合 etcd 可以实现不同宿主机上的 docker 容器内网IP的互通。

安装网络插件,否则 node 是 NotReady 状态(主节点跑,安装可能需要几分钟)

# 很有可能国内网络访问不到这个资源,你可以网上找找国内的源安装 flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 也可以使用如下方式安装 flannel 组件,先下载  yaml 文件
wget -c  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 
kubectl apply -f kube-flannel.yml

# 如果要卸载 flannel 可以使用如下方式,根据你安装时的方式选择
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# kubectl delete -f kube-flannel.yml

# r如果要安装 calico,使用如下方式
# kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml

可能遇到错误Error registering network: failed to acquire lease: node "master" pod cidr not assigned(虚拟机安装 k8s 发现,云服务器未发现)

kubectl get pods -n kube-system 查看 容器运行状态
k8s入门:裸机部署 k8s 集群
查看一个启动错误容器的日志 kubectl logs -f kube-flannel-ds-bzkcl -n kube-system 发现报错 Error registering network: failed to acquire lease: node “master” pod cidr not assigned
k8s入门:裸机部署 k8s 集群
解决方法: 分配 cidr
vim /etc/kubernetes/manifests/kube-controller-manager.yaml

--allocate-node-cidrs=true
--cluster-cidr=10.244.0.0/16

添加到如下位置
k8s入门:裸机部署 k8s 集群
安装完成等几分钟所有节点状态从 NotReady 变为 Ready
k8s入门:裸机部署 k8s 集群
查看所有系统的 pod,保证每个都是运行状态,如果还有失败的,排查错误
k8s入门:裸机部署 k8s 集群

更多 kubectl 命令可参考:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

下篇讲述部署应用到 k8s 集群文章来源地址https://www.toymoban.com/news/detail-419097.html

到了这里,关于k8s入门:裸机部署 k8s 集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 14.Kafka系列之K8S部署集群

    1. 部署方式选择 基于Kafka3.X后的集群搭建方式主要分为两种,一种是基于Zookeeper管理方式,一种是基于KRaft模式,本文主要介绍Kafka-KRaft集群模式搭建 纠正文章 1.Kafka系列之K8S部署单节点 中基于Zookeeper方式的部署方式错误,其实是基于KRaft启动的,所以不部署Zookeeper也可以,可

    2024年02月10日
    浏览(25)
  • Kubernetes(K8s)从入门到精通系列之四:K8s的基本概念和术语之集群类

    集群表示一个由Master和Node组成的K8s集群。 Master指的是集群的控制节点。 在每个K8s集群都需要有一个或一组被称为Master的节点,来负责整个集群的管理和控制。 Master通常占据一个独立的服务器(在高可用部署中建议至少使用3台服务器),是整个集群的大脑。 在Master上运行以下

    2024年02月15日
    浏览(38)
  • 【Flink系列】部署篇(三):Native k8s部署高可用Flink集群实战

    上一篇博文介绍了如何独立部署一个高可用的Flink集群,本篇介绍如何用Native k8s去部署高可用的Flink 集群。本篇介绍的集群构建在AWS上,和构建在自己的服务器相比,主要区别在文件系统的选择和使用上。我选用的S3服务。 EC2操作系统:centos7 本机操作系统:Mac flink version: 1.

    2024年02月02日
    浏览(32)
  • 【云原生 | Kubernetes 系列】—K8S部署RocketMQ集群(双主双从+同步模式)

    rocketMQ高可用有很多种方式,比如:单机部署,多主集群,双主双从同步部署,双主双从异步部署,以及多主多从部署。部署集群可按照自己公司的实际情况进行部署。 单机部署:只启动一个rocketMQ实例就可以了,一般常用来本机测试使用。原因:一旦rocketMQ因某些原因挂掉,

    2024年02月04日
    浏览(37)
  • 【云原生 | Kubernetes 系列】— 部署K8S 1.28版本集群部署(基于Containerd容器运行)

    主机名 IP地址 备注 k8s-master01 192.168.0.109 master k8s-node1 192.168.0.108 node1 k8s-node2 192.168.0.107 node1 k8s-node3 192.168.0.105 node1 1、主机配置 2、升级内核 3、配置内核转发以及过滤 4、安装ipset ipvsadm,IPVS(IP Virtual Server)是一个用于负载均衡的 Linux 内核模块,它可以用来替代 kube-proxy 默认的

    2024年02月20日
    浏览(44)
  • Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群

    默认情况下,kubeadm 在每个控制平面节点上运行一个本地 etcd 实例。也可以使用外部的 etcd 集群,并在不同的主机上提供 etcd 实例。 可以设置HA集群: 使用堆叠控制控制平面节点,其中 etcd 节点与控制平面节点共存 使用外部 etcd 节点,其中 etcd 在与控制平面不同的节点上运行

    2024年02月14日
    浏览(41)
  • Minio入门系列【1】Windows/Linux/K8S单机部署Minio

    MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。 MinIO是一个非常轻量的服

    2024年02月07日
    浏览(39)
  • k8s系列文章一:安装指南

            当使用的Docker容器的数量变得越来越多时,对于端口、Docker容器的管理变得越来越麻烦,这时为方便管理容器,资源管理器随之出现,其中最出名的就是Kubernetes,简称K8s(因K与S间有8个字母),可以说k8s是docker的升级版,可用于docker集群配置管理微服务,同样的集群

    2024年02月05日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包