深度解析:Kubernetes 1.28.2集群安装过程中的关键步骤

本文涉及的产品
函数计算FC,每月15万CU 3个月
可观测可视化 Grafana 版,10个用户账号 1个月
云原生网关 MSE Higress,422元/月
简介: 本文旨在为读者提供一份详尽的Kubernetes 1.28.2集群安装指南,帮助您从零开始构建稳定、高效的Kubernetes集群。我们将从环境准备、软件安装、集群初始化到节点添加等各个环节进行逐步讲解,确保您能够顺利完成集群的搭建。

  image.gif 编辑

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

一、引言

1、Kubernetes简介

Kubernetes(通常简称为K8s)是一个开源的容器编排平台,最初由Google开发,并于2014年发布为开源项目。它提供了一种自动化容器化应用程序部署、扩展和管理的方法。

 

image.gif 编辑

Borg 的诞生:

谷歌的工程师们在面对大规模、分布式、可扩展应用的挑战时,创建了 Borg 系统,用于管理和运行谷歌的内部服务和应用。Borg 采用了容器化的思想,将应用程序打包成容器并在集群中运行。

Omega 的演进:

Borg 的经验在谷歌内部得到了积累和总结。在 Borg 的基础上,谷歌发展出了 Omega 系统,这是 Borg 的下一代版本,继续探索分布式系统管理的更高级别的抽象。

Kubernetes 的诞生:

2014年,Google 将 Borg 的一部分经验开源,推出了 Kubernetes 项目。Kubernetes 最初是由 Google、Red Hat、Microsoft 等公司共同推动的,旨在为云原生应用提供一个开源的容器编排和管理平台。可以说,k8s是站在Borg这个巨人的肩膀上而开发出的容器编排管理系统

推出后,Kubernetes 很快得到了开源社区的广泛关注和参与。云服务提供商、软件公司以及大量的开发者纷纷加入到 Kubernetes 的开发和维护中,形成了庞大的开源社区。

 

image.gif 编辑

2、Kubernetes 1.28版本特性介绍

Kubernetes 1.28版本作为2023年的第二个主要版本更新,引入了一系列重要的新功能和改进。

非正常节点关闭恢复:

  • Kubernetes 1.28版本中,节点非体面关闭(non-graceful shutdown)特性达到GA阶段,意味着kubelet能够更加稳定地检测到节点即将关闭的事件,并确保在节点实际下线前正确、有序地终止节点上的Pod,从而避免数据丢失和资源占用问题。

内置Sidecar容器支持:

  • 此版本增强了对Sidecar容器的内置支持,包括更方便的配置管理、生命周期管理和资源隔离等方面,以更好地支持微服务架构中的辅助容器。

Job优化:

  • 对Kubernetes Job对象进行了优化,涉及到更快的完成状态判定、更灵活的调度策略以及作业清理机制的改进等。

Proxy改进:

  • Kubernetes代理组件(kube-proxy)的功能得到了增强,涉及性能提升、资源利用率改进或新增网络策略特性等。

调度框架优化:

  • 调度框架在Kubernetes 1.28版本中进行了调整,减少了不必要的重试操作,从而提升了整体调度性能,这对于集群规模较大或者工作负载较为复杂的场景尤其重要。

 

image.gif 编辑

3、安装前的准备工作

准备至少2台服务器,虚拟机或服务器都可以,资源配置如下

image.gif 编辑

※ 安装k8s至少需要2G或以上内存

二、环境准备

1、禁用防火墙和SELinux

在两台机器上都要执行

关闭防火墙并禁止开机自启动

[root@master ~]# systemctl stop firewalld && systemctl disable firewalld

[root@node ~]# systemctl stop firewalld && systemctl disable firewalld

关闭SELinux

