惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
Stack Overflow Blog
Stack Overflow Blog
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
人人都是产品经理
人人都是产品经理
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
MongoDB | Blog
MongoDB | Blog
L
LangChain Blog
WordPress大学
WordPress大学
小众软件
小众软件
IT之家
IT之家
腾讯CDC
月光博客
月光博客
量子位
Blog — PlanetScale
Blog — PlanetScale
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 尹正杰

Categraf使用指南 window系统部署Claude Code实战 N9E集群部署 Ubuntu 24.04 LTS部署Codex实战 aiops运维平台从0到1部署实战 aiops平台环境部署 TKE集群LoadBalancer映射案例 k8s集群为每个节点分配不通的ippool实战 ansible剧本实现一键升级K8S集群的NVIDIA GPU驱动 vmagent采集etcd数据并写入victoriametrics集群 VictoriaMetrics集群部署实战 Squid正向代理实战 kubespray生产故障案例之kubelet启动参数案例 filebeat指定名称空间采集pod数据 Calico自定义Ipool实战 ansible剧本实现kibana的部署和卸载 ansible剧本应用案例集合2 ansible剧本实现磁盘格式化 Ansible急速入门实战篇 ansible快速入门篇 k8s集群管理 kubesray实战 kubespray实战案例 kubespray管理k8s的worker集群扩缩容 Kubeasz使用吐槽博客专题 Kubeasz基于ezctl实现etcd集群的管理实战 Kubeasz基于ezctl实现k8s集群一键升级 Calico启用纯BGP模式+RR实战案例 Calico 底层原理及IPIP(依赖BGP协议))和vxlan(不依赖BGP)工作模式切换 kubeasz基于ezctl实现k8s集群的扩容和缩容
kubespray快速部署k8s集群实战
尹正杰 · 2026-06-06 · via 博客园 - 尹正杰

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.kubespray概述

1.Kubespray概述

Kubespray(原 Kargo):基于 Ansible、CNCF 维护的 K8s 一键部署工具,原生生产级 HA 集群,裸机 / 虚拟化 / 公有云全适配,主流企业自建集群首选方案。


官方文档:
	https://kubespray.io/

Github地址:
	https://github.com/kubernetes-sigs/kubespray

2.使用kubespray的前提

- 1.Kubernetes 的最低要求版本为 v1.30

- 2.在将运行Ansible命令的机器上,已安装了Ansible v2.14+、Jinja 2.11+和python-netaddr;

- 3.目标服务器必须能够访问互联网,以便拉取Docker镜像。否则,需要进行额外的配置(请参阅离线环境)

- 4.目标服务器已配置为允许IPv4转发。

- 5.如果为Pod和服务使用IPv6,则目标服务器配置为允许IPv6转发。

- 6.防火墙未被管理,您需要像以前一样自行制定规则。为避免部署过程中出现任何问题,您应禁用防火墙。

- 7.如果kubespray是以非root用户账户运行的,则应在目标服务器中配置正确的权限提升方法。然后,应指定ansible_become标志或命令参数--become或-b。


参考链接:
	https://github.com/kubernetes-sigs/kubespray#requirements

3.kubespray和k8s版本对应关系

image

image

image

如上图1所示,关于kubespray和k8s版本对应关系,Github上已经写的很明确了。比如我想要部署k8s 1.33.7,此处就可以优先选择kubespray v2.29.1版本。

如上图2所示,如果你想要部署k8s 1.33.12的话,就不太适合用v2.29.1,因为该版本官方默认最高支持的版本为: "1.33.10"

如上图3所示,目前kubespray官方发布的最新v2.31版本,也仅支持到v1.33.11版本哟~

当然,如果你真的有类似的需求,非要使用1.33.12版本的话,建议直接使用官方推荐部署方式,即kubeadm或者二进制的方式即可。

参考链接:
	https://github.com/kubernetes-sigs/kubespray/releases
    https://github.com/kubernetes-sigs/kubespray/blob/release-2.29/roles/kubespray_defaults/vars/main/checksums.yml
    https://github.com/kubernetes-sigs/kubespray/blob/release-2.31/roles/kubespray_defaults/vars/main/checksums.yml

