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 网络预配置
确保满足以下条件:
- 各节点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 --system
3. 容器运行时安装与配置
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 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 初始化后操作
- 配置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-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长时间无响应 排查步骤:
- 检查容器运行时日志:
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.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 控制平面升级
- 先升级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 kubelet
11.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.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节点加入
准备步骤:
- 安装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 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
更多推荐


所有评论(0)