平替 Docker - 玩转容器新利器 Podman Desktop (视频)
《OpenShift 4.x HOL教程汇总》
在 podman-desktop 1.2.1 + podman 4.4 环境中验证。
文章目录
- 什么是 podman 和 podman-desktop
- 安装 podman 和 podman-desktop 基本环境
- Image、Container 和 Pod 的基本操作
- 拉取 Image
- 运行 Container
- 将 Pod 部署到 Kubernetes
- 安装 Kind 扩展插件
- 创建 Kubernetes 集群
- 向 Kubernetes 部署 Pod
- 访问 Kubernetes 中的 Pod
- 视频
什么是 podman 和 podman-desktop
- podman 是 RedHat 公司主导的一个免费的开源容器项目,目标是平替安全能力较差的 Docker。作为运行容器的独立环境,podman 目前已经广泛被用在 Linux、MacOS 或 Windows 环境中。尤其在 RHEL、CentOS、SUSE、Ubuntu 等 Linux 中,podman 已经是默认的容器运行环境了。除了比 Docker 有更优的安全运行特性外,podman 还有很多其他特性。例如 podman 不但可以运行标准容器,还可以像 Kubernetes 那样运行 Pod(但不能调度 Pod),因此可以作为容器应用开发、测试和运行的环境。
- podman desktop 是运行 podman 的图形化工具,可以让对容器/Pod的操作更加容易。
安装 podman 和 podman-desktop 基本环境
本文使用了运行Fedora 38 桌面版的虚机,其中缺省会自带 podman 运行环境。另外由于要在其中运行 Kubernetes 集群,因此虚机内存最少配置 6G。
- 查看 podman 版本。
$ podman version
Client: Podman Engine
Version: 4.4.2
API Version: 4.4.2
Go Version: go1.20.1
Built: Wed Mar 1 19:22:39 2023
OS/Arch: linux/amd64
- 在 https://podman-desktop.io/downloads 页面下载 tar.gz 形式的 podman-desktop 文件包。
- 解压文件,然后运行 podman-desktop。
$ tar -xvf podman-desktop-1.2.1.tar.gz
$ cd podman-desktop-1.2.1
$ podman-desktop
- 在初始界面中点击下方的 Go to Podman Desktop 进入正式界面。
Image、Container 和 Pod 的基本操作
拉取 Image
- 在 Setting 栏目中的 Registries 中可以添加 Registry 的地址、访问用户名和密码。
- 在 Images 栏目中点击 Pull an image 拉取 httpd:2.4.57 镜像。
运行 Container
- 先点击上图 httpd 镜像右侧的 Run Image 箭头,然后在下图的界面中提供 Container name 为 apache-httpd-1,最后点击下方的 Start Container 按钮。
- 点击 Containers 栏目中的 apache-httpd-1 右侧的下拉菜单,然后再点击 Open Browser。
- 可以在浏览器中访问到运行在容器中的httpd页面。
- 点击第2部的 Generate Kube 菜单,然后将生成的内容保存到本地 pod-httpd.yaml 文件中。
- 停止 apache-httpd-1 容器运行。
- 在 Pods 栏目界面中点击右上方的 Play Kubernetes YAML 按钮,然后在下图的界面中为 Kubernetes YAML file 选择 pod-httpd.yaml 文件。
- 在 Pods 栏目中可以看到运行的 Pod。最后可以刷新步骤 3 的浏览器,确认可以正常访问到 httpd 页面。
将 Pod 部署到 Kubernetes
安装 Kind 扩展插件
- 在 Podman Desktop 窗口下方点击 Kind。
- 在弹出窗口中点击 Yes 开始下载 Kind 软件。
- 下载完在提示窗口中点击 Yes,然后提供管理员权限。
创建 Kubernetes 集群
-
在 Settings 栏目中进入 Resources,然后点击 Kind 下面的 Create new 按钮。
-
在 Create a Kind cluster 界面中点击 Create 按钮。
-
在创建完 Kind 集群后可以看到 kind-cluster 已经是 Running 状态了,同时还能看到 Kubernetes endpoint 地址。此外在状态栏可以看到识别出的刚刚创建的 Kubernetes 集群名称。注意:如果没有识别出 Kubernetes 集群名称,可以尝试关闭并重启 Podman Desktop。
-
运行命令,查看运行 Kubernetes 的容器。
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abbe67e830d3 docker.io/kindest/node@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72 5 hours ago Up 5 hours 0.0.0.0:9090->80/tcp, 0.0.0.0:9443->443/tcp, 127.0.0.1:41535->6443/tcp kind-cluster-control-plane
- 在浏览器中确认可以访问 Kubernetes endpoint。
- 安装 kubectl 命令。
$ sudo yum install kubernetes-client
- 使用 ~/.kube/config 访问 Kubernetes,查看 Kubernetes 命名空间。
$ more ~/.kube/config$ kubectl get namespace
NAME STATUS AGE
default Active 9m45s
kube-node-lease Active 9m45s
kube-public Active 9m45s
kube-system Active 9m45s
local-path-storage Active 9m34s
projectcontour Active 9m32s
向 Kubernetes 部署 Pod
- 在 Containers 栏目中点击 apache-httpd-1 右侧下拉菜单的 Deploy to Kubernetes。
- 在下图的 Deploy generated pod to Kubernetes 窗口中确认部署的 Kubernetes Context 和 Kubernetes namespace,最后点击 Deploy 按钮。
- 部署成功后可以在下图界面中看到 pod 是 Running 状态了,最后点击 Done 按钮即可。
访问 Kubernetes 中的 Pod
- 查看运行在 Kubernetes 中的 apache-httpd-1-pod 和 Service,然后记下 apache-httpd-1-pod-9000 服务的 CLUSTER-IP 地址。
$ kubectl get pod -n default
NAME READY STATUS RESTARTS AGE
apache-httpd-1-pod 1/1 Running 0 37s$ kubectl get svc -n default
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
apache-httpd-1-pod-9000 ClusterIP 10.96.119.200 <none> 9000/TCP 58s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29m
- 点击 kind-cluster-control-plane 容器,进入容器内部。
- 在容器中的 Terminal 中执行 “curl 10.96.119.200:9000”,然后确认可以访问到页面。
视频
视频
相关文章:

