基于kubernetes使用阿里云OSS服務(wù)

背景介紹

離線開發(fā)環(huán)境需要連接阿里云 OSS 服務(wù)司致, 通過調(diào)研我們決定使用 oss-emulator 模擬 OSS 服務(wù)械媒。

項(xiàng)目介紹

oss-emulator 是阿里開源的輕量級 OSS 服務(wù)模擬器仁连,提供與 OSS 服務(wù)相同的 API 接口

但該項(xiàng)目僅提供基于 linux 部署方案,不支持容器化达舒,無法滿足容器化部署場景

linux-install.png

因此灿渴,我將 oss-emulator 項(xiàng)目打包成鏡像發(fā)布到 docker hub,并提供容器化部署方案艺沼,便于后續(xù)使用册舞。

容器化過程及驗(yàn)證

需求依賴:docker hub 賬號

  1. fork項(xiàng)目
fork.png
  1. 配置 docker hub 賬號口令

用于后續(xù) github action 自動(dòng)構(gòu)建使用

new-secrect.png

票據(jù)內(nèi)容如下:

github-secret.png
  1. 登錄 docker hub 創(chuàng)建 oss-emulator 倉庫
create-repo.png

到此為止,我們準(zhǔn)備工作已經(jīng)完成障般,接下來就是將項(xiàng)目打包成鏡像

  1. 項(xiàng)目根新增 Dockerfile ,內(nèi)容如下
FROM ruby:alpine
MAINTAINER weiliang-ms@github
WORKDIR /work
ADD . .
RUN gem install thor builder webrick
CMD ["ruby","/work/bin/emulator", "-r", "store", "-p", "8080"]
  1. 項(xiàng)目根新增 github action 流水線配置

配置路徑:.github/workflows/build.yml

配置內(nèi)容如下:

name: ci
on:
  push:
    branches:
      - 'master'
jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      -
        name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      -
        name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      -
        name: Build and push
        uses: docker/build-push-action@v2
        with:
          context: ./
          file: Dockerfile
          push: true
          tags: xzxwl/oss-emulator

提交變更后调鲸,github action 流水線基于配置進(jìn)行鏡像構(gòu)建,最終將生成的 xzxwl/oss-emulator 鏡像推送至 docker hub

  1. 啟動(dòng) oss-emulator 容器
$ mkdir -p /work/oss-data
$ docker run -idt --name oss-emulator -p 8080:8080 -v /work/oss-data:/work/store xzxwl/oss-emulator
  1. 下載 ossutil 測試管理 oss-emulator

下載授權(quán)

$ wget https://gosspublic.alicdn.com/ossutil/1.7.14/ossutil64
$ chmod 755 ossutil64
  1. 測試 OSS 可用性

測試創(chuàng)建 bucket 功能

$ ./ossutil64 -e http://127.0.0.1:8080 -i  AccessKeyId -k AccessKeySecret mb oss://bucket-test
0.005875(s) elapsed

測試查詢 bucket

$ ./ossutil64 -e http://127.0.0.1:8080 -i  AccessKeyId -k AccessKeySecret ls oss://bucket-test
Object Number is: 0

0.006463(s) elapsed

測試上傳文件

$ touch test.file
$ ./ossutil64 -e http://127.0.0.1:8080 -i  AccessKeyId -k AccessKeySecret cp test.file oss://bucket-test/
Succeed: Total num: 1, size: 0. OK num: 1(upload 1 files).

average speed 0(byte/s)

0.014518(s) elapsed
$ ./ossutil64 -e http://127.0.0.1:8080 -i  AccessKeyId -k AccessKeySecret ls oss://bucket-test/
LastModifiedTime                   Size(B)  StorageClass   ETAG                                  ObjectName
2023-01-11 21:56:51 -0500 EST            0      Standard   D41D8CD98F00B204E9800998ECF8427E      oss://bucket-test/test.file
Object Number is: 1

0.008415(s) elapsed

該項(xiàng)目并非完全兼容 OSS 接口挽荡,僅支持以下接口內(nèi)容藐石,使用時(shí)注意

接口兼容性

  • oss-emulator 支持 put, get, list, copy, delete, multipart 等數(shù)據(jù)操作API接口,支持部分Bucket操作接口定拟。

Bucket相關(guān)接口

  • 支持
ListBuckets(GetService),PutBucket(CreateBucket),GetBucket,DeleteBucket,
GetBucketLocation,GetBucketInfo,PutBucketACL,GetBucketACL
  • 不支持
