在 Google 容器引擎上安装 gogs.io 很困难

在 Google 容器引擎上安装 gogs.io 很困难

由于 gogs.io 提供了docker 镜像,我认为使用 kubernetes 在 google 容器引擎上安装它一定很简单。

经过几个小时的折腾,我得到了两个配置文件,因为我在问题帖中看到过它们这里

问题线程中的文件使用的是 ReplicationController 而不是 pod.. 并且服务也没有使用 LoadBalancer 作为类型 - 我无法通过这种方式让它工作,所以我将它更改为 Pod 和包含 LoadBalancer 的服务,就像在 google 的 wordpress 教程中一样

gogs.yml:

apiVersion: v1
kind: Pod
metadata:
  name: gogs
  labels:
    name: gogs
spec:
  containers:
    - name: gogs
      image: gogs/gogs
      ports:
        - containerPort: 3000
        - containerPort: 22
      volumeMounts:
        - mountPath: /data
          name: data
    - name: postgres
      image: postgres
      ports:
        - containerPort: 5432
      volumeMounts:
        - mountPath: /var/lib/postgresql/data
          name: postgres
      env:
        - name: POSTGRES_USER
          value: "gogs"
        - name: POSTGRES_PASSWORD
          value: "gogs"
  volumes:
    - name: data
      gcePersistentDisk:
        # This disk must already exist.
        pdName: gogs-stage-data-disk
        fsType: ext4
    - name: postgres
      gcePersistentDisk:
        # This disk must already exist.
        pdName: gogs-stage-postgres-disk
        fsType: ext4

gogs-service.yml:

apiVersion: v1
kind: Service
metadata:
  labels:
    name: gogs-frontend
  name: gogs-frontend
spec:
  type: LoadBalancer
  ports:
    # The port that this service should serve on.
    - port: 80
      targetPort: 3000
      protocol: TCP
  selector:
    name: gogs

然后我基本上按照如下步骤进行本教程包含数据和数据库目录的外部磁盘。

  • 创建一个新项目,设置计算区域(gcloud config set..)

  • 创建新集群gcloud container clusters create gogs-stage --num-nodes 1

  • 创建新的永久磁盘

gcloud compute disks create --size 200GB gogs-stage-data-disk

gcloud compute disks create --size 200GB gogs-stage-postgres-disk

  • 创建 podkubectl create -f gogs.yml

  • 创建服务kubectl create -f gogs-service.yml

现在,在创建 pod 时,当我等待几分钟时,它也不会从“待处理”变为“就绪” - 我检查kubectl get pod gogs

我的设置有什么问题?我该如何检查?我可以使用 ssh 登录。当我查看 /var/log/messages 时,我可以在文件末尾看到一些 docker 错误,内容如下:

aufs au_opts_verify:1570:docker[4711]: dir perm1 breaks the protection by the permission bits on the lower branch

但仅此而已,到目前为止我找不到任何能指引我正确方向的东西。任何帮助都非常感谢 :)

答案1

PGDATA您还应该使用环境变量指定默认数据目录位置。

尝试这个:

apiVersion: v1
kind: Pod
metadata:
  name: gogs
  labels:
    name: gogs
spec:
  containers:
    - name: gogs
      image: gogs/gogs
      ports:
        - containerPort: 3000
        - containerPort: 22
      volumeMounts:
        - mountPath: /data
          name: data
    - name: postgres
      image: postgres
      ports: 
        - containerPort: 5432
      env:
        - name : PGDATA
          value: /var/lib/postgresql/data/pgdata
        - name: POSTGRES_USER
          value: myuser
        - name: POSTGRES_PASSWORD
          value: mypassword
        - name: POSTGRES_DB
          value: mydb
      volumeMounts:
        - mountPath: /var/lib/postgresql/data
          name: postgres
  volumes:
    - name: data
      gcePersistentDisk:
        pdName: gogs-stage-data-disk
        fsType: ext4
    - name: postgres
      gcePersistentDisk:
        pdName: gogs-stage-postgres-disk
        fsType: ext4

相关内容