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