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_netfilter2.3 网络预配置
确保满足以下条件:
- 各节点hostname解析正确(/etc/hosts或DNS)
- 防火墙放行必要端口:
- 控制平面:6443, 2379-2380, 10250, 10259, 10257
- 工作节点:10250, 30000-32767
- 启用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 --system3. 容器运行时安装与配置
3.1 containerd安装
- 安装依赖:
sudo apt-get update && sudo apt-get install -y \ containerd runc- 生成默认配置并启用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- 重启服务:
sudo systemctl restart containerd sudo systemctl enable containerd3.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-runc4. 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.list4.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 kubectl5. 控制平面初始化
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 初始化后操作
- 配置kubectl:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config- 保存join命令:
kubeadm token create --print-join-command > join-command.sh- 检查组件状态:
kubectl get pods -n kube-system6. 网络插件安装
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=flannel6.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.yaml7. 工作节点加入集群
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.48. 常见问题排查
8.1 初始化卡住问题
现象:kubeadm init长时间无响应 排查步骤:
- 检查容器运行时日志:
journalctl -u containerd -f- 查看kubelet状态:
systemctl status kubelet- 常见原因:
- 镜像拉取失败(配置国内镜像源)
- 端口冲突(检查6443等端口占用)
- 证书问题(删除/etc/kubernetes/重新初始化)
8.2 网络连通性问题
现象:Pod间无法通信或无法访问服务 排查工具:
# 检查网络策略 kubectl get networkpolicy -A # 测试DNS解析 kubectl run -it --rm --image=busybox:1.28 test-dns -- nslookup kubernetes.default8.3 证书过期处理
查看证书有效期:
kubeadm certs check-expiration更新证书:
kubeadm certs renew all systemctl restart kubelet9. 生产环境增强配置
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=1009.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 run11. 版本升级策略
11.1 控制平面升级
- 先升级kubeadm:
sudo apt-get update && sudo apt-get install -y kubeadm=1.27.5-1.1- 执行升级计划:
sudo kubeadm upgrade plan sudo kubeadm upgrade apply v1.27.5- 升级节点组件:
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 kubelet11.2 工作节点升级
- 排空节点:
kubectl drain <node-name> --ignore-daemonsets- 升级组件后取消排空:
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.db12.2 关键配置备份
# 备份证书和配置文件 sudo tar czvf k8s-backup-$(date +%Y%m%d).tar.gz \ /etc/kubernetes/pki \ /etc/kubernetes/*.conf \ /var/lib/kubelet/config.yaml13. 安全加固建议
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.io13.2 Pod安全策略
使用PodSecurity Admission:
apiVersion: v1 kind: Namespace metadata: name: restricted labels: pod-security.kubernetes.io/enforce: restricted pod-security.kubernetes.io/warn: restricted14. 监控与日志方案
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-namespace14.2 日志收集方案
EFK栈部署示例:
helm install elasticsearch elastic/elasticsearch --namespace logging helm install fluent-bit fluent/fluent-bit --namespace logging helm install kibana elastic/kibana --namespace logging15. 存储方案集成
15.1 Local PV配置
创建存储类:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer15.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/nfs16. 高可用架构设计
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: aws17. 性能调优技巧
17.1 kubelet参数优化
调整/var/lib/kubelet/config.yaml:
apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration maxPods: 150 kubeAPIQPS: 50 kubeAPIBurst: 100 serializeImagePulls: false17.2 调度器配置
自定义调度器profile:
apiVersion: kubescheduler.config.k8s.io/v1beta3 kind: KubeSchedulerConfiguration profiles: - schedulerName: default-scheduler plugins: preScore: enabled: - name: NodeResourcesFit - name: InterPodAffinity18. 多集群管理方案
18.1 kubefed部署
安装Kubefed控制平面:
helm install kubefed kubefed-charts/kubefed \ --namespace kube-federation-system \ --create-namespace \ --set global.scope=Cluster18.2 集群注册
加入成员集群:
kubefedctl join cluster1 \ --cluster-context cluster1 \ --host-cluster-context federation-host \ --v=219. 服务网格集成
19.1 Istio安装
使用istioctl安装:
istioctl install --set profile=demo -y kubectl label namespace default istio-injection=enabled19.2 Linkerd方案
替代安装方案:
curl -sL https://run.linkerd.io/install | sh linkerd install | kubectl apply -f - linkerd check20. 持续交付流水线
20.1 Argo CD部署
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml20.2 Tekton方案
替代CI/CD方案:
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml21. 故障演练方案
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.sock21.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: None22.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: MyResource23. 混合云部署策略
23.1 跨云集群连接
使用Submariner实现:
subctl deploy-broker --kubeconfig cluster1-config subctl join --kubeconfig cluster2-config broker-info.subm --clusterid cluster223.2 应用分发策略
使用Karmada:
karmadactl init --karmada-context karmada-host --cluster-context cluster1 karmadactl join cluster2 --cluster-context cluster224. 边缘计算场景
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=xxxx24.2 OpenYurt方案
替代边缘方案:
yurtctl convert --provider kubeadm --cloud-nodes node125. 成本优化实践
25.1 资源请求优化
使用Vertical Pod Autoscaler:
helm install vpa recommender \ --repo https://charts.fairwinds.com/stable \ --namespace vpa-system \ --create-namespace25.2 闲置资源回收
使用Descheduler:
helm install descheduler descheduler \ --repo https://kubernetes-sigs.github.io/descheduler/ \ --namespace kube-system \ --set cmdOptions.v=326. 安全扫描方案
26.1 Trivy部署
扫描集群漏洞:
trivy k8s --report summary cluster26.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,node27. 备份与迁移工具
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=production27.2 Kasten K10
企业级方案:
helm install k10 kasten/k10 --namespace=kasten-io --create-namespace28. 网络策略实战
28.1 默认拒绝策略
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-all spec: podSelector: {} policyTypes: - Ingress - Egress28.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: 808029. 自定义调度策略
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-v10029.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: true31. 内核参数调优
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 1677721631.2 内存管理优化
# 减少交换倾向 vm.swappiness=10 # 透明大页禁用(某些工作负载需要) vm.nr_hugepages=032. 证书管理进阶
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.10032.2 证书轮换自动化
使用cert-manager:
helm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ --version v1.11.0 \ --set installCRDs=true33. 节点维护操作
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.svc34.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: 50035. 服务暴露策略
35.1 Ingress控制器
安装Nginx Ingress:
helm install ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-nginx \ --create-namespace \ --set controller.service.type=LoadBalancer35.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: Same36. 数据持久化方案
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-sa36.2 卷快照管理
创建VolumeSnapshotClass:
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: ebs-snapclass driver: ebs.csi.aws.com deletionPolicy: Delete37. 密钥管理方案
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=true37.2 Vault集成
部署Vault注入器:
helm install vault hashicorp/vault \ --namespace vault \ --create-namespace \ --set server.dev.enabled=true \ --set injector.enabled=true38. 策略即代码实践
38.1 OPA Gatekeeper
安装策略引擎:
helm install gatekeeper gatekeeper/gatekeeper \ --namespace gatekeeper-system \ --create-namespace38.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-v10040. Windows节点支持
40.1 Windows节点加入
准备步骤:
- 安装Windows容器功能
- 配置Containerd运行时
- 执行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 125041.2 API服务器调优
kube-apiserver参数:
--max-requests-inflight=1500 --max-mutating-requests-inflight=500 --watch-cache-sizes=secrets=1000,configmaps=100042. 零信任安全模型
42.1 SPIFFE身份认证
部署SPIRE服务器:
helm install spire spire/spire \ --namespace spire-system \ --create-namespace \ --set spire-server.dataStore.sql.password=MyStrongPassword42.2 服务间mTLS
使用Linkerd自动mTLS:
linkerd inject deployment/my-app | kubectl apply -f -