ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Kubernetes 1.27集群初始化与配置指南

2026/8/7 11:35:40 拓冰建站 浏览量
Kubernetes 1.27集群初始化与配置指南

1. Kubernetes 1.27集群初始化指南概述

Kubernetes作为当前容器编排领域的事实标准,其集群初始化是每个运维人员和开发者的必修课。1.27版本带来了多项改进,包括更高效的kubelet资源管理、增强的调度器性能以及更稳定的API服务。对于刚接触Kubernetes的新手来说,集群初始化往往是第一个需要跨越的门槛;而对于有经验的用户,每次版本更新都可能意味着初始化流程的细微变化需要重新适应。

在实际工作中,我发现很多人在初始化集群时容易陷入几个典型误区:要么过于依赖自动化工具而忽略底层原理,要么死记硬背命令而不理解参数含义,还有人在遇到网络问题时束手无策。本文将基于1.27版本特性,带你从零开始构建生产可用的Kubernetes集群,同时解释每个步骤背后的设计考量。

2. 环境准备与系统配置

2.1 硬件资源规划

对于生产环境,建议至少准备:

  • 控制平面节点:4核CPU/8GB内存/100GB存储(SSD优先)
  • 工作节点:根据工作负载调整,建议8核CPU/16GB内存起
  • 网络:节点间延迟<1ms,带宽≥1Gbps

测试环境可使用更低配置,但要注意:

  • 单节点集群至少需要2核CPU/4GB内存
  • 使用SSD可显著提升etcd性能
  • 交换分区必须禁用(sudo swapoff -a并永久注释/etc/fstab中的swap行)

重要提示:所有节点的时间必须同步(NTP服务),时区设置一致,否则会导致证书验证失败等诡异问题。

2.2 操作系统要求

推荐使用以下经过验证的Linux发行版:

  • Ubuntu 20.04/22.04 LTS
  • CentOS 7/8 Stream
  • RHEL 8/9

内核版本要求≥5.4,需开启以下内核模块:

lsmod | grep -e overlay -e br_netfilter

若未加载,需执行:

sudo modprobe overlay sudo modprobe br_netfilter

2.3 网络预配置

确保满足以下条件:

  1. 各节点hostname解析正确(/etc/hosts或DNS)
  2. 防火墙放行必要端口:
    • 控制平面:6443, 2379-2380, 10250, 10259, 10257
    • 工作节点:10250, 30000-32767
  3. 启用IP转发和桥接流量:
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system

3. 容器运行时安装与配置

3.1 containerd安装

  1. 安装依赖:
sudo apt-get update && sudo apt-get install -y \ containerd runc
  1. 生成默认配置并启用systemd cgroup:
sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
  1. 重启服务:
sudo systemctl restart containerd sudo systemctl enable containerd

3.2 CRI-O方案(替代选项)

如需使用CRI-O:

# Ubuntu示例 OS=xUbuntu_22.04 VERSION=1.27 echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo apt-key add - sudo apt-get update && sudo apt-get install -y cri-o cri-o-runc

4. Kubernetes组件安装

4.1 软件源配置

sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.27/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.27/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

4.2 组件安装

指定版本安装(避免自动升级导致意外):

sudo apt-get update && sudo apt-get install -y \ kubelet=1.27.4-1.1 \ kubeadm=1.27.4-1.1 \ kubectl=1.27.4-1.1 sudo apt-mark hold kubelet kubeadm kubectl

5. 控制平面初始化

5.1 初始化命令解析

典型初始化命令:

sudo kubeadm init \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=192.168.1.100 \ --control-plane-endpoint=cluster.example.com:6443 \ --upload-certs

关键参数说明:

  • --pod-network-cidr:必须与后续安装的CNI插件匹配
  • --apiserver-advertise-address:指定API服务器监听地址
  • --control-plane-endpoint:高可用集群的负载均衡器地址
  • --upload-certs:自动分发证书到其他控制平面节点

5.2 初始化后操作

  1. 配置kubectl:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. 保存join命令:
kubeadm token create --print-join-command > join-command.sh
  1. 检查组件状态:
kubectl get pods -n kube-system

6. 网络插件安装

6.1 Flannel部署

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

验证安装:

kubectl get pods -n kube-system -l app=flannel

6.2 Calico方案(替代选项)

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml

7. 工作节点加入集群

7.1 标准加入流程

在工作节点执行之前保存的join命令:

sudo $(cat join-command.sh)

