K8s 入门指南(二):实战概念讲解
# 前言
本专栏为 k8s
实战模块讲解专栏
# Container
这里先创建简单的 springboot 项目,然后开放一个供 k8s
访问的接口
示例项目地址:ReturnTmp/springboot-k8s-demo (github.com) (opens new window)
@RestController
@RequestMapping("/k8s")
public class HelloK8sController {
@GetMapping("/hello")
public String helloK8s() {
return "Hello K8s!";
}
}
2
3
4
5
6
7
8
9
然后在服务器拉取项目,然后执行
首先登录 docker,然后输入 docker 的账号密码即可
docker login
然后编写如下 Dockerfile
# Dockerfile
FROM golang:1.16-buster AS builder
RUN mkdir /src
ADD . /src
WORKDIR /src
RUN go env -w GO111MODULE=auto
RUN go build -o main .
FROM gcr.io/distroless/base-debian10
WORKDIR /
COPY /src/main /main
EXPOSE 3000
ENTRYPOINT ["/main"]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
注:如果
gcr.io/distroless/base-debian10
镜像因为网络原因拉取失败,可以使用代理地址gcr.dockerproxy.com/distroless/base-debian10
接下来我们使用如下命令构建镜像,需要注意 main.go
文件需要和 Dockerfile
文件在同一个目录下,执行下方 docker build
命令,第一次需要耐心等待拉取基础镜像。并且需要注意将命令中 returntmp
替换成自己的 DockerHub
注册的账号名称。这样我们后续可以推送镜像到自己注册的 DockerHub
仓库当中。
docker build . -t returntmp/hellok8s:v1
之后我们可以使用 docker images
查看镜像是否构建成功
然后运行容器,运行成功后我们访问 http://127.0.0.1:3000
, 查看是否成功返回字符串 [v1] Hello, Kubernetes!
docker run -p 3000:3000 --name hellok8s -d returntmp/hellok8s:v1
查看容器成功运行之后,我们就可以推送镜像到仓库中(注意替换自己的账号名)
docker push returntmp/hellok8s:v1
# Pod
在单体服务中,上面的 Container 已经足够,但是在生产环境中,我们需要维护着大规模的集群和各种不同的服务,服务之间往往存在着各种各样的关系
Pod 是我们将要创建的第一个 k8s 资源,也是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元,下面我们将要创建一个简单的 Pod 试试
创建 nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx
2
3
4
5
6
7
8
其中 kind
表示我们要创建的资源是 Pod
类型, metadata.name
表示要创建的 pod 的名字,这个名字需要是唯一的。 spec.containers
表示要运行的容器的名称和镜像名称。镜像默认来源 DockerHub
。
我们运行第一条 k8s 命令 kubectl apply -f nginx.yaml
命令来创建 nginx
Pod。
接着通过 kubectl get pods
来查看 pod 是否正常启动。
最后通过 kubectl port-forward nginx-pod 4000:80
命令将 nginx
默认的 80
端口映射到本机的 4000
端口,打开浏览器或者 curl
来访问 http://127.0.0.1:4000
, 查看是否成功访问 nginx
默认页面