使用 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 集群

相关推荐
声声长乐6 小时前
Jenkins + Docker 完整部署指南
ubuntu·docker·jenkins
嵌入小生0077 小时前
线程(2)/ 线程属性 /相关函数接口--- 嵌入式(Linux)
linux·嵌入式·线程·软件编程·僵尸线程·马年开工第一学·线程属性
No8g攻城狮8 小时前
【Linux】Linux nano 编辑器全攻略:从入门到精通
linux·运维·编辑器·nano
zl_dfq8 小时前
Linux 之 【网络套接字编程】(固定宽度整数类型、socket常见API、netstat)
linux·网络
shughui10 小时前
Docker Desktop下载、安装、配置、使用
运维·docker·容器·自动化
huaweichenai10 小时前
Linux安装http-server并部署html静态站点
linux·运维·服务器
Gss77710 小时前
Linux 正则表达式详解(基础 + 扩展 + 实操)
linux·运维·正则表达式
北冥湖畔的燕雀11 小时前
Linux权限与Vim,gcc以及make/makefile操作全解析
linux·运维·服务器
代码游侠11 小时前
Linux驱动复习——驱动
linux·运维·arm开发·笔记·学习
LuDvei11 小时前
LINUX文件操作函数
java·linux·算法