Kubernetes 一主多从集群从 0 到 1 部署

简介: Kubernetes 一主多从集群从 0 到 1 部署

前言

在本实战指南中,我们将使用 kubeadm 工具来安装和部署Kubernetes 1.24.9版本的一主多从环境。因为 Kubesphere 的版本兼容 的原因这里并没有选择最新版本的 K8S,不过好在不同版本安装和部署的过程差异并不大。


前置准备

安装虚拟机

K8S 一主两从的3 台 Linux 系统服务器配置如下:


主机名 K8S角色 IP 配置 操作系统

k8s-master Master节点 192.168.179.21 4核CPU 8G内存 20G硬盘 CentOS 7.9

k8s-node1 Worker节点 192.168.179.22 4核CPU 8G内存 20G硬盘 CentOS 7.9

k8s-node2 Worker节点 192.168.179.23 4核CPU 8G内存 20G硬盘 CentOS 7.9

❗️ 如果你没有安装虚拟机,你可以按照这篇文章 VMware 基于CentOS 7.9 镜像搭建 K8S 一主多从本地虚拟服务器 的步骤来完成搭建。


关闭防火墙

💥 所有节点均要执行


# 关闭防火墙

systemctl stop firewalld

# 重启禁用防火墙    

systemctl disable firewalld

# 查看防火墙状态

systemctl status firewalld

1

2

3

4

5

6

禁用 SELinux

💥 所有节点均要执行


sed -i 's/enforcing/disabled/' /etc/selinux/config

1

关闭 Swap 分区

💥 所有节点均要执行


swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

1

时区设置和时间同步

# 时区设置

sed -i '$a\export TZ=Asia/Shanghai' /etc/profile && source /etc/profile && date

# 时间校准(阿里云 ntp 时间服务器)

yum -y install ntpdate

ntpdate time1.aliyun.com


主机名和域名解析配置

192.168.179.21 主机执行


# 192.168.179.21 设置主机名 k8s-master

hostnamectl set-hostname k8s-master

# 立即生效设置

exec bash


192.168.179.22 主机执行

# 192.168.179.22 设置主机名 k8s-node1

hostnamectl set-hostname k8s-node1

# 立即生效设置

exec bash


192.168.179.23 主机执行


# 192.168.179.23 设置主机名 k8s-node2

hostnamectl set-hostname k8s-node2

# 立即生效设置

exec bash


配置域名解析 (💥 所有节点机器均要执行💥 )


cat >> /etc/hosts << EOF

192.168.179.21  k8s-master

192.168.179.22  k8s-node1

192.168.179.23  k8s-node2

EOF


转发 IPv4 并让 iptables 看到桥接流量

💥 所有节点机器均要执行💥


官方文档:转发 IPv4 并让 iptables 看到桥接流量


执行下述指令:


#

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf

overlay

br_netfilter

EOF

modprobe overlay

modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-iptables  = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.ipv4.ip_forward                 = 1

EOF

# 应用 sysctl 参数而不重新启动

sudo sysctl --system


通过运行以下指令确认 br_netfilter 和 overlay 模块被加载:


lsmod | grep br_netfilter

lsmod | grep overlay

1

2

通过运行以下指令确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1:


sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

1

Docker 安装

💥 所有节点机器均要执行💥


安装依赖包


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

1

配置 Docker 阿里云 yum 源


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

1

安装 docker-ce


yum install -y docker-ce

1

配置 Docker 阿里云镜像加速


sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

 "registry-mirrors": ["https://g6jp4cfd.mirror.aliyuncs.com"],

 "exec-opts": ["native.cgroupdriver=systemd"],

 "log-driver": "json-file",

 "log-opts": {

   "max-size": "100m"

 }  

}

EOF

sudo systemctl daemon-reload


启动 Docker


# 启动 Docker & 开机自启  

systemctl enable --now docker

1

2

cri-docker 安装

