1. k8s 入门
1.1 k8s 简介
需要最需要明确的就是:kubernetes(简称 k8s ) 是一个 容器编排平台 ,换句话说就是用来管理容器的,相信学过 Docker 的小伙伴对于容器这个概念并不陌生,打个比方:容器就是一个 “程序的隔离运行环境”,屏蔽了底层 OS 实现以及一些其余资源的依赖
1.2 k8s 基本概念
作为初学者,我们只需要了解 k8s 当中有这些概念即可:
- Pod:实例
- Service:逻辑上的服务,可以认为是你业务上某个微服务的直接映射
- Deployment:管理 Pod 的东西
如何来理解 Pod 和 Service 的关系?
- 简单来说你有一个订单服务(OrderService)需要部署三个实例做集群部署,那么在 k8s 中就对应有一个 order 的 Service,对应三个 Pod 实例
如何来理解 Pod 和 Deployment 的关系?
- 简单来说 Deployment 就是一个运维管家,你要求有三个 Pod 那么多启动一个 Deployment 就会帮你自动删除一个;如果有一个宕机了,那么 Deployment 就会帮你自动重启一个
2. k8s windows 安装
参考文档:https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-windows/
此处我们在 Windows 平台使用curl
命令来安装kubectl
工具方便操作 k8s:curl.exe -LO "[https://dl.k8s.io/release/v1.32.0/bin/windows/amd64/kubectl.exe"](https://dl.k8s.io/release/v1.32.0/bin/windows/amd64/kubectl.exe")
3. k8s 部署极简 Go 应用
❗ 注意:
- 为了方便入门,本教程仅部署一个简单使用 gin 框架搭建的 Web 系统,没有用到 MySQL 和 Redis 等其他中间件依赖
- 请确保您的主机上已经安装好了 Docker 环境,因为后期需要使用 Docker 制作镜像和运行容器
步骤一:首先准备好一段需要运行的 go 代码:
package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {server := gin.Default()server.GET("/hello", func(ctx *gin.Context) {ctx.String(http.StatusOK, "k8s hello world!")})server.Run(":8080")
}
步骤二:在命令行中交叉编译这段代码为 Linux 环境下的可执行文件:GOOS=linux GOARCH=arm go build -o k8s_demo .
步骤三:编写 Dockerfile 制作镜像:docker build -t ricejson/demo:v0.0.1 .
(步骤二和步骤三你也可以使用 Makefile 文件编写)
# 使用哪个基础镜像
FROM ubuntu:20.04
# 拷贝当前目录k8s_demo到工作目录中
COPY k8s_demo /app/k8s_demo
# 设定工作根目录
WORKDIR /app
# 启动脚本
ENTRYPOINT ["/app/k8s_demo"]
步骤四:编写 k8s Deployment 文件:
apiVersion: apps/v1
kind: Deployment
metadata:name: demo-service
spec:# 副本数replicas: 3# 选择器selector:matchLabels:app: demotemplate:metadata:labels:app: demospec:containers:- name: demoimage: ricejson/demo:v0.0.1ports:- containerPort: 8080
步骤五:编写 k8s Service 文件:
apiVersion: v1
kind: Service
metadata:name: demo
spec:selector:app: demoports:- protocol: TCPport: 80targetPort: 8080type: NodePort
步骤六:需要在 Docker 设置中启用 enable kubernetes
步骤七:借助kubectl
工具启动:kubectl apply -f k8s-demo-deployment.yaml
步骤八:借助kubectl
工具启动:kubectl apply -f k8s-demo-service.yaml
步骤九:配置端口转发:kubectl port-forward <pod-name> 8080:8080
此时就可以在本地访问到了!
4. k8s 配置文件参数含义
下面就来简单解释下 k8s 配置文件当中的一些参数含义:
Deployment 文件:
- apiVersion:由于 k8s 是一个配置驱动的框架,因此需要让 k8s 知道如何来解读这个配置文件,就需要指定apiVersion
- spec:就是 Deployment 的规格说明书
- replicas:副本数量,就是你要管理多少个 Pod
- selector:筛选器,就是告知 Deployment 在那么多的 pod 中,究竟哪些 Pod 由该 Deployment 进行管理
- template:告诉 Deployment 究竟如何创建每一个 Pod
- template:需要特别指定容器 containers,容器需要指定镜像 image
Service 文件:
- type:这里是选择负载均衡策略
- ports:配置端口
- port:外部访问的端口
- protocol:端口监听的协议
- targetPort:转发请求的时候,应该转发到 Pod 的哪个端口上