二.kubespray离线环境部署准备

1.部署harbor仓库

参考链接:
	https://www.cnblogs.com/yinzhengjie/p/17153673.html

2.下载kubespray项目

	1.下载项目
[root@ansible99 ~]# git clone https://github.com/kubernetes-sigs/kubespray.git
Cloning into 'kubespray'...
remote: Enumerating objects: 87493, done.
remote: Counting objects: 100% (65/65), done.
remote: Compressing objects: 100% (46/46), done.
remote: Total 87493 (delta 41), reused 19 (delta 19), pack-reused 87428 (from 2)
Receiving objects: 100% (87493/87493), 28.54 MiB | 4.66 MiB/s, done.
Resolving deltas: 100% (49196/49196), done.
[root@ansible99 ~]# 



	2.切换分支
[root@ansible99 ~]# cd kubespray/
[root@ansible99 kubespray]# 
[root@ansible99 kubespray]# git checkout release-2.29
branch 'release-2.29' set up to track 'origin/release-2.29'.
Switched to a new branch 'release-2.29'
[root@ansible99 kubespray]# 
[root@ansible99 kubespray]# git branch 
  master
* release-2.29
[root@ansible99 kubespray]# 


温馨提示:
  上述2条命令我们也可以用一行命令来实现。
[root@ansible99 ~]# git clone -b release-2.29 https://github.com/kubernetes-sigs/kubespray.git
Cloning into 'kubespray'...
remote: Enumerating objects: 87493, done.
remote: Counting objects: 100% (84/84), done.
remote: Compressing objects: 100% (64/64), done.
remote: Total 87493 (delta 45), reused 16 (delta 16), pack-reused 87409 (from 2)
Receiving objects: 100% (87493/87493), 28.48 MiB | 12.14 MiB/s, done.
Resolving deltas: 100% (49197/49197), done.
[root@ansible99 ~]# 
[root@ansible99 ~]# 
[root@ansible99 ~]# cd kubespray/
[root@ansible99 kubespray]# 
[root@ansible99 kubespray]# git branch 
* release-2.29
[root@ansible99 kubespray]# 

3 配置集群部署文件及python环境准备

  1.准备集群文件
[root@ansible99 kubespray]# cp -a inventory/{sample,yinzhengjie-k8s}
[root@ansible99 kubespray]# 
[root@ansible99 kubespray]# vim inventory/yinzhengjie-k8s/inventory.ini
[all]
master231 ansible_host=10.0.0.231  ip=10.0.0.231
master232 ansible_host=10.0.0.232  ip=10.0.0.232
master233 ansible_host=10.0.0.233  ip=10.0.0.233
worker66 ansible_host=10.0.0.66  ip=10.0.0.66
worker77 ansible_host=10.0.0.77  ip=10.0.0.77

# 控制面 Master 节点(HA 写多个)
[kube_control_plane]
master231
master232
master233

# etcd 集群(推荐与 control plane 一致,也可独立节点)
[etcd]
master231
master232
master233

# 工作节点
[kube_node]
worker66
worker77

# 负载均衡(HA 集群必选,默认使用内置 haproxy)
[kube_lb]


# 可选:Calico BGP 路由反射器
[calico_rr]

  2.自定义集群配置
[root@ansible99 kubespray]# vim inventory/yinzhengjie-k8s/group_vars/k8s_cluster/k8s-cluster.yml 
...
# 需要关注的配置
kube_network_plugin: calico 
kube_service_addresses: 10.200.0.0/16  
kube_pods_subnet: 10.100.0.0/16 
cluster_name: yinzhengjie.com   
container_manager: containerd 

# 需要新增的配置
kubelet_cgroup_driver: cgroupfs
kube_cert_validity_period: 438000h
kube_ca_cert_validity_period: 876000h

