如何实施Kubernetes v1.24.0集群搭建的第三阶段?

2026-04-28 11:232阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1758个文字,预计阅读时间需要8分钟。

如何实施Kubernetes v1.24.0集群搭建的第三阶段?

K8S 1.24是关键版本更新,提供了众多重要功能。包含46项增强功能:其中14项升级为稳定版,15项进入beta阶段,13项刚进入alpha阶段。此外,新增2项功能。

K8S 1.24作为一个很重要的版本更新,它为我们提供了很多重要功能。该版本涉及46项增强功能:其中14项已升级为稳定版,15项进入beta阶段,13项则刚刚进入alpha阶段。此外,另有2项功能被弃用、2项功能被删除。 1 使用kubeadm部署Kubernetes

如无特殊说明,以下操作可以在所有节点上进行。

1.1 首先我们需要配置一下阿里源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=0 gpgkey=mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

1.2 开始安装

执行以下命令开始安装,可以默认安装也可以指定版本安装,目前的最新版本是1.24.1,默认即安装此版本。

yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1 --disableexcludes=kubernetes 或 yum install kubelet kubeadm kubectl

1.3 安装后查看版本

kubeadm version

1.4 设置kubelet开机启动

systemctl enable --now kubelet

1.5 初始化kubeadm配置信息

kubeadm config print init-defaults >kubeadm-init.yaml

如上图所示,可以看出image仓库位置在k8s.gcr.io,为了防止拉取报错,可以配置成阿里云地址,定制出的config内容主要做了如下修改:

  • imageRepository为阿里云的registry
  • 设置kubelet的cgroupDriver为systemd
  • 设置kube-proxy代理模式为ipvs

apiVersion: kubeadm.k8s.io/v1beta3 mode: ipvs # kube-proxy 模式 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration cgroupDriver: systemd # 配置 cgroup driver localAPIEndpoint: advertiseAddress: 192.168.183.133 # ip地址 bindPort: 6443 nodeRegistration: criSocket: unix:///var/run/containerd/containerd.sock imagePullPolicy: IfNotPresent name: nodea taints: null --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta3 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: {} etcd: local: dataDir: /var/lib/etcd imageRepository: registry.aliyuncs.com/google_containers # 阿里源 kind: ClusterConfiguration kubernetesVersion: 1.24.1 networking: dnsDomain: cluster.local serviceSubnet: 10.1.0.0/12 podSubnet: 10.88.0.0/16 # ip网段 scheduler: {}

详细的配置说明可以参考该文档:kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/

1.6 拉取依赖镜像

在开始初始化集群之前,可以预先在各个服务器节点上拉取所k8s需要的如下容器镜像:

  • kube-apiserver:v1.24.0
  • kube-controller-manager:v1.24.0
  • kube-scheduler:v1.24.0
  • kube-proxy:v1.24.0
  • pause:3.7
  • etcd:3.5.3-0
  • coredns:v1.8.6

kubeadm config images pull --config kubeadm-init.yaml

2 Master节点操作 2.1 集群初始化

kubeadm init --config kubeadm-init.yaml

初始化过程中,可能会遇到“/proc/sys/net/bridge/bridge-nf-call-iptables does not exist”的错误,这是因为之前配置的br_netfilter没有启动,运行一下这个命令即可

modprobe br_netfilter

如果一切正常,则会遇到如下提示,

以及最重要的token

2.2 配置常规用户使用kubectl访问集群

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.3 保存配置文件

kubectl -n kube-system get cm kubeadm-config -o yaml

2.4 查看节点状态

kubectl get node

3 Node节点操作 3.1 加入集群

kubeadm join 192.168.183.133:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:9ec147b59acdd7ac4f6d3b7b5bf378cf46535aa77117878d49e926a638eaf307

出现如下信息,则说明Node节点已经成功加入到集群

如何实施Kubernetes v1.24.0集群搭建的第三阶段?

执行如下命令,发现网络报错

kubectl get nodes

出现如上错误,我是把master节点上的admin.conf同步到两个node节点里,不知道大家是如何解决这个问题的。
在master节点做如下操作

scp /etc/kubernetes/admin.conf node02:/etc/kubernetes/ scp /etc/kubernetes/admin.conf node02:/etc/kubernetes/ ```bash ![](img2022.cnblogs.com/blog/533598/202206/533598-20220616211924626-864940578.png) 在两个节点上同时执行如下命令: ```bash mkdir -p $HOME/.kube cp /etc/kubernetes/admin.conf ~/.kube/config

3.2 安装网络插件

我们有两种选择,一个是Flannel,另一个是Calico

由CoreOS开发的项目Flannel,可能是最直接和最受欢迎的CNI插件。它是容器编排系统中最成熟的网络结构示例之一,旨在实现更好的容器间和主机间网络。许多常见的Kubernetes集群部署工具和许多Kubernetes发行版都可以默认安装Flannel。

