Kubernetes in action-初相识

初相识Kubernetes

  • 1、构建、运行以及共享镜像
    • [1.1 运行镜像](#1.1 运行镜像)
    • [1.2 构建镜像](#1.2 构建镜像)
    • [1.3 推送镜像](#1.3 推送镜像)
  • 2、Kubernetes初相识
    • [2.1 介绍Pod](#2.1 介绍Pod)
    • [2.2 从构建到运行整体流程](#2.2 从构建到运行整体流程)
    • [2.3 kubectl命令行工具](#2.3 kubectl命令行工具)

如有侵权,请联系~

如有错误,也欢迎批评指正~

本篇文章大部分是来自学习《Kubernetes in action》的笔记

虽然业务的发展,单体应用已经无法满足业务的诉求,大家已经从单体应用转向微服务。但是微服务有个难题就是随着服务的增加维护成本变得越来越高,系统的资源不能很好的利用。例如如果某个服务发布部署到哪个机器上,以及服务上的某个机器挂了怎么自动的进行故障转移。所以,Kubernetes就诞生了,可以做到开发维护是一个人,即devops.

1、构建、运行以及共享镜像

在运行之前肯定是先安装docker,安装可以参考官方文档: dockerdocs

1.1 运行镜像

通过如下命令可以运行执行的镜像:

powershell 复制代码
docker run <image>

docker run 是一个复合命令,它完成了以下两个主要任务:

  1. 检查本地是否存在镜像
    Docker 会首先检查本地是否已经存在指定的镜像。如果镜像已经存在,则直接使用本地镜像。
  2. 如果镜像不存在,则自动拉取镜像
    如果本地没有找到指定的镜像,Docker 会尝试从远程镜像仓库(如 Docker Hub 或私有仓库)拉取镜像。

因为镜像存在不同的版本,每个版本都有唯一的tag名,可以在运行的时候显示的指定tag名,如果没有指定则是最新的latest。

powershell 复制代码
docker run <image>:<tag>

完整的命令格式:

powershell 复制代码
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • IMAGE:要运行的镜像名称。
  • COMMAND\] \[ARG...\]:可选参数,指定容器启动时运行的命令及其参数。

如:

powershell 复制代码
// -d 后台运行容器
docker run -d nginx
// -p 将主机端口映射到容器端口
docker run -p 8080:80 nginx
// -v 挂载主机的文件到容器中
docker run -v /host/data:/container/data my-image

1.2 构建镜像

业务代码和DockerFile文件准备

首先肯定是先写自己的业务代码然后进行打包,并且将创建一个DockerFile文件【将应用打包成镜像】,DockerFile文件中包含了一系列构建镜像时的命令。DockerFile内容如下:

powershell 复制代码
FROM centos:latest // 这个镜像是基于centos:latest镜像继续创建的

COPY ${APP_NAME}.tgz /home/admin/${APP_NAME}/target/${APP_NAME}.tgz
ENTRYPOINT ["source /home/admin/start.sh"] // 容器启动的时候执行如下命令,该命令可以启动应用代码服务

业务代码和DockerFile文件创建完成之后,就可以构建镜像。

执行构建命令

docker守护进程【服务端】就会根据DockerFile文件【需要docker客户端传递给服务端】进行构建镜像,如果docker服务端没有基础镜像【本文是centos:latest】则会从docker仓库拉取。

powershell 复制代码
docker build [OPTIONS] PATH | URL | -
  • PATH:指定包含 Dockerfile 的目录路径。
  • URL:可以从远程仓库(如 Git 仓库)拉取 Dockerfile。
  • -:从标准输入(stdin)读取 Dockerfile 内容。

常用选项:

  • -t 或 --tag:为生成的镜像指定名称和标签(如 my-image:1.0)。
  • --file 或 -f:指定自定义的 Dockerfile 文件名。
  • --no-cache:禁用构建缓存,确保每次重新构建所有层。
  • --pull:强制拉取最新的基础镜像。

例如:

powershell 复制代码
docker build -t [构建之后的镜像名] .
docker build -t my-image -f MyDockerfile .

1.3 推送镜像

镜像构建完只存在本地,只有推送到镜像仓库才可以被其他机器拉取使用。镜像仓库有很多,公开的有Docker Hub、Quay.io等。例如想要将镜像推送到Docker Hub:

  • 需要去docker hub中注册自己的账号
  • 使用docker login进行登陆
  • 然后进行推送到docker hub仓库
powershell 复制代码
docker push [OPTIONS] NAME[:TAG]
  • NAME[:TAG]:要推送的镜像名称和标签。例如:
    my-repo/my-image:latest
    nginx:1.23
  • OPTIONS\]:可选参数(较少使用)。

如果想要配置k8s:

2.1 介绍Pod

针对于K8s并不会直接处理容器,他的最小处理单元是pod。

  • 一个物理机器可以有多个pod;
  • 一个pod中可以有多个容器,而多个容器之间运行在同一个网络命名空间,CPU资源共享,但是文件和进程是不同的命名空间,隔离的;一般同一个pod中的多个容器是相关的,例如主容器【业务容器】和sidecar运维容器
  • 当然一个容器中也可以运行不止一个进程。

2.2 从构建到运行整体流程

  • 研发首先将自己的业务代码打包,然后和Docker文件一起存储在本地机器或者构建机上。然后执行镜像的构建和推送。
  • 将该镜像运行在k8s上。kubectr就会向k8s的主节点master上发送http请求,主节点就会创建一个新的ReplicationController对象,并且ReplicationController对象会创建一个新的pod,调度器负责将pod调度到某个工作节点上。
  • kublet接收到通知之后就会调用docker去docker仓库拉取相应的镜像,下载成功之后就会创建并启动容器。

2.3 kubectl命令行工具

kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群交互。它允许用户管理集群资源(如 Pod、Deployment、Service 等)以及查看集群状态和日志。

基本语法:

powershell 复制代码
kubectl [command] [TYPE] [NAME] [flags]
  • command:操作类型,例如 get、create、delete。
  • TYPE:资源类型,例如 pod、deployment、service。
  • NAME:资源名称。
  • flags:可选参数,用于指定额外选项。
powershell 复制代码
 // 查看pod
kubectl get pods
// 查看deployments
kubectl get deployments
// 查看service
kubectl get services
// 查看具体的某个pod或者deployment信息
kubectl describe pod <pod-name>
kubectl describe deployment <deployment-name>
相关推荐
海棠一号18 分钟前
JAVA理论第五章-JVM
java·开发语言·jvm
eternal__day35 分钟前
Spring Cloud 多机部署与负载均衡实战详解
java·spring boot·后端·spring cloud·负载均衡
颜淡慕潇39 分钟前
Redis 实现分布式锁:深入剖析与最佳实践(含Java实现)
java·redis·分布式
程序员秘密基地1 小时前
基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql数据库,在线考试系统
java·vue.js·spring boot·spring·web app
何中应1 小时前
【设计模式-5】设计模式的总结
java·后端·设计模式
吾日三省吾码1 小时前
Spring 团队详解:AOT 缓存实践、JSpecify 空指针安全与支持策略升级
java·spring·缓存
zyjyyds1131 小时前
win11系统 Docker Desktop 突然提示Docker Engine stopped解决情况之一
运维·docker·容器
Altairr1 小时前
Docker基础(一)
运维·docker·容器·eureka
搬运Gong1 小时前
Dockerfile使用与最佳实践
docker·容器·虚悬镜像
风象南1 小时前
SpringBoot的5种日志输出规范策略
java·spring boot·后端