搭建私有 helm 倉庫 chartmuseum
阿新 • • 發佈:2020-09-03
chartmuseum 是一個開源的 Helm Chart Repository,支援多種後端儲存,包括 GCS,S3 等。
# 這裡是直接使用宿主機的目錄,因而有兩個注意的地方: # 1. 存放 chart 的目錄需要額外授權 # 2. 在 K8S 中需要固定 pod 所在宿主機,我這裡選擇的是 k8s-node01 # 在 k8s-node01 上執行 mkdir /data/charts && cd /data/ && chmod 777 charts # 建立 deployment.yaml 檔案 mkdir -p /data/chartmuseum/ && cd /data/chartmuseum/ vi deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: chartmuseum name: chartmuseum namespace: kube-system spec: replicas: 1 selector: matchLabels: app: chartmuseum strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 type: RollingUpdate template: metadata: labels: app: chartmuseum spec: containers: - image: chartmuseum/chartmuseum:latest name: chartmuseum ports: - containerPort: 8080 protocol: TCP env: - name: DEBUG value: "1" - name: STORAGE value: local - name: STORAGE_LOCAL_ROOTDIR value: /charts resources: limits: cpu: 500m memory: 256Mi requests: cpu: 100m memory: 64Mi volumeMounts: - mountPath: /charts name: charts-volume nodeSelector: kubernetes.io/hostname: k8s-node01 volumes: - name: charts-volume hostPath: path: /data/charts type: DirectoryOrCreate restartPolicy: Always # 建立 service vi service.yaml apiVersion: v1 kind: Service metadata: name: chartmuseum namespace: kube-system spec: ports: - port: 8080 protocol: TCP targetPort: 8080 selector: app: chartmuseum # 啟動 kubectl apply -f . # 檢查 kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE chartmuseum-7c976bc4c9-m2cdc 1/1 Running 0 57m kubectl get svc -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE chartmuseum ClusterIP 10.104.6.194 <none> 8080/TCP 57m # 成功顯示歡迎資訊 curl 10.104.6.194:8080 # 新增 helm repo helm repo add chartmuseum http://10.104.6.194:8080 helm repo list
建立應用並上傳到 chartmuseum
mkdir /root/helm && cd /root/helm helm create myapp # 留下有用的模板 cd /root/helm/myapp/templates rm -rf ingress.yaml serviceaccount.yaml tests # 修改 values.yaml cd /root/helm/myapp vi values.yaml # serviceAccount 下的 create 改成 false serviceAccount: # Specifies whether a service account should be created create: false # service 下的 type 改成 NodePort service: type: NodePort # 檢查語法 cd /root/helm helm lint myapp # 打包 helm package myapp # 上傳 curl --data-binary "@myapp-0.1.0.tgz" http://10.104.6.194:8080/api/charts
通過 chartmuseum 安裝軟體
# 查詢版本
helm search myapp
# 安裝
helm install --name myapp chartmuseum/myapp
# 檢視
helm list
helm status myapp
# 刪除
helm del --purge myapp
更新 charts 並上傳到 chartmuseum
cd /root/helm/myapp vi values.yaml # 調整 replicaCount 為 2 replicaCount: 2 vi Chart.yaml # 把 version 改為 0.2.0 version: 0.2.0 # 測試,打包 cd /root/helm helm lint myapp helm package myapp # 上傳 curl --data-binary "@myapp-0.2.0.tgz" http://10.104.6.194:8080/api/charts # 更新本地快取然後可以檢視已有的 charts: helm repo update helm search chartmuseum/ # 若之前沒有刪除,可以進行更新 helm upgrade myapp chartmuseum/myapp # 回滾 helm rollback myapp 1
chartmuseum ingress 檔案
cd /data/chartmuseum/
vi ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: chartmuseum
namespace: kube-system
spec:
rules:
- host: charts.klvchen.com
http:
paths:
- path: /
backend:
serviceName: chartmuseum
servicePort: 8080
參考:https://github.com/helm/chartmuseum/blob/master/README.md