PutBucketLogging,PutBucketWebsite,PutBucketReferer,PutBucketLifecycle,
GetBucketLogging,GetBucketWebsite,GetBucketReferer,GetBucketLifecycle,
DeleteBucketLogging,DeleteBucketWebsite,DeleteBucketLifecycle

Object相關(guān)接口

  • 支持
PutObject,CopyObject,AppendObject,GetObject,DeleteObject,DeleteMultipleObjects,
HeadObject,GetObjectMeta,PutObjectACL,GetObjectACL
  • 不支持
PostObject,Callback,PutSymlink,GetSymlink,RestoreObject

Multipart相關(guān)接口

  • 支持
InitiateMultipartUpload,UploadPart,CompleteMultipartUpload
  • 不支持
UploadPartCopy,AbortMultipartUpload,ListMultipartUpload,ListParts

容器化部署方式

docker

創(chuàng)建數(shù)據(jù)持久化目錄

$ mkdir -p /oss-store

啟動(dòng)服務(wù)

$ docker run -idt --name oss-emulator -p 8080:8080 --restart=always -v /work/oss-data:/work/store xzxwl/oss-emulator

kubernetes

創(chuàng)建 pvc

$ cat <<EOF | kubectl apply -f -
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: oss-emulator-volume
  namespace: test
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
EOF

創(chuàng)建 deployment

$ cat <<EOF | kubectl apply -f -
kind: Deployment
apiVersion: apps/v1
metadata:
  name: oss-emulator
  namespace: test
  labels:
    app: oss-emulator
spec:
  replicas: 1
  selector:
    matchLabels:
      app: oss-emulator
  template:
    metadata:
      labels:
        app: oss-emulator
    spec:
      volumes:
        - name: host-time
          hostPath:
            path: /etc/localtime
            type: ''
        - name: volume-b5cw22
          persistentVolumeClaim:
            claimName: oss-emulator-volume
      containers:
        - name: container-14y7vu
          image: xzxwl/oss-emulator
          ports:
            - name: http-8080
              containerPort: 8080
              protocol: TCP
          resources:
            limits:
              cpu: 200m
              memory: 400Mi
          volumeMounts:
            - name: host-time
              readOnly: true
              mountPath: /etc/localtime
            - name: volume-b5cw22
              mountPath: /work/store
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      serviceAccountName: default
      serviceAccount: default
      securityContext: {}
      schedulerName: default-scheduler
EOF

創(chuàng)建 service

$ cat <<EOF | kubectl apply -f -
kind: Service
apiVersion: v1
metadata:
  name: oss-emulator-svc
  namespace: test
  labels:
    app: oss-emulator-svc
spec:
  ports:
    - name: http-8080
      protocol: TCP
      port: 80
      targetPort: 8080
  selector:
    app: oss-emulator
EOF

此時(shí)即可在 kubernetes 內(nèi)部通過以下地址使用 oss 服務(wù)

oss-emulator-svc.test:80

AK, SK 可以配置如下

AK: AccessKeyId
SK: AccessKeySecret

對于 xzxwl/oss-emulator 這個(gè)鏡像于微,離線環(huán)境下可以上傳至私有鏡像庫(例如harbor)進(jìn)行管理使用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市办素,隨后出現(xiàn)的幾起案子角雷,更是在濱河造成了極大的恐慌祸穷,老刑警劉巖性穿,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雷滚,居然都是意外死亡需曾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門祈远,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呆万,“玉大人,你說我怎么就攤上這事车份∧奔酰” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵扫沼,是天一觀的道長出爹。 經(jīng)常有香客問我,道長缎除,這世上最難降的妖魔是什么严就? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮器罐,結(jié)果婚禮上梢为,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好铸董,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布祟印。 她就那樣靜靜地躺著,像睡著了一般粟害。 火紅的嫁衣襯著肌膚如雪旁理。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天我磁,我揣著相機(jī)與錄音孽文,去河邊找鬼。 笑死夺艰,一個(gè)胖子當(dāng)著我的面吹牛芋哭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播郁副,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼减牺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了存谎?” 一聲冷哼從身側(cè)響起拔疚,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎既荚,沒想到半個(gè)月后稚失,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恰聘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年句各,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晴叨。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凿宾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出兼蕊,到底是詐尸還是另有隱情初厚,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布孙技,位于F島的核電站产禾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绪杏。R本人自食惡果不足惜下愈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蕾久。 院中可真熱鬧势似,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至栅迄,卻和暖如春站故,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毅舆。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工西篓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人憋活。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓岂津,卻偏偏與公主長得像,于是被迫代替她去往敵國和親悦即。 傳聞我的和親對象是個(gè)殘疾皇子吮成,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容