CentOS7搭建Kubernetes环境

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: CentOS7搭建Kubernetes环境

环境准备

  • 节点数量: 3 台 CentOS7 虚拟机
  • 硬件配置: 最少 2G 内存,最少 2个 CPU,最少 30G 硬盘
  • 网络要求: 多个节点之间网络互通,每个节点能访问外网

集群规划

我这里准备了三台虚拟机,如下:

  • k8s-node1:192.168.95.20
  • k8s-node2:192.168.95.21
  • k8s-node3:192.168.95.22

配置节点主机名

# 第一个节点执行
$ hostnamectl set-hostname k8s-node1
# 第二个节点执行
$ hostnamectl set-hostname k8s-node2
# 第三个节点执行
$ hostnamectl set-hostname k8s-node3

配置 Hosts 文件

在三台机器上同步执行以下命令即可:

cat >> /etc/hosts <<EOF
192.168.95.20 k8s-node1
192.168.95.21 k8s-node2
192.168.95.22 k8s-node3
EOF

关闭防火墙

关闭三台机器的防火墙,并禁用开机自启动,在三台机器上同步执行以下命令即可:

systemctl stop firewalld && systemctl disable firewalld

关闭 swap 分区

在三台机器上同步执行以下命令即可:

swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab

更新系统时间

在三台机器上同步执行以下命令即可:

yum install ntpdate -y
ntpdate time.windows.com

安装容器运行环境 containerd

在三台机器上按照以下步骤同步执行命令即可。

安装 yum-config-manager 相关依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

添加 containerd yum 源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装 containerd

yum install  -y containerd.io cri-tools

配置 containerd

cat >  /etc/containerd/config.toml <<EOF
disabled_plugins = ["restart"]
[plugins.linux]
shim_debug = true
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://frz7i079.mirror.aliyuncs.com"]
[plugins.cri]
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"
EOF

启动 containerd 服务并设置开机自启动

systemctl enable containerd && systemctl start containerd && systemctl status containerd

配置 containerd 模块

cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

配置 k8s 网络配置

cat  > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

加载 overlay 和 br_netfilter 模块

modprobe overlay
modprobe br_netfilter

查看当前网络配置是否生效

sysctl -p /etc/sysctl.d/k8s.conf

注意:做完以上配置之后需要重启三台机器!

配置 yum 下载源

查看源

yum repolist

添加源 x86(根据服务器架构自行选择)

cat <<EOF > 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
mv kubernetes.repo /etc/yum.repos.d/

添加源 ARM(根据服务器架构自行选择)

cat << EOF > kubernetes.repo 
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
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
mv kubernetes.repo /etc/yum.repos.d/

安装 Kubernetes

安装最新版本

yum install -y kubelet kubeadm kubectl

指定版本安装

yum install -y kubelet-1.26.0 kubectl-1.26.0 kubeadm-1.26.0

启动 kubelet

systemctl enable kubelet && systemctl start kubelet && systemctl status kubelet

初始化集群

初始化 Master 节点

注意: 初始化 K8s 集群仅仅需要再在 Master 节点进行集群初始化!

kubeadm init \
--apiserver-advertise-address=192.168.95.20 \
--pod-network-cidr=10.224.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/containerd/containerd.sock

我这里已经将命令中的 IP 地址修改成了我的 Master 服务器。以上命令参数解释如下:

参数 意义
–apiserver-advertise-address 用于指定 Kubernetes API Server(kube-apiserver)在集群中对外公布的 IP 地址。它指定了其他节点将用于与 API Server 通信的 IP 地址。
–pod-network-cidr 用于指定 Pod 网络的网段(CIDR)。在 Kubernetes 集群中,每个 Pod 都分配一个独立的 IP 地址,该参数用于定义用于分配这些 IP 地址的网段范围。常用值为:10.244.0.0/16
–image-repository 用于指定 Kubernetes 组件镜像的仓库地址。它定义了从哪个容器镜像仓库获取所需的组件镜像。
–cri-socket 用于指定 Kubernetes 运行时(Container Runtime Interface,CRI)使用的 Unix 域套接字路径或网络套接字地址。

初始化完成后需要在 Master 节点依次执行图中 1 的三条命令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

图中 2 的内容是需要接下来在 K8s 集群中其他非 Master 节点执行的命令,表示将自己加入集群。

在主节点中执行 kubectl get nodes 查询出当前集群中只有一个控制面板节点。

初始化 WorkNode 节点

分别在另外两台机器上执行以下命令,将自己加入 K8s 集群。

kubeadm join 192.168.95.20:6443 --token 39v30v.ekgba508fb08f664 \
  --discovery-token-ca-cert-hash sha256:d16ef1480c1288402ffdfa7a500ee44fb9a936b57ec66be526a9186aea1582f0

执行完成后在 Master 节点执行 kubectl get nodes 命令即可查看当前集群中的所有节点。

节点已经加入进来了,但是集群中的这三个节点都是 NotReady 状态,查询所有的 Pod 可以看到 coredns 处于等待状态(Pending),这是由于当前集群缺少前面文章提到的 DNS 插件。