kube_kubeadm_controller_extra_args:
  cluster-signing-duration: 175200h

# 建议写死版本,不然这个软件有点抽风,一会部署k8s 1.33.7,一会有部署k8s 1.33.10让人摸不着头脑!
kube_version: 1.33.10
[root@ansible99 kubespray]#


温馨提示:
  更多关于变量的信息,可直接参考官方文档: https://kubespray.io/#/docs/ansible/vars


	3.构建python虚拟环境
[root@ansible99 kubespray]# apt update && apt -y install python3-pip python3-venv 

[root@ansible99 kubespray]# python3 -m venv venv

[root@ansible99 kubespray]# source venv/bin/activate
(venv) [root@ansible99 kubespray]# 

 
	4.安装依赖(锁定ansible版本适配v2.29)
(venv) [root@ansible99 kubespray]# pip3 list
Package Version
------- -------
pip     24.0
(venv) [root@ansible99 kubespray]# 
(venv) [root@ansible99 kubespray]# pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
(venv) [root@ansible99 kubespray]# 
(venv) [root@ansible99 kubespray]# 
(venv) [root@ansible99 kubespray]# pip3 list
Package      Version
------------ -------
ansible      10.7.0
ansible-core 2.17.14
cffi         2.0.0
cryptography 46.0.2
Jinja2       3.1.6
jmespath     1.0.1
MarkupSafe   3.0.3
netaddr      1.3.0
packaging    26.2
pip          24.0
pycparser    3.0
PyYAML       6.0.3
resolvelib   1.0.1
(venv) [root@ansible99 kubespray]# 



	5.免密ssh分发密钥至所有节点
(venv) [root@ansible99 kubespray]# ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519

(venv) [root@ansible99 kubespray]# ssh-copy-id root@10.0.0.231
(venv) [root@ansible99 kubespray]# ssh-copy-id root@10.0.0.232
(venv) [root@ansible99 kubespray]# ssh-copy-id root@10.0.0.233
(venv) [root@ansible99 kubespray]# ssh-copy-id root@10.0.0.66
(venv) [root@ansible99 kubespray]# ssh-copy-id root@10.0.0.77

4.自定义containerd配置

(venv) [root@ansible99 kubespray]#  vim inventory/yinzhengjie-k8s/group_vars/all/containerd.yml 
...
containerd_use_systemd_cgroup: false

containerd_registries_mirrors:
 - prefix: harbor250.yinzhengjie.com
   mirrors:
    - host: http://harbor250.yinzhengjie.com
      capabilities: ["pull", "resolve"]
      skip_verify: true
      #header:
      #  Authorization: "Basic YWRtaW46MQ=="

containerd_registry_auth:
  - registry: harbor250.yinzhengjie.com
    username: admin
    password: 1



5.自定义其他配置

(venv) [root@ansible99 kubespray]# vim inventory/yinzhengjie-k8s/group_vars/all/all.yml 
...

additional_sysctl:
  - { name: fs.inotify.max_user_instances, value: 8192 }

unsafe_show_logs: true

# 固定 Python 解释器,关闭自动探测警告
ansible_python_interpreter: /usr/bin/python3.12

# 允许用户/组已存在,避免重复创建报错
adduser_ignore_existing: true

6.同步镜像到harbor仓库

image
image

  1.进入offline目录,执行脚本生成离线资源清单files.list和images.list【此步骤会生成一个temp/目录】
(venv) [root@ansible99 kubespray]# cd contrib/offline && bash generate_list.sh


  2.修改temp/files.list文件,加上files.m.daocloud.io前缀
(venv) [root@ansible99 offline]# sed -i "s#https://#https://files.m.daocloud.io/#g" temp/files.list

  3.修改images.list文件,修改成daocloud的镜像加速配置