7.2 节点状态检查

在控制平面执行:

kubectl get nodes

正常状态应为Ready:

NAME STATUS ROLES AGE VERSION master01 Ready control-plane 10m v1.27.4 worker01 Ready <none> 2m v1.27.4

8. 常见问题排查

8.1 初始化卡住问题

现象:kubeadm init长时间无响应 排查步骤:

  1. 检查容器运行时日志:
journalctl -u containerd -f
  1. 查看kubelet状态:
systemctl status kubelet
  1. 常见原因:
    • 镜像拉取失败(配置国内镜像源)
    • 端口冲突(检查6443等端口占用)
    • 证书问题(删除/etc/kubernetes/重新初始化)

8.2 网络连通性问题

现象:Pod间无法通信或无法访问服务 排查工具:

# 检查网络策略 kubectl get networkpolicy -A # 测试DNS解析 kubectl run -it --rm --image=busybox:1.28 test-dns -- nslookup kubernetes.default

8.3 证书过期处理

查看证书有效期:

kubeadm certs check-expiration

更新证书:

kubeadm certs renew all systemctl restart kubelet

9. 生产环境增强配置

9.1 审计日志启用

修改/etc/kubernetes/manifests/kube-apiserver.yaml:

spec: containers: - command: - kube-apiserver - --audit-policy-file=/etc/kubernetes/audit-policy.yaml - --audit-log-path=/var/log/kubernetes/audit/audit.log - --audit-log-maxage=30 - --audit-log-maxbackup=10 - --audit-log-maxsize=100

9.2 资源限制配置

kubelet配置示例(/var/lib/kubelet/config.yaml):

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration evictionHard: memory.available: "500Mi" nodefs.available: "10%" nodefs.inodesFree: "5%" imagefs.available: "15%"

10. 集群验证与测试

10.1 基本功能测试

部署测试应用:

kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort

验证服务访问:

curl http://$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[0].address}'):$(kubectl get svc nginx -o jsonpath='{.spec.ports[0].nodePort}')

10.2 性能基准测试

使用kube-bench进行CIS基准测试:

docker run --rm --pid=host -v /etc:/etc:ro -v /var:/var:ro -t aquasec/kube-bench:latest run

11. 版本升级策略

11.1 控制平面升级

  1. 先升级kubeadm:
sudo apt-get update && sudo apt-get install -y kubeadm=1.27.5-1.1
  1. 执行升级计划:
sudo kubeadm upgrade plan sudo kubeadm upgrade apply v1.27.5
  1. 升级节点组件:
sudo apt-get update && sudo apt-get install -y kubelet=1.27.5-1.1 kubectl=1.27.5-1.1 sudo systemctl daemon-reload sudo systemctl restart kubelet

11.2 工作节点升级

  1. 排空节点:
kubectl drain <node-name> --ignore-daemonsets
  1. 升级组件后取消排空:
kubectl uncordon <node-name>

12. 备份与恢复方案

12.1 etcd数据备份

ETCDCTL_API=3 etcdctl \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key \ snapshot save snapshot.db

12.2 关键配置备份

# 备份证书和配置文件 sudo tar czvf k8s-backup-$(date +%Y%m%d).tar.gz \ /etc/kubernetes/pki \ /etc/kubernetes/*.conf \ /var/lib/kubelet/config.yaml

13. 安全加固建议

13.1 RBAC最小权限

创建服务账户示例:

apiVersion: v1 kind: ServiceAccount metadata: name: limited-user --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-pods subjects: - kind: ServiceAccount name: limited-user roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io

13.2 Pod安全策略

使用PodSecurity Admission:

apiVersion: v1 kind: Namespace metadata: name: restricted labels: pod-security.kubernetes.io/enforce: restricted pod-security.kubernetes.io/warn: restricted

14. 监控与日志方案

14.1 基础监控部署

使用kube-prometheus-stack:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \ --namespace monitoring \ --create-namespace

14.2 日志收集方案

EFK栈部署示例:

helm install elasticsearch elastic/elasticsearch --namespace logging helm install fluent-bit fluent/fluent-bit --namespace logging helm install kibana elastic/kibana --namespace logging

15. 存储方案集成

15.1 Local PV配置

创建存储类:

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer

15.2 NFS动态供应

使用nfs-subdir-external-provisioner:

helm install nfs-subdir-external-provisioner \ nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server=192.168.1.200 \ --set nfs.path=/data/nfs

16. 高可用架构设计

