首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2020-07-23-kubernetes集群使用腾讯云cbs块存储

2020-07-23-kubernetes集群使用腾讯云cbs块存储

作者头像
对你无可奈何
修改2020-07-24 10:03:10
1.6K0
修改2020-07-24 10:03:10
举报
文章被收录于专栏:运维专栏运维专栏

layout: "post"

title: "2020-07-23-kubernetes集群使用腾讯云cbs块存储"

date: "2020-07-23 10:00:00"

category: "kubernetes"

tags: "kubernetes1.18.6 kubernetes-csi-tencentcloud"

author: duiniwukenaihe


* content

{:toc}

集群配置:

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配置文件如下:

kube-api
kube-api
kube-controller-manager
kube-controller-manager
kube-scheduler
kube-scheduler

所有节点 包括master与work节点,进入/etc/sysconfig目录修改kubelet配置文件如下:

kubelet
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>"

![key](https://duiniwukenaihe.github.io/assets/images/2020/07/kubernetes-csi-tencentcloud/key.png)

#### 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\*\*:可以参考[示例](https://github.com/TencentCloud/kubernetes-csi-tencentcloud/blob/master/deploy/cbs/examples/storageclass-examples.yaml)

\* 如果您集群中的节点存在多个可用区,那么您可以开启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盘默认是普通云硬盘 ,然后区域呢不支持就出现了下面的图:

![basic-not-support](https://duiniwukenaihe.github.io/assets/images/2020/07/kubernetes-csi-tencentcloud/basic-not-support.png)

注:失败了就接着习惯kubectl delete -f pvc.yaml 了。

##### 2.  SECRET我用了子账号首先,权限如下:

![authority](https://duiniwukenaihe.github.io/assets/images/2020/07/kubernetes-csi-tencentcloud/authority.png)

> 个人觉得权限是没有问题的,但是就notpay了 不知道是还要分配那些权限

![notpay](https://duiniwukenaihe.github.io/assets/images/2020/07/kubernetes-csi-tencentcloud/notpay.png)

#####  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")}'

delete
delete

继续执行下kubectl apply -f pvc.yaml kubectl apply -f app.yaml。如下图:

demo-pod
demo-pod

结束基本就算跑起来了 然后复杂的 和其他的用法,在以后慢慢摸索了。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 参考示例 deploy/kubernetes/secret.yaml
  • 需要注意的是,secret 的 value 需要进行 base64 编码
  • echo -n "<SECRET_ID>" | base64
    • 这里要根据自己的需求进行修改的哦,我的配置文件如下
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档