[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

[root@master ~]# setenforce 0

[root@master ~]# getenforce

Permissive

[root@node ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

[root@node ~]# setenforce 0

[root@node ~]# getenforce

Permissive

2、设置时间同步

[root@master ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

[root@master ~]# date

Tue Mar 19 14:10:22 CST 2024

[root@node ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

[root@node ~]# date

Tue Mar 19 14:10:22 CST 2024

3、关闭swap交换分区

[root@master ~]# swapoff -a

[root@node ~]# swapoff -a

4、修改hosts文件

[root@master ~]# vi /etc/hosts

# 添加如下两行内容

192.168.40.110 master

192.168.40.111 node

 

[root@node ~]# vi /etc/hosts

# 添加如下两行内容

192.168.40.110 master

192.168.40.111 node

5、修改机器内核参数

[root@master ~]# modprobe br_netfilter

[root@master ~]# 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

[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf

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

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

net.ipv4.ip_forward = 1

[root@node ~]# modprobe br_netfilter

[root@node ~]# 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

[root@node ~]# sysctl -p /etc/sysctl.d/k8s.conf

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

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

net.ipv4.ip_forward = 1

三、安装Docker与containerd

1、配置阿里repo源

[root@master ~]# yum install yum-utils device-mapper-persistent-data lvm2  -y

[root@master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@node ~]# yum install yum-utils device-mapper-persistent-data lvm2 -y

[root@node ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2、安装container

[root@master ~]# yum install  containerd.io -y

[root@node ~]# yum install  containerd.io -y

3、修改containerd配置文件

[root@master ~]# mkdir -p /etc/containerd

[root@master ~]# containerd config default > /etc/containerd/config.toml

[root@master ~]# vim /etc/containerd/config.toml

#将SystemdCgroup = false修改为SystemdCgroup = true

[root@node ~]# mkdir -p /etc/containerd

[root@node ~]# containerd config default > /etc/containerd/config.toml

[root@node ~]# vim /etc/containerd/config.toml

#将SystemdCgroup = false修改为SystemdCgroup = true

4、设置container开机自启动

[root@master ~]# systemctl enable containerd  --now

[root@node ~]# systemctl enable containerd  --now

5、设置服务的端点地址

[root@master ~]# cat > /etc/crictl.yaml <<EOF

runtime-endpoint: unix:///run/containerd/containerd.sock

image-endpoint: unix:///run/containerd/containerd.sock

timeout: 10

debug: false

EOF

[root@node ~]# cat > /etc/crictl.yaml <<EOF

runtime-endpoint: unix:///run/containerd/containerd.sock

image-endpoint: unix:///run/containerd/containerd.sock

timeout: 10

debug: false

EOF

6、安装docker

[root@master ~]# yum install  docker-ce  -y

[root@master ~]# systemctl enable docker --now

[root@node ~]# yum install  docker-ce  -y

[root@node ~]# systemctl enable docker --now

7、添加docker镜像加速器

[root@master docker]# tee /etc/docker/daemon.json <<-'EOF'

> {

>   "registry-mirrors": ["https://ofcqsr1y.mirror.aliyuncs.com"]

> }

> EOF

[root@master docker]# sudo systemctl daemon-reload

[root@master docker]# sudo systemctl restart docker

[root@node docker]# tee /etc/docker/daemon.json <<-'EOF'

> {

>   "registry-mirrors": ["https://ofcqsr1y.mirror.aliyuncs.com"]

> }

> EOF

[root@node docker]# sudo systemctl daemon-reload

[root@node docker]# sudo systemctl restart docke  

四、安装kubeadm、kubelet和kubectl

1、配置软件源

[root@master ~]# vim /etc/yum.repos.d/kubernetes.repo

# 添加如下内容

[kubernetes]

name=Kubernetes

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

enabled=1

gpgcheck=0

[root@node ~]# vim /etc/yum.repos.d/kubernetes.repo

# 添加如下内容

[kubernetes]

name=Kubernetes

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

enabled=1

gpgcheck=0

2、安装kubeadm、kubelet、kubectl

[root@master ~]# yum install kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 -y

[root@node ~]# yum install kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 -y

3、设置kubelet开机自启动

[root@master ~]# systemctl enable kubelet

[root@node ~]# systemctl enable kubelet

五、初始化Master节点

1、上传离线镜像包

离线镜像包我已经放到个人主页的资源中,大家可以自行下载

2、导入镜像

[root@master ~]# ctr -n=k8s.io images import k8s-1-28.tar.gz

[root@master ~]# ctr -n=k8s.io images import k8s-1-28-etcd.tar.gz

3、设置容器运行时

[root@master ~]# crictl config runtime-endpoint /run/containerd/containerd.sock

4、初始化Master节点

[root@master ~]# kubeadm init --kubernetes-version=1.28.2  --apiserver-advertise-address=192.168.40.110  --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=10.244.0.0/16

[root@master ~]#   mkdir -p $HOME/.kube

[root@master ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@master ~]#   sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看节点状态

[root@master ~]# kubectl get node

NAME     STATUS     ROLES           AGE   VERSION

master   NotReady   control-plane   66s   v1.28.2

六、添加Work节点

1、设置容器运行时

[root@node ~]# crictl config runtime-endpoint /run/containerd/containerd.sock

2、导入镜像

[root@node ~]# ctr -n=k8s.io images import k8s-1-28-etcd.tar.gz

[root@node ~]# ctr -n=k8s.io images import k8s-1-28.tar.gz

3、将Work节点加入到集群

在Master节点上生成token

[root@master ~]# kubeadm token create --print-join-command

将生成的密钥考到node节点执行

[root@node ~]# kubeadm join 192.168.40.110:6443 --token 8zx14z.br9wctj9shxb08sq --discovery-token-ca-cert-hash sha256:6559345665c6beb70a9da42c2de6b85fc41f61d3dc3c527be3f7cc4629c503ab

4、查看集群状态

[root@master ~]# kubectl get node

NAME     STATUS     ROLES           AGE   VERSION

master   NotReady   control-plane   10m   v1.28.2

node     NotReady   <none>          5s    v1.28.2

5、为Work节点设置标签

[root@master ~]# kubectl label nodes node node-role.kubernetes.io/work=work

#再次查看

[root@master ~]# kubectl get node

NAME     STATUS     ROLES           AGE   VERSION

master   NotReady   control-plane   10m   v1.28.2

node     NotReady    work                 5s    v1.28.2

七、安装网络插件calico

1、calico介绍

  • Calico是一个开源的网络和网络安全解决方案,专为容器化环境设计,旨在提供网络连接和安全策略管理功能。它基于BGP协议,实现了一个纯三层网络方案,能够与Kubernetes、AWS、OpenStack等云平台良好地集成。
  • Calico的核心功能包括网络连接、网络策略和安全性。通过使用BGP路由协议,Calico能够在所有节点上通过Linux Kernel实现高效的vRouter进行数据转发。每个vRouter都会将在本节点上运行的容器的路由信息广播到整个Calico网络,并自动设置到达其他节点的路由转发规则。这种设计确保了所有容器之间的数据流量都是通过IP路由的方式完成互联互通的。

 

image.gif 编辑

2、安装calico

[root@master ~]# curl -L -O https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml 

[root@master ~]# kubectl  apply -f calico.yaml

3、查看Pod状态

[root@master ~]# kubectl get pod -A

NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE

kube-system   calico-kube-controllers-658d97c59c-fbrgn   1/1     Running   0          5m31s

kube-system   calico-node-qd6v2                          1/1     Running   0          5m31s

kube-system   calico-node-s9khc                          1/1     Running   0          5m31s

kube-system   coredns-66f779496c-l6nqx                   1/1     Running   0          19m

kube-system   coredns-66f779496c-n7jn6                   1/1     Running   0          19m

kube-system   etcd-master                                1/1     Running   0          19m

kube-system   kube-apiserver-master                      1/1     Running   0          19m

kube-system   kube-controller-manager-master             1/1     Running   5          19m

kube-system   kube-proxy-7wbhh                           1/1     Running   0          9m15s

kube-system   kube-proxy-bb47r                           1/1     Running   0          19m

kube-system   kube-scheduler-master                      1/1     Running   5          19m

八、总结

  1. 环境准备:首先,需要确保安装环境的准备充分。这包括选择合适的操作系统(如Linux),确保硬件资源(如CPU、内存、存储)满足Kubernetes的最低要求,以及配置好网络环境,如网络插件的选择和配置。
  2. 软件依赖安装:安装Kubernetes之前,需要安装一些必要的软件依赖,如Docker或其他容器运行时(如Containerd)、kubectl命令行工具等。这些工具是Kubernetes正常运行的基础。
  3. 集群初始化:使用kubeadm进行集群初始化是Kubernetes安装的关键步骤。在初始化过程中,需要配置集群的一些基本参数,如API服务器的地址、网络插件的选择等。同时,还需要确保kubeadm能够成功地在各个节点上部署和启动必要的组件。
  4. 节点加入:初始化完成后,需要将其他节点加入到集群中。涉及到在各个节点上安装必要的软件,并使用kubeadm命令将节点加入到集群中。在节点加入过程中,需要确保节点的配置与集群一致,并且能够与其他节点正常通信。
  5. 网络配置:Kubernetes集群中的网络配置是一个重要的环节。需要选择合适的网络插件(如Calico),并正确配置相关参数,以确保Pod之间的网络互通以及服务的正常访问。

image.gif 编辑

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Docker的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
13天前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
27天前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
24天前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
91 12
|
26天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
1月前
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
376 10
|
5天前
|
安全 网络协议 应用服务中间件
2025通配符证书免费申请步骤解析
打造安全、高效的网站加密环境,从免费通配符SSL证书开始!今年我们特别推出免费通配符SSL证书申请活动,覆盖主域名及所有子域名。只需一次申请,即可保护无限子域名,节省时间和资源。全程0成本,自动化流程快速配置,权威CA机构签发,兼容主流浏览器与平台。非技术人员也能轻松操作,提升网站安全性与用户信任度。立即访问JoySSL官网注册并申请,享受顶级加密服务!
|
28天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
61 2
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
110 2
|
27天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
27天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多