前置条件
请认真阅读本章节,否则可能会导致部署失败。
版本约束
- Kubernetes 版本 1.20+
- Helm 版本 3.8.0+
- PV 动态存储
Kubernetes 集群
注意:以下集群部署快捷部署方式并不适用于生产环境,生产环境请使用云厂商提供的例如 ACK 的托管 Kubernetes 集群或自建的标准 Kubernetes 集群。
- 建议服务器配置:8c16g * 1
- 服务器架构:尽量选用 x86_64
这里并不提供具体的集群安装步骤,仅提供指导。您可以使用如下方式进行安装基础环境:
Docker Desktop
如果您已经安装了 Docker Desktop,那么您将可以最快的启动一个 Kubernetes 测试环境,启用方式如下:
打开 Dashboards
点击 设置
左侧边栏选择 Kubernetes
勾选 Enable Kubernetes
注意:启用后 Dashboard 左下角会有
Kubernetes running
的提示。
# 安装集群
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.30.4+k3s1 sh -
# 拷贝.kube/config
mkdir ~/.kube
cp /etc/rancher/k3s/k3s.yaml .kube/config
chmod 0400 .kube/config
Helm
这里提供两种安装方式:
# 获取安装shell 脚本
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
# 开始安装
chmod 700 get_helm.sh && ./get_helm.sh
# 验证安装
helm versionOther
# 安装
snap install helm --classic
# 验证安装
helm version
动态存储
如果您没有更好的方式支持动态 PV,仅用于本地测试可以采用如下方式。
创建 StorageClass
# 创建 namespace
kubectl create ns kube-storage
# 创建 storage class
cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-disks
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
allowVolumeExpansion: true
EOF安装 local-volume-provisioner
# 添加 chart 仓库
helm repo add sig-storage-local-static-provisioner https://kubernetes-sigs.github.io/sig-storage-local-static-provisioner
# 更新仓库
helm repo update
# 创建资源文件
helm template --debug sig-storage-local-static-provisioner/local-static-provisioner --namespace kube-storage | sed 's/registry.k8s.io/opencsg-registry.cn-beijing.cr.aliyuncs.com\/opencsg_public/g'> local-volume-provisioner.generated.yaml
# 应用资源文件
kubectl apply -f local-volume-provisioner.generated.yaml创建虚拟磁盘挂载点
for flag in {a..z}; do
mkdir -p /mnt/fake-disks/sd${flag} /mnt/fast-disks/sd${flag} 2>/dev/null
mount --bind /mnt/fake-disks/sd${flag} /mnt/fast-disks/sd${flag}
echo "/mnt/fake-disks/sd${flag} /mnt/fast-disks/sd${flag} none bind 0 0" >> /etc/fstab
done创建测试 Pod
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: local-volume-example
namespace: default
spec:
serviceName: "local-volume-example-service"
replicas: 1 # 实例数量
selector:
matchLabels:
app: local-volume-example
template:
metadata:
labels:
app: local-volume-example
spec:
containers:
- name: local-volume-example
image: busybox:latest
ports:
- containerPort: 80
volumeMounts:
- name: example-storage
mountPath: /data
volumeClaimTemplates:
- metadata:
name: example-storage
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
EOF
至此,在 StatefulSet 申请 PVC 时可以自动创建并绑定 PV,但是需要注意的是,此种方式并不能像云存储那样严格的控制 PV 的大小,只是提供了一种可以不用频繁手动创建 PV 的便捷。