Calico是Kubernetes生态系统中另一种流行的网络选择。虽然Flannel被公认为是最简单的选择,但Calico以其性能、灵活性而闻名。Calico的功能更为全面,不仅提供主机和pod之间的网络连接,还涉及网络安全和管理。Calico CNI插件在CNI框架内封装了Calico的功能。

此处我们使用Flannel插件。

wget raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

下载后需要修改里面的配置,首先设置一下网卡

其次需要设置一下网段,这里的网段和 1.5 步骤中的podSubnet的值保持一直,都是
10.88.0.0/16

执行命令

kubectl apply -f kube-flannel.yml

做出了如上操作之后还不行,还是会报错,主要是CNI版本兼容性问题,如图

这里可以把containerd中的CNI去除掉

mv /etc/cni/net.d/10-containerd-net.conflist /etc/cni/net.d/10-containerd-net.conflist.bak systemctl daemon-reload systemctl restart containerd kubelet

3.3 集群验证

kubectl get cs kubectl get nodes

再执行一下如下命令,查看是否所有的pod都是运行正常的:

kubectl get pod --all-namespaces -o wide

3.4 验证DNS解析
  • 创建busybox.yaml

apiVersion: v1 kind: Pod metadata: name: busybox namespace: default spec: containers: - name: busybox image: busybox command: - sleep - "3600" imagePullPolicy: IfNotPresent restartPolicy: Always

kubectl create -f busybox.yaml

  • 验证一下状态

kubectl get pods busybox

  • DNS检查

kubectl exec -i -t busybox -- nslookup kubernetes.default

  • 排错
    根据这篇文章(dockone.io/article/10399)的排查,我也检查了一下我的CentOS内核版本,是3.10,比较老,需要升级一下。

经过一系列排错后,再次执行如下命令:

kubectl exec -i -t busybox -- nslookup kubernetes.default

目前的操作只是练手而已,想要搭建高可用的集群任重道远,需要投入更多精力。

参考链接