若后面想再次添加新节点,可以使用以下命令,将输出的内容在目标节点执行即可:

$ kubeadm token create --print-join-command --ttl=0

kubeadm join 10.15.0.21:6443 --token xjm7ts.gu3ojvta6se26q8i --discovery-token-ca-cert-hash sha256:14c8ac5c04ff9dda389e7c6c505728ac1293c6aed5978c3ea9c6953d4a79ed34

配置集群网络

配置文件:https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml

根据上面地址下载 Calico 配置文件,之后上传至 Master 节点服务器。之后编辑此配置文件,找到下面的这一行,修改为刚才初始化 Master 节点的 --pod-network-cidr

- name: CALICO_IPV4POOL_CIDR
  value: "10.224.0.0/16"

在 Master 节点执行以下命令即可。

kubectl apply -f calico.yaml

再次在 Master 查询当前节点状态和 Pod。

可以看到当前集群中多了三个 Pod,表示网络连接通道,并且处于初始化的状态,之后稍等几分钟,再次查看集群状态即可。

至此,K8s 集群即搭建完毕~

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
存储 数据采集 Kubernetes
一文详解K8s环境下Job类日志采集方案
本文介绍了K8s中Job和Cronjob控制器用于非常驻容器编排的场景,以及Job容器的特点:增删频率高、生命周期短和突发并发大。文章重点讨论了Job日志采集的关键考虑点,包括容器发现速度、开始采集延时和弹性支持,并对比了5种采集方案:DaemonSet采集、Sidecar采集、ECI采集、同容器采集和独立存储采集。对于短生命周期Job,建议使用Sidecar或ECI采集,通过调整参数确保数据完整性。对于突发大量Job,需要关注服务端资源限制和采集容器的资源调整。文章总结了不同场景下的推荐采集方案,并指出iLogtail和SLS未来可能的优化方向。
106 1
|
25天前
|
Prometheus 监控 Kubernetes
深入理解Prometheus: Kubernetes环境中的监控实践
Kubernetes简介 在深入Prometheus与Kubernetes的集成之前,首先简要回顾一下Kubernetes的核心概念。Kubernetes是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。它提供了高度的可扩展性和灵活性,使得它成为微服务和云原生应用的理想选择。 核心组件 • 控制平面(Control Plane):集群管理相关的组件,如API服务器、调度器等。 • 工作节点(Nodes):运行应用容器的机器。 • Pods:Kubernetes的基本运行单位,可以容纳一个或多个容器。
|
22天前
|
消息中间件 Kubernetes Android开发
消息队列 MQ产品使用合集之如何在kubernetes环境里面部署
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
24天前
|
前端开发 Devops 测试技术
阿里云云效产品使用问题之更换所部署的环境关联的ACK集群该如何实现
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
域名解析 Kubernetes 网络协议
【域名解析DNS专栏】云原生环境下的DNS服务:Kubernetes中的DNS解析
【5月更文挑战第29天】本文探讨了Kubernetes中的DNS解析机制,解释了DNS如何将服务名转换为网络地址,促进集群内服务通信。Kubernetes使用kube-dns或CoreDNS作为内置DNS服务器,每个Service自动分配Cluster IP和DNS条目。通过示例展示了创建Service和使用DNS访问的流程,并提出了优化DNS解析的策略,包括使用高性能DNS解析器、启用DNS缓存及监控日志,以实现更高效、可靠的DNS服务。
|
2月前
|
网络安全 Docker 容器
测试开发环境下centos7.9下安装docker的minio
测试开发环境下centos7.9下安装docker的minio
113 1
|
2月前
|
Go
CentOS6.4安装GO语言环境
CentOS6.4安装GO语言环境
25 0
|
2月前
|
存储 运维 Kubernetes
构建高效稳定的容器化运维环境:Docker与Kubernetes的协同
【4月更文挑战第14天】 在当今快速发展的云计算时代,容器技术以其轻量级、快速部署和易于管理的优势,成为现代应用交付的标准。本文将深入探讨如何通过Docker和Kubernetes的整合使用来构建一个高效且稳定的容器化运维环境。我们将分析Docker容器的基本概念,探索Kubernetes在容器编排方面的强大能力,以及两者结合所带来的益处。文章还将讨论在实际部署中可能遇到的挑战,并提出相应的解决方案。
|
2月前
|
安全 Linux 网络安全
【专栏】CentOS 8 最小安装提供了一个精简高效的环境
【4月更文挑战第28天】本文介绍了如何进行CentOS 8的最小安装,包括准备工作(确认硬件兼容性、下载ISO镜像、制作启动盘及备份数据)和安装步骤(选择语言、最小环境、网络设置、安全策略、分区、用户设置及开始安装)。安装后需进行基础配置,如系统更新、SELinux设置、防火墙配置、安装必要软件包和服务优化。最小安装提供了一个精简高效的环境,便于用户根据需求自定义和管理服务器。
|
2月前
|
网络协议 Java 应用服务中间件
记录_centos7离线环境和虚拟机共享文件安装jdk和tomcat(配置环境变量)
记录_centos7离线环境和虚拟机共享文件安装jdk和tomcat(配置环境变量)
28 0