16.1 控制平面高可用

使用kube-vip实现负载均衡:

kube-vip manifest pod \ --interface eth0 \ --vip 192.168.1.150 \ --controlplane \ --bgp \ --localAS 65000 \ --peerAS 65000 \ --peerAddress 192.168.1.1 \ --peerPass myBGPpass | kubectl apply -f -

16.2 工作节点自动扩展

集群自动扩缩容配置:

apiVersion: "autoscaling.k8s.io/v1" kind: ClusterAutoscaler metadata: name: cluster-autoscaler spec: scaleDownDelayAfterAdd: 10m scaleDownUnneededTime: 5m resourceLimits: maxNodesTotal: 20 cloudProvider: aws

17. 性能调优技巧

17.1 kubelet参数优化

调整/var/lib/kubelet/config.yaml:

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration maxPods: 150 kubeAPIQPS: 50 kubeAPIBurst: 100 serializeImagePulls: false

17.2 调度器配置

自定义调度器profile:

apiVersion: kubescheduler.config.k8s.io/v1beta3 kind: KubeSchedulerConfiguration profiles: - schedulerName: default-scheduler plugins: preScore: enabled: - name: NodeResourcesFit - name: InterPodAffinity

18. 多集群管理方案

18.1 kubefed部署

安装Kubefed控制平面:

helm install kubefed kubefed-charts/kubefed \ --namespace kube-federation-system \ --create-namespace \ --set global.scope=Cluster

18.2 集群注册

加入成员集群:

kubefedctl join cluster1 \ --cluster-context cluster1 \ --host-cluster-context federation-host \ --v=2

19. 服务网格集成

19.1 Istio安装

使用istioctl安装:

istioctl install --set profile=demo -y kubectl label namespace default istio-injection=enabled

19.2 Linkerd方案

替代安装方案:

curl -sL https://run.linkerd.io/install | sh linkerd install | kubectl apply -f - linkerd check

20. 持续交付流水线

20.1 Argo CD部署

kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

20.2 Tekton方案

替代CI/CD方案:

kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml

21. 故障演练方案

21.1 Chaos Mesh安装

helm install chaos-mesh chaos-mesh/chaos-mesh --namespace=chaos-testing --create-namespace --set chaosDaemon.runtime=containerd --set chaosDaemon.socketPath=/run/containerd/containerd.sock

21.2 网络故障注入

模拟网络延迟:

apiVersion: chaos-mesh.org/v1alpha1 kind: NetworkChaos metadata: name: network-delay spec: action: delay mode: one selector: namespaces: - default labelSelectors: "app": "nginx" delay: latency: "100ms" correlation: "100" jitter: "10ms"

22. 自定义扩展开发

22.1 准入控制器开发

示例Webhook配置:

apiVersion: admissionregistration.k8s.io/v1 kind: MutatingWebhookConfiguration metadata: name: example-webhook webhooks: - name: example-webhook.example.com rules: - operations: ["CREATE"] apiGroups: [""] apiVersions: ["v1"] resources: ["pods"] clientConfig: service: name: webhook-service namespace: default path: "/mutate" admissionReviewVersions: ["v1"] sideEffects: None

22.2 自定义资源定义

CRD示例:

apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: myresources.example.com spec: group: example.com versions: - name: v1 served: true storage: true schema: openAPIV3Schema: type: object properties: spec: type: object properties: size: type: integer image: type: string scope: Namespaced names: plural: myresources singular: myresource kind: MyResource

23. 混合云部署策略

23.1 跨云集群连接

使用Submariner实现:

subctl deploy-broker --kubeconfig cluster1-config subctl join --kubeconfig cluster2-config broker-info.subm --clusterid cluster2

23.2 应用分发策略

使用Karmada:

karmadactl init --karmada-context karmada-host --cluster-context cluster1 karmadactl join cluster2 --cluster-context cluster2

24. 边缘计算场景

24.1 KubeEdge部署

云端组件:

keadm init --kubeedge-version=1.12.0 --advertise-address=192.168.1.100

边缘节点:

keadm join --cloudcore-ipport=192.168.1.100:10000 --token=xxxx

24.2 OpenYurt方案

替代边缘方案:

yurtctl convert --provider kubeadm --cloud-nodes node1

25. 成本优化实践

25.1 资源请求优化

使用Vertical Pod Autoscaler:

helm install vpa recommender \ --repo https://charts.fairwinds.com/stable \ --namespace vpa-system \ --create-namespace

