1. k8s部署metersphere

参考资料:https://github.com/metersphere/helm-chart

1.1 添加helm仓库

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add metersphere https://metersphere.github.io/helm-chart/
helm repo update  # 从 chart 仓库中更新本地可用chart的信息




helm install metersphere metersphere/metersphere
#添加bitnami开源仓库
[root@master tools]# helm repo add bitnami https://charts.bitnami.com/bitnami
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
"bitnami" already exists with the same configuration, skipping

#已经添加过了,所以显示"bitnami" already exists

image-1652700054738

#添加metersphere 开源仓库
[root@master tools]# helm repo add metersphere https://metersphere.github.io/helm-chart/
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
"metersphere" has been added to your repositories
#"metersphere" has been added to your repositories 显示已经添加完成

image-1652700079376

查看metersphere版本

[root@master tools]# helm search repo |grep metersphere 
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
metersphere/metersphere                     	1.1.0        	1.20.0-lts             	A Helm chart to deploy MeterSphere  

image-1652700097834

该版本为1.20.0

1.2 安装metersphere

#执行helm安装metersphere
[root@master tools]# helm install metersphere metersphere/metersphere
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
Error: INSTALLATION FAILED: cannot re-use a name that is still in use

image-1652700129572

这是因为之前已经使用helm安装metersphere的原因,需要先执行卸载

#卸载metersphere
[root@master tools]# helm uninstall metersphere
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
W0506 10:23:07.152881    8204 warnings.go:70] networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
release "metersphere" uninstalled

image-1652700144606

1.2.1 下载失败

[root@master tools]# helm install metersphere metersphere/metersphere
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
Error: INSTALLATION FAILED: failed to download "metersphere/metersphere"

该报错可能是因为网络问题导致下载失败。

1.2.2 redis冲突

再次执行安装命令

[root@master tools]# helm install metersphere metersphere/metersphere
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
Error: INSTALLATION FAILED: rendered manifests contain a resource that already exists. Unable to continue with install: StatefulSet "redis" in namespace "devsecops" exists and cannot be importeion error: key "meta.helm.sh/release-name" must equal "metersphere": current value is "dongtai"

image-1652700202284

redis已经存在,并且是属于洞态的,所以这里需要将redis的名称修改一下,但是修改可能会带来metersphere无法访问redis的情况,需要将连接地址一并修改。

解决这个问题,需要先下载metersphere的values.yaml文件

[root@master tools]# helm pull metersphere/metersphere --version 1.1.0
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
Error: Get "https://github.com/metersphere/helm-chart/releases/download/metersphere-1.1.0/metersphere-1.1.0.tgz": dial tcp 20.205.243.166:443: connect: connection timed out

image-1652700216837
该报错也是因为网络问题,重新下载即可。

[root@master tools]# helm pull metersphere/metersphere --version 1.1.0
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config

image-1652700238616

解压压缩包

[root@master tools]# tar -zxf metersphere-1.1.0.tgz
[root@master tools]# cd metersphere/

编辑templates/03-modules/redis.yaml文件

#修改
{{ if .Values.redis.enabled }}
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis #修改为  metersphere-redis
spec:
  replicas: 1
  serviceName: "metersphere-redis"
  selector:
    matchLabels:
      app: metersphere-redis
  template:
    metadata:
      labels:
        app: metersphere-redis
    spec:
      containers:
        - name: redis  #修改为  metersphere-redis
          image: {{.Values.common.imagePrefix}}{{.Values.redis.image}}:{{.Values.redis.imageTag}}
          imagePullPolicy: {{.Values.common.imagePullPolicy}}
          resources:
            requests:
              memory: 100Mi
              cpu: 0.1
          ports:
            - name: tcp
              containerPort: 6379
          env:
            - name: MS_REDIS_PASSWORD
              value: {{.Values.common.redis.password}}
          command: ["redis-server", "/etc/redis/redis.conf", "--requirepass", "$(MS_REDIS_PASSWORD)"]
          volumeMounts:
            - mountPath: /etc/redis/redis.conf
              name: opt-metersphere-config
              subPath: redis.conf
            - mountPath: /data
              name: redis-data
              subPath: redis
      {{if ne (.Values.common.imagePullSecrets | default "nil") "nil"}}
      imagePullSecrets:
        - name: {{.Values.common.imagePullSecrets}}
      {{ end }}
      volumes:
        - configMap:
            defaultMode: 420
            name: redis-config  #修改为  metersphere-redis-config
          name: opt-metersphere-config
        - name: redis-data
          {{if .Values.redis.persistence.enabled}}
          persistentVolumeClaim:
            claimName: redis-data-pvc #修改为 metersphere-redis-data-pvc
          {{ else }}
          emptyDir: {}
          {{ end }}