(venv) [root@ansible99 offline]# sed -i "s@quay.io@quay.m.daocloud.io@g" temp/images.list
(venv) [root@ansible99 offline]# sed -i "s@docker.io@docker.m.daocloud.io@g" temp/images.list
(venv) [root@ansible99 offline]# sed -i "s@registry.k8s.io@k8s.m.daocloud.io@g" temp/images.list
(venv) [root@ansible99 offline]# sed -i "s@ghcr.io@ghcr.m.daocloud.io@g" temp/images.list

  4.执行以下命令将依赖的静态文件全部下载到 temp/files 目录下
(venv) [root@ansible99 offline]# wget -x -P temp/files -i temp/files.list


  5.执行skopeo命令迁移镜像到镜像仓库
(venv) [root@ansible99 offline]# apt -y install skopeo
(venv) [root@ansible99 offline]# 
(venv) [root@ansible99 offline]# cd temp/
(venv) [root@ansible99 temp]# 
(venv) [root@ansible99 temp]# echo 10.0.0.250 harbor250.yinzhengjie.com >> /etc/hosts
(venv) [root@ansible99 temp]# 
(venv) [root@ansible99 temp]# skopeo login --tls-verify=false -u admin -p 1 harbor250.yinzhengjie.com
Login Succeeded!
(venv) [root@ansible99 temp]# 
(venv) [root@ansible99 temp]# for image in $(cat images.list); do skopeo copy --dest-tls-verify=false docker://${image} docker://harbor250.yinzhengjie.com/k8s/${image#*/}; done


  6.查看harbor的WebUI
如上图所示。

7.部署二进制软件包离线下载站点

image

	1.准备站点目录
[root@harbor250 ~]# mkdir -pv /yinzhengjie/data/kubespray


	2.拷贝k8s相关的二进制文件到站点目录
(venv) [root@ansible99 kubespray]# scp -r contrib/offline/temp/files/files.m.daocloud.io/ 10.0.0.250:/yinzhengjie/data/kubespray


	3.准备nginx的站点配置文件
[root@harbor250 ~]# cat default.conf 
server {
    listen       80;
    server_name  harbor250.yinzhengjie.com;

    root   /usr/share/nginx/html;
    index  index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
        autoindex on;
        autoindex_exact_size on;
        autoindex_localtime on;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
[root@harbor250 ~]# 

  4.启动容器
[root@harbor250 ~]# docker run -it -d -p 8080:80 -v /root/default.conf:/etc/nginx/conf.d/default.conf --name kubespray-server  -v /yinzhengjie/data/kubespray/:/usr/share/nginx/html/ docker.m.daocloud.io/library/nginx:1.25.1-alpine


  5.访问测试
访问效果如上图所示。

三.基于kubespray离线部署K8S实战

1.配置离线安装

(venv) [root@ansible99 kubespray]# vim inventory/yinzhengjie-k8s/group_vars/all/offline.yml  
---
## Global Offline settings
### Private Container Image Registry
# registry_host: "myprivateregisry.com"
registry_host: "harbor250.yinzhengjie.com/k8s"
files_repo: "http://harbor250.yinzhengjie.com:8080/files.m.daocloud.io"
### If using CentOS, RedHat, AlmaLinux or Fedora
# yum_repo: "http://myinternalyumrepo"
### If using Debian
# debian_repo: "http://myinternaldebianrepo"
### If using Ubuntu
# ubuntu_repo: "http://myinternalubunturepo"

## Container Registry overrides
kube_image_repo: "{{ registry_host }}"
gcr_image_repo: "{{ registry_host }}"
github_image_repo: "{{ registry_host }}"
docker_image_repo: "{{ registry_host }}"
quay_image_repo: "{{ registry_host }}"

## Kubernetes components
kubeadm_download_url: "{{ files_repo }}/dl.k8s.io/release/v{{ kube_version }}/bin/linux/{{ image_arch }}/kubeadm"
kubectl_download_url: "{{ files_repo }}/dl.k8s.io/release/v{{ kube_version }}/bin/linux/{{ image_arch }}/kubectl"
kubelet_download_url: "{{ files_repo }}/dl.k8s.io/release/v{{ kube_version }}/bin/linux/{{ image_arch }}/kubelet"


## Two options - Override entire repository or override only a single binary.

## [Optional] 1 - Override entire binary repository
# github_url: "https://my_github_proxy"
# dl_k8s_io_url: "https://my_dl_k8s_io_proxy"
# storage_googleapis_url: "https://my_storage_googleapi_proxy"
# get_helm_url: "https://my_helm_sh_proxy"

## [Optional] 2 - Override a specific binary
## CNI Plugins
cni_download_url: "{{ files_repo }}/github.com/containernetworking/plugins/releases/download/v{{ cni_version }}/cni-plugins-linux-{{ image_arch }}-v{{ cni_version }}.tgz"

## cri-tools
crictl_download_url: "{{ files_repo }}/github.com/kubernetes-sigs/cri-tools/releases/download/v{{ crictl_version }}/crictl-v{{ crictl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"

## [Optional] etcd: only if you use etcd_deployment=host
etcd_download_url: "{{ files_repo }}/github.com/etcd-io/etcd/releases/download/v{{ etcd_version }}/etcd-v{{ etcd_version }}-linux-{{ image_arch }}.tar.gz"

# [Optional] Calico: If using Calico network plugin
calicoctl_download_url: "{{ files_repo }}/github.com/projectcalico/calico/releases/download/v{{ calico_ctl_version }}/calicoctl-linux-{{ image_arch }}"
# [Optional] Calico with kdd: If using Calico network plugin with kdd datastore
calico_crds_download_url: "{{ files_repo }}/github.com/projectcalico/calico/archive/v{{ calico_version }}.tar.gz"

# [Optional] Cilium: If using Cilium network plugin
ciliumcli_download_url: "{{ files_repo }}/github.com/cilium/cilium-cli/releases/download/v{{ cilium_cli_version }}/cilium-linux-{{ image_arch }}.tar.gz"

# [Optional] helm: only if you set helm_enabled: true
helm_download_url: "{{ files_repo }}/get.helm.sh/helm-v{{ helm_version }}-linux-{{ image_arch }}.tar.gz"

# [Optional] crun: only if you set crun_enabled: true
crun_download_url: "{{ files_repo }}/github.com/containers/crun/releases/download/{{ crun_version }}/crun-{{ crun_version }}-linux-{{ image_arch }}"

# [Optional] kata: only if you set kata_containers_enabled: true
kata_containers_download_url: "{{ files_repo }}/github.com/kata-containers/kata-containers/releases/download/{{ kata_containers_version }}/kata-static-{{ kata_containers_version }}-{{ image_arch }}.tar.xz"

# [Optional] cri-dockerd: only if you set container_manager: docker
cri_dockerd_download_url: "{{ files_repo }}/github.com/Mirantis/cri-dockerd/releases/download/v{{ cri_dockerd_version }}/cri-dockerd-{{ cri_dockerd_version }}.{{ image_arch }}.tgz"

# [Optional] runc: if you set container_manager to containerd or crio
runc_download_url: "{{ files_repo }}/github.com/opencontainers/runc/releases/download/v{{ runc_version }}/runc.{{ image_arch }}"

# [Optional] cri-o: only if you set container_manager: crio
# crio_download_base: "download.opensuse.org/repositories/devel:kubic:libcontainers:stable"
# crio_download_crio: "http://{{ crio_download_base }}:/cri-o:/"
crio_download_url: "{{ files_repo }}/storage.googleapis.com/cri-o/artifacts/cri-o.{{ image_arch }}.v{{ crio_version }}.tar.gz"
skopeo_download_url: "{{ files_repo }}/github.com/lework/skopeo-binary/releases/download/v{{ skopeo_version }}/skopeo-linux-{{ image_arch }}"

# [Optional] containerd: only if you set container_runtime: containerd
containerd_download_url: "{{ files_repo }}/github.com/containerd/containerd/releases/download/v{{ containerd_version }}/containerd-{{ containerd_version }}-linux-{{ image_arch }}.tar.gz"
nerdctl_download_url: "{{ files_repo }}/github.com/containerd/nerdctl/releases/download/v{{ nerdctl_version }}/nerdctl-{{ nerdctl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"

# [Optional] runsc,containerd-shim-runsc: only if you set gvisor_enabled: true
gvisor_runsc_download_url: "{{ files_repo }}/storage.googleapis.com/gvisor/releases/release/{{ gvisor_version }}/{{ ansible_architecture }}/runsc"
gvisor_containerd_shim_runsc_download_url: "{{ files_repo }}/storage.googleapis.com/gvisor/releases/release/{{ gvisor_version }}/{{ ansible_architecture }}/containerd-shim-runsc-v1"


## CentOS/Redhat/AlmaLinux
### For EL8, baseos and appstream must be available,
### By default we enable those repo automatically
# rhel_enable_repos: false
### Docker / Containerd
#docker_rh_repo_base_url: "{{ yum_repo }}/docker-ce/$releasever/$basearch"
#docker_rh_repo_gpgkey: "{{ yum_repo }}/docker-ce/gpg"

## Fedora
### Docker
#docker_fedora_repo_base_url: "{{ yum_repo }}/docker-ce/{{ ansible_distribution_major_version }}/{{ ansible_architecture }}"
#docker_fedora_repo_gpgkey: "{{ yum_repo }}/docker-ce/gpg"
### Containerd
#containerd_fedora_repo_base_url: "{{ yum_repo }}/containerd"
#containerd_fedora_repo_gpgkey: "{{ yum_repo }}/docker-ce/gpg"

## Debian
### Docker
# docker_debian_repo_base_url: "{{ debian_repo }}/docker-ce"
# docker_debian_repo_gpgkey: "{{ debian_repo }}/docker-ce/gpg"
### Containerd
# containerd_debian_repo_base_url: "{{ debian_repo }}/containerd"
# containerd_debian_repo_gpgkey: "{{ debian_repo }}/containerd/gpg"
# containerd_debian_repo_repokey: 'YOURREPOKEY'

## Ubuntu
### Docker
# docker_ubuntu_repo_base_url: "{{ ubuntu_repo }}/docker-ce"
# docker_ubuntu_repo_gpgkey: "{{ ubuntu_repo }}/docker-ce/gpg"
### Containerd
# containerd_ubuntu_repo_base_url: "{{ ubuntu_repo }}/containerd"
# containerd_ubuntu_repo_gpgkey: "{{ ubuntu_repo }}/containerd/gpg"
# containerd_ubuntu_repo_repokey: 'YOURREPOKEY'

2.基于ansible一键部署K8S集群

  1.添加hosts解析
(venv) [root@ansible99 kubespray]# ansible -i inventory/yinzhengjie-k8s/inventory.ini all -m shell -a 'echo 10.0.0.250 harbor250.yinzhengjie.com >>  /etc/hosts'
master233 | CHANGED | rc=0 >>

master232 | CHANGED | rc=0 >>

worker77 | CHANGED | rc=0 >>

master231 | CHANGED | rc=0 >>

worker66 | CHANGED | rc=0 >>

(venv) [root@ansible99 kubespray]# 
(venv) [root@ansible99 kubespray]# 
(venv) [root@ansible99 kubespray]# ansible -i inventory/yinzhengjie-k8s/inventory.ini all -m shell -a 'cat /etc/hosts|grep harbor250' 
master233 | CHANGED | rc=0 >>
10.0.0.250 harbor250.yinzhengjie.com
master231 | CHANGED | rc=0 >>
10.0.0.250 harbor250.yinzhengjie.com
worker66 | CHANGED | rc=0 >>
10.0.0.250 harbor250.yinzhengjie.com
worker77 | CHANGED | rc=0 >>
10.0.0.250 harbor250.yinzhengjie.com
master232 | CHANGED | rc=0 >>
10.0.0.250 harbor250.yinzhengjie.com
(venv) [root@ansible99 kubespray]# 
 

  2.部署集群
(venv) [root@ansible99 kubespray]# ansible-playbook -i inventory/yinzhengjie-k8s/inventory.ini  cluster.yml


温馨提示:
  - 1.此步骤不成功,就不要继续往下操作了,先解决问题后再做后续验证;
  - 2.关于故障排查技巧,可以参考如下命令:
        ansible-playbook -i inventory/yinzhengjie-k8s/inventory.ini reset.yml 
        ansible-playbook -i inventory/yinzhengjie-k8s/inventory.ini cluster.yml  -vvv

3.测试验证

  1.检查worker节点
[root@master231 ~]# kubectl get nodes -o wide
NAME        STATUS   ROLES           AGE     VERSION    INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
master231   Ready    control-plane   5m21s   v1.33.10   10.0.0.231    <none>        Ubuntu 24.04.4 LTS   6.8.0-117-generic   containerd://2.1.6
master232   Ready    control-plane   4m41s   v1.33.10   10.0.0.232    <none>        Ubuntu 24.04.4 LTS   6.8.0-117-generic   containerd://2.1.6
master233   Ready    control-plane   4m19s   v1.33.10   10.0.0.233    <none>        Ubuntu 24.04.4 LTS   6.8.0-117-generic   containerd://2.1.6
worker66    Ready    <none>          3m34s   v1.33.10   10.0.0.66     <none>        Ubuntu 24.04.4 LTS   6.8.0-117-generic   containerd://2.1.6
worker77    Ready    <none>          3m34s   v1.33.10   10.0.0.77     <none>        Ubuntu 24.04.4 LTS   6.8.0-117-generic   containerd://2.1.6
[root@master231 ~]# 
[root@master231 ~]# 

  2.检查证书有效期【我设置的是CA证书100年,master和】
[root@master232 ~]# kubeadm   certs  check-expiration
[check-expiration] Reading configuration from the "kubeadm-config" ConfigMap in namespace "kube-system"...
[check-expiration] Use 'kubeadm init phase upload-config --config your-config-file' to re-upload it.
W0612 15:05:16.293484   36532 utils.go:69] The recommended value for "clusterDNS" in "KubeletConfiguration" is: [10.200.0.10]; the provided value is: [169.254.25.10]

CERTIFICATE                  EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                   May 30, 2076 06:58 UTC   49y             ca                      no      
apiserver                    May 30, 2076 06:58 UTC   49y             ca                      no      
apiserver-kubelet-client     May 30, 2076 06:58 UTC   49y             ca                      no      
controller-manager.conf      May 30, 2076 06:58 UTC   49y             ca                      no      
front-proxy-client           May 30, 2076 06:58 UTC   49y             front-proxy-ca          no      
scheduler.conf               May 30, 2076 06:58 UTC   49y             ca                      no      
!MISSING! super-admin.conf                                                                    

CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      May 19, 2126 06:58 UTC   99y             no      
front-proxy-ca          May 19, 2126 06:58 UTC   99y             no      
[root@master232 ~]# 

  3.检查worker组件证书的有效期【注意哈,证书有效期是20年的哟~】
[root@master232 ~]# openssl x509  -in /var/lib/kubelet/pki/kubelet-client-current.pem -text -noout | grep Validity -A 2
        Validity
            Not Before: Jun 12 09:48:02 2026 GMT
            Not After : Jun  7 09:48:02 2046 GMT
[root@master232 ~]# 



  4.检查K8S集群网络网段分配情况
[root@master231 ~]# kubectl get pods -A -o wide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS        AGE   IP               NODE        NOMINATED NODE   READINESS GATES
kube-system   calico-kube-controllers-6b48c55b44-wqf6s   1/1     Running   0               54s   10.100.165.3     worker77    <none>           <none>
kube-system   calico-node-fxd72                          1/1     Running   0               54s   10.0.0.233       master233   <none>           <none>
kube-system   calico-node-h6cfh                          1/1     Running   0               54s   10.0.0.231       master231   <none>           <none>
kube-system   calico-node-rwhkz                          1/1     Running   0               53s   10.0.0.66        worker66    <none>           <none>
kube-system   calico-node-wqmzd                          1/1     Running   0               53s   10.0.0.232       master232   <none>           <none>
kube-system   calico-node-zsbx2                          1/1     Running   0               52s   10.0.0.77        worker77    <none>           <none>
kube-system   coredns-594cbfb5fd-8wxd5                   1/1     Running   0               53s   10.100.249.1     master232   <none>           <none>
kube-system   coredns-594cbfb5fd-ddx7g                   1/1     Running   0               53s   10.100.160.129   master231   <none>           <none>
kube-system   dns-autoscaler-8558dbc749-8q5w5            1/1     Running   0               53s   10.100.165.4     worker77    <none>           <none>
kube-system   kube-apiserver-master231                   1/1     Running   1 (4m23s ago)   52s   10.0.0.231       master231   <none>           <none>
kube-system   kube-apiserver-master232                   1/1     Running   1 (4m18s ago)   52s   10.0.0.232       master232   <none>           <none>
kube-system   kube-apiserver-master233                   1/1     Running   1 (4m12s ago)   51s   10.0.0.233       master233   <none>           <none>
kube-system   kube-controller-manager-master231          1/1     Running   2 (4m23s ago)   51s   10.0.0.231       master231   <none>           <none>
kube-system   kube-controller-manager-master232          1/1     Running   2 (4m18s ago)   51s   10.0.0.232       master232   <none>           <none>
kube-system   kube-controller-manager-master233          1/1     Running   2 (4m12s ago)   51s   10.0.0.233       master233   <none>           <none>
kube-system   kube-proxy-cd7zn                           1/1     Running   0               50s   10.0.0.66        worker66    <none>           <none>
kube-system   kube-proxy-hsq49                           1/1     Running   0               49s   10.0.0.232       master232   <none>           <none>
kube-system   kube-proxy-nn8c5                           1/1     Running   0               49s   10.0.0.231       master231   <none>           <none>
kube-system   kube-proxy-tds6l                           1/1     Running   0               49s   10.0.0.233       master233   <none>           <none>
kube-system   kube-proxy-th7x9                           1/1     Running   0               50s   10.0.0.77        worker77    <none>           <none>
kube-system   kube-scheduler-master231                   1/1     Running   2 (4m23s ago)   50s   10.0.0.231       master231   <none>           <none>
kube-system   kube-scheduler-master232                   1/1     Running   2 (4m18s ago)   50s   10.0.0.232       master232   <none>           <none>
kube-system   kube-scheduler-master233                   1/1     Running   2 (4m12s ago)   50s   10.0.0.233       master233   <none>           <none>
kube-system   nginx-proxy-worker66                       1/1     Running   1 (4m7s ago)    50s   10.0.0.66        worker66    <none>           <none>
kube-system   nginx-proxy-worker77                       1/1     Running   1 (4m9s ago)    49s   10.0.0.77        worker77    <none>           <none>
kube-system   nodelocaldns-5z9pz                         1/1     Running   0               47s   10.0.0.231       master231   <none>           <none>
kube-system   nodelocaldns-f2v5d                         1/1     Running   1 (44s ago)     49s   10.0.0.232       master232   <none>           <none>
kube-system   nodelocaldns-fjk2c                         1/1     Running   3 (28s ago)     49s   10.0.0.233       master233   <none>           <none>
kube-system   nodelocaldns-msjwp                         1/1     Running   2 (33s ago)     49s   10.0.0.66        worker66    <none>           <none>
kube-system   nodelocaldns-z8rf5                         1/1     Running   0               48s   10.0.0.77        worker77    <none>           <none>
[root@master231 ~]# 
[root@master231 ~]# kubectl get svc -A
NAMESPACE     NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       kubernetes   ClusterIP   10.200.0.1   <none>        443/TCP                  26m
kube-system   coredns      ClusterIP   10.200.0.3   <none>        53/UDP,53/TCP,9153/TCP   22m
[root@master231 ~]#