- 背景
集群配置: centos7.7 64位
ip | 主机名 |
---|---|
10.0.4.20 | vip |
10.0.4.27 | sh-master-01 |
10.0.4.46 | sh-master-02 |
10.0.4.47 | sh-master-02 |
10.0.4.14 | sh-node-01 |
10.0.4.2 | sh-node-02 |
10.0.4.6 | sh-node-03 |
10.0.4.4 | sh-node-04 |
10.0.4.13 | sh-node-05 |
背景
环境为kubernets集群1.18.6,参照 https://duiniwukenaihe.github.io/2020/07/22/tencent-slb-kubeadm-ha/在腾讯云上搭建。过去自己搭建过rook-ceph但是版本升级或者节点挂掉出现了各种问题,而且ceph的规划什么的 自己也掌握的不好,正好有腾讯云自己开源的kubernetes-csi-tencentcloud组件 就准备使用他集成做kubernets集群的默认storageclass了。
1.git clone 仓库
https://github.com/TencentCloud/kubernetes-csi-tencentcloud
现在github会非常卡你懂的,最好还是国外服务器下载了。
2. kubernets集群更改配置
参照https://github.com/TencentCloud/kubernetes-csi-tencentcloud/blob/master/docs/README_CBS_zhCN.md,我的kubernets集群是1.18.6。 按照显性设置版本要求在kubelet apiserver controller-manager scheduler 配置文件添加–feature-gates=VolumeSnapshotDataSource=true配置:
cd /etc/kubernetes/manifests,修改三个master的 apiserver controller scheduler配置文件如下:
所有节点 包括master与work节点,进入/etc/sysconfig目录修改kubelet配置文件如下:
所有节点重启kubelet :
systemctl restart kubelet
步骤3-6基本就是按照腾讯云文档来就可以了,唯一可怕的就少镜像被墙….最好把镜像打包放到国内镜像仓库,然后修改配置文件。然后还有csi-node的apiVersion要修改一下呢,直接修改为apps/v1。
3.使用腾讯云 API Credential 创建 kubernetes secret
# 参考示例 deploy/kubernetes/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: csi-tencentcloud
namespace: kube-system
data:
# 需要注意的是,secret 的 value 需要进行 base64 编码
# echo -n "<SECRET_ID>" | base64
TENCENTCLOUD_CBS_API_SECRET_ID: "<SECRET_ID>"
TENCENTCLOUD_CBS_API_SECRET_KEY: "<SECRET_KEY>"
4.创建rbac
创建attacher,provisioner,plugin需要的rbac:
kubectl apply -f deploy/cbs/kubernetes/csi-controller-rbac.yaml
kubectl apply -f deploy/cbs/kubernetes/csi-node-rbac.yaml
5.创建controller,node和plugin
创建controller plugin和node plugin
kubectl apply -f deploy/cbs/kubernetes/csi-controller.yaml
kubectl apply -f deploy/cbs/kubernetes/csi-node.yaml
6.简单测试验证
### 这里要根据自己的需求进行修改的哦,我的配置文件如下
###storageclass-basic.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: cbs-csi
provisioner: com.tencent.cloud.csi.cbs
parameters:
diskType: CLOUD_PREMIUM
diskChargeType: PREPAID
diskChargeTypePrepaidPeriod: "1"
diskChargePrepaidRenewFlag: NOTIFY_AND_AUTO_RENEW
创建storageclass:
kubectl apply -f deploy/examples/storageclass-basic.yaml
创建pvc:
kubectl apply -f deploy/examples/pvc.yaml
创建申请pvc的pod:
kubectl apply -f deploy/examples/app.yaml
下面是抄自官方的文档,按需来了,比如我的diskType 选择了高性能云盘, 付费类型选择了预付费,购买时长1个月,续费策略选择了通知过期不自动续费。
StorageClass 支持的参数
Note:可以参考示例
- 如果您集群中的节点存在多个可用区,那么您可以开启cbs存储卷的拓扑感知调度,需要在storageclass中添加
volumeBindingMode: WaitForFirstConsumer
,如deploy/examples/storageclass-topology.yaml,否则可能会出现cbs存储卷因跨可用区而挂载失败。 - diskType: 代表要创建的 cbs 盘的类型;值为
CLOUD_BASIC
代表创建普通云盘,值为CLOUD_PREMIUM
代表创建高性能云盘,值为CLOUD_SSD
代表创建 ssd 云盘 - diskChargeType: 代表云盘的付费类型;值为
PREPAID
代表预付费,值为POSTPAID_BY_HOUR
代表按量付费,需要注意的是,当值为PREPAID
的时候需要指定额外的参数 - diskChargeTypePrepaidPeriod:代表购买云盘的时长,当付费类型为
PREPAID
时需要指定,可选的值包括1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36
,单位为月 - diskChargePrepaidRenewFlag: 代表云盘的自动续费策略,当付费类型为
PREPAID
时需要指定,值为NOTIFY_AND_AUTO_RENEW
代表通知过期且自动续费,值为NOTIFY_AND_MANUAL_RENEW
代表通知过期不自动续费,值为DISABLE_NOTIFY_AND_MANUAL_RENEW
代表不通知过期不自动续费 - encrypt: 代表云盘是否加密,当指定此参数时,唯一可选的值为
ENCRYPT
不同类型云盘的大小限制
- 普通云硬盘提供最小 100 GB 到最大 16000 GB 的规格选择,支持 40-100MB/s 的 IO 吞吐性能和 数百-1000 的随机 IOPS 性能。
- 高性能云硬盘提供最小 50 GB 到最大 16000 GB 的规格选择。
- SSD 云硬盘提供最小 100 GB 到最大 16000 GB 的规格选择,单块 SSD 云硬盘最高可提供 24000 随机读写IOPS、260MB/s吞吐量的存储性能。
然后我遇到的问题:
1. cbs盘默认是普通云硬盘 ,然后区域呢不支持就出现了下面的图:
注:失败了就接着习惯kubectl delete -f pvc.yaml 了。
2. SECRET我用了子账号首先,权限如下:
个人觉得权限是没有问题的,但是就notpay了 不知道是还要分配那些权限
3. 将秘钥用主账号的id key base64后修改deploy/kubernetes/secret.yaml ,kubectl apply -f deploy/kubernetes/secret.yaml。修改配置文件后pod中是不会生效的,然后删除一遍pod 重新部署下,偷了下懒用了删除kube-proxy 修改ipvs的方式:
kubectl get pod -n kube-system | grep csi-cbsplugin |awk '{system("kubectl delete pod "$1" -n kube-system")}'
继续执行下kubectl apply -f pvc.yaml kubectl apply -f app.yaml。如下图:
结束基本就算跑起来了 然后复杂的 和其他的用法,在以后慢慢摸索了。