修改后的

{{ if .Values.redis.enabled }}
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: metersphere-redis
spec:
  replicas: 1
  serviceName: "metersphere-redis"
  selector:
    matchLabels:
      app: metersphere-redis
  template:
    metadata:
      labels:
        app: metersphere-redis
    spec:
      containers:
        - name: metersphere-redis
          image: {{.Values.common.imagePrefix}}{{.Values.redis.image}}:{{.Values.redis.imageTag}}
          imagePullPolicy: {{.Values.common.imagePullPolicy}}
          resources:
            requests:
              memory: 100Mi
              cpu: 0.1
          ports:
            - name: tcp
              containerPort: 6379
          env:
            - name: MS_REDIS_PASSWORD
              value: {{.Values.common.redis.password}}
          command: ["redis-server", "/etc/redis/redis.conf", "--requirepass", "$(MS_REDIS_PASSWORD)"]
          volumeMounts:
            - mountPath: /etc/redis/redis.conf
              name: opt-metersphere-config
              subPath: redis.conf
            - mountPath: /data
              name: redis-data
              subPath: redis
      {{if ne (.Values.common.imagePullSecrets | default "nil") "nil"}}
      imagePullSecrets:
        - name: {{.Values.common.imagePullSecrets}}
      {{ end }}
      volumes:
        - configMap:
            defaultMode: 420
            name: metersphere-redis-config
          name: opt-metersphere-config
        - name: redis-data
          {{if .Values.redis.persistence.enabled}}
          persistentVolumeClaim:
            claimName: metersphere-redis-data-pvc
          {{ else }}
          emptyDir: {}
          {{ end }}

修改templates/02-pvc/redis.yaml

{{ if and .Values.redis.enabled .Values.redis.persistence.enabled}}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: redis-data-pvc  #修改为 metersphere-redis-data-pvc
spec:
  accessModes:
    - {{.Values.redis.persistence.accessModes}}
  resources:
    requests:
      storage: {{.Values.redis.persistence.size}}
  storageClassName: {{.Values.common.storageClass}}
{{end}}

修改后

{{ if and .Values.redis.enabled .Values.redis.persistence.enabled}}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: metersphere-redis-data-pvc
spec:
  accessModes:
    - {{.Values.redis.persistence.accessModes}}
  resources:
    requests:
      storage: {{.Values.redis.persistence.size}}
  storageClassName: {{.Values.common.storageClass}}
{{end}}

修改 templates/01-config-map/redis-config.yaml

{{ if .Values.redis.enabled }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-config  ##修改为 metersphere-redis-config
data:
  redis.conf: |
    bind 0.0.0.0
……………………#后续参数就不列出来

修改后

{{ if .Values.redis.enabled }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: metersphere-redis-config
data:
  redis.conf: |
    bind 0.0.0.0
……………………##后续参数就不列出来

执行install命令

[root@storage metersphere]# helm install metersphere .
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
W0506 14:39:24.683674    3636 warnings.go:70] networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
W0506 14:39:24.823063    3636 warnings.go:70] networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME: metersphere
LAST DEPLOYED: Fri May  6 14:39:24 2022
NAMESPACE: devsecops
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thanks for installing the MeterSphere.

Default username/password for MeterSphere is admin/metersphere

image-1652700277497
查看pods

[root@storage metersphere]# kubectl get pods|grep metersphere
metersphere-data-streaming-6477f6d7c4-wn7kj            0/1     Init:0/2    0          52s
metersphere-kafka-0                                    1/1     Running     1          52s
metersphere-node-controller-79f5659d65-2hf28           0/1     Pending     0          52s
metersphere-redis-0                                    0/1     Pending     0          52s
metersphere-server-54966778fb-gqrqg                    0/1     Pending     0          52s
metersphere-zookeeper-0                                1/1     Running     0          52s