25.2 闲置资源回收

使用Descheduler:

helm install descheduler descheduler \ --repo https://kubernetes-sigs.github.io/descheduler/ \ --namespace kube-system \ --set cmdOptions.v=3

26. 安全扫描方案

26.1 Trivy部署

扫描集群漏洞:

trivy k8s --report summary cluster

26.2 Kube-bench使用

CIS基准测试:

docker run --rm --pid=host -v /etc:/etc:ro -v /var:/var:ro -t aquasec/kube-bench:latest run --targets=master,node

27. 备份与迁移工具

27.1 Velero配置

安装与备份:

velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:v1.5.0 \ --bucket my-backup-bucket \ --backup-location-config region=us-west-2 \ --snapshot-location-config region=us-west-2 velero backup create daily-backup --include-namespaces=production

27.2 Kasten K10

企业级方案:

helm install k10 kasten/k10 --namespace=kasten-io --create-namespace

28. 网络策略实战

28.1 默认拒绝策略

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-all spec: podSelector: {} policyTypes: - Ingress - Egress

28.2 应用间隔离

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: frontend-allow-backend spec: podSelector: matchLabels: app: frontend ingress: - from: - podSelector: matchLabels: app: backend ports: - protocol: TCP port: 8080

29. 自定义调度策略

29.1 节点亲和性示例

apiVersion: apps/v1 kind: Deployment metadata: name: gpu-app spec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: accelerator operator: In values: - nvidia-tesla-v100

29.2 自定义调度器

开发示例:

func prioritizeNodes(pod *v1.Pod, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) { var priorityList schedulerapi.HostPriorityList for _, node := range nodes { priorityList = append(priorityList, schedulerapi.HostPriority{ Host: node.Name, Score: calculateScore(pod, node), }) } return priorityList, nil }

30. 集群运维自动化

30.1 使用Cluster API

创建管理集群:

clusterctl init --infrastructure=aws clusterctl generate cluster my-cluster --flavor=dev --kubernetes-version=v1.27.4 | kubectl apply -f -

30.2 GitOps实践

Argo CD应用示例:

apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: production-apps spec: destination: server: https://kubernetes.default.svc namespace: production source: repoURL: https://github.com/myorg/cluster-manifests.git path: production targetRevision: HEAD syncPolicy: automated: prune: true selfHeal: true

31. 内核参数调优

31.1 关键参数配置

/etc/sysctl.d/99-k8s.conf示例:

# 提升连接跟踪表大小 net.netfilter.nf_conntrack_max=1048576 net.netfilter.nf_conntrack_tcp_timeout_established=86400 # 优化网络性能 net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.tcp_rmem=4096 87380 16777216 net.ipv4.tcp_wmem=4096 65536 16777216

31.2 内存管理优化

# 减少交换倾向 vm.swappiness=10 # 透明大页禁用(某些工作负载需要) vm.nr_hugepages=0

32. 证书管理进阶

32.1 自定义CA部署

使用cfssl生成CA:

cfssl gencert -initca ca-csr.json | cfssljson -bare ca

配置kubeadm使用自定义CA:

kubeadm init --control-plane-endpoint=cluster.example.com \ --upload-certs \ --cert-dir=/etc/kubernetes/pki/custom \ --apiserver-cert-extra-sans=DNS:cluster.example.com,IP:192.168.1.100

32.2 证书轮换自动化

使用cert-manager:

helm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ --version v1.11.0 \ --set installCRDs=true

33. 节点维护操作

33.1 安全排空流程

# 标记节点不可调度 kubectl cordon <node-name> # 驱逐所有Pod(忽略DaemonSet) kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data --force # 维护完成后恢复 kubectl uncordon <node-name>

33.2 节点问题诊断

检查节点状况:

kubectl describe node <node-name> kubectl get events --field-selector involvedObject.name=<node-name>

查看节点资源:

kubectl top node <node-name>

34. 自定义指标扩展

34.1 Prometheus适配器

部署自定义指标API:

helm install prometheus-adapter prometheus-community/prometheus-adapter \ --namespace monitoring \ --set prometheus.url=http://prometheus-server.monitoring.svc

34.2 自定义HPA

基于自定义指标的扩缩容:

apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: custom-metric-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: my-app minReplicas: 2 maxReplicas: 10 metrics: - type: Pods pods: metric: name: requests_per_second target: type: AverageValue averageValue: 500

35. 服务暴露策略