自 Kubernetes v1.24 版本开始,已移除了 Dockershim。然而,Docker Engine 默认不支持 CRI 规范,这导致无法直接集成两者。为了解决这个问题,Mirantis 和 Docker 共同创建了 cri-dockerd 项目,它提供了一个适配器来支持 CRI 规范,使得 Kubernetes 可以通过 CRI 控制 Docker Engine。


💥 所有节点机器均要执行💥


下载 cri-dockerd


⬇️下载地址 (无法访问请移步 百度网盘)


# 网络不好可多尝试几次,实在不行从网盘下载再上传文件至服务器安装

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm

1

2

安装 cri-dockerd


rpm -ivh cri-dockerd-0.3.1-3.el7.x86_64.rpm

1

配置 cri-dockerd


vi /usr/lib/systemd/system/cri-docker.service

1

# ExecStart=/usr/bin/cri-dockerd 追加配置

--network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8

微信图片_20230710111216.png


启动 cri-dockerd


# 设置 cri-docker 开机自启 & 立即启动

systemctl enable --now cri-docker

# 查看 cri-docker 状态

systemctl status cri-docker

微信图片_20230710111221.png

Kubernetes 部署

配置 Kubernetes 镜像源

💥 所有节点机器均要执行💥


cat > /etc/yum.repos.d/kubernetes.repo << EOF

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

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


Kubernetes 组件安装

kubeadm、kubelet 和 kubectl 是 Kubernetes 生态系统中的三个重要组件:


组件                         说 明

kubeadm kubeadm 是一个命令行工具,用于初始化和管理 Kubernetes 集群的引导工具。

kubelet kubelet 是运行在每个 Kubernetes 节点,负责管理节点上的容器运行时,并与 Kubernetes 控制平面通信。

kubectl kubectl 是 Kubernetes 的命令行工具,可以执行各种操作,如创建、删除和管理 Kubernetes 资源

💥 所有节点机器均要执行💥


# 查看版本

yum list kubeadm --showduplicates | sort -r

# 安装

yum install -y kubelet-1.24.9-0 kubeadm-1.24.9-0 kubectl-1.24.9-0

# 启动 & 开机自启

systemctl enable --now kubelet

# 查看状态

systemctl status kubelet

Master 节点初始化

💥 Master 节点机器执行💥


kubeadm init\

   --apiserver-advertise-address=192.168.179.21 \

   --image-repository registry.aliyuncs.com/google_containers \

   --kubernetes-version v1.24.9 \

   --service-cidr=10.96.0.0/12 \

   --pod-network-cidr=10.244.0.0/16  \

   --cri-socket unix:///var/run/cri-dockerd.sock


初始化成功提示信息如下(重要):

微信图片_20230710111254.png


根据提示执行以下命令来配置 kubectl


mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config


复制 Node 节点加入集群命令(下文用)


Node 节点加入集群

💥 Node节点机器执行💥


kubeadm join 192.168.179.21:6443 --token 2gu3ls.e1l6gdi97o92zxlr \

       --discovery-token-ca-cert-hash sha256:280e47038be497d46c065cbcef5212918d93910642e5ea808e79944340cb6a8b \

--cri-socket unix:///var/run/cri-dockerd.sock

Calico 网络插件安装

💥 Master 节点机器安装💥


Calico 是一个强大的容器网络插件,为 Kubernetes 提供 IP 网络互连、网络策略和跨主机网络连接等功能,实现高性能和安全的容器通信。


🚀🚀 官方:Calico 安装和配置


微信图片_20230710111321.png


下载配置


curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml -O

1

修改配置


在上节「Master 节点初始化」 Pod 分配的 IP 地址范围 --pod-network-cidr=10.244.0.0/16 ,而非 192.168.0.0/16 ,根据官网安装步骤2需要将配置中的 CALICO_IPV4POOL_CIDR 变量设置为 10.244.0.0/16。


vi calico.yaml

1

微信图片_20230710111921.png


安装 Calico


sudo kubectl apply -f calico.yaml

1

稍等片刻…


K8S 部署成功验证

在 Master 节点执行 kubectl get nodes 命令查看各个节点状态为 Ready 表示 Kubernetes 安装成功

