Bootstrap

Go项目-----Kubernetes使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

这篇文章梳理一下关于Kubernetes的一些基本概念,通过k8s来对mysql,redis和我们的服务进行部署。

基本概念

k8s是一个容器编排工具,简单来讲就是管理容器的。这里的容器可以是docker生成的,也可以不是docker生成的。在k8s中有几个基本的概念。

  • pod实例,就是我们运行的一个服务实例。
  • service,就逻辑上的服务,可以理解是我们业务服务的一个映射。
  • deployment,它是用来管理我们实例pod的。

kubectl工具

通过这个网站来进行安装。kubectl是一个命令行工具,我们需要通过它来进行k8s部署。

https://kubernetes.io/docs/tasks/tools/

部署web服务

我们先部署一个简单的web服务,这个web服务中去除对mysql和redis的依赖。
前面我们提到了,k8s是管理容器的,所以我们需要把我们的web服务通过docker进行打包,构建一个镜像。

生成镜像

首先我们需要编译我们的源代码,将其生成一个可执行文件。使用docker对其生成镜像。
编写我们的Dockerfile文件,我们执行docker build -t就是依靠这个文件来生成镜像的。

FROM ubuntu:20.04
COPY webook /app/webook
WORKDIR /app
ENTRYPOINT ["/app/webook"]

在这里插入图片描述

编写deployment

其中最后containers中的ports中的containerport就是我们web服务实际监听的端口。
这里的image就是我们通过docker生成的镜像。
在这里插入图片描述

编写service

这边和deplpyment的编写都差不多,这里有一个很重要的点就是这里的type。
这里的type有三个选项:

  • LoadBalancer负载均衡,通过这个选项我们访问我们的pod实例就是通过这里的port端口来访问的。
  • NodePort,通过这个选项我们就要指定一个nodeport端口,来做为我们访问pod的端口,这个端口一般是30000开始的一个端口号。
    在这里插入图片描述

启动服务

通过kubectl来启动我们对应的deployment和service。

kubectl apply -f XXX.yaml

k8s部署mysql

同样的我们也需要部署deployment和service。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webook-mysql
  labels:
    app: webook-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webook-mysql
  template:
    metadata:
      name: webook-mysql
      labels:
        app: webook-mysql
    spec:
      containers:
        - name: webook-mysql
          image: mysql:8.0
          env:
            #            通过环境变量设置 root 的密码
            - name: MYSQL_ROOT_PASSWORD
              value: root
#         mysql数据怎么存储
          volumeMounts:
            - mountPath: /var/lib/mysql
              name: mysql-storage
#        -pod暴露的端口
          ports:
            - containerPort: 3306
      volumes:
        - name: mysql-storage
          persistentVolumeClaim:
            #            使用 webook-mysql-pv-claim,这个 claim 里面详细描述了 mysql 所需要的卷的特性
            claimName: webook-mysql-pv-claim


编写pvc

但是mysql是需要持久化存储的,所以我们需要为mysql配置持久化卷。pvc就是PersistentVolumeClaim,他描述了mysql需要什么样的Volume。
在这里插入图片描述

编写pv

pv描述的就是我k8s有什么样子的voloume。这两个配置需要相符配合使用。
在这里插入图片描述

编写service

这里的service就是使用的NodePort类型了,我们需要指定一个nodeport端口,这是外部访问我们的端口。这里的port端口就是这个service的端口,targetPort是我们访问pod的端口。
在这里插入图片描述

部署redis

redis的部署就很简单了,不需要编写pv和pc。
在这里插入图片描述
在这里插入图片描述

集成部署mysql和redis

在我们的项目中,我们的webook服务是被部署在k8s中的,他要想访问redis和mysql应该是内部通信。
因此需要绑定内部的接口。也就是上图中的port端口。ip地址我们直接使用的label名称,k8s会自动帮我们解析。这也是当时踩坑的地方。
在这里插入图片描述

;