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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
云防火墙,500元 1000GB
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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集群上。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
123 60
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
217 62
|
6天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
27 1
|
27天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
5天前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
14 0
|
28天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
1月前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
542 1
|
1月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
76 3
|
1月前
|
Kubernetes Docker 微服务
微服务实践k8s&dapr开发部署实验(1)服务调用(一)
微服务实践k8s&dapr开发部署实验(1)服务调用(一)
49 2