K3s适配华为云&OBS心得

举报
yd_235395946 发表于 2024/12/06 16:56:43 2024/12/06
【摘要】 本任务的主要目的是让K3s支持华为云OBS服务,K3s 将etcd 快照存入OBS,拓展OBS服务的影响力。方便K3s的用户使用华为云服务时能够顺利对接OBS服务。

前一阵,在网上闲逛时,偶然发现华为云发布一些列的对接华为云的任务(https://developer.huaweicloud.com/programs/opensource/contributing/)。在任务中,我找了一个比较简单的任务入手。那就是K3s适配OBS开源验证任务。

1       任务流程

1.1       任务的目的

本任务的主要目的是让K3s支持华为云OBS服务,K3s etcd 快照存入OBS,拓展OBS服务的影响力。方便K3s的用户使用华为云服务时能够顺利对接OBS服务。

1.2       报名流程

  1. 在喜欢的任务上进行报名,填写自己的申请,留下自己的邮箱,之后华为官方会发送任务计划书到邮箱内。
  2. 开通开发者空间,进行实名认证,加入沃土云创计划个人方向。
  3. 进入激励管理》开源共创,进入任务,此时在需求分析节点,提交之前发送到邮箱内的任务计划书。
  4. 提交任务计划书之后,审批后进入开发阶段,阅读任务计划书,了解需要开发的内容。
  5. 此时需要申领服务器,主要是Gaussdb,华为云CCE(类似k8s),CodeArts(ci/cd)。
  6. 开发完整之后,在CCE上进行验证,在CodeArts上进行部署。
  7. 测试完成后,可以申请任务验收。将自己的代码分支博文等信息打包成zip文件进行上传。
  8. 后面就是等发钱啦。

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标准版 64ARM(10GiB)

    3.2 OBS

    产品名称

    资源包类型

    桶类别

    对象存储服务OBS

    存储包

    标准存储多AZ

     

    4 测试结果

    4.1 验证思路

    使用https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/issues/26

    中方案一:通过 S3 兼容 API 验证方案是指利用 OBS 提供的 S3 兼容 API 进行交互。

    部署完成K3s后,部署完DEMODEMO能正常访问,备份etcd快照成功,删除DEMODEMO不能正常访问,还原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

    image.png

    里面有个坑,k3s经常绑定ipv6etcd地址,使用以下处理方法:

    lsof -i :2380

    image (1).png

    kill -9 pid

    k3s server

    lsof -i :2380

    image (2).png

    systemctl status k3s

    image (3).png

    如果想重新安装可以卸载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

    image (4).png

    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

    image (5).png

    image (6).png

    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

    image (7).png

    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

    image (8).png

    kubectl get pods -n my-microservices

    image (9).png

    4.7 OBS中还原etcd快照

    首先确保 K3s 没有运行

    systemctl stop k3s

    sudo pkill containerd-shim

    systemctl status k3s

    image (10).png

    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

    image (12).png

    kubectl get pods -n my-microservices

    image (12).png

     

    【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
    • 点赞
    • 收藏
    • 关注作者

    评论(0

    0/1000
    抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。