平替 Docker - 玩转容器新利器 Podman Desktop (视频)
《OpenShift 4.x HOL教程汇总》 在 podman-desktop 1.2.1 podman 4.4 环境中验证。 文章目录 什么是 podman 和 podman-desktop安装 podman 和 podman-desktop 基本环境Image、Container 和 Pod 的基本操作拉取 Image运行 Container 将 Pod 部署到 Kubernetes安装 Kind 扩展插…...

nodejs+vue+elementui招聘求职网站系统的设计与实现-173lo
(1)管理员的功能是最高的,可以对系统所在功能进行查看,修改和删除,包括企业和用户功能。管理员用例如下: 图3-1管理员用例图 (2)企业关键功能包含个人中心、岗位类型管理、招聘信息…...
静态链接(7/13)
在一个软件项目中,为了完成特定功能,除了自定义函数,还可以使用别人已经封装好的函数库,如 C 函数库。库函数的使用避免了重复“造笼子”的重复工作,提高了代码复用率,大大减轻了软件开发的工作量。 库分为…...

jvs-rules API数据源配置说明(含配置APIdemo视频)
在JVS中,多数据源支持多种形态的数据接入,其中API是企业生产过程中常见的数据形态。使用数据源的集成配置,以统一的方式管理和集成多个API的数据。这些平台通常提供各种数据转换和处理功能,使得从不同数据源获取和处理数据变得更加…...

爬虫来介绍ChromeF12 谷歌开发者工具 -Network
了解网页基础(HTML、CSS、JavaScript) 了解HTTP基本原理 了解JSON格式 了解Ajax请求 了解爬虫基本原理 (一)、Chrome开发者工具面板概述 Elements 查找网页源代码HTML中的任一元素,手动修改任一元素的属性和样式且能实时在浏览器里面得到反馈。 比如我们在Event Listener…...

