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>
相关推荐
Nelson_hehe1 小时前
Java基础第四章、面向对象
java·语法基础·面向对象程序设计
Thomas_YXQ1 小时前
Unity3D Lua集成技术指南
java·开发语言·驱动开发·junit·全文检索·lua·unity3d
ShiinaMashirol2 小时前
代码随想录打卡|Day27(合并区间、单调递增的数字、监控二叉树)
java·算法
Anarkh_Lee3 小时前
Neo4j在win下安装教程(docker环境)
docker·容器·neo4j
东阳马生架构4 小时前
Nacos简介—3.Nacos的配置简介
java
北极的企鹅884 小时前
XML内容解析成实体类
xml·java·开发语言
oioihoii4 小时前
C++23 中 static_assert 和 if constexpr 的窄化布尔转换
java·jvm·c++23
聂 可 以4 小时前
调整IntelliJ IDEA当前文件所在目录(包路径)的显示位置
java·ide·intellij-idea
东阳马生架构4 小时前
Sentinel源码—7.参数限流和注解的实现一
java·sentinel
正经教主4 小时前
【问题】解决docker的方式安装n8n,找不到docker.n8n.io/n8nio/n8n:latest镜像的问题
运维·docker·容器·n8n