当前位置: 首页 > news >正文

【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 代码:

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

# 使用哪个基础镜像
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: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: demo
          image: ricejson/demo:v0.0.1
          ports:
            - containerPort: 8080

步骤五:编写 k8s Service 文件:

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 的哪个端口上

相关文章:

  • Copilot基于企业PPT模板生成演示文稿
  • Apache Struts2 - 任意文件上传漏洞 - CVE-2024-53677
  • Linux学习笔记之进程
  • 深度学习笔记——循环神经网络之LSTM
  • 用deepseek学大模型03-数学基础 概率论 随机变量 概率分布
  • 用deepseek学大模型04-模型可视化与数据可视化
  • Java ArrayList(单列集合)
  • Edge浏览器翻译|自动翻译设置
  • 网页模板免费HTML源码 HTML网页设计模板
  • DeepSeek 深度解析:引领 SEO 与数据分析新时代的智能工具
  • Oracle VirtualBox虚拟机软件中安装ubuntu(不理想版本)
  • 前端知识速记:BFC与IFC
  • STM32 RTC 实时时钟说明
  • 蓝桥杯单片机大模板(西风)
  • Java 大视界 -- 边缘计算与 Java 大数据协同发展的前景与挑战(85)
  • linux-带宽性能压测-全解iperfwgetspeedtest-cli
  • 【第9章:计算机视觉实战—9.4 计算机视觉在其他领域的应用探索】
  • 2021年下半年软件设计师下午试卷题型和考点总结(附真题及答案解析)
  • AI大模型的技术突破与传媒行业变革
  • 语音识别(实时语音转录)——funasr的详细部署和使用教程(包括实时语音转录)
  • 三家“券商系”公募同日变更掌门人,新董事长均为公司股东方老将
  • 乌方公布矿产协议详情:未提债务义务,包含美再援助条款
  • 上海科创再出发:“造星”的城和“摘星”的人
  • 专访 | 杜普兰蒂斯:爱上中国文化,下一步努力提升速度
  • 国新办发布《关于新冠疫情防控与病毒溯源的中方行动和立场》白皮书
  • 解读|特朗普“助攻”下加拿大自由党“惨胜”,卡尼仍需克服“特鲁多阴影”