image-1652700292909

1.2.3 修改STORAGECLASS

查看pvc

[root@storage metersphere]# kubectl get pvc|grep meter
metersphere-data-pvc                  Pending                                                                        default            108s
metersphere-redis-data-pvc            Pending                                                                        default            108s

image-1652700312168

发现使用的是STORAGECLASS为default,因为已经配置了默认存储,默认的STORAGECLASS为nfs-storageclass,所以需要修改对应配置

编辑values.yaml

###将storageClass: default修改为空
storageClass: default 

image-1652700322736

修改后:

storageClass:

image-1652700337645

重新安装metersphere

###卸载
[root@storage metersphere]# helm uninstall  metersphere
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
W0506 14:44:12.744438   31139 warnings.go:70] networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
release "metersphere" uninstalled

image-1652700351652

###安装
[root@storage metersphere]# helm install metersphere .
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
W0506 14:45:05.465076    6037 warnings.go:70] networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
W0506 14:45:05.622877    6037 warnings.go:70] networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME: metersphere
LAST DEPLOYED: Fri May  6 14:45:05 2022
NAMESPACE: devsecops
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thanks for installing the MeterSphere.

Default username/password for MeterSphere is admin/metersphere

image-1652700367626

查看pvc

[root@storage metersphere]# kubectl get pvc|grep meter
metersphere-data-pvc                  Bound    pvc-a6ed356f-eeec-4d0e-ba9b-9d8318ddff66   10Gi       RWO            nfs-storageclass   2m5s
metersphere-redis-data-pvc            Bound    pvc-2b8c1561-383d-44ca-a094-c115b80cbb53   10Gi       RWO            nfs-storageclass   2m5s

image-1652700385173

1.3 修改ingress

登陆k8s平台查看发现ingress没有配置正确

image-1652700397413

编辑values.yaml文件

将原来的ingress配置成以下内容:

ingress:
  enabled: true
  host: test.infomings.com
  annotations:
    ## example for ingress annotions.
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.provider: nginx
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.ingress.kubernetes.io/proxy-buffering: "off"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "900"
    nginx.ingress.kubernetes.io/proxy-request-buffering: "off"

  https:
    enabled: false
    secretName: ""

修改前:

image-1652700414157

修改后:

image-1652700430891

执行重新部署:

#卸载
[root@storage metersphere]# helm uninstall metersphere
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
W0506 15:14:40.172571   32523 warnings.go:70] networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
release "metersphere" uninstalled
[root@storage metersphere]# 
[root@storage metersphere]# 
[root@storage metersphere]# 
[root@storage metersphere]# 
##查看pvc
[root@storage metersphere]# kubectl get pvc |grep metersphere
metersphere-data-pvc                  Terminating   pvc-a6ed356f-eeec-4d0e-ba9b-9d8318ddff66   10Gi       RWO            nfs-storageclass   29m
metersphere-redis-data-pvc            Terminating   pvc-2b8c1561-383d-44ca-a094-c115b80cbb53   10Gi       RWO            nfs-storageclass   29m
[root@storage metersphere]# kubectl get pvc |grep metersphere
[root@storage metersphere]# kubectl get pvc |grep metersphere

#部署
[root@storage metersphere]# helm install metersphere .
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
W0506 15:14:56.779208    4834 warnings.go:70] networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
W0506 15:14:56.956215    4834 warnings.go:70] networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME: metersphere
LAST DEPLOYED: Fri May  6 15:14:56 2022
NAMESPACE: devsecops
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thanks for installing the MeterSphere.

Default username/password for MeterSphere is admin/metersphere

在浏览器访问对应的地址

无法正常访问,修改ingressClassName

image-1652700458889

在rancher界面编辑ingress的yaml

将ingressClassName: nginx修改为ingressClassName: gitlab-nginx

保存,刷新浏览器,还是一样的界面

经过后续测试,其实是因为浏览器缓存的问题,清理了就可以了,不用修改ingressClassName也可以

Q.E.D.


知之为知之