[足式机器人]Part4 机械设计 Ch00/01 绪论+机器结构组成与连接 ——【课程笔记】
本文仅供学习使用 本文参考: 《机械设计》 王德伦 马雅丽课件与日常作业可登录网址 http://edu.bell-lab.com/manage/#/login,选择观摩登录,查看2023机械设计2。 机械设计-Ch00Ch01——绪论机器结构组成与连接 Ch00-绪论0.1 何为机械设计——…...
Android isLoggable定制属于自己的log
Android原生自带的 android.util.Log,其中有一个 isLoggable 方法的运用 /** * Checks to see whether or not a log for the specified tag is loggable at the specified level.** The default level of any tag is set to INFO. This means that any level abov…...

【Spring Boot】构建RESTful服务 — 使用Swagger生成Web API文档
使用Swagger生成Web API文档 高质量的API文档在系统开发的过程中非常重要。本节介绍什么是Swagger,如何在Spring Boot项目中集成Swagger构建RESTful API文档,以及为Swagger配置Token等通用参数。 1.什么是Swagger Swagger是一个规范和完整的框架&…...
【实战】 九、深入React 状态管理与Redux机制(五) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十)
文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...

PHP傻瓜也能搭建自己框架
PHP最简单自定义自己的框架(一) PHP最简单自定义自己的框架创建目录结构(二) PHP最简单自定义自己的框架定义常量自动生成目录(三) PHP最简单自定义自己的框架控制器自动加载运行(四…...

为什么商业基础软件需要开源
Bytebase 本身是一家商业软件公司,而作为最核心资产的代码从 Day 0 却是开源的。同时我们还是 star-history.com 的运营者,大家在各种开源渠道会看到它生成的图: 一直以来,常会被别人问起的一个问题,就是为什么 Byteba…...

【自用】云服务器 使用 docker 搭建 HomeAssistant + MQTT 物联网平台
总览 1.搭建流程概述 2.准备工作 3.开始搭建! 4.总结 如果想看 ESP32 或其他使用 MicroPython 编程的单片机如何连接到该云服务器,实现 HomeAssistant 控制 单片机的内容,请看我这篇博客的下一篇。 一、搭建流程概述 0.总体流程 我们需要…...

ABAP: SQL 多值查询
基础查数据 问题举例:例如查物料类型为ZFRT、ZROH和ZRSA的物料编码。 1、直接查询,三种不同类型的物料类型是或的关系。 SELECT DISTINCT ma~matnr ma~mtartFROM mara AS maINNER JOIN mbewh AS mbON ma~matnr mb~matnrINTO CORRESPONDING FIELDS OF…...

分布式学习最佳实践:从分布式系统的特征开始
正文 在延伸feature(分布式系统需要考虑的特性)的时候,我逐渐明白,这是因为要满足这些feature,才设计了很多协议与算法,也提出了一些理论。比如说,这是因为要解决去中心化副本的一致性问题&…...

第三章 图论 No.8最近公共祖先lca, tarjan与次小生成树
文章目录 lcaTarjan板子题:1172. 祖孙询问lca或tarjan:1171. 距离356. 次小生成树352. 闇の連鎖 lca O ( m l o g n ) O(mlogn) O(mlogn),n为节点数量,m为询问次数,lca是一种在线处理询问的算法 自己也是自己的祖先 倍…...

[Kubernetes]Kubeflow Pipelines - 基本介绍与安装方法
1. 背景 近些年来,人工智能技术在自然语言处理、视觉图像和自动驾驶方面都取得不小的成就,无论是工业界还是学术界大家都在惊叹一个又一个的模型设计。但是对于真正做过算法工程落地的同学,在惊叹这些模型的同时,更多的是在忧虑如…...

Sui网络的稳定性和高性能
Sui的最初的协议开发者设计了可扩展的网络,通过水平扩展的方式来保持可负担得起的gas费用。其他区块链与之相比,则使用稀缺性和交易成本来控制网络活动。 Sui主网上线前90天的数据指标证明了这一设计概念,在保持100%正常运行的同…...

RabbitMQ 安装教程
RabbitMQ 安装教程 特殊说明 因为RabbitMQ基于Erlang开发,所以安装时需要先安装Erlang RabbitMQ和Erlang版本对应关系 查看地址:www.rabbitmq.com/which-erlan… 环境选择 Erlang: 23.3及以上 RabbitMQ: 3.10.1Windows 安装 1. 安装Erlang 下载地…...

STM32F429IGT6使用CubeMX配置GPIO点亮LED灯
1、硬件电路 2、设置RCC,选择高速外部时钟HSE,时钟设置为180MHz 3、配置GPIO引脚 4、生成工程配置 5、部分代码 6、实验现象...

DOM的节点操作+事件高级+DOM事件流+事件对象
一.节点操作 1.父节点: node.parentNode 得到的是离元素最近的父级节点 2.子节点: parentNode.childNodes 所有的子节点 包含元素节点 文本节点等等parentNode.children (非标准) 获取所有的子元素节点,实际开发常用 parentNode.firstChild 获取…...

【MATLAB代码】制导——平行接近法,三维,目标是运动的,订阅专栏后可直接查看MATLAB源代码
文章目录 运行结果简介代码功能概述运行结果核心模块解析代码特性与优势MATLAB例程代码调整说明相关公式视线角速率约束相对运动学方程导引律加速度指令运动学更新方程拦截条件判定运行结果 运行演示视频: 三维平行接近法导引运行演示 简介 代码功能概述 本代码实现了三维空…...
动手学深度学习12.7. 参数服务器-笔记练习(PyTorch)
以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。 本节课程地址:35 分布式训练【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址:12.7. 参数服务器…...
每日算法 -【Swift 算法】三数之和
Swift|三数之和(3Sum)详细题解 注释 拓展(LeetCode 15) ✨题目描述 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a, b, c,使得 a b c 0。请你找出所有和为 0 且不重…...

全球知名具身智能/AI机器人实验室介绍之AI FACTORY基于慕尼黑工业大学
全球知名具身智能/AI机器人实验室介绍之AI FACTORY基于慕尼黑工业大学 TUM AI FACTORY,即KI.FABRIK,是德国慕尼黑工业大学(TUM)在巴伐利亚州推出的一个旗舰项目,旨在打造未来工厂,将传统工厂转变为由人工智…...
在.NET Core控制器中获取AJAX传递的Body参数
.Net Core是支持前后端不分离式的开发的,如果在原始系统中采用不分离式开发,后面需要在原系统中增加功能,并且新的服务采用其他语言开发,且系统原来功能保持原样,这样前端系统可以单独调用新开发的接口。 但是&#x…...

智慧货运飞船多维度可视化管控系统
图扑搭建智慧货运飞船可视化系统,借数字孪生技术,高精度复刻货运飞船外观、结构与运行场景。整合多维度数据,实时呈现飞行状态、设备参数等信息,助力直观洞察货运飞船运行逻辑,为航天运维、任务推演及决策提供数字化支…...
每日算法 -【Swift 算法】电话号码字母组合
🚀 LeetCode 字符串数字映射(Swift)——电话号码字母组合 在日常刷题或面试中,我们经常会遇到字符串 回溯组合的问题。这道经典题——电话号码的字母组合 就是典型代表。本文将带你用 Swift 实现这道题,思路清晰&…...
GIT - 如何从某个分支的 commit创建一个新的分支?
如果上一个Release 分支被污染了,想要还原这个分支最原始的样子,有什么办法或者说该怎么办呢?简单来说,就是如何从某个指定的 commit 创建一个新的 Git 分支? 操作非常简单! 命令格式 git branch <ne…...

C++ --- vector
C --- vector的使用 前言1、构造函数1.1默认构造1.2n个val值构造1.3迭代器区间构造1.4拷贝构造1.4初始化列表构造 2、遍历方式2.1[ ] 下标2.2迭代器2.3范围for 3、常用方法或重载(1)增push_back()insert()assign() (2)删erase()c…...

MADlib —— 基于 SQL 的数据挖掘解决方案(4)—— 数据类型之矩阵
目录 一、矩阵定义 二、MADlib 中的矩阵表示 1. 稠密 2. 稀疏 三、MADlib 中的矩阵运算函数 1. 矩阵操作函数分类 (1)表示函数 (2)计算函数 (3)提取函数 (4)归约函数&…...