使用 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 名字 命令 把这个版本镜像打包, ![](https://i-blog.csdnimg.cn/direct/eca6f08c551e4c0f8381d8a833658fd0.png)下次再安装此版本,就可以基于 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** ![](https://i-blog.csdnimg.cn/direct/be1336243a3846928fe1ac0987ce4b3b.png) 此时集群状态还是 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** ![](https://i-blog.csdnimg.cn/direct/2434dc635d1d48c4b7717ef7268a4719.png) \[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" ![](https://i-blog.csdnimg.cn/direct/153bb8e81e914e26b898da3fa5e91d26.png) \[root@k8s63 \~\]# kubectl apply -f calico.yaml ![](https://i-blog.csdnimg.cn/direct/307e7c0c7edf4762b8568de41a7fc90d.png) 注:在线 配置文件地址是: 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** ![](https://i-blog.csdnimg.cn/direct/669ea5cffc234faaaa6364e9705064c4.png) 控制节点就按照好了。 ### 四、 实战-工作节点加入 k8s 集群 #把 k8s64 作为工作节点加入到 k8s 集群 在 k8s63 上查看加入节点的命令: \[root@k8s63 \~\]# kubeadm token create --print-join-command ![](https://i-blog.csdnimg.cn/direct/93f07000ec6e4a1ca112483ebb1a0347.png) 然后将这串添加到工作节点 \[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 集群

相关推荐
小钻风33663 小时前
Docker入门基础知识(二)
运维·docker·容器
汪碧康3 小时前
OpenClaw 原版和汉化版windows 和Linux 下的部署实践
linux·人工智能·windows·agent·clawdbot·moltbot·openclaw
nix.gnehc3 小时前
深度解析K8s四大核心接口:CRI、CNI、CSI与OCI的设计精髓与实践逻辑
云原生·容器·kubernetes
回忆是昨天里的海3 小时前
k8s部署的微服务动态扩容
java·运维·kubernetes
victory04313 小时前
docker aertslab/pyscenic:0.12.1 拉取异常解决方案
docker·容器·eureka
哼?~3 小时前
Linux文件操作--IO
linux
JHC_binge3 小时前
国内Ubuntu 22.04 LTS安装Milvus向量数据库
java·linux·ubuntu
野猪佩挤3 小时前
Jenkins动态Salve调度其他集群Docker in Docker
运维·docker·jenkins
wxmtwfx3 小时前
Linux内核GPIO工具概述
linux·驱动开发·gpio
松涛和鸣3 小时前
DAY69 Practical Guide to Linux Character Device Drivers
linux·服务器·arm开发·数据库·单片机·嵌入式硬件