小编ioo*_*ooi的帖子

如何在kubernetes中使用statefulset设置pvc?

在 GKE 上,我将有状态集资源设置为

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis
spec:
  serviceName: "redis"
  selector:
    matchLabels:
      app: redis
  updateStrategy:
    type: RollingUpdate
  replicas: 3
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis
        resources:
          limits:
            memory: 2Gi
        ports:
          - containerPort: 6379
        volumeMounts:
          - name: redis-data
            mountPath: /usr/share/redis
      volumes:
        - name: redis-data
          persistentVolumeClaim:
            claimName: redis-data-pvc
Run Code Online (Sandbox Code Playgroud)

想要使用 PVC 所以创建了这个。(这一步是在statefulset部署之前完成的)

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
Run Code Online (Sandbox Code Playgroud)

当检查kubernetes中的资源时

kubectl get pvc
NAME …
Run Code Online (Sandbox Code Playgroud)

kubernetes google-kubernetes-engine persistent-volumes kubernetes-pvc kubernetes-statefulset

10
推荐指数
1
解决办法
2万
查看次数

如何使用 swaggo 在另一个文件中使用类型定义?

我正在使用swaggo根据godoc语法生成 API 文档。

源文件夹和文件

|-post
|--controller.go
|--response.go
Run Code Online (Sandbox Code Playgroud)

对于这个定义:

controller.go

package post

...

// Index godoc
// @Summary Index Post
// @Success 200 {array} []*Response
// @Router /v1/posts [get]
func Index(ctx *gin.Context) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

Response是在同一包的另一个文件中定义的。

response.go

package post

// Response  is post response body
type Response struct {
    ID   int64  `json:"id"`
    Name string `json:"name"`

    CreatedAt string `json:"created_at"`
    UpdatedAt string `json:"updated_at"`
}
Run Code Online (Sandbox Code Playgroud)

但是当运行swag init生成 swagger 文档时,它说:

2021/01/29 09:39:56 Generate swagger docs....
2021/01/29 09:39:56 …
Run Code Online (Sandbox Code Playgroud)

include package go swagger godoc

6
推荐指数
2
解决办法
1万
查看次数

如何向 Gin 框架的路由器添加正则表达式约束?

使用Rails的路由,对于像这样的URL https://www.amazon.com/posts/1,可以使用这种方式来做

\n
get \'posts/:url\', to: \'posts#search\', constraints: { url: /.*/ }\n
Run Code Online (Sandbox Code Playgroud)\n

使用go的gin框架,没有找到这样的路由的正则约束方法

\n
r.GET("posts/search/:url", post.Search)\n
Run Code Online (Sandbox Code Playgroud)\n

在后置控制器中

\n
func Search(c *gin.Context) {\n    fmt.Println(c.Param("url"))\n}\n
Run Code Online (Sandbox Code Playgroud)\n

调用时http://localhost:8080/posts/search/https://www.amazon.com/posts/1,返回404代码。

\n
\n

就像https://play.golang.org/p/dsB-hv8Ugtn

\n
\xe2\x9e\x9c  ~ curl http://localhost:8080/site/www.google.com\nHello www.google.com%\n\xe2\x9e\x9c  ~ curl http://localhost:8080/site/http://www.google.com/post/1\n404 page not found%\n\xe2\x9e\x9c  ~ curl http://localhost:8080/site/https%3A%2F%2Fwww.google.com%2Fpost%2F1\n404 page not found%\n\xe2\x9e\x9c  ~ curl http://localhost:8080/site/http:\\/\\/www.google.com\\/post\\/1\n404 page not found%\n
Run Code Online (Sandbox Code Playgroud)\n

regex frameworks routes url-routing go

1
推荐指数
1
解决办法
2947
查看次数

如何在子文件夹中使用 go.mod 构建 golang docker 镜像?

我有一个 go 项目文件夹

my_project
|- common
    |- library
        |- golang
|- my_app
    |- Dockerfile
    |- go.mod
    |- go.sum
    |- main.go
Run Code Online (Sandbox Code Playgroud)

Dockerfile 来自谷歌云官方示例:

FROM golang:1.15-buster as builder

WORKDIR /app

COPY go.* ./
RUN go mod download

COPY . ./

RUN go build -mod=readonly -v -o server

FROM debian:buster-slim
RUN set -x && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    ca-certificates && \
    rm -rf /var/lib/apt/lists/*

COPY --from=builder /app/server /server

CMD ["/server"]
    
Run Code Online (Sandbox Code Playgroud)

go.mod 在同一个项目中使用公共库但属于私有存储库:

module run

go 1.15

require (
    github.com/my/private/my_project/common/library/golang …
Run Code Online (Sandbox Code Playgroud)

module path go docker

1
推荐指数
1
解决办法
1148
查看次数