Kubernetes in action-初相识
初相识Kubernetes
- 1、构建、运行以及共享镜像
- 1.1 运行镜像
- 1.2 构建镜像
- 1.3 推送镜像
- 2、Kubernetes初相识
- 2.1 介绍Pod
- 2.2 从构建到运行整体流程
- 2.3 kubectl命令行工具
如有侵权,请联系~
如有错误,也欢迎批评指正~
本篇文章大部分是来自学习《Kubernetes in action》的笔记
虽然业务的发展,单体应用已经无法满足业务的诉求,大家已经从单体应用转向微服务。但是微服务有个难题就是随着服务的增加维护成本变得越来越高,系统的资源不能很好的利用。例如如果某个服务发布部署到哪个机器上,以及服务上的某个机器挂了怎么自动的进行故障转移。所以,Kubernetes就诞生了,可以做到开发维护是一个人,即devops.
1、构建、运行以及共享镜像
在运行之前肯定是先安装docker,安装可以参考官方文档: dockerdocs。
1.1 运行镜像
通过如下命令可以运行执行的镜像:
docker run <image>
docker run 是一个复合命令,它完成了以下两个主要任务:
- 检查本地是否存在镜像
Docker 会首先检查本地是否已经存在指定的镜像。如果镜像已经存在,则直接使用本地镜像。 - 如果镜像不存在,则自动拉取镜像
如果本地没有找到指定的镜像,Docker 会尝试从远程镜像仓库(如 Docker Hub 或私有仓库)拉取镜像。
因为镜像存在不同的版本,每个版本都有唯一的tag名,可以在运行的时候显示的指定tag名,如果没有指定则是最新的latest。
docker run <image>:<tag>
完整的命令格式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- IMAGE:要运行的镜像名称。
- [COMMAND] [ARG…]:可选参数,指定容器启动时运行的命令及其参数。
- [OPTIONS]:用于配置容器的各种选项。
如:
// -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内容如下:
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仓库拉取。
docker build [OPTIONS] PATH | URL | -
- PATH:指定包含 Dockerfile 的目录路径。
- URL:可以从远程仓库(如 Git 仓库)拉取 Dockerfile。
- -:从标准输入(stdin)读取 Dockerfile 内容。
常用选项:
- -t 或 --tag:为生成的镜像指定名称和标签(如 my-image:1.0)。
- –file 或 -f:指定自定义的 Dockerfile 文件名。
- –no-cache:禁用构建缓存,确保每次重新构建所有层。
- –pull:强制拉取最新的基础镜像。
例如:
docker build -t [构建之后的镜像名] .
docker build -t my-image -f MyDockerfile .
1.3 推送镜像
镜像构建完只存在本地,只有推送到镜像仓库才可以被其他机器拉取使用。镜像仓库有很多,公开的有Docker Hub、Quay.io等。例如想要将镜像推送到Docker Hub:
- 需要去docker hub中注册自己的账号
- 使用docker login进行登陆
- 然后进行推送到docker hub仓库
docker push [OPTIONS] NAME[:TAG]
- NAME[:TAG]:要推送的镜像名称和标签。例如:
my-repo/my-image:latest
nginx:1.23 - [OPTIONS]:可选参数(较少使用)。
2、Kubernetes初相识
如果想要配置k8s:
- 针对于配置单节点的k8s可以使用MiniKube安装仓库;
- 配置多节点的k8s可以使用Google Kubernetes Engine
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 等)以及查看集群状态和日志。
基本语法:
kubectl [command] [TYPE] [NAME] [flags]
- command:操作类型,例如 get、create、delete。
- TYPE:资源类型,例如 pod、deployment、service。
- NAME:资源名称。
- flags:可选参数,用于指定额外选项。
// 查看pod
kubectl get pods
// 查看deployments
kubectl get deployments
// 查看service
kubectl get services
// 查看具体的某个pod或者deployment信息
kubectl describe pod <pod-name>
kubectl describe deployment <deployment-name>