使用 kubeadm搭建生产环境的单 master 节点 K8S 集群(二)

1.安装初始化 k8s 需要的组件(3台都安装)

复制代码
yum install kubelet-1.26.0  -y
yum install kubeadm-1.26.0  -y
yum install kubectl-1.26.0 -y

注:每个软件包的作用
kubelet : kubelet 是 Kubernetes 集群中的一个核心组件,是每个节点上的代理服务,负责与主

控制节点通信,管理节点上的 Pod 和容器。

kubelet 的主要职责包括:

监控 pod 的状态并按需启动或停止容器、检查容器是否正常运行、与主控制节点通信,将节点状态和 Pod 状态上报给主控制节点、通过各种插件(如 volume 插件)与其他组件协同工作、管理容器的生命周期,包括启动、停止、重启等、拉取镜像
kubeadm:用于初始化 k8s 集群的命令行工具
kubectl: 用于和集群通信的命令行,通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。

二 、初始化集群

备注:安装 k8s,物理机网段、pod 网段、service 网段不能冲突

2.1使用 kubeadm 初始化 k8s 集群

复制代码
kubeadm config print init-defaults > kubeadm.yaml

根据我们自己的需求修改配置,比如修改 imageRepository 的值,kube-proxy 的模式为

ipvs,初始化节点的时候需要指定 cgroupDriver 为 systemd

改这4个地方:工作节点的ip

containerd.sock 地址可通过 find / -name containerd.sock查找

最后在添加

复制代码
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

解释:

1、 nodeRegistration:criSocket: unix:///run/containerd/containerd.sock

nodeRegistration 是在 Kubernetes 集群中注册节点的一种方式。在这个配置中,criSocket 表示与此节点相关的容器运行时的地址,此处指的是使用 Containerd 作为容器运行时。

2、--image-repository :registry.cn-hangzhou.aliyuncs.com/google_containers 表示从
阿里云镜像仓库的的名为"google_containers"的命名空间中拉取容器镜像,因为 kubeadm 安装k8s,控制节点的组件基于 pod 运行,所以需要镜像,默认的镜像仓库国内无法访问,所以需要指定阿里云镜像仓库,也可以把安装 k8s1.26 需要的镜像用 ctr -n=k8s.io images import 解压,这样就可以直接在本地找镜像了。

3、podSubnet: 10.244.0.0/12 #指定 pod 网段 serviceSubnet: 10.96.0.0/12 #指定 Service 网段在 k8s 集群中,pod 网段,service 网络,物理机网段不能冲突。

4、mode: ipvs 表示 kube-proxy 代理模式是 ipvs,如果不指定 ipvs,会默认使用 iptables,但是 iptables 效率低,所以我们生产环境建议开启 ipvs,

2.2基于 kubeadm.yaml 文件初始化 k8s

正常执行kubeadm init 会自动把安装 k8s 组件需要的镜像拉下来 (3台都执行)

复制代码
kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

安装成功之后的

查看镜像:

ctr -n=k8s.io images ls

下面这个是初始化后自己做成镜像,导入后

root@k8s63 \~# ctr -n=k8s.io images import k8s_1.26.0.tar.gz

root@k8s64 \~# ctr -n=k8s.io images import k8s_1.26.0.tar.gz

root@k8s62 \~# ctr -n=k8s.io images import k8s_1.26.0.tar.gz

备注:

1、k8s_1.26.0.tar.gz 是什么?

k8s_1.26.0.tar.gz 是基于 ctr -n=k8s.io images export <安装 k8s 组件需要的 k8s 镜像>

k8s_1.26.0.tar.gz 生成的,这个压缩包里面包含的镜像只适合安装 k8s1.26 这个版本,如何安装其他版本,第一次安装不需要 ctr -n=k8s.io images import k8s_1.26.0.tar.gz 解压镜像,执行 kubeadm init 会自动把安装 k8s 组件需要的镜像拉下来,然后可以基于 ctr -n=k8s.io images export 名字 命令 把这个版本镜像打包,

下次再安装此版本,就可以基于 ctr -n=k8s.io images import 解压了。

2、ctr 解压镜像为何加-n=k8s.io?