微信图片_20230710111936.png



结语

至此,我们成功完成了一主多从的Kubernetes环境搭建。后续文章中,我们将进行Kubesphere的安装,以便将前后端分离项目 youlai-boot + vue3-element-admin 和微服务项目 youlai-mall 部署到Kubernetes集群上。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
6天前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【4月更文挑战第26天】 在动态且不断增长的云计算环境中,维护高性能的 Kubernetes 集群是一个挑战。本文将探讨一系列实用的策略和工具,旨在帮助运维专家监控、分析和优化 Kubernetes 集群的性能。我们将讨论资源分配的最佳实践,包括 CPU 和内存管理,以及集群规模调整的策略。此外,文中还将介绍延迟和吞吐量的重要性,并提供日志和监控工具的使用技巧,以实现持续改进的目标。
|
9天前
|
存储 运维 Kubernetes
Kubernetes 集群的监控与维护策略
【4月更文挑战第23天】 在微服务架构日益盛行的当下,容器编排工具如 Kubernetes 成为了运维工作的重要环节。然而,随着集群规模的增长和复杂性的提升,如何确保 Kubernetes 集群的高效稳定运行成为了一大挑战。本文将深入探讨 Kubernetes 集群的监控要点、常见问题及解决方案,并提出一系列切实可行的维护策略,旨在帮助运维人员有效管理和维护 Kubernetes 环境,保障服务的持续可用性和性能优化。
|
2天前
|
运维 Kubernetes 监控
Kubernetes 集群的监控与维护策略
【4月更文挑战第30天】 在现代云计算环境中,容器化技术已成为应用程序部署和管理的重要手段。其中,Kubernetes 作为一个开源的容器编排平台,以其强大的功能和灵活性受到广泛欢迎。然而,随之而来的是对 Kubernetes 集群监控和维护的复杂性增加。本文将探讨针对 Kubernetes 集群的监控策略和维护技巧,旨在帮助运维人员确保集群的稳定性和高效性。通过分析常见的性能瓶颈、故障诊断方法以及自动化维护工具的应用,我们将提供一套实用的解决方案,以优化 Kubernetes 环境的性能和可靠性。
|
3天前
|
运维 Kubernetes 监控
Kubernetes集群的持续性能优化策略
【4月更文挑战第30天】 在动态且不断扩展的云计算环境中,保持应用性能的稳定性是一个持续的挑战。本文将探讨针对Kubernetes集群的持续性能优化策略,旨在为运维工程师提供一套系统化的性能调优框架。通过分析集群监控数据,我们将讨论如何诊断常见问题、实施有效的资源管理和调度策略,以及采用自动化工具来简化这一过程。
|
3天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理策略
【4月更文挑战第30天】 在微服务架构日益普及的当下,容器化技术与编排工具如Kubernetes成为了运维领域的重要话题。有效的监控和日志管理对于保障系统的高可用性和故障快速定位至关重要。本文将探讨在Kubernetes环境中实施监控和日志管理的最佳实践,包括选用合适的工具、部署策略以及如何整合这些工具来提供端到端的可见性。我们将重点讨论Prometheus监控解决方案和EFK(Elasticsearch, Fluentd, Kibana)日志管理堆栈,分析其在Kubernetes集群中的应用,并给出优化建议。
|
3天前
|
Kubernetes 应用服务中间件 nginx
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
|
3天前
|
Kubernetes 网络安全 数据安全/隐私保护
K8S二进制部署详解,一文教会你部署高可用K8S集群(一)
K8S二进制部署详解,一文教会你部署高可用K8S集群(一)
|
4天前
|
Kubernetes 网络协议 Python
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
|
4天前
|
Kubernetes 应用服务中间件 开发工具
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(一)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(一)
|
8天前
|
Kubernetes 应用服务中间件 nginx
【博客大赛】搭建一套完整的企业级Kubernetes高可用集群(v1.20,二进制)
【博客大赛】搭建一套完整的企业级Kubernetes高可用集群(v1.20,二进制)