www.manongjc.com/detail/25-lioggelnywerjyf.html
www.kubernetes.org.cn/1904.html
www.toutiao.com/article/7105957860210819623/
i4t.com/5451.html
blog.frognew.com/2022/05/kubeadm-install-kubernetes-1.24.html

  • 以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐

  • 标签:集群搭建

    本文共计1758个文字,预计阅读时间需要8分钟。

    如何实施Kubernetes v1.24.0集群搭建的第三阶段?

    K8S 1.24是关键版本更新,提供了众多重要功能。包含46项增强功能:其中14项升级为稳定版,15项进入beta阶段,13项刚进入alpha阶段。此外,新增2项功能。

    K8S 1.24作为一个很重要的版本更新,它为我们提供了很多重要功能。该版本涉及46项增强功能:其中14项已升级为稳定版,15项进入beta阶段,13项则刚刚进入alpha阶段。此外,另有2项功能被弃用、2项功能被删除。 1 使用kubeadm部署Kubernetes

    如无特殊说明,以下操作可以在所有节点上进行。

    1.1 首先我们需要配置一下阿里源

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=0 gpgkey=mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

    1.2 开始安装

    执行以下命令开始安装,可以默认安装也可以指定版本安装,目前的最新版本是1.24.1,默认即安装此版本。

    yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1 --disableexcludes=kubernetes 或 yum install kubelet kubeadm kubectl

    1.3 安装后查看版本

    kubeadm version

    1.4 设置kubelet开机启动

    systemctl enable --now kubelet

    1.5 初始化kubeadm配置信息

    kubeadm config print init-defaults >kubeadm-init.yaml

    如上图所示,可以看出image仓库位置在k8s.gcr.io,为了防止拉取报错,可以配置成阿里云地址,定制出的config内容主要做了如下修改:

    • imageRepository为阿里云的registry
    • 设置kubelet的cgroupDriver为systemd
    • 设置kube-proxy代理模式为ipvs

    apiVersion: kubeadm.k8s.io/v1beta3 mode: ipvs # kube-proxy 模式 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration cgroupDriver: systemd # 配置 cgroup driver localAPIEndpoint: advertiseAddress: 192.168.183.133 # ip地址 bindPort: 6443 nodeRegistration: criSocket: unix:///var/run/containerd/containerd.sock imagePullPolicy: IfNotPresent name: nodea taints: null --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta3 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: {} etcd: local: dataDir: /var/lib/etcd imageRepository: registry.aliyuncs.com/google_containers # 阿里源 kind: ClusterConfiguration kubernetesVersion: 1.24.1 networking: dnsDomain: cluster.local serviceSubnet: 10.1.0.0/12 podSubnet: 10.88.0.0/16 # ip网段 scheduler: {}

    详细的配置说明可以参考该文档:kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/

    1.6 拉取依赖镜像

    在开始初始化集群之前,可以预先在各个服务器节点上拉取所k8s需要的如下容器镜像:

    • kube-apiserver:v1.24.0
    • kube-controller-manager:v1.24.0
    • kube-scheduler:v1.24.0
    • kube-proxy:v1.24.0
    • pause:3.7
    • etcd:3.5.3-0
    • coredns:v1.8.6

    kubeadm config images pull --config kubeadm-init.yaml

    2 Master节点操作 2.1 集群初始化

    kubeadm init --config kubeadm-init.yaml

    初始化过程中,可能会遇到“/proc/sys/net/bridge/bridge-nf-call-iptables does not exist”的错误,这是因为之前配置的br_netfilter没有启动,运行一下这个命令即可

    modprobe br_netfilter

    如果一切正常,则会遇到如下提示,

    以及最重要的token

    2.2 配置常规用户使用kubectl访问集群

    mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

    2.3 保存配置文件

    kubectl -n kube-system get cm kubeadm-config -o yaml

    2.4 查看节点状态

    kubectl get node

    3 Node节点操作 3.1 加入集群

    kubeadm join 192.168.183.133:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:9ec147b59acdd7ac4f6d3b7b5bf378cf46535aa77117878d49e926a638eaf307

    出现如下信息,则说明Node节点已经成功加入到集群

    如何实施Kubernetes v1.24.0集群搭建的第三阶段?

    执行如下命令,发现网络报错

    kubectl get nodes

    出现如上错误,我是把master节点上的admin.conf同步到两个node节点里,不知道大家是如何解决这个问题的。
    在master节点做如下操作

    scp /etc/kubernetes/admin.conf node02:/etc/kubernetes/ scp /etc/kubernetes/admin.conf node02:/etc/kubernetes/ ```bash ![](img2022.cnblogs.com/blog/533598/202206/533598-20220616211924626-864940578.png) 在两个节点上同时执行如下命令: ```bash mkdir -p $HOME/.kube cp /etc/kubernetes/admin.conf ~/.kube/config

    3.2 安装网络插件

    我们有两种选择,一个是Flannel,另一个是Calico

    由CoreOS开发的项目Flannel,可能是最直接和最受欢迎的CNI插件。它是容器编排系统中最成熟的网络结构示例之一,旨在实现更好的容器间和主机间网络。许多常见的Kubernetes集群部署工具和许多Kubernetes发行版都可以默认安装Flannel。

    Calico是Kubernetes生态系统中另一种流行的网络选择。虽然Flannel被公认为是最简单的选择,但Calico以其性能、灵活性而闻名。Calico的功能更为全面,不仅提供主机和pod之间的网络连接,还涉及网络安全和管理。Calico CNI插件在CNI框架内封装了Calico的功能。

    此处我们使用Flannel插件。

    wget raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    下载后需要修改里面的配置,首先设置一下网卡

    其次需要设置一下网段,这里的网段和 1.5 步骤中的podSubnet的值保持一直,都是
    10.88.0.0/16

    执行命令

    kubectl apply -f kube-flannel.yml

    做出了如上操作之后还不行,还是会报错,主要是CNI版本兼容性问题,如图

    这里可以把containerd中的CNI去除掉

    mv /etc/cni/net.d/10-containerd-net.conflist /etc/cni/net.d/10-containerd-net.conflist.bak systemctl daemon-reload systemctl restart containerd kubelet

    3.3 集群验证

    kubectl get cs kubectl get nodes

    再执行一下如下命令,查看是否所有的pod都是运行正常的:

    kubectl get pod --all-namespaces -o wide

    3.4 验证DNS解析
    • 创建busybox.yaml

    apiVersion: v1 kind: Pod metadata: name: busybox namespace: default spec: containers: - name: busybox image: busybox command: - sleep - "3600" imagePullPolicy: IfNotPresent restartPolicy: Always

    kubectl create -f busybox.yaml

    • 验证一下状态

    kubectl get pods busybox

    • DNS检查

    kubectl exec -i -t busybox -- nslookup kubernetes.default

    • 排错
      根据这篇文章(dockone.io/article/10399)的排查,我也检查了一下我的CentOS内核版本,是3.10,比较老,需要升级一下。

    经过一系列排错后,再次执行如下命令:

    kubectl exec -i -t busybox -- nslookup kubernetes.default

    目前的操作只是练手而已,想要搭建高可用的集群任重道远,需要投入更多精力。

    参考链接

    www.manongjc.com/detail/25-lioggelnywerjyf.html
    www.kubernetes.org.cn/1904.html
    www.toutiao.com/article/7105957860210819623/
    i4t.com/5451.html
    blog.frognew.com/2022/05/kubeadm-install-kubernetes-1.24.html

  • 以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐

  • 标签:集群搭建