【k8s】kubernetes部署http-api(golang)之helloworld

1. golang程序

golang程序实现了一个简单的hello world接口,代码如下:

package main

import (
	"log"
	"net/http"
)

func main() {
    
    

	http.HandleFunc("/v1/test/helloword", hello)
	server := http.Server{
    
    
		Addr: ":8081",
	}
	err := server.ListenAndServe()
	if err != nil {
    
    
		panic(err)
	}
}

func hello(response http.ResponseWriter, request *http.Request) {
    
    
	_, err := response.Write([]byte("{\"msg\":\"hello kubernetes!\"}"))
	if err != nil {
    
    
		log.Println(err)
	}
}

运行验证golang程序,接口可成功访问到,golang程序无问题:
在这里插入图片描述

2. 容器化

编写Dockerfile,代码如下:

FROM golang:alpine
RUN mkdir /hello-world
COPY . /hello-world
WORKDIR /hello-world
RUN go build -o main .
CMD ["/hello-world/main"]

**编译镜像,**本例直接进入hello-world应用目录使用该目录下Dockerfile进行镜像编译,并将编译镜像命名为hello-world且打上v1.0.0的tag:
在这里插入图片描述
查看镜像:
在这里插入图片描述
**测试镜像,**运行镜像且将容器端口映射至物理机端口:
在这里插入图片描述
访问:
在这里插入图片描述
至此说明镜像无问题。

3. 推送镜像到仓库

docker默认镜像仓库为hub.docker。
登录镜像仓库:
在这里插入图片描述
镜像名称重命名为符合docker规范的名称:用户名/镜像名:tag
在这里插入图片描述
推送镜像到仓库:
在这里插入图片描述
仓库验证:
在这里插入图片描述

4. k8s部署

新建namespace(也可不建,用现有的或默认的default),本例采用yaml方式新建ns,yaml如下:

apiVersion: v1
kind: Namespace
metadata:
  name: hello-namespace

创建ns并查看ns:
在这里插入图片描述
使用deployment部署应用,deployment.yaml如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/name: hello-world-app
  name: hello-world-app
  namespace: hello-namespace
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: hello-world-app
  template:
    metadata:
      labels:
        app.kubernetes.io/name: hello-world-app
    spec:
      containers:
      - image: cherishyan/hello-world:v1.0.0
        name: hello-world-app
        ports:
        - containerPort: 8081

创建deployment并查看:
在这里插入图片描述
使用service的nodePort方式暴露服务,service.yaml如下:

apiVersion: v1
kind: Service
metadata:
  name: hello-world-app-service
  namespace: hello-namespace
  labels:
    k8s-app: hello-world-app-service
spec:
  type: NodePort
  ports:
  - name: hello-world-app-api
    port: 8081
    targetPort: 8081
    nodePort: 31111
  selector:
    app.kubernetes.io/name: hello-world-app

部署service并查看:
在这里插入图片描述
访问node公网ip和映射端口验证
在这里插入图片描述
服务部署成功。

猜你喜欢

转载自blog.csdn.net/m0_38075425/article/details/108464653
今日推荐