n=k8s.io 参数指定将镜像导入到 k8s.io 命名空间下,这通常是一个虚构的命名空间,用于导入Kubernetes 官方发布的容器镜像。只要放到这个名称空间的镜像,才会被 k8s pod 找到。

2.3配置 kubectl 的 config 文件,这样就可以基于 kubectl 操作 k8s 集群了。

root@k8s63 \~# mkdir -p HOME/.kube** \[root@k8s63 \~\]# **sudo cp -i /etc/kubernetes/admin.conf HOME/.kube/config
root@k8s63 \~#sudo chown (id -u):(id -g) $HOME/.kube/config
root@k8s63 \~# kubectl get nodes

此时集群状态还是 NotReady 状态,因为网络组件没有启动。

三、安装 kubernetes 网络组件-Calico

Calico 是一个开源的 Kubernetes 网络插件

Calico 的设计理念是基于 Linux 系统网络的,使用标准的 Linux 路由和 iptables 规则,以实现高性能的网络互联和安全隔离。它支持 IPv4 和 IPv6 双栈网络,并且可以轻松地与现有的数据中心网络集成,提供了丰富的网络策略功能,可以通过简单的标签选择器来定义容器间的网络隔离和通信规则。

Calico 的架构采用了一种分布式的方式,其中每个节点都运行一个 Calico 的网络代理组件,称为

Felix,Felix 负责监听 Kubernetes API Server,获取节点和网络信息,并在本地维护一个路由表和

iptables 规则集,用于控制容器的网络访问。当容器发生变化时,Felix 会自动更新路由表和 iptables 规则,确保网络互联和隔离的正确性。

Calico 还支持 BGP 协议,可以将 Kubernetes 集群扩展到跨数据中心和云提供商的多个节点上,从而实现灵活、可扩展的容器网络解决方案。

3.1 安装 Calico 网络组件

上传calico.tar.gz包

root@k8s63 \~# ctr -n=k8s.io images import calico.tar.gz

root@k8s64 \~# ctr -n=k8s.io images import calico.tar.gz

root@k8s62 \~# ctr -n=k8s.io images import calico.tar.gz

上传 calico.yaml 到 xuegod63 中,使用 yaml 文件安装 calico 网络插件

在3545这添加

复制代码
- name: IP_AUTODETECTION_METHOD
value: "interface=ens33"

root@k8s63 \~# kubectl apply -f calico.yaml


注:在线 配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml

root@k8s63 \~# kubectl get nodes

NAME STATUS ROLES AGE VERSION

node Ready control-plane 44m v1.26.0

root@k8s63 \~# kubectl get pods -n kube-system

控制节点就按照好了。

四、 实战-工作节点加入 k8s 集群

#把 k8s64 作为工作节点加入到 k8s 集群

在 k8s63 上查看加入节点的命令:

root@k8s63 \~# kubeadm token create --print-join-command

然后将这串添加到工作节点

root@k8s64 \~# kubeadm join 192.168.1.63:6443 --token a5inhy.u8vsxtqpx5c821wu --discovery-token-ca-cert-hash sha256:1c4a048001549befcc03116683f0ed098f08a15f489a33297898c66d00320b35 --ignore-preflight-errors=SystemVerification

常用命令

ctr version #查看ctl的版本

kubelet的配置文件 /usr/lib/systemd/system/kubelet.service

systemctl daemon-reload #重载配置文件

重新安装的时候 kubeadm reset 在重新安装。

bash 复制代码
kubectl get pods -n kube-system -o wide  # 查看详细信息
kubectl get pods -n kube-system --field-selector=status.phase=Running  # 筛选运行中的Pod
 
bash 复制代码
kubectl get pods -n kube-system  # 列出kube-system命名空间下的所有Pod
 

使用 kubeadm 初始化 k8s 集群

相关推荐
生活爱好者!1 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
MC皮蛋侠客2 小时前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
groundhappy2 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
Hui Baby2 小时前
K8S使用CRD和控制器简单应用
云原生·容器·kubernetes
通信小小昕3 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫4 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生4 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
用户233376852184 小时前
Docker 端口"时通时不通"的排查实战
docker
做个文艺程序员5 小时前
Linux第22篇:用Docker容器化你的Java SaaS应用:一次构建,随处运行
java·docker·容器
ShiXZ2135 小时前
Redis docker-compose 部署指南
redis·docker·eureka