Kubernetes 1.29.6 高可用集群部署

架构设计 OS: AlmaLinux 9.1 节点名 IP 地址 zqf-Master01 10.101.5.110 zqf-Master02 10.101.5.111 zqf-Master03 10.101.5.112 zqf-Worker01 10.101.5.113 zqf-Worker02 10.101.5.114 zqf-Worker03 10.101.5.115 zqf-Worker04 10.101.5.116 1. 所有节点操作 1.1 基础配置 1.1.1 配置镜像源 1sed -e 's|^mirrorlist=|#mirrorlist=|g' \ 2 -e 's|^#\s*baseurl=https://repo.almalinux.org/almalinux|baseurl=https://mirrors.zju.edu.cn/almalinux|g' \ 3 -i.bak \ 4 /etc/yum.repos.d/almalinux-*.repo 1dnf makecache 1.1.2 配置主机名 1hostnamectl set-hostname <主机名> 添加解析记录,使节点直接使用主机名访问通信 ...

十一月 13, 2024

Kubernetes 故障排查方法论

问题导向&排查 网络诊断 连通性测试:使用 ping、nc、telnet 等工具测试 Pod 间的网络连通性,或通过 curl 检查服务端口是否可达。 NetworkPolicy 检查:确认 NetworkPolicy 规则是否过于严格导致通信阻断,使用 kubectl get netpol 查看并分析现有策略。 CNI 插件排查:检查 CNI 插件(如 Calico、Flannel 等)的日志,排查网络配置或插件自身问题。 存储问题排查 PVC/PV 状态检查:使用 kubectl get pvc,pv 查看 PersistentVolumeClaim 和 PersistentVolume 的绑定状态与容量,确认是否存在未绑定、容量不足等问题。 存储日志与事件:检查存储插件(如 Local Volume、CSI Driver 等)日志,以及 PVC/PV 的事件信息,查找存储访问异常。 数据完整性验证:必要时,直接在宿主机上挂载存储卷,检查数据完整性和一致性。 资源调度与亲和性问题 节点资源分析:使用 kubectl top nodes 查看节点资源使用情况,判断是否存在资源瓶颈。 调度策略检查:确认 Deployments、StatefulSets 等资源的 .spec.template.spec.nodeSelector、.spec.affinity、.spec.tolerations 等调度相关字段配置,看是否限制了 Pod 的调度范围。 kube-scheduler 日志:分析 kube-scheduler 日志,了解调度决策过程,找出影响调度的因素。 认证授权与访问控制 RBAC 规则审查:使用 kubectl get rolebindings,clusterrolebindings 检查角色绑定关系,确保用户或服务账户具有正确的 API 访问权限。 API Server 访问日志:分析 kube-apiserver-audit.log,跟踪特定用户或账户的 API 请求与响应,排查授权问题。 网络代理与认证配置:检查 kubeconfig 文件、API Server 配置及网络代理(如 kube-proxy、ingress-nginx 等)的认证设置,确保访问路径无误。 不管是否初学者,大家一般都可以从现象识别到问题定位,再到深入排查与解决方案制定,形成一套完整的问题解决闭环。随着实践经验的积累,排查效率与解决问题的能力将不断提升。 ...

十月 26, 2024

基于 Kubeadm 手动更新证书

检查证书是否过期 1kubeadm certs check-expiration 该命令显示 /etc/kubernetes/pki 文件夹中的客户端证书以及 kubeadm(admin.conf、controller-manager.conf 和 scheduler.conf) 使用的 kubeconfig 文件中嵌入的客户端证书的到期时间/剩余时间。 ...

十月 15, 2024

基于 Velero 备份与恢复 K8s 集群

Velero 安装步骤 客户端 https://github.com/vmware-tanzu/velero/releases 下载并安装最新版本二进制客户端。 1cp velero /usr/local/bin && chmod +x /usr/local/bin/velero 2 3velero version 4Client: 5 Version: v1.13.2 6 Git commit: 4d961fb6fec384ed7f3c1b7c65c818106107f5a6 7<error getting server version: no matches for kind "ServerStatusRequest" in version "velero.io/v1"> 服务端 准备好秘钥文件 credentials-velero ,即 MinIO 的用户名密码。 1[default] 2aws_access_key_id=<access key id> 3aws_secret_access_key=<secret access key> 使用 velero install 安装服务端 1velero install \ 2 --provider aws \ 3 --image velero/velero:v1.13.2 \ 4 --plugins velero/velero-plugin-for-aws:v1.9.2 \ 5 --bucket velero \ 6 --secret-file ./credentials-velero \ 7 --use-node-agent \ 8 --use-volume-snapshots=false \ 9 --namespace velero \ 10 --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.101.6.118:9000 \ 11 --wait 1velero version 2Client: 3 Version: v1.13.2 4 Git commit: 4d961fb6fec384ed7f3c1b7c65c818106107f5a6 5Server: 6 Version: v1.13.2 Velero 使用 备份 1velero create backup NAME [flags] backup选项: ...

九月 24, 2024

基于 imagePullSecret 下载私有镜像仓库制品

Docker 登录私有仓库 首先配置私有仓库免 ssl 验证 1{ 2 "insecure-registries": ["szharbor.xxx.cn"] 3} 输入用户名密码并登录 1docker login szharbor.xxx.cn 查看登录成功后的 Docker 认证文件 1cat ~/.docker/config.json 1{ 2 "auths": { 3 "szharbor.xxx.cn": { 4 "auth": "cm...nVVM=" 5 } 6 } 7} 压缩,base64编码 1{"auths":{"szharbor.xxx.cn":{"auth":"cm9ib3QkaGllbXNfZGV2K3ByaXY6Rk1iSXQ5bFI2RXA5bDd6cU9pUU1MYUg5eVdQWnFnVVM="}}} 1eyJhdXRocyI6eyJzemhhcmJvci5oaXRoaXVtLmNuIjp7ImF1dGgiOiJjbTlpYjNRa2FHbGxiWE5mWkdWMkszQnlhWFk2UmsxaVNYUTViRkkyUlhBNWJEZDZjVTlwVVUxTVlVZzVlVmRRV25GblZWTT0ifX19 harbor ...

九月 15, 2024

K8s 网络模型基础知识

Kubernetes 网络的功能: 高度耦合的容器间通信:这个已经被 Pods 和 localhost 通信解决了。 Pod 间通信; Pod 和 Service 对象间通信; 外部和 Service 对象间通信; Kubernetes 本身的网络服务自带了一下功能: ...

八月 24, 2024

使用 NFS 作为 K8s 存储插件

1. 基础配置 首先,在所有 master 节点和 worker 节点上安装 nfs-utils. 1sudo yum -y install nfs-utils 2systemctl enable nfs-utils 2. NFS Server 配置 服务端安装 nfs-utils 和 rpcbind 1sudo yum -y install nfs-utils rpcbind 2systemctl enable nfs-utils 3systemctl enable rpcbind 创建共享目录 1mkdir /hc-data/nfs **创建并修改配置文件 配置文件为 /etc/exports ...

八月 24, 2024

K8s 下线节点流程

将节点设置为不可调度,防止新的Pod调度到该节点上。 1kubectl cordon <节点名> 排空节点上的Pod 1 kubectl drain <节点名> --ignore-daemonsets --delete-emptydir-data –ignore-daemonsets:允许跳过DaemonSet管理的Pod –delete-emptydir-data:允许删除使用emptyDir卷的Pod 可以直接执行kubectl drain操作,省略cordon步骤。 drain会先cordon之后,再尝试优雅地终止该节点上地Pod(排空)。 ...

四月 14, 2024

K8s 启用 ipvs 模式

安装 ipvs 1# 安装 ipvs 相关软件包 2yum install ipvsadm ipset sysstat conntrack libseccomp 3 4# 载入模块 5modprobe -- ip_vs 6modprobe -- ip_vs_rr 7modprobe -- ip_vs_wrr 8modprobe -- ip_vs_sh 9modprobe -- nf_conntrack 10 11# 创建ipvs.conf,设置内核模块的自动载入。 12cat <<EOF > /etc/modules-load.d/ipvs.conf 13ip_vs 14ip_vs_lc 15ip_vs_wlc 16ip_vs_rr 17ip_vs_wrr 18ip_vs_lblc 19ip_vs_lblcr 20ip_vs_dh 21ip_vs_sh 22ip_vs_fo 23ip_vs_nq 24ip_vs_sed 25ip_vs_ftp 26ip_vs_sh 27nf_conntrack 28ip_tables 29ip_set 30xt_set 31ipt_set 32ipt_rpfilter 33ipt_REJECT 34ipip 35EOF 1systemctl enable --now systemd-modules-load.service 修改 kube-proxy configmap 1# 将 mode 改为 'ipvs' 2kubectl edit cm kube-proxy -n kube-system 重启 kube-proxy 1kubectl -n kube-system rollout restart daemonset kube-proxy 查看新 Kube-proxy pod 的日志 会出现 Using ipvs Proxier ...

四月 13, 2024

K8s 修改 NodePort 默认范围

K8S 集群中 NodePort 默认范围为 30000-32767。 若要修改此范围,依次修改 Master 节点上的 /etc/kubernetes/manifests/kube-apiserver.yaml 文件。 1# 备份配置文件 2cp kube-apiserver.yaml kube-apiserver.yaml.bak 3vi kube-apiserver.yaml 4..... 5 Host Port: <none> 6 Command: 7 kube-apiserver 8 - --service-cluster-ip-range=10.96.0.0/12 9# 插入 10 - --service-node-port-range=1-65535 然后, kube-apiserver 会自动重启生效。 ...

三月 21, 2024