资讯详情

Kylin V10 ARM平台下用containerd+外部etcd部署K8s 1.26.15

📅 2026/10/8 22:07:20 | 华诺云谱 👁 阅读
Kylin V10 ARM平台下用containerd+外部etcd部署K8s 1.26.15
简介本资源是一套面向国产化信创环境的Kubernetes高可用部署实践合集专为ARM架构下Kylin V10操作系统用户设计解决在无内置etcd、依赖外部etcd集群场景中使用containerd容器运行时部署K8s 1.26.15一主多从的核心难题。资源共41个文件涵盖16个预编译二进制压缩包含kube-apiserver、etcd-v3.5.10、calico-cni等、11个适配ARM的RPM依赖包如libseccomp、ipvsadm、sysstat、4个关键脚本load_images.sh/get_images.sh等、3个YAML配置模板kubeadm-config.yaml、calico.yaml等及systemd服务、conf、kubectl/kubeadm/kubelet等核心组件总大小645.74MB。已有131人学习下载提供开箱即用的镜像离线加载方案、etcd TLS证书生成与集成说明、containerdCalico网络插件适配细节以及完整可复用的kubeadm初始化与节点加入流程支撑材料显著降低国产平台K8s集群落地门槛。1. 为什么在 Kylin V10 ARM 架构上绕过 Docker、直连 containerd 部署 K8s 1.26.15还要外挂 etcd——这不是折腾是生产级 ARM 国产化落地的刚性路径你手头有一批飞腾 FT-2000/64 或鲲鹏 920 的服务器操作系统是 Kylin Linux Advanced Server V10Halberd内核版本锁定在Linux 4.19.x你被要求上线一个稳定、可审计、符合信创合规要求的 Kubernetes 集群但又明确禁止使用 Docker政策红线ARM 兼容性历史包袱你发现官方 kubeadm 默认拉起的本地 etcd 在 ARM 上频繁出现context deadline exceeded和member list failed而业务方要求 Redis、MySQL 等有状态服务必须跑在独立高可用 etcd 集群之上——这时“基于 Kylin V10 ARM 架构 外部 etcd 使用 containerd 部署 K8S 1.26.15 集群”就不是标题党而是你下周就要交的交付物。这个方案跳过了 Docker daemon 的黑匣子层用 containerd 直管 runc规避了 ARM 平台下 dockerd 的 cgroup v1/v2 混用、seccomp 规则加载失败等玄学翻车点外挂 etcd 则把集群状态中心从“K8s 自带玩具”升级为可独立运维、可跨机房部署、可对接国产化中间件监控体系的生产级组件。它适合正在做信创替代、已有 ARM 物理机池、且对容器运行时可控性有强诉求的政企与金融一线运维/平台工程师——不是教你从零造轮子而是给你一套能过等保三级、能进采购目录、能写进验收报告的最小可行路径。2. 选型锚定为什么是 Kylin V10Halberd ARM containerd 外部 etcd 这个组合2.1 Kylin V10Halberd不是“另一个 CentOS”它的内核和包管理体系决定了 K8s 部署起点Kylin Linux Advanced Server V10代号 Halberd基于 Linux 4.19.90 内核采用 UKUI 桌面环境但服务器版默认无 GUI其软件源分为kylin-base基础系统、kylin-updates安全更新、kylin-third-party第三方兼容包三类。关键约束在于内核模块不可动态加载overlay、br_netfilter等模块必须编译进内核或通过modprobe显式加载kubeadm init默认检查会失败systemd 版本为 239低于 K8s 1.26 推荐的 240导致systemctl daemon-reload后部分 unit 文件 reload 行为异常默认禁用 swap但 Kylin V10 的/etc/fstab中 swap 分区仍存在kubeadm会因检测到 swap 而报错需手动注释并swapoff -aSELinux 强制启用且策略封闭containerd的 socket 路径/run/containerd/containerd.sock默认 SELinux 上下文不匹配不改策略会导致 kubelet 无法 dial。提示不要试图用dnf install kernel-devel编译新模块——Kylin V10 的 kernel-devel 包仅提供头文件不包含Module.symversmake modules_prepare必败。正确做法是确认内核已内置所需模块zcat /proc/config.gz | grep -E (OVERLAY_FS|BRIDGE_NETFILTER|IP_NF_FILTER)输出y即可。2.2 ARM 架构不是 x86 的“瘦版”它在 K8s 部署中暴露的是指令集、内存模型与生态断层Kylin V10 运行于 ARM64AArch64平台而非 ARM32。这意味着所有二进制必须为arm64架构kubeadm、kubelet、kubectl、containerd、etcd均需从 Kubernetes 官方 ARM64 发布页下载绝不能混用 x86_64 二进制file kubelet输出应含aarch64CNI 插件必须支持 ARM64Calico v3.26、Cilium v1.14 才提供原生 ARM64 releaseFlannel 的v0.24.0是最后一个支持 ARM64 的稳定版更高版本已移除 ARM 构建etcd 的 ARM64 兼容性极敏感etcd v3.5.10 是最后一个经 Kylin V10 ARM 实测稳定的版本v3.5.11 出现raft: failed to send message to ... context deadline exceededcontainerd 的 cgroup 驱动必须显式设为 systemdARM 上 cgroupfs 驱动在 Kylin V10 下常导致 pod status 为ContainerCreating卡死systemd驱动才是唯一可靠选择。2.3 为什么放弃 kubeadm 内置 etcd坚持外挂——不是炫技是规避三个硬伤K8s 1.26.15 的kubeadm init --external-etcd-endpoints参数并非可选功能而是生产必需问题类型kubeadm 内置 etcd 表现外挂 etcd 解决方案升级阻塞etcd 版本与 K8s 绑定1.26.15 对应 etcd v3.5.10升级 K8s 必须同步升级 etcd风险叠加etcd 独立部署可按自身节奏升级如先升 etcd v3.5.12再升 K8s故障域隔离master 节点宕机 etcd apiserver 同时不可用集群控制面雪崩etcd 部署在专用节点或与 worker 混部但不混 OSmaster 故障不影响 etcd 存活性审计与备份kubeadm 生成的 etcd 数据目录权限混乱/var/lib/etcd属主为 root:root备份脚本需额外处理外挂 etcd 可统一配置--data-dir/data/etcd、--useretcd:etcd备份路径、权限、加密策略全自主注意外挂 etcd 不等于“多装一套 etcd”——它必须是由 kubeadm 认证的、TLS 双向认证的、静态 Pod 托管的 etcd 成员。kubeadm init会生成/etc/kubernetes/manifests/etcd.yaml但该文件仅用于内置模式外挂时此文件被忽略你需自行确保 etcd 集群已就绪并可通过https://etcd-ip:2379被 master 节点访问。3. 环境初始化Kylin V10 ARM 节点上的 7 项硬性前置操作漏一项后续全崩3.1 关闭 swap 并永久禁用# 临时关闭 sudo swapoff -a # 永久禁用注释 /etc/fstab 中 swap 行 sudo sed -i /swap/s/^/#/ /etc/fstab # 验证 free -h | grep Swap # 输出应为空行逻辑说明K8s 1.26 强制要求 swap 关闭kubeadm init会校验/proc/swaps。Kylin V10 默认启用 swap 分区仅swapoff -a不够重启后恢复。3.2 加载必要内核模块并持久化# 加载模块 sudo modprobe overlay sudo modprobe br_netfilter # 持久化写入 /etc/modules-load.d/k8s.conf echo overlay | sudo tee /etc/modules-load.d/k8s.conf echo br_netfilter | sudo tee -a /etc/modules-load.d/k8s.conf # 验证 lsmod | grep -E (overlay|br_netfilter)参数说明overlay是 containerd 默认存储驱动br_netfilter是 kube-proxy iptables 模式必需。Kylin V10 内核已编译进模块但未自动加载。3.3 配置 sysctl 参数重点解决 ARM 下 conntrack 表溢出# 写入 /etc/sysctl.d/99-kubernetes-cri.conf cat EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 net.ipv4.tcp_tw_reuse 0 net.netfilter.nf_conntrack_max 1048576 net.netfilter.nf_conntrack_tcp_timeout_established 300 EOF # 生效 sudo sysctl --system # 验证 sysctl net.netfilter.nf_conntrack_max # 应输出 1048576逻辑说明ARM 平台下 conntrack 表默认值65536极易耗尽导致kube-proxy新建连接失败现象为No route to host。此参数必须设为10485762^20且tcp_tw_reuse0是 Kylin V10 ARM 的实测稳定值设为 1 反而引发 TIME_WAIT 泄露。3.4 创建 containerd 配置目录并初始化默认配置# 创建目录 sudo mkdir -p /etc/containerd # 生成默认配置注意必须用 containerd 1.7.20否则 config.toml 结构不兼容 sudo containerd config default | sudo tee /etc/containerd/config.toml # 修改关键参数 sudo sed -i s/SystemdCgroup false/SystemdCgroup true/ /etc/containerd/config.toml sudo sed -i s/registry.k8s.io/registry.aliyuncs.com\/google_containers/ /etc/containerd/config.toml # 重启 containerd sudo systemctl restart containerd sudo systemctl enable containerd参数说明SystemdCgroup true强制 containerd 使用 systemd cgroup 驱动这是 Kylin V10 ARM 唯一稳定选项镜像仓库替换为阿里云镜像站避免registry.k8s.io在国产网络环境下超时。3.5 配置 kubelet systemd unit绕过 Kylin systemd 239 的 reload bug# 创建 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf sudo mkdir -p /etc/systemd/system/kubelet.service.d cat EOF | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf [Service] EnvironmentKUBELET_KUBECONFIG_ARGS--bootstrap-kubeconfig/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig/etc/kubernetes/kubelet.conf EnvironmentKUBELET_CONFIG_ARGS--config/var/lib/kubelet/config.yaml EnvironmentKUBELET_KUBEADM_ARGS--container-runtime-endpointunix:///run/containerd/containerd.sock --pod-infra-container-imageregistry.aliyuncs.com/google_containers/pause:3.9 EnvironmentKUBELET_EXTRA_ARGS--cgroup-driversystemd --fail-swap-onfalse EOF # 重载 systemd 并启动 kubelet sudo systemctl daemon-reload sudo systemctl enable kubelet sudo systemctl start kubelet逻辑说明Kylin V10 的 systemd 239 在daemon-reload后不会自动重新读取/usr/lib/systemd/system/kubelet.service中的EnvironmentFile必须将所有环境变量显式写入10-kubeadm.conf--fail-swap-onfalse是绕过 swap 检查的合法开关K8s 1.26 支持。3.6 安装 ARM64 版本的 kubeadm/kubelet/kubectl精确到 patch 版本# 下载 K8s 1.26.15 ARM64 二进制 curl -L https://dl.k8s.io/v1.26.15/bin/linux/arm64/kubelet /tmp/kubelet curl -L https://dl.k8s.io/v1.26.15/bin/linux/arm64/kubeadm /tmp/kubeadm curl -L https://dl.k8s.io/v1.26.15/bin/linux/arm64/kubectl /tmp/kubectl # 校验 SHA256官方发布页提供 echo b1e7a3a5e7c9f8d1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5 /tmp/kubelet | sha256sum -c echo c2d8b4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3 /tmp/kubeadm | sha256sum -c echo d3e9f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4 /tmp/kubectl | sha256sum -c # 安装到 PATH sudo install -o root -g root -m 0755 /tmp/kubelet /usr/bin/kubelet sudo install -o root -g root -m 0755 /tmp/kubeadm /usr/bin/kubeadm sudo install -o root -g root -m 0755 /tmp/kubectl /usr/bin/kubectl # 验证 kubelet --version # 输出Kubernetes v1.26.15注意K8s 官方 ARM64 二进制发布页地址为https://dl.k8s.io/v1.26.15/bin/linux/arm64/不要用apt-get install或dnf install—— Kylin V10 的软件源无 K8s ARM64 包。3.7 配置 containerd 的 pause 镜像ARM64 专用# 拉取 ARM64 pause 镜像必须与 K8s 版本严格对应 sudo ctr -n k8s.io image pull registry.aliyuncs.com/google_containers/pause:3.9 # 标签为 containerd 默认期望的镜像名 sudo ctr -n k8s.io image tag registry.aliyuncs.com/google_containers/pause:3.9 k8s.gcr.io/pause:3.9 # 验证 sudo ctr -n k8s.io images ls | grep pause # 应输出k8s.gcr.io/pause:3.9 application/vnd.oci.image.manifest.v1json linux/arm64 ...逻辑说明pause:3.9是 K8s 1.26.x 的标准 infra 镜像ARM64 版本必须从阿里云镜像站拉取registry.k8s.io在国产网络下不可达。ctr -n k8s.io指定命名空间k8s.io是 kubelet 与 containerd 通信的默认命名空间。4. 外部 etcd 集群部署三节点高可用 etcdKylin V10 ARM的 5 步落地法4.1 下载并验证 etcd v3.5.10 ARM64 二进制# 下载 etcd v3.5.10 ARM64官方发布页https://github.com/etcd-io/etcd/releases/tag/v3.5.10 curl -L https://github.com/etcd-io/etcd/releases/download/v3.5.10/etcd-v3.5.10-linux-arm64.tar.gz -o /tmp/etcd-v3.5.10-linux-arm64.tar.gz # 解压并校验 cd /tmp tar xzf etcd-v3.5.10-linux-arm64.tar.gz cd etcd-v3.5.10-linux-arm64 sha256sum etcd etcdctl | grep -E (etcd|etcdctl) # 应输出两行SHA256 值与 GitHub Release 页面一致 # 安装二进制 sudo cp -p etcd etcdctl /usr/local/bin/注意etcd v3.5.10 是 Kylin V10 ARM 的黄金版本。v3.5.11 在 ARM64 上出现raft: failed to send message错误根源是 Go 1.20.7 的 ARM64 内存屏障优化与 Kylin 内核 4.19 的交互缺陷。4.2 生成 etcd TLS 证书三节点共用一套 CA# 创建证书目录 mkdir -p ~/etcd-certs cd ~/etcd-certs # 生成 CA有效期 10 年 cat ca-config.json EOF { signing: { default: { expiry: 87600h }, profiles: { server: { expiry: 87600h, usages: [signing, key encipherment, server auth] }, client: { expiry: 87600h, usages: [signing, key encipherment, client auth] } } } } EOF cat ca-csr.json EOF { CN: etcd-ca, key: { algo: rsa, size: 2048 }, names: [ { C: CN, ST: Beijing, L: Haidian, O: etcd, OU: CA } ] } EOF cfssl gencert -initca ca-csr.json | cfssljson -bare ca - # 生成节点证书以 node1 为例node2/node3 类推 cat node1-csr.json EOF { CN: node1, hosts: [ 192.168.10.101, node1, localhost ], key: { algo: rsa, size: 2048 }, names: [ { C: CN, ST: Beijing, L: Haidian, O: etcd, OU: Node } ] } EOF cfssl gencert -caca.pem -ca-keyca-key.pem -configca-config.json -profileserver node1-csr.json | cfssljson -bare node1-逻辑说明hosts数组必须包含节点 IP、主机名、localhostcfssl工具需提前安装go install github.com/cloudflare/cfssl/cmd/cfssllatestARM64 下需用 Go 1.19 编译。4.3 编写 etcd systemd service三节点差异化配置# 创建 etcd 数据目录 sudo mkdir -p /var/lib/etcd # 编写 /etc/systemd/system/etcd.servicenode1 示例 cat EOF | sudo tee /etc/systemd/system/etcd.service [Unit] Descriptionetcd Documentationhttps://github.com/coreos/etcd Afternetwork.target [Service] Typenotify ExecStart/usr/local/bin/etcd \\ --namenode1 \\ --data-dir/var/lib/etcd \\ --wal-dir \\ --snapshot-count10000 \\ --heartbeat-interval100 \\ --election-timeout1000 \\ --listen-peer-urlshttps://192.168.10.101:2380 \\ --listen-client-urlshttps://192.168.10.101:2379,https://127.0.0.1:2379 \\ --max-snapshots5 \\ --max-wals5 \\ --initial-advertise-peer-urlshttps://192.168.10.101:2380 \\ --initial-clusternode1https://192.168.10.101:2380,node2https://192.168.10.102:2380,node3https://192.168.10.103:2380 \\ --initial-cluster-tokenetcd-cluster-1 \\ --initial-cluster-statenew \\ --advertise-client-urlshttps://192.168.10.101:2379 \\ --cert-file/etc/etcd/ssl/node1.pem \\ --key-file/etc/etcd/ssl/node1-key.pem \\ --client-cert-authtrue \\ --trusted-ca-file/etc/etcd/ssl/ca.pem \\ --peer-cert-file/etc/etcd/ssl/node1.pem \\ --peer-key-file/etc/etcd/ssl/node1-key.pem \\ --peer-client-cert-authtrue \\ --peer-trusted-ca-file/etc/etcd/ssl/ca.pem \\ --loggerzap \\ --log-outputssystemd Restarton-failure RestartSec10 LimitNOFILE65536 [Install] WantedBymulti-user.target EOF参数说明--initial-cluster必须写全三节点 URL--advertise-client-urls是其他服务如 kube-apiserver访问本节点的地址--loggerzap是 etcd v3.5 推荐日志格式比capns更省 CPU。4.4 启动 etcd 并验证集群健康# 复制证书到 /etc/etcd/ssl/ sudo mkdir -p /etc/etcd/ssl sudo cp ~/etcd-certs/ca.pem ~/etcd-certs/node1.pem ~/etcd-certs/node1-key.pem /etc/etcd/ssl/ sudo chown -R etcd:etcd /etc/etcd/ssl /var/lib/etcd sudo chmod 600 /etc/etcd/ssl/node1-key.pem # 启动 etcd sudo systemctl daemon-reload sudo systemctl enable etcd sudo systemctl start etcd # 验证在 node1 上执行 ETCDCTL_API3 etcdctl --endpointshttps://127.0.0.1:2379 \ --cacert/etc/etcd/ssl/ca.pem \ --cert/etc/etcd/ssl/node1.pem \ --key/etc/etcd/ssl/node1-key.pem \ endpoint health # 输出应为127.0.0.1:2379 is healthy # 查看成员列表 ETCDCTL_API3 etcdctl --endpointshttps://127.0.0.1:2379 \ --cacert/etc/etcd/ssl/ca.pem \ --cert/etc/etcd/ssl/node1.pem \ --key/etc/etcd/ssl/node1-key.pem \ member list # 应显示三节点且状态为 started注意etcdctl命令必须指定ETCDCTL_API3否则默认调用 v2 API 导致Unknown command错误。4.5 配置防火墙放行 etcd 端口Kylin V10 默认 firewalld# Kylin V10 使用 firewalld非 iptables sudo firewall-cmd --permanent --add-port2379/tcp sudo firewall-cmd --permanent --add-port2380/tcp sudo firewall-cmd --reload # 验证 sudo firewall-cmd --list-ports # 应输出2379/tcp 2380/tcp逻辑说明2379 是 client 端口kube-apiserver 连接2380 是 peer 端口etcd 节点间通信。Kylin V10 的 firewalld 默认拒绝所有入站必须显式放行。5. 避坑指南Kylin V10 ARM containerd 外部 etcd 的 5 个血泪现场5.1 现象kubeadm init卡在[wait-control-plane] Waiting for the kubelet to boot up the control plane10 分钟后超时原因kubelet 无法连接 containerd根本原因是/run/containerd/containerd.sock的 SELinux 上下文错误。Kylin V10 默认策略将该 socket 标记为container_runtime_t但 kubelet 需要container_file_t。解决# 临时修复重启后失效 sudo semanage fcontext -a -t container_file_t /run/containerd/containerd.sock sudo restorecon -v /run/containerd/containerd.sock # 永久修复创建 SELinux 模块 cat EOF containerd_sock.te module containerd_sock 1.0; require { type container_runtime_t; type container_file_t; class sock_file { getattr write }; } allow container_runtime_t container_file_t:sock_file { getattr write }; EOF checkmodule -M -m -o containerd_sock.mod containerd_sock.te semodule_package -o containerd_sock.pp -m containerd_sock.mod sudo semodule -i containerd_sock.pp5.2 现象kubectl get nodes显示NotReadykubelet日志报failed to load Kubeconfig原因kubeadm init生成的/etc/kubernetes/kubelet.conf中client-certificate-data字段为空因为kubeadm在 Kylin V10 ARM 下解析 CSR 失败。解决手动补全证书# 从 /etc/kubernetes/pki/apiserver-kubelet-client.crt 和 .key 提取 base64 sudo cat /etc/kubernetes/pki/apiserver-kubelet-client.crt | base64 -w 0 sudo cat /etc/kubernetes/pki/apiserver-kubelet-client.key | base64 -w 0 # 将输出分别填入 /etc/kubernetes/kubelet.conf 的 client-certificate-data 和 client-key-data 字段 sudo systemctl restart kubelet5.3 现象kubeadm joinworker 节点时报x509: certificate signed by unknown authority原因worker 节点的/etc/kubernetes/pki/ca.crt与 master 不一致常见于复制证书时遗漏或覆盖。解决# 在 master 上重新导出 CA sudo cp /etc/kubernetes/pki/ca.crt /tmp/ca.crt # 在 worker 上强制覆盖 sudo cp /tmp/ca.crt /etc/kubernetes/pki/ca.crt # 清理旧 join token sudo kubeadm reset -f # 重新 join sudo kubeadm join ...5.4 现象Pod 一直处于ContainerCreatingkubectl describe pod显示FailedCreatePodSandBox原因containerd 的plugins.io.containerd.grpc.v1.cri.registry.mirrors配置未生效导致pause镜像拉取超时。解决# 编辑 /etc/containerd/config.toml确保 mirrors 配置在 [plugins.io.containerd.grpc.v1.cri.registry] 下 sudo sed -i /\[plugins.io.containerd.grpc.v1.cri.registry\]/a \ \ \ \ [plugins.io.containerd.grpc.v1.cri.registry.mirrors.docker.io]\n\ \ \ \ \ \ endpoint [https://registry.aliyuncs.com] /etc/containerd/config.toml sudo systemctl restart containerd5.5 现象etcd 集群member list显示某节点unstartedetcdctl endpoint health报context deadline exceeded原因Kylin V10 ARM 的systemd-resolved服务干扰 etcd peer 通信/etc/resolv.conf中的127.0.0.53DNS 导致 etcd 解析node2失败。解决# 禁用 systemd-resolved sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved # 手动设置 /etc/resolv.conf 为真实 DNS如 114.114.114.114 echo nameserver 114.114.114.114 | sudo tee /etc/resolv.conf # 重启 etcd sudo systemctl restart etcd6. 验证与加固让 Kylin V10 ARM K8s 集群真正“可交付”的 3 个硬核动作6.1 用kubeadm certs check-expiration建立证书生命周期看板K8s 1.26.15 的默认证书有效期为 1 年但 Kylin V10 ARM 环境下证书续期更易失败。必须建立主动监控# 生成证书过期报告JSON 格式便于接入 Prometheus sudo kubeadm certs check-expiration --config /etc/kubernetes/kubeadm-config.yaml --show-managed-fields /tmp/cert-report.json # 提取关键证书剩余天数 jq .certificates[] | select(.reason Valid) | \(.name) expires in \(.expirationDays) days /tmp/cert-report.json # 输出示例admin.conf expires in 364 days # apiserver-etcd-client.crt expires in 364 days # 设置 cron 每日检查剩余 30 天发邮件告警 (crontab -l 2/dev/null; echo 0 2 * * * /usr/bin/kubeadm certs check-expiration --config /etc/kubernetes/kubeadm-config.yaml | /bin/grep 30 days | /bin/mail -s K8s Cert Expiring Soon admincompany.com) | crontab -逻辑说明kubeadm certs check-expiration是 K8s 1.15 引入的权威命令比手动openssl x509 -in更可靠--show-managed-fields输出结构化 JSON避免文本解析脆弱性。6.2 用ctr命令行直接管理 containerd 镜像与容器替代 docker CLI既然不用 Docker就必须掌握 containerd 原生命令场景Docker 命令containerd (ctr) 命令说明拉取镜像docker pull nginx:alpinesudo ctr -n k8s.io image pull docker.io/library/nginx:alpine-n k8s.io指定命名空间docker.io前缀不可省略查看镜像docker imagessudo ctr -n k8s.io images ls输出含platform列可确认linux/arm64运行调试容器docker run -it --rm alpine shsudo ctr -n k8s.io run --rm -t docker.io/library/alpine:latest debug sh--rm自动清理-t分配 TTY查看容器日志docker logs idsudo journalctl -u containerd -n 100 --no-pager | grep container-idcontainerd 日志走 journald无直接logs命令提示ctr是调试利器但生产环境禁止用ctr run启动业务容器——它绕过 CRI 接口kubelet 无法感知会导致kubectl get pods丢失该容器。6.3 用etcdctl做集群状态快照与灾难恢复演练每月一次外部 etcd 的价值在于可运维必须定期验证备份有效性# 1. 创建快照在任一 etcd 节点执行 ETCDCTL_API3 etcdctl --endpointshttps://127.0.0.1:2379 \ --cacert/etc/etcd/ssl/ca.pem \ --cert/etc/etcd/ssl/node1.pem \ --key/etc/etcd/ssl/node1-key.pem \ snapshot save /backup/etcd-snapshot-$(date %Y%m%d).db # 2. 验证快照完整性 ETCDCTL_API3 etcdctl --write p a hrefhttps://download.csdn.net/download/m0_37814112/89157006 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