35.1 Ingress控制器

安装Nginx Ingress:

helm install ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-nginx \ --create-namespace \ --set controller.service.type=LoadBalancer

35.2 Gateway API

使用Gateway API替代Ingress:

apiVersion: gateway.networking.k8s.io/v1beta1 kind: Gateway metadata: name: web-gateway spec: gatewayClassName: nginx listeners: - protocol: HTTP port: 80 name: web allowedRoutes: namespaces: from: Same

36. 数据持久化方案

36.1 CSI驱动集成

安装AWS EBS CSI驱动:

helm install aws-ebs-csi-driver \ https://github.com/kubernetes-sigs/aws-ebs-csi-driver/releases/download/helm-chart-aws-ebs-csi-driver-2.18.0/aws-ebs-csi-driver-2.18.0.tgz \ --namespace kube-system \ --set controller.serviceAccount.create=false \ --set controller.serviceAccount.name=ebs-csi-controller-sa

36.2 卷快照管理

创建VolumeSnapshotClass:

apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: ebs-snapclass driver: ebs.csi.aws.com deletionPolicy: Delete

37. 密钥管理方案

37.1 使用Secrets Store CSI

集成Azure Key Vault:

helm install csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver \ --namespace kube-system \ --set syncSecret.enabled=true

37.2 Vault集成

部署Vault注入器:

helm install vault hashicorp/vault \ --namespace vault \ --create-namespace \ --set server.dev.enabled=true \ --set injector.enabled=true

38. 策略即代码实践

38.1 OPA Gatekeeper

安装策略引擎:

helm install gatekeeper gatekeeper/gatekeeper \ --namespace gatekeeper-system \ --create-namespace

38.2 自定义约束模板

示例模板:

apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8srequiredlabels spec: crd: spec: names: kind: K8sRequiredLabels validation: openAPIV3Schema: properties: labels: type: array items: string targets: - target: admission.k8s.gatekeeper.sh rego: | package k8srequiredlabels violation[{"msg": msg, "details": {"missing_labels": missing}}] { provided := {label | input.review.object.metadata.labels[label]} required := {label | label := input.parameters.labels[_]} missing := required - provided count(missing) > 0 msg := sprintf("必须包含以下标签: %v", [missing]) }

39. 机器学习支持

39.1 Kubeflow部署

完整套件安装:

kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/cluster-scoped-resources?ref=1.8.0" kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/platform-agnostic-pns?ref=1.8.0"

39.2 自定义资源调度

GPU节点调度:

apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: containers: - name: cuda-container image: nvidia/cuda:11.0-base resources: limits: nvidia.com/gpu: 2 nodeSelector: accelerator: nvidia-tesla-v100

40. Windows节点支持

40.1 Windows节点加入

准备步骤:

  1. 安装Windows容器功能
  2. 配置Containerd运行时
  3. 执行kubeadm join

40.2 混合调度策略

节点选择器示例:

apiVersion: apps/v1 kind: Deployment metadata: name: windows-app spec: template: spec: nodeSelector: kubernetes.io/os: windows tolerations: - key: "os" operator: "Equal" value: "windows" effect: "NoSchedule"

41. 大规模集群优化

41.1 分片etcd配置

启动参数示例:

ETCDCTL_API=3 etcd \ --name etcd1 \ --data-dir /var/lib/etcd \ --initial-cluster-token my-etcd-cluster \ --initial-cluster etcd1=http://10.0.1.10:2380,etcd2=http://10.0.1.11:2380,etcd3=http://10.0.1.12:2380 \ --initial-advertise-peer-urls http://10.0.1.10:2380 \ --listen-peer-urls http://10.0.1.10:2380 \ --listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 \ --advertise-client-urls http://10.0.1.10:2379 \ --initial-cluster-state new \ --heartbeat-interval 250 \ --election-timeout 1250

41.2 API服务器调优

kube-apiserver参数:

--max-requests-inflight=1500 --max-mutating-requests-inflight=500 --watch-cache-sizes=secrets=1000,configmaps=1000

42. 零信任安全模型

42.1 SPIFFE身份认证

部署SPIRE服务器:

helm install spire spire/spire \ --namespace spire-system \ --create-namespace \ --set spire-server.dataStore.sql.password=MyStrongPassword

42.2 服务间mTLS

使用Linkerd自动mTLS:

linkerd inject deployment/my-app | kubectl apply -f -

43. 无服务器架构支持

43.1