在隔离网络环境下构建企业级Kubernetes集群时面临三大挑战:
角色类型 | CPU | 内存 | 磁盘 | 数量 | 网络要求 |
---|---|---|---|---|---|
Server | 4+ | 8G+ | 100GB+ x3 | 3 | 1Gbps 内网 |
Agent | 8+ | 16G+ | 200GB+ | N | 10Gbps 内网 |
Harbor | 4 | 8G | 1TB | 1 | 独立存储网络 |
修改/etc/rancher/rke2/config.yaml
指定数据目录到数据盘:
data-dir: /data/rke2
给目标节点打标签:
kubectl label node node01 role=server
部署定制化Ingress, 创建/data/rke2/server/manifests/rke2-ingress-nginx-config.yaml
:
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-ingress-nginx
namespace: kube-system
spec:
valuesContent: |-
controller:
nodeSelector:
role: server
重启rke2-server
服务
在K8S所有节点上安装nfs客户端工具:
sudo apt-get update
sudo apt-get install nfs-common
获取并安装Helm Chart
$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
$ helm install nfs-subdir-external-provisioner \
-n storage \
--create-namespace \
--set nfs.server=NFS_SERVER_IP \
--set nfs.path=/data/exports/k8s \
--set storageClass.name=nfs \
--set storageClass.defaultClass=true \
nfs-subdir-external-provisioner/nfs-subdir-external-provisioner
验证是否成功
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
storageClassName: nfs
accessModes: [ReadWriteMany]
resources:
requests:
storage: 1Gi
$ kubectl apply -f pvc.yaml
$ ssh root@nfs-server ls /data/exports/k8s
default-test-pvc-pvc-e4c14e5b-e820-4ca0-8bc0-f08d40e333ae
$ kubectl delete -f pvc.yaml
注:所有操作建议先在预发布环境验证,生产部署前做好etcd备份。可通过
rke2 etcd-snapshot save
创建集群快照。