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>
相关推荐
2401_cf2 小时前
为什么hadoop不用Java的序列化?
java·hadoop·eclipse
帮帮志2 小时前
idea整合maven环境配置
java·maven·intellij-idea
LuckyTHP3 小时前
java 使用zxing生成条形码(可自定义文字位置、边框样式)
java·开发语言·python
我没有开挂4 小时前
旧 docker 版本通过 nvkind 搭建虚拟多节点 gpu 集群的坑
运维·docker·容器
小鸡,啄米4 小时前
centos9安装docker 配置docker代理
运维·docker·容器
oceanweave5 小时前
【K8S学习之生命周期钩子】详细了解 postStart 和 preStop 生命周期钩子
学习·kubernetes
无声旅者6 小时前
深度解析 IDEA 集成 Continue 插件:提升开发效率的全流程指南
java·ide·ai·intellij-idea·ai编程·continue·openapi
遇见火星6 小时前
jenkins流水线常规配置教程!
运维·docker·jenkins
Ryan-Joee6 小时前
Spring Boot三层架构设计模式
java·spring boot
Hygge-star6 小时前
【数据结构】二分查找5.12
java·数据结构·程序人生·算法·学习方法