K3s适配华为云&OBS心得
前一阵,在网上闲逛时,偶然发现华为云发布一些列的对接华为云的任务(https://developer.huaweicloud.com/programs/opensource/contributing/)。在任务中,我找了一个比较简单的任务入手。那就是K3s适配OBS开源验证任务。
1 任务流程
1.1 任务的目的
本任务的主要目的是让K3s支持华为云OBS服务,K3s 将etcd 快照存入OBS,拓展OBS服务的影响力。方便K3s的用户使用华为云服务时能够顺利对接OBS服务。
1.2 报名流程
- 在喜欢的任务上进行报名,填写自己的申请,留下自己的邮箱,之后华为官方会发送任务计划书到邮箱内。
- 开通开发者空间,进行实名认证,加入沃土云创计划个人方向。
- 进入激励管理》开源共创,进入任务,此时在需求分析节点,提交之前发送到邮箱内的任务计划书。
- 提交任务计划书之后,审批后进入开发阶段,阅读任务计划书,了解需要开发的内容。
- 此时需要申领服务器,主要是Gaussdb,华为云CCE(类似k8s),CodeArts(ci/cd)。
- 开发完整之后,在CCE上进行验证,在CodeArts上进行部署。
- 测试完成后,可以申请任务验收。将自己的代码分支博文等信息打包成zip文件进行上传。
- 后面就是等发钱啦。
1.3 开发代码
不涉及
1.4 上云第一步-购买OBS
- 在华为云官网,点击产品,选择对象存储服务OBS,点击购买
- 选择以下选项,进行提交
区域:广州(选离自己最近的城市)
资源包类型:标准存储多AZ包
规格:按照自己需要的大小(我选的是40G)
1.5 上云第二步-购买ECS
- 选择以下选项,进行提交
区域:广州(选离自己最近的城市)
计费模式:按需计费
可用区:随机分配
CPU架构:鲲鹏计算 鲲鹏通用计算增强型
选个差不多配置的就行了(我选的是 kc1.xlarge.4 | 4vCPUs | 16GiB)
操作系统:公共镜像 Huawei Cloud EulerOS (Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB))
存储和备份按默认就行
1.6 新建节点
不涉及
1.7 配置CodeArts
不涉及
2 验收材料
1. 开源软件fork地址:不涉及
2. 开源软件修改记录(可以有多个修改记录):
不涉及
3. 推送上游社区PR(包括代码、文档、可以有多个):
不涉及
4. 验证DEMO地址:
https://gitcode.com/moseszane168/open-source-for-huawei-demo-yaml/overview
5. 验证DEMO修改记录(可以有多个修改记录,只包含和本任务验证强相关的提交记录,比如添加依赖、增加配置文件、演示开源软件功能使用的代码等):
不涉及
6. 博客地址:https://bbs.huaweicloud.com/blogs/441750
3 资源清单
3.1 ECS
产品名称 |
CPU架构 |
实例类型 |
公共镜像 |
镜像版本 |
弹性云服务器 |
鲲鹏计算 |
鲲鹏通用计算增强型 |
Huawei Cloud EulerOS |
Huawei Cloud EulerOS 2.0标准版 64位 ARM版(10GiB) |
3.2 OBS
产品名称 |
资源包类型 |
桶类别 |
对象存储服务OBS |
存储包 |
标准存储多AZ包 |
4 测试结果
4.1 验证思路
使用https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/issues/26
中方案一:通过 S3 兼容 API 验证方案是指利用 OBS 提供的 S3 兼容 API 进行交互。
部署完成K3s后,部署完DEMO后DEMO能正常访问,备份etcd快照成功,删除DEMO后DEMO不能正常访问,还原ETCD快照后DEMO能正常访问。
4.2 安装K3s
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
INSTALL_K3S_MIRROR=cn \
INSTALL_K3S_SKIP_SELINUX_RPM=true \
INSTALL_K3S_SELINUX_WARN=true \
INSTALL_K3S_EXEC="--bind-address 192.168.0.199 --advertise-address 192.168.0.199 --cluster-init" \
K3S_TOKEN=xxx sh -s - \
--system-default-registry=registry.cn-hangzhou.aliyuncs.com
里面有个坑,k3s经常绑定ipv6的etcd地址,使用以下处理方法:
lsof -i :2380
kill -9 pid
k3s server
再
lsof -i :2380
systemctl status k3s
如果想重新安装可以卸载K3s:
/usr/local/bin/k3s-uninstall.sh
4.3 将DEMO部署到k3s
创建命名空间:
kubectl create namespace my-microservices
部署:
kubectl apply -f admin-service.yaml
kubectl apply -f admin-website.yaml
kubectl apply -f authentication-server.yaml
kubectl apply -f edge-service.yaml
kubectl apply -f resource-server.yaml
查看pod状态:
kubectl get pods -n my-microservices
4.4 将etcd快照保存到OBS
sudo k3s etcd-snapshot save \
--etcd-token=xxx \
--etcd-s3 \
--etcd-s3-skip-ssl-verify \
--etcd-s3-access-key=xxx \
--etcd-s3-secret-key=xxx \
--etcd-s3-endpoint=obs.cn-south-1.myhuaweicloud.com \
--etcd-s3-region=cn-south-1 \
--etcd-s3-bucket=minio-4dc9 \
--etcd-s3-folder=k3s
4.5 列出OBS桶中的快照
k3s etcd-snapshot ls \
--s3 \
--s3-endpoint="obs.cn-south-1.myhuaweicloud.com" \
--s3-region=cn-south-1 \
--s3-bucket=minio-4dc9 \
--etcd-s3-folder=k3s \
--s3-access-key=xxx \
--s3-secret-key=xxx
4.6 删除pod
缩减副本,防止Deployment 或 ReplicaSet 自动重新创建它:
kubectl scale deployment admin-service --replicas=0 -n my-microservices
kubectl scale deployment admin-website --replicas=0 -n my-microservices
kubectl scale deployment authentication-server --replicas=0 -n my-microservices
kubectl scale deployment edge-service --replicas=0 -n my-microservices
kubectl scale deployment resource-server --replicas=0 -n my-microservices
或用以下命令删除pod,这样会被重新创建:
kubectl delete pods --all -n my-microservices
kubectl get pods -n my-microservices
4.7 从OBS中还原etcd快照
首先确保 K3s 没有运行
systemctl stop k3s
sudo pkill containerd-shim
systemctl status k3s
k3s server \
--cluster-init \
--cluster-reset \
--etcd-s3 \
--cluster-reset-restore-path=on-demand-ecs-6a0f-1733452396 \
--etcd-s3-endpoint="obs.cn-south-1.myhuaweicloud.com" \
--etcd-s3-bucket=minio-4dc9 \
--etcd-s3-folder=k3s \
--etcd-s3-access-key=xxx \
--etcd-s3-secret-key=xxx
kubectl get pods -n my-microservices
- 点赞
- 收藏
- 关注作者
评论(0)