【Kubernetes】k8s 部署指南

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 应用

❗ 注意:

  1. 为了方便入门,本教程仅部署一个简单使用 gin 框架搭建的 Web 系统,没有用到 MySQL 和 Redis 等其他中间件依赖
  2. 请确保您的主机上已经安装好了 Docker 环境,因为后期需要使用 Docker 制作镜像和运行容器

步骤一:首先准备好一段需要运行的 go 代码:

go 复制代码
package main

import (
	"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 文件编写)

dockerfile 复制代码
# 使用哪个基础镜像
FROM ubuntu:20.04
# 拷贝当前目录k8s_demo到工作目录中
COPY k8s_demo /app/k8s_demo
# 设定工作根目录
WORKDIR /app
# 启动脚本
ENTRYPOINT ["/app/k8s_demo"]

步骤四:编写 k8s Deployment 文件:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-service
spec:
  # 副本数
  replicas: 3
  # 选择器
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: demo
          image: ricejson/demo:v0.0.1
          ports:
            - containerPort: 8080

步骤五:编写 k8s Service 文件:

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: demo
spec:
  selector:
    app: demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: 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 的哪个端口上
相关推荐
我是谁??23 分钟前
ubuntu22.04 通过docker部署vLLM(Qwen3-0.6B)大模型+New API+OpenWebUI
docker·容器·vllm
Patrick_Wilson33 分钟前
K8s 探针避坑:Next.js 不同部署模式下的健康检查实践
kubernetes·node.js·next.js
运维瓦工1 小时前
DevOps 生态介绍(十):Docker Compose 核心 YAML 配置详解与常用命令大全
spring cloud·docker·容器
Plastic garden1 小时前
K8s(10)NFS 的动态 PV 创建数据库给k8s的mysql和redis
docker·容器·kubernetes
Plastic garden1 小时前
k8s(11) Pod 控制器,服务发现与存储管理
kubernetes
与海boy2 小时前
docker compose minio
docker·容器·eureka
星辰徐哥2 小时前
云原生核心特性:容器化、微服务与DevOps的通俗解读
微服务·云原生·devops
武子康2 小时前
调查研究-167 Docker Compose 详解:从单容器到多服务编排的工程化入口
运维·docker·云原生·容器·kubernetes·k8s·docker-compose
heimeiyingwang3 小时前
【架构实战】分布式会话:从Session到JWT的演进
微服务·云原生·架构