diff --git a/docs/5.0/code.json b/docs/5.0/code.json new file mode 100644 index 00000000000..7f236043c68 --- /dev/null +++ b/docs/5.0/code.json @@ -0,0 +1,646 @@ +{ + "theme.ErrorPageContent.title": { + "message": "页面已崩溃。", + "description": "The title of the fallback page when the page crashed" + }, + "theme.ErrorPageContent.tryAgain": { + "message": "重试", + "description": "The label of the button to try again rendering when the React error boundary captures an error" + }, + "theme.NotFound.title": { + "message": "找不到页面", + "description": "The title of the 404 page" + }, + "theme.NotFound.p1": { + "message": "我们找不到您要找的页面。", + "description": "The first paragraph of the 404 page" + }, + "theme.NotFound.p2": { + "message": "请联系原始链接来源网站的所有者,并告知他们链接已损坏。", + "description": "The 2nd paragraph of the 404 page" + }, + "theme.AnnouncementBar.closeButtonAriaLabel": { + "message": "关闭", + "description": "The ARIA label for close button of announcement bar" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "回到顶部", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "博文列表分页导航", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "较新的博文", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "较旧的博文", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.archive.title": { + "message": "历史博文", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "历史博文", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.post.readingTime.plurals": { + "message": "{readingTime} 分钟阅读", + "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.post.readMoreLabel": { + "message": "阅读 {title} 的全文", + "description": "The ARIA label for the link to full blog posts from excerpts" + }, + "theme.blog.post.readMore": { + "message": "阅读更多", + "description": "The label used in blog post item excerpts to link to full blog posts" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "博文分页导航", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "较新一篇", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "较旧一篇", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count} 篇博文", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} 含有标签「{tagName}」", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "查看所有标签", + "description": "The label of the link targeting the tag list page" + }, + "theme.colorToggle.ariaLabel": { + "message": "切换浅色/暗黑模式(当前为{mode})", + "description": "The ARIA label for the navbar color mode toggle" + }, + "theme.colorToggle.ariaLabel.mode.dark": { + "message": "暗黑模式", + "description": "The name for the dark color mode" + }, + "theme.colorToggle.ariaLabel.mode.light": { + "message": "浅色模式", + "description": "The name for the light color mode" + }, + "theme.docs.breadcrumbs.home": { + "message": "主页面", + "description": "The ARIA label for the home page in the breadcrumbs" + }, + "theme.docs.breadcrumbs.navAriaLabel": { + "message": "页面路径", + "description": "The ARIA label for the breadcrumbs" + }, + "theme.docs.DocCard.categoryDescription": { + "message": "{count} 个项目", + "description": "The default description for a category card in the generated index about how many items this category includes" + }, + "theme.docs.paginator.navAriaLabel": { + "message": "文档分页导航", + "description": "The ARIA label for the docs pagination" + }, + "theme.docs.paginator.previous": { + "message": "上一页", + "description": "The label used to navigate to the previous doc" + }, + "theme.docs.paginator.next": { + "message": "下一页", + "description": "The label used to navigate to the next doc" + }, + "theme.docs.tagDocListPageTitle.nDocsTagged": { + "message": "{count} 篇文档带有标签", + "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.docs.tagDocListPageTitle": { + "message": "{nDocsTagged}「{tagName}」", + "description": "The title of the page for a docs tag" + }, + "theme.docs.versionBadge.label": { + "message": "版本:{versionLabel}" + }, + "theme.docs.versions.unreleasedVersionLabel": { + "message": "此为 {siteTitle} {versionLabel} 版尚未发行的文档。", + "description": "The label used to tell the user that he's browsing an unreleased doc version" + }, + "theme.docs.versions.unmaintainedVersionLabel": { + "message": "此为 {siteTitle} {versionLabel} 版的文档,现已不再积极维护。", + "description": "The label used to tell the user that he's browsing an unmaintained doc version" + }, + "theme.docs.versions.latestVersionSuggestionLabel": { + "message": "最新的文档请参阅 {latestVersionLink} ({versionLabel})。", + "description": "The label used to tell the user to check the latest version" + }, + "theme.docs.versions.latestVersionLinkLabel": { + "message": "最新版本", + "description": "The label used for the latest version suggestion link label" + }, + "theme.common.editThisPage": { + "message": "编辑此页", + "description": "The link label to edit the current page" + }, + "theme.common.headingLinkTitle": { + "message": "标题的直接链接", + "description": "Title for link to heading" + }, + "theme.lastUpdated.atDate": { + "message": "于 {date} ", + "description": "The words used to describe on which date a page has been last updated" + }, + "theme.lastUpdated.byUser": { + "message": "由 {user} ", + "description": "The words used to describe by who the page has been last updated" + }, + "theme.lastUpdated.lastUpdatedAtBy": { + "message": "最后{byUser}{atDate}更新", + "description": "The sentence used to display when a page has been last updated, and by who" + }, + "theme.navbar.mobileVersionsDropdown.label": { + "message": "选择版本", + "description": "The label for the navbar versions dropdown on mobile view" + }, + "theme.common.skipToMainContent": { + "message": "跳到主要内容", + "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" + }, + "theme.tags.tagsListLabel": { + "message": "标签:", + "description": "The label alongside a tag list" + }, + "theme.blog.sidebar.navAriaLabel": { + "message": "最近博文导航", + "description": "The ARIA label for recent posts in the blog sidebar" + }, + "theme.CodeBlock.copied": { + "message": "复制成功", + "description": "The copied button label on code blocks" + }, + "theme.CodeBlock.copyButtonAriaLabel": { + "message": "复制代码到剪贴板", + "description": "The ARIA label for copy code blocks button" + }, + "theme.CodeBlock.copy": { + "message": "复制", + "description": "The copy button label on code blocks" + }, + "theme.CodeBlock.wordWrapToggle": { + "message": "切换自动换行", + "description": "The title attribute for toggle word wrapping button of code block lines" + }, + "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { + "message": "打开/收起侧边栏菜单「{label}」", + "description": "The ARIA label to toggle the collapsible sidebar category" + }, + "theme.navbar.mobileLanguageDropdown.label": { + "message": "选择语言", + "description": "The label for the mobile language switcher dropdown" + }, + "theme.TOCCollapsible.toggleButtonLabel": { + "message": "本页总览", + "description": "The label used by the button on the collapsible TOC component" + }, + "theme.docs.sidebar.collapseButtonTitle": { + "message": "收起侧边栏", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.docs.sidebar.collapseButtonAriaLabel": { + "message": "收起侧边栏", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { + "message": "← 回到主菜单", + "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" + }, + "theme.docs.sidebar.expandButtonTitle": { + "message": "展开侧边栏", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.docs.sidebar.expandButtonAriaLabel": { + "message": "展开侧边栏", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "Simple": { + "message": "简单", + "description": "homepage simple" + }, + "Any highly available distributed application on Kubernetes can be easily installed with just one click.": { + "message": "像使用个人电脑一样在 Kubernetes 上一键安装任意高可用分布式应用程序,几乎不需要任何专业的交付和运维成本", + "description": "homepage simple" + }, + "Flexible": { + "message": "灵活", + "description": "homepage flexible" + }, + "Easily customize the cloud you need by freely combining various distributed applications.": { + "message": "利用独特的集群镜像能力将任意分布式应用打包成 OCI 镜像,自由组合各种分布式应用程序,轻松订制所需的云", + "description": "homepage flexible intro" + }, + "Powerful": { + "message": "强大", + "description": "homepage powerful" + }, + "The cloud services can be easily found and acquired in the application marketplace, offering simplicity and power.": { + "message": "通过应用商店来灵活满足各类用户的需求,形成强大的应用生态", + "description": "homepage flexible intro" + }, + "Kernel Arch": { + "message": "以 kubernetes 为云内核架构" + }, + "Cloud Driver": { + "message": "云驱动" + }, + "Cloud Kernel": { + "message": "云内核" + }, + "Distributed Applications": { + "message": "分布式应用程序" + }, + "Used By": { + "message": "客户列表" + }, + "theme.SearchBar.seeAll": { + "message": "查看全部 {count} 个结果" + }, + "theme.SearchBar.label": { + "message": "搜索", + "description": "The ARIA label and placeholder for search button" + }, + "theme.SearchPage.documentsFound.plurals": { + "message": "找到 {count} 份文件", + "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.SearchPage.existingResultsTitle": { + "message": "「{query}」的搜索结果", + "description": "The search page title for non-empty query" + }, + "theme.SearchPage.emptyResultsTitle": { + "message": "在文档中搜索", + "description": "The search page title for empty query" + }, + "theme.SearchPage.inputPlaceholder": { + "message": "在此输入搜索字词", + "description": "The placeholder for search page input" + }, + "theme.SearchPage.inputLabel": { + "message": "搜索", + "description": "The ARIA label for search page input" + }, + "theme.SearchPage.algoliaLabel": { + "message": "通过 Algolia 搜索", + "description": "The ARIA label for Algolia mention" + }, + "theme.SearchPage.noResultsText": { + "message": "未找到任何结果", + "description": "The paragraph for empty search result" + }, + "theme.SearchPage.fetchingNewResults": { + "message": "正在获取新的搜索结果...", + "description": "The paragraph for fetching new search results" + }, + "Contact": { + "message": "联系我们" + }, + "Contact US": { + "message": "联系我们" + }, + "theme.admonition.note": { + "message": "备注", + "description": "The default label used for the Note admonition (:::note)" + }, + "theme.admonition.tip": { + "message": "提示", + "description": "The default label used for the Tip admonition (:::tip)" + }, + "theme.admonition.danger": { + "message": "危险", + "description": "The default label used for the Danger admonition (:::danger)" + }, + "theme.admonition.info": { + "message": "信息", + "description": "The default label used for the Info admonition (:::info)" + }, + "theme.admonition.caution": { + "message": "警告", + "description": "The default label used for the Caution admonition (:::caution)" + }, + "theme.docs.sidebar.closeSidebarButtonAriaLabel": { + "message": "Close navigation bar", + "description": "The ARIA label for close button of mobile sidebar" + }, + "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { + "message": "Toggle navigation bar", + "description": "The ARIA label for hamburger menu button of mobile navigation" + }, + "theme.SearchModal.searchBox.resetButtonTitle": { + "message": "清除查询", + "description": "The label and ARIA label for search box reset button" + }, + "theme.SearchModal.searchBox.cancelButtonText": { + "message": "取消", + "description": "The label and ARIA label for search box cancel button" + }, + "theme.SearchModal.startScreen.recentSearchesTitle": { + "message": "最近搜索", + "description": "The title for recent searches" + }, + "theme.SearchModal.startScreen.noRecentSearchesText": { + "message": "没有最近搜索", + "description": "The text when no recent searches" + }, + "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { + "message": "保存这个搜索", + "description": "The label for save recent search button" + }, + "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { + "message": "从历史记录中删除这个搜索", + "description": "The label for remove recent search button" + }, + "theme.SearchModal.startScreen.favoriteSearchesTitle": { + "message": "收藏", + "description": "The title for favorite searches" + }, + "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { + "message": "从收藏列表中删除这个搜索", + "description": "The label for remove favorite search button" + }, + "theme.SearchModal.errorScreen.titleText": { + "message": "无法获取结果", + "description": "The title for error screen of search modal" + }, + "theme.SearchModal.errorScreen.helpText": { + "message": "你可能需要检查网络连接。", + "description": "The help text for error screen of search modal" + }, + "theme.SearchModal.footer.selectText": { + "message": "选中", + "description": "The explanatory text of the action for the enter key" + }, + "theme.SearchModal.footer.selectKeyAriaLabel": { + "message": "Enter 键", + "description": "The ARIA label for the Enter key button that makes the selection" + }, + "theme.SearchModal.footer.navigateText": { + "message": "导航", + "description": "The explanatory text of the action for the Arrow up and Arrow down key" + }, + "theme.SearchModal.footer.navigateUpKeyAriaLabel": { + "message": "向上键", + "description": "The ARIA label for the Arrow up key button that makes the navigation" + }, + "theme.SearchModal.footer.navigateDownKeyAriaLabel": { + "message": "向下键", + "description": "The ARIA label for the Arrow down key button that makes the navigation" + }, + "theme.SearchModal.footer.closeText": { + "message": "关闭", + "description": "The explanatory text of the action for Escape key" + }, + "theme.SearchModal.footer.closeKeyAriaLabel": { + "message": "Esc 键", + "description": "The ARIA label for the Escape key button that close the modal" + }, + "theme.SearchModal.footer.searchByText": { + "message": "搜索提供", + "description": "The text explain that the search is making by Algolia" + }, + "theme.SearchModal.noResultsScreen.noResultsText": { + "message": "没有结果:", + "description": "The text explains that there are no results for the following search" + }, + "theme.SearchModal.noResultsScreen.suggestedQueryText": { + "message": "试试搜索", + "description": "The text for the suggested query when no results are found for the following search" + }, + "theme.SearchModal.noResultsScreen.reportMissingResultsText": { + "message": "认为这个查询应该有结果?", + "description": "The text for the question where the user thinks there are missing results" + }, + "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { + "message": "请告知我们。", + "description": "The text for the link to report missing results" + }, + "theme.SearchModal.placeholder": { + "message": "搜索文档", + "description": "The placeholder of the input of the DocSearch pop-up modal" + }, + "theme.tags.tagsPageTitle": { + "message": "标签", + "description": "The title of the tag list page" + }, + "Run Your Business on Sealos Cloud": { + "message": "Sealos - 以 kubernetes 为内核的云操作系统发行版" + }, + "Features": { + "message": "特性" + }, + "Sealos is a Kubernetes distribution, a general-purpose cloud operating system for managing cloud-native applications.": { + "message": "Sealos 以云原生的方式,抛弃了传统的云计算架构,转向以 Kubernetes 为云内核的新架构,实现一个开源的、可随处运行的 AWS 替代方案" + }, + "Copy": { + "message": "复制" + }, + "START NOW": { + "message": "在线使用" + }, + "CONTACT US NOW": { + "message": "联系我们" + }, + "Sealos cloud-native App Store": { + "message": "Sealos 应用商店" + }, + "Fully compatible with Docker registry, enjoy seamless one-click installation of various cloud-native distributed applications": { + "message": "Sealos 应用商店中的每一个应用都是一个集群镜像,集群镜像中包含了分布式应用的所有依赖(例如 Helm Chart、容器镜像和二进制文件),可一键安装。" + }, + "Sealos PostgreSQL Database": { + "message": "Sealos PostgreSQL 数据库" + }, + "One-click creation of a highly available PostgreSQL database, with multi-database cluster management and backup and recovery capabilities": { + "message": "Sealos 注重为数据库用户提供沉浸式的使用体验,可一键创建高可用 PostgreSQL 数据库,并提供多数据库集群的管理、备份和恢复功能。" + }, + "Sealos Cloud Provider": { + "message": "Sealos Cloud Provider" + }, + "Effortlessly establish an independent Kubernetes cluster within minutes on AWS or other public clouds, and effortlessly manage multiple clusters": { + "message": "可在 AWS 等公有云上数分钟内创建一个独立的 Kubernetes 集群并管理多个集群,启动性能高出绝大多数公有云的三倍以上,而价格仅为 AWS 的 80%。" + }, + "Examples": { + "message": "使用样例" + }, + "Anything else as can be freely combined as Cloud OS Applications, allowing for unlimited combinations to fulfill a wide range of requirements and scenarios.": { + "message": "任意分布式应用都可以作为云操作系统的应用进行自由组合,以满足各种需求和场景。" + }, + "By utilizing Kubernetes as the core of the Cloud OS, we can abstract underlying resources, define resource interfaces, and standardize application management.": { + "message": "使用 Kubernetes 作为云操作系统内核,抽象底层资源 / 定义资源接口 / 标准化应用程序管理。" + }, + "The Cloud OS leverages CRI, CNI, and CSI as drivers and utilizes technologies such as Containerd, Calico, and OpenEBS to pool resources and ensure seamless access across the compute, storage, and network domains.": { + "message": "使用 CRI、CNI、CSI 作为云操作系统驱动程序,并利用 Containerd、Calico、OpenEBS 等插件将所有的计算、存储和网络等资源池化。" + }, + "Comprehensive Kubernetes Cluster management throughout its entire lifecycle, including Installation, Scaling, Backup, Recovery, and Upgrades": { + "message": "管理 Kubernetes 集群的整个生命周期,包括集群的包括安装、扩容、备份、恢复和升级。" + }, + "Storage": { + "message": "存储" + }, + "Supports block storage, object storage, and file storage with one-click operation": { + "message": "一键安装各种分布式存储。" + }, + "Network": { + "message": "网络" + }, + "Supports network plugins such as Calico, Flannel, and Cilium with the freedom of customization and choice": { + "message": "支持 Calico、Flannel 和 Cilium 等网络插件,可自由选择和定制。" + }, + "Supports both relational and non-relational databases with high availability, automatic backups, and multi-database instance management capabilities": { + "message": "支持关系型数据库和非关系型数据库,并提供高可用、自动备份和多数据库实例管理等功能。" + }, + "Monitoring": { + "message": "可观测性" + }, + "Easily deploy a monitoring and alarm system with just one click, without the need for additional configuration, and enjoy a simple and intuitive visual experience": { + "message": "一键轻松部署监控和告警系统,无需额外配置,享受简单直观的可视化体验。" + }, + "One-click construction of GPU drivers, device discovery, GPU resource monitoring, and the easy creation of a deep learning platform with AI capabilities": { + "message": "一键安装 GPU 驱动,监控 GPU 资源,轻松打造具备 AI 能力的深度学习平台。" + }, + "MQ": { + "message": "消息队列" + }, + "Supports various mainstream message queues with high availability and automatic monitoring": { + "message": "支持各种主流消息队列,并提供高可用和自动监控功能。" + }, + "Dashboard": { + "message": "可视化" + }, + "Supports various dashboards, enabling users to manage Kubernetes clusters with ease": { + "message": "一键安装各种 Kubernetes 可视化管理工具,轻松管理 Kubernetes 集群。" + }, + "Platform": { + "message": "容器管理平台" + }, + "Support various Container Platforms, enabling users to manage Kubernetes clusters with ease": { + "message": "一键安装各种 企业级容器管理平台,轻松管理 Kubernetes 集群。" + }, + "Support one-click operation for mainstream CI/CD systems such as Argo CD and Drone": { + "message": "一键安装 Argo CD 和 Drone 等主流 DevOps 系统。" + }, + "More than 4,000 Companies and 100,000+ Individuals!": { + "message": "已被 4000 多家公司和 10w+ 个人用户采用!" + }, + "Start": { + "message": "Home" + }, + "GitOps": { + "message": "GitOps" + }, + "Kubernetes": { + "message": "Kubernetes" + }, + "GPU": { + "message": "GPU" + }, + "theme.NavBar.navAriaLabel": { + "message": "主导航", + "description": "The ARIA label for the main navigation" + }, + "theme.docs.sidebar.navAriaLabel": { + "message": "文档侧边栏", + "description": "The ARIA label for the sidebar navigation" + }, + "Docs": { + "message": "文档", + "description": "The Header Documentation" + }, + "Community": { + "message": "社区", + "description": "The Header Community" + }, + "Join Us": { + "message": "加入我们" + }, + "The Capabilities of Sealos": { + "message": "Sealos 的能力" + }, + "Application Management": { + "message": "应用管理" + }, + "Easy management and quick release of publicly accessible distributed applications in the app store.": { + "message": "在应用商店中轻松管理并快速发布可公网访问的分布式应用。" + }, + "Database": { + "message": "数据库管理" + }, + "Create high-availability databases in seconds, offering support for MySQL, PostgreSQL, MongoDB, and Redis.": { + "message": "秒级创建高可用数据库,支持 MySQL、PostgreSQL、MongoDB 和 Redis。" + }, + "Cloud Universality": { + "message": "公私一致" + }, + "Equally effective in both public and private cloud, enabling a seamless transition of traditional applications to the cloud.": { + "message": "即是公有云也是私有云,支持传统应用无缝迁移到云环境。" + }, + "Why Choose Sealos?": { + "message": "为什么选择 Sealos" + }, + "Efficient & Cost-Effective": { + "message": "高效 & 经济" + }, + "Universal & User-Friendly": { + "message": "通用性强,无心智负担" + }, + "Flexible & Secure": { + "message": "灵活 & 安全" + }, + "Pay only for the containers you use. Auto-scaling prevents wasted resources, saving you a lot of money.": { + "message": "仅需为容器付费,自动伸缩杜绝资源浪费,大幅度节省成本。" + }, + "Focus on your business without worrying about complexity. There is almost no learning curve.": { + "message": "专注于业务本身,无需担心复杂性,几乎没有学习成本。" + }, + "The multi-tenant sharing mechanism ensures security while providing resource isolation and efficient collaboration.": { + "message": "多租户共享机制在确保安全的同时,实现资源隔离与高效协作。" + }, + "Get early access to the latest Sealos versions and stay connected with developers and users on Discord.": { + "message": "加入 Sealos 社区,在这里您可以在第一时间体验 Sealos 的最新版本,以及在 Discord 或微信群与开发者和用户保持沟通" + }, + "Who are Using Sealos": { + "message": "谁在使用 Sealos" + }, + "Join Sealos Community": { + "message": "加入 Sealos 社区" + }, + "Experience the latest version of Sealos for the first time and communicate with developers and users in Discord!": { + "message": "在这里您可以在第一时间体验 Sealos 的最新版本,以及在 Discord 或微信群与开发者和用户保持沟通" + }, + "Start Now": { + "message": "立即使用" + }, + "for all applications": { + "message": "托管所有分布式应用" + }, + "Hosting": { + "message": "私有云" + }, + "A cloud operating system based on the Kubernetes kernel": { + "message": "以 Kubernetes 为内核的云操作系统" + }, + "Explore": { + "message": "了解更多" + }, + "Blog": { + "message": "博客" + }, + "App Store": { + "message": "应用商店" + } +} \ No newline at end of file diff --git a/docs/5.0/docs/Intro.md b/docs/5.0/docs/Intro.md new file mode 100644 index 00000000000..164c8d797e3 --- /dev/null +++ b/docs/5.0/docs/Intro.md @@ -0,0 +1,55 @@ + + +import Highlight from '@site/src/components/Highlight' + +# 什么是 Sealos? + + + +云原生生态之庞大与复杂,无疑让许多企业感到手足无措,这个生态依然缺乏好用的、开箱即用的发行版。在云原生市场还急需一款云操作系统以进一步降低云原生门槛与成本。 + +Sealos 的问世为企业开启了一扇新窗。它为企业与开发者提供了一种全新的选择,无论在公有云还是私有云中,都只需安装一个云操作系统。它能让各类应用在操作系统上稳定安全地运行,一并解决了应用所需的各种依赖问题。 + +Sealos 坚守的理念是:**云可以像 Linux 一样简单**。你可以像使用 Linux 一样安装后立即投入使用,使用过程无需过多纠结。唯一的差别仅在于,Linux 是安装在单一服务器上,而 Sealos 则是安装在整个数据中心。 + +在 Sealos 的架构中,**公有云与私有云并无本质上的差异**,他们应是同一套代码的不同实例,唯一的区别仅在于配置与所安装应用的差异。在内网安装即是私有云,而在公网对外提供服务则成为公有云。 + +我们坚信,随着 Sealos 的不断发展与进步,未来的云将更加开放,更加简单。云计算的美好将属于所有算力的提供者,云的价值将由所有云计算的参与者共享。**他们将能够在多元化的市场环境中,以更经济的方式享受云计算所带来的种种便利。** + +## 概述 + +Sealos 是一款以 Kubernetes 为内核的**云操作系统发行版**。它以云原生的方式,抛弃了传统的云计算架构,转向以 Kubernetes 为云内核的新架构,使企业能够**像使用个人电脑一样**简单地使用云。 + +用户将可以像使用个人电脑一样在 Kubernetes 上一键安装任意高可用分布式应用,几乎不需要任何专业的交付和运维成本。同时,利用独特的集群镜像能力,用户可将任意分布式应用打包成 OCI 镜像,自由组合各种分布式应用,轻松订制所需的云。通过强大且灵活的应用商店功能,可满足各类用户的多样化需求。 + +![](./images/overview-1.png) + +## 适用场景 & 优势 + +Sealos 是一款强大的业务运行平台,它能完美支持 Java、Go、Python、PHP 等各类应用,不受编程语言限制。该平台为应用提供稳定的运行环境,并解决后端依赖问题,例如数据库、对象存储和消息队列等。更进一步,它还能灵活处理应用配置管理、服务发现、公网暴露,以及自动伸缩等问题。 + +### 公有云 + +如果您的业务需要运行在公有云环境中,那么您可以直接使用 [Sealos 提供的公有云服务](https://cloud.sealos.io)。 + +#### Sealos 的能力 + +- 🚀 **应用管理**:在应用商店中轻松管理并快速发布可公网访问的分布式应用。 +- 🗄️ **数据库管理**:秒级创建高可用数据库,支持 MySQL、PostgreSQL、MongoDB 和 Redis。 +- 🌥️ **公私一致**:即是公有云也是私有云,支持传统应用无缝迁移到云环境。 + +#### Sealos 的优势 + +- 💰 **高效 & 经济**:仅需为容器付费,自动伸缩杜绝资源浪费,大幅度节省成本。 +- 🌐 **通用性强,无心智负担**:专注于业务本身,无需担心复杂性,几乎没有学习成本。 +- 🛡️ **灵活 & 安全**:多租户共享机制在确保安全的同时,实现资源隔离与高效协作。 + +### 私有云 + +Sealos 云操作系统 **100% 开源**,您可在 [GitHub](https://github.com/labring/sealos) 上找到所有源代码,因此 **Sealos 公有云**的全部功能也可以部署在私有云环境中,以满足您更多样化的业务需求。 + +### 强大的应用交付能力 + +- Sealos 具备优秀的 Kubernetes 生命周期管理能力,还可以自由定制 Kubernetes 环境。 +- Sealos 可以将整个集群打包,并一键交付到客户环境中。所有服务和业务都可以整体交付。 +- 不同于 Docker 主要关注单机镜像,Sealos 更进一步,可以将**整个集群**或者某个分布式应用进行打包。 \ No newline at end of file diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/QA.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/QA.md new file mode 100644 index 00000000000..97aab794c1b --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/QA.md @@ -0,0 +1,224 @@ +--- +sidebar_position: 1 +--- + +# 常见问题 + +使用Sealos时,您可能会遇到一些问题。以下是一些常见问题的答案和解决方法。 + +## 镜像构建问题 + +### Q1: 在构建阶段如何设置代理服务? + +在执行构建命令时,可以通过设置HTTP_PROXY环境变量来配置代理服务。 + +```shell +HTTP_PROXY=socket5://127.0.0.1:7890 sealos build xxxxx +``` + +### Q2:如何启用buildah的调试日志? + +若需要查看buildah的调试日志,可以通过设定`BUILDAH_LOG_LEVEL`环境变量实现。 + +```shell +BUILDAH_LOG_LEVEL=debug sealos images +``` + +### Q3:如何在Pod中执行Sealos构建? + +若在Pod中执行Sealos构建,请按以下步骤操作: + +1. 在Pod中构建镜像,可用以下YAML配置创建Deployment。 + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: sealoscli + name: sealoscli +spec: + replicas: 1 + selector: + matchLabels: + app: sealoscli + strategy: {} + template: + metadata: + labels: + app: sealoscli + spec: + containers: + - image: #用你的sealos镜像替换 + name: sealoscli + stdin: true + stdinOnce: true + securityContext: + privileged: true +``` + +2. 创建Dockerfile。以下是一个例子,根据需要进行修改。 + +```dockerfile +FROM bitnami/minideb:buster + +ARG TARGETOS +ARG TARGETARCH + +LABEL from=bitnami/minideb:buster platform=rootcloud team=oam tag=buster name=base + +RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list && sed -i "s@http://security.debian.org@http://mirrors.aliyun.com/debian-security@g" /etc/apt/sources.list +RUN install_packages curl iputils-ping net-tools telnet procps vim wget jq + +ENV LANG=C.UTF-8 +ENV LANGUAGE=C.UTF-8 +ENV LC_ALL=C.UTF-8 +ENV TZ=Asia/Shanghai +``` + +3. 在Pod中执行构建命令。 + +```shell +sealos build --arch arm64 --build-arg TARGETOS=linux --build-arg TARGETARCH=arm64 -t test -f Dockerfile . +``` + +### Q4:如何使用其他构建工具构建集群镜像? + +如果您想使用 Docker 或 Podman 等其他容器工具来构建集群镜像,您可以借助 [sreg](https://github.com/labring/sreg) 来缓存镜像。 + +以下是操作步骤: + +1. 安装 sreg: + ```shell + wget https://github.com/labring/sreg/releases/download/v0.1.1/sreg_0.1.1_linux_amd64.tar.gz + tar -xzf sreg_0.1.1_linux_amd64.tar.gz sreg + mv sreg /usr/bin/ + ``` +2. 缓存镜像: + ```shell + sreg save --registry-dir=registry . + ``` +3. 构建集群镜像: + ```shell + docker build -t xxxx -f Sealfile . + ``` + +### Q5:执行Sealos构建时遇到“lgetxattr /var/lib/containers/storage/overlay/0c2afe770ec7870ad4639f18a1b50b3a84718f95c8907f3d54e14dbf0a01d50d/merged/dev/ptmx: no such device”错误? + +这个问题可能与`fuse-overlayfs`的版本有关。建议您从[这里](https://github.com/containers/fuse-overlayfs/releases)下载最新版本下载并替换`/bin/fuse-overlayfs`。 + +## 运行时选择问题 + +### Q1:如何选择Kubernetes运行时? + +Sealos会根据您选择的镜像决定使用哪种运行时。如果选择了kubernetes-docker镜像,Sealos将使用Docker作为运行时;如果选择了kubernetes-crio镜像,Sealos将使用CRI-O作为运行时。 + +## 版本兼容性问题 + +### Q1:报错:"Applied to cluster error: failed to init exec auth.sh failed exit status 127"? + +此问题常因您使用的sealos版本和镜像版本不匹配造成。请确认您的镜像版本和sealos的版本是匹配的。 +例如,若您正使用形如kubernetes:v1.xx.x的版本,可能需要升级sealos,特别是在使用较老版本的sealos,而sealos集群镜像则使用了最新版时。 +另一种解决方法是选择对应版本的sealos镜像。比如,如果您的sealos版本是4.1.3,那么集群镜像应选择形如kuberntes:v1.24.0-4.1.3的版本。 +确保镜像版本和sealos版本的匹配,可以帮助避免此类问题。 + +### Q2: 如果您在集群中新增了其他域名,或者修改了 service 的 CIDR,并且在添加 master 时出现了错误 + +为了解决这个问题,Sealos 团队在 4.2.0 版本进行了相应的修复。具体的修复内容和讨论可以在这个 pull request 中查看:https://github.com/labring/sealos/pull/2943 。 + +所以,如果您遇到了这个问题,我们建议您升级到 Sealos 4.2.0 版本。更新后的版本应该能够正确处理这些变更,并且在添加 master 时不会出现错误。 + +## 文件和目录位置问题 + +### Q1:如何修改`/root/.sealos`默认目录的存储位置? + +若需修改默认的存储位置,可以设置SEALOS_RUNTIME_ROOT环境变量,然后运行sealos命令。建议您将这个环境变量设置为全局的,这样在其他命令或场景中也可以方便使用。 + +```shell +export SEALOS_RUNTIME_ROOT=/data/.sealos +sealos run labring/kubernetes:v1.24.0 +``` + +### Q2:如何修改`/var/lib/sealos`默认目录的存储位置? + +若需修改默认的存储位置,可以设置SEALOS_DATA_ROOT环境变量,然后运行sealos命令。同样,建议您将这个环境变量设置为全局的。 + +```shell +export SEALOS_DATA_ROOT=/data/sealos +sealos run labring/kubernetes:v1.24.0 +``` + +### Q3: 如何修改 Sealos 镜像数据和状态的存储路径? + +> 在使用 Sealos 集群时,可能需要改变默认的镜像数据存储路径和状态数据的存储路径。默认情况下,这些数据被存储在 `/etc/containers/storage.conf` 文件定义的位置。 + +1. **查看当前存储配置** + 首先,我们可以使用下面的命令来查看当前的镜像存储配置: + ``` + sealos images --debug + ``` + 这个命令会打印出包含当前存储配置的文件,例如: + ``` + 2023-06-07T16:27:02 debug using file /etc/containers/storage.conf as container storage config + REPOSITORY TAG IMAGE ID CREATED SIZE + ``` +2. **修改镜像数据存储路径** + 如果你希望更改镜像数据的存储路径,你可以编辑 `/etc/containers/storage.conf` 文件。在这个文件中,找到并修改 `graphroot` 字段设置为新的路径。例如: + ``` + vim /etc/containers/storage.conf + ``` + 在编辑器中,将 `graphroot` 字段的值修改为你希望的新路径。 +3. **修改状态数据存储路径** + 参考 Buildah 的设计,Sealos 同样提供了状态数据存储路径的设置。在同样的配置文件 `/etc/containers/storage.conf` 中,找到并修改 `runroot` 字段为新的路径。 + +通过以上步骤,你可以将 Sealos 集群的镜像数据和状态数据保存到新的地址。每次运行 Sealos 命令时,它都将使用你在 `graphroot` 和 `runroot` 中设置的新路径来分别存储镜像数据和状态数据。 + +### Q4:ssh传输文件时,如何禁止检查文件的md5? + +在网络环境良好时,禁用md5检查可以极大提升传输速度。若不想在ssh传输文件时检查文件的md5,可将SEALOS_SCP_CHECKSUM环境变量设置为false以禁用此功能。建议将此环境变量设为全局,以便在多场景下使用。 + +```shell +export SEALOS_SCP_CHECKSUM=false +sealos run labring/kubernetes:v1.24.0 +``` + + +## 其他问题 + +### Q1:image-cri-shim导致端口大量占用,耗尽服务器socket资源? + +出现此问题时,可通过以下命令解决: + +```shell +wget https://github.com/labring/sealos/releases/download/v4.2.0/sealos_4.2.0_linux_amd64.tar.gz && tar xvf sealos_4.2.0_linux_amd64.tar.gz image-cri-shim +sealos exec -r master,node "systemctl stop image-cri-shim" +sealos scp "./image-cri-shim" "/usr/bin/image-cri-shim" +sealos exec -r master,node "systemctl start image-cri-shim" +sealos exec -r master,node "image-cri-shim -v" +``` + +### Q2:报错"[ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists" + +此问题可通过升级至Sealos 4.1.7+来解决。 + +### Q3:报错:"function "semverCompare" not defined" + +此问题可通过升级至Sealos 4.1.4+来解决。 + +我们希望这些解答能帮助您解决在使用Sealos过程中遇到的问题。如果还有其他问题,欢迎随时提问。 + +## 使用技巧 + +### Q1: 如何清理 Sealos 集群的缓存文件 + +> 在使用 Sealos 集群时,安装过程中可能会在本地存储一些缓存文件,这些文件会重复占用磁盘空间。那么,如何清理这些缓存文件以释放磁盘空间呢? + +我们提供了一个非常简单的解决方案,只需要执行以下命令: + +```shell +sealos unmount --all && sealos rm --all +``` +这个命令的作用是移除所有缓存的 Sealos 集群镜像文件,以及所有的相关挂载点。--all 选项表示处理所有相关文件和挂载点。 +执行这个命令后,所有 Sealos 集群的缓存文件就会被清理掉,从而释放出被它们占用的磁盘空间。 +这是一个非常有用的技巧,特别是对于在磁盘空间有限的环境中运行 Sealos 集群的用户来说。在你感觉磁盘空间被占用过多时,不妨尝试执行这个命令来释放一些空间。 +请注意,这个命令只会删除缓存文件,不会影响已经运行的集群。也就是说,执行这个命令后,你的集群仍然可以正常运行。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/build-image-using-registry-sync.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/build-image-using-registry-sync.md new file mode 100644 index 00000000000..12d630e1834 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/build-image-using-registry-sync.md @@ -0,0 +1,85 @@ +--- +sidebar_position: 2 +--- + +# 镜像构建改进指南 + +## 深入理解Sealos镜像构建 + +为了了解Sealos镜像构建的背后所做的工作,我们将首先揭示它在底层究竟进行了哪些操作。以下是一个直观的架构图: + +![](images/build.png) + +Sealos在构建镜像过程中涵盖了以下几个核心步骤: + +- **缓存镜像**:解析构建执行时的工作目录(在这里我们称之为"context"目录),将缓存镜像保存到registry结构并存储在./registry目录下。 +- **构建镜像**:在context目录中进行镜像构建,生成新的镜像。(请注意,构建镜像时需要将./registry目录进行复制。) + +## 提升镜像构建效率 + +当前项目中,我们借用了`github.com/distribution/distribution`的源代码,在执行缓存镜像的过程中直接调用了registry的sdk并启动了registry-proxy功能。借助于镜像仓库的缓存能力,我们将镜像缓存并存入context/registry目录。 + +这个过程的关键就在于调用了distribution仓库的方法进行保存镜像: + +- 启动 registry-proxy 功能。 +- 保存镜像摘要及索引相关数据(通过调用saveManifestAndGetDigest方法)。 +- 保存镜像文件数据(通过调用saveBlobs方法)。 + +这种方法确实具有一些显著的优点: + +- 轻量化:无需依赖其他组件即可保存镜像。 +- 自由控制:可以自由控制保存逻辑,无需依赖第三方组件。 + +然而,我们也注意到了一些潜在的问题: + +- 对新手来说,代码理解难度较高,不易清晰了解这里的逻辑。 +- 无法缓存使用token认证的方式。 +- 需要依赖一些临时存储空间,对空间有要求。 + +考虑到这些问题,我们决定尝试一种新的模式:在本地启动一个轻量的registry,使用`skopeo copy`的sdk进行代码复用。这一改变直接解决了之前所有的问题。 + +![](images/registry-build.png) + +**所以,新的构建方式 ✨镜像仓库同步✨ 优雅登场 🎉🎉** + +官方仓库中的[#3154](https://github.com/labring/sealos/pull/3154)这个PR已经完成了这个功能的实现。目前,Sealos支持这两种方式进行镜像构建。接下来,我会介绍如何启动新功能(如果新功能表现稳定,我们可能会废弃旧的构建方式)。 + +## 如何启动新功能 + +> Sealos v4.3.0 以上版本默认支持此功能。 + +启动新功能非常简单,只需在你构建镜像之前添加一个环境变量即可。这个功能同时支持build和merge两个命令。 + +```shell +SEALOS_REGISTRY_SYNC_EXPERIMENTAL=true sealos build -t test . +``` + +以下是执行上述命令后的预期输出: + +```tex +SEALOS_REGISTRY_SYNC_EXPERIMENTAL=true sealos build -t test . +Getting image source signatures +Copying blob fee740108510 done +Copying config f92f3ea6e4 done +Writing manifest to image destination +Storing signatures +Getting image source signatures +Copying blob 08409d417260 done +Copying config 44dd6f2230 done +Writing manifest to image destination +Storing signatures +2023-06-01T13:16:07 info saving images busybox, alpine +STEP 1/2: FROM scratch +STEP 2/2: COPY registry ./registry +COMMIT test +Getting image source signatures +Copying blob 13ab73c881c8 done +Copying config 4e22d16b36 done +Writing manifest to image destination +Storing signatures +--> 4e22d16b366 +Successfully tagged localhost/test:latest +4e22d16b366e9fec25641522a74cbd73a7db67dc0516b8f8e00200c4d0551592 +``` + +希望以上内容可以帮助您更好地理解并使用Sealos的新镜像构建方式。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/dual-stack-cluster.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/dual-stack-cluster.md new file mode 100644 index 00000000000..1b4f1b3d016 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/dual-stack-cluster.md @@ -0,0 +1,792 @@ +--- +sidebar_position: 5 + +--- + +# 使用calico安装双栈集群 + +1. 前置条件 + - sealos 版本 >=4.3.0 + - 每个主机都有一个IPv4主机和IPv6地址,并且可以互通通过IPv4和IPv6地址 + - calico采用vxlan模式, 内核版本必须大于 3.12。 可以参考[官方文档](https://github.com/cyclinder/kubespray/blob/042c960c6617f8a360a8281464ff63f99ee2471c/docs/calico.md) +2. 运行 `sealos gen` 生成一个 Clusterfile,例如: + +```shell +$ sealos gen labring/kubernetes:v1.26.1 labring/helm:v3.10.3 labring/calico:v3.25.0 --masters 192.168.0.10 --nodes 192.168.0.11 --passwd "xxx" >Clusterfile +``` + +注意:labring/helm 应当在 labring/calico 之前。 + +生成的 Clusterfile 如下: + +
+Clusterfile + + +```yaml +apiVersion: apps.sealos.io/v1beta1 +kind: Cluster +metadata: + creationTimestamp: null + name: default +spec: + hosts: + - ips: + - 192.168.0.10:22 + roles: + - master + - amd64 + - ips: + - 192.168.0.11:22 + roles: + - node + - amd64 + image: + - labring/kubernetes:v1.26.1 + - labring/helm:v3.10.3 + - labring/calico:v3.25.0 + ssh: + passwd: xxx + pk: /root/.ssh/id_rsa + port: 22 +status: {} + +--- +BootstrapTokens: null +CertificateKey: "" +LocalAPIEndpoint: + AdvertiseAddress: 192.168.0.10 + BindPort: 6443 +NodeRegistration: + CRISocket: /run/containerd/containerd.sock + IgnorePreflightErrors: null + KubeletExtraArgs: null + Name: "" + Taints: null +Patches: null +SkipPhases: null +apiVersion: kubeadm.k8s.io/v1beta3 +kind: InitConfiguration + +--- +APIServer: + CertSANs: + - 127.0.0.1 + - apiserver.cluster.local + - 10.103.97.2 + - 192.168.0.10 + ExtraArgs: + audit-log-format: json + audit-log-maxage: "7" + audit-log-maxbackup: "10" + audit-log-maxsize: "100" + audit-log-path: /var/log/kubernetes/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yml + enable-aggregator-routing: "true" + feature-gates: "" + ExtraVolumes: + - HostPath: /etc/kubernetes + MountPath: /etc/kubernetes + Name: audit + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /var/log/kubernetes + MountPath: /var/log/kubernetes + Name: audit-log + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + - HostPath: /etc/kubernetes + MountPath: /etc/kubernetes + Name: audit + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /var/log/kubernetes + MountPath: /var/log/kubernetes + Name: audit-log + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + TimeoutForControlPlane: null +CIImageRepository: "" +CIKubernetesVersion: "" +CertificatesDir: "" +ClusterName: "" +ComponentConfigs: null +ControlPlaneEndpoint: apiserver.cluster.local:6443 +ControllerManager: + ExtraArgs: + bind-address: 0.0.0.0 + cluster-signing-duration: 876000h + feature-gates: "" + ExtraVolumes: + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true +DNS: + ImageRepository: "" + ImageTag: "" + Type: "" +Etcd: + External: null + Local: + DataDir: "" + ExtraArgs: + listen-metrics-urls: http://0.0.0.0:2381 + ImageRepository: "" + ImageTag: "" + PeerCertSANs: null + ServerCertSANs: null +FeatureGates: null +ImageRepository: "" +KubernetesVersion: v1.26.1 +Networking: + DNSDomain: "" + PodSubnet: 100.64.0.0/10 + ServiceSubnet: 10.96.0.0/22 +Scheduler: + ExtraArgs: + bind-address: 0.0.0.0 + feature-gates: "" + ExtraVolumes: + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true +apiVersion: kubeadm.k8s.io/v1beta3 +kind: ClusterConfiguration + +--- +CACertPath: /etc/kubernetes/pki/ca.crt +ControlPlane: + CertificateKey: "" + LocalAPIEndpoint: + AdvertiseAddress: "" + BindPort: 6443 +Discovery: + BootstrapToken: null + File: null + TLSBootstrapToken: "" + Timeout: 5m0s +NodeRegistration: + CRISocket: /run/containerd/containerd.sock + IgnorePreflightErrors: null + KubeletExtraArgs: null + Name: "" + Taints: null +Patches: null +SkipPhases: null +apiVersion: kubeadm.k8s.io/v1beta3 +kind: JoinConfiguration + +--- +apiVersion: kubeproxy.config.k8s.io/v1alpha1 +bindAddress: 0.0.0.0 +bindAddressHardFail: false +clientConnection: + acceptContentTypes: "" + burst: 10 + contentType: application/vnd.kubernetes.protobuf + kubeconfig: "" + qps: 5 +clusterCIDR: "" +configSyncPeriod: 15m0s +conntrack: + maxPerCore: 32768 + min: 131072 + tcpCloseWaitTimeout: 1h0m0s + tcpEstablishedTimeout: 24h0m0s +detectLocal: + bridgeInterface: "" + interfaceNamePrefix: "" +detectLocalMode: "" +enableProfiling: false +healthzBindAddress: 0.0.0.0:10256 +hostnameOverride: "" +iptables: + masqueradeAll: false + masqueradeBit: 14 + minSyncPeriod: 1s + syncPeriod: 30s +ipvs: + excludeCIDRs: + - 10.103.97.2/32 + minSyncPeriod: 0s + scheduler: "" + strictARP: false + syncPeriod: 30s + tcpFinTimeout: 0s + tcpTimeout: 0s + udpTimeout: 0s +kind: KubeProxyConfiguration +metricsBindAddress: 0.0.0.0:10249 +mode: ipvs +nodePortAddresses: null +oomScoreAdj: -999 +portRange: "" +showHiddenMetricsForVersion: "" +udpIdleTimeout: 250ms +winkernel: + enableDSR: false + forwardHealthCheckVip: false + networkName: "" + rootHnsEndpointName: "" + sourceVip: "" + +--- +address: 0.0.0.0 +apiVersion: kubelet.config.k8s.io/v1beta1 +authentication: + anonymous: + enabled: false + webhook: + cacheTTL: 2m0s + enabled: true + x509: + clientCAFile: /etc/kubernetes/pki/ca.crt +authorization: + mode: Webhook + webhook: + cacheAuthorizedTTL: 5m0s + cacheUnauthorizedTTL: 30s +cgroupDriver: cgroupfs +cgroupsPerQOS: true +clusterDomain: cluster.local +configMapAndSecretChangeDetectionStrategy: Watch +containerLogMaxFiles: 5 +containerLogMaxSize: 10Mi +contentType: application/vnd.kubernetes.protobuf +cpuCFSQuota: true +cpuCFSQuotaPeriod: 100ms +cpuManagerPolicy: none +cpuManagerReconcilePeriod: 10s +enableControllerAttachDetach: true +enableDebugFlagsHandler: true +enableDebuggingHandlers: true +enableProfilingHandler: true +enableServer: true +enableSystemLogHandler: true +enforceNodeAllocatable: +- pods +- pods +eventBurst: 10 +eventRecordQPS: 5 +evictionHard: + imagefs.available: 15% + memory.available: 100Mi + nodefs.available: 10% + nodefs.inodesFree: 5% +evictionPressureTransitionPeriod: 5m0s +failSwapOn: true +fileCheckFrequency: 20s +hairpinMode: promiscuous-bridge +healthzBindAddress: 0.0.0.0 +healthzPort: 10248 +httpCheckFrequency: 20s +imageGCHighThresholdPercent: 85 +imageGCLowThresholdPercent: 80 +imageMinimumGCAge: 2m0s +iptablesDropBit: 15 +iptablesMasqueradeBit: 14 +kind: KubeletConfiguration +kubeAPIBurst: 10 +kubeAPIQPS: 5 +localStorageCapacityIsolation: true +logging: + flushFrequency: 5000000000 + format: text + options: + json: + infoBufferSize: "0" + verbosity: 0 +makeIPTablesUtilChains: true +maxOpenFiles: 1000000 +maxPods: 110 +memoryManagerPolicy: None +memorySwap: {} +memoryThrottlingFactor: 0.8 +nodeLeaseDurationSeconds: 40 +nodeStatusMaxImages: 50 +nodeStatusReportFrequency: 10s +nodeStatusUpdateFrequency: 10s +oomScoreAdj: -999 +podPidsLimit: -1 +port: 10250 +registerNode: true +registryBurst: 10 +registryPullQPS: 5 +rotateCertificates: true +runtimeRequestTimeout: 2m0s +seccompDefault: false +serializeImagePulls: true +shutdownGracePeriod: 0s +shutdownGracePeriodCriticalPods: 0s +staticPodPath: /etc/kubernetes/manifests +streamingConnectionIdleTimeout: 4h0m0s +syncFrequency: 1m0s +topologyManagerPolicy: none +topologyManagerScope: container +volumePluginDir: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/ +volumeStatsAggPeriod: 1m0s +``` + +
+ +3. 生成 Clusterfile 后,编辑Clusterfile,然后添加IPv6 的 pod 和svc 的 CIDR 范围。这里使用fd85:ee78:d8a6:8607::1:0000/112、fd85:ee78:d8a6:8607::1000/116作为参考示例。主要修改以下信息。 + +
+Clusterfile + + +```yaml +apiVersion: kubeadm.k8s.io/v1beta3 +kind: ClusterConfiguration +Networking: + DNSDomain: "" + PodSubnet: 100.64.0.0/10,fd85:ee78:d8a6:8607::1:0000/112 #增加pod IPv6地址段 + ServiceSubnet: 10.96.0.0/22,fd85:ee78:d8a6:8607::1000/116 #增加svc IPv6地址段 +APIServer: + CertSANs: + - 127.0.0.1 + - apiserver.cluster.local + - 10.103.97.2 + - 192.168.0.10 + - 2001:db8::f816:3eff:fe8c:910a #增加控制节点的ipv6地址,如果你需要使用此IP访问apiserver + ExtraArgs: + service-cluster-ip-range: 10.96.0.0/22,fd85:ee78:d8a6:8607::1000/116 #增加svc IPv6地址段 +ControllerManager: + ExtraArgs: + node-cidr-mask-size-ipv6: 120 #默认为64 + node-cidr-mask-size-ipv4: 24 #默认为24 +--- +apiVersion: kubeproxy.config.k8s.io/v1alpha1 +kind: KubeProxyConfiguration +clusterCIDR: "100.64.0.0/10,fd85:ee78:d8a6:8607::1:0000/112" #增加pod IPv6地址段 +--- +# 添加Calico双栈配置 +apiVersion: apps.sealos.io/v1beta1 +kind: Config +metadata: + name: calico +spec: + path: charts/calico/values.yaml + strategy: merge + data: | + installation: + enabled: true + kubernetesProvider: "" + calicoNetwork: + bgp: Disabled + ipPools: + - blockSize: 22 + cidr: 100.64.0.0/10 + encapsulation: VXLAN + natOutgoing: Enabled + nodeSelector: all() + - blockSize: 122 + cidr: fd85:ee78:d8a6:8607::1:0000/112 #增加pod IPv6地址段 + encapsulation: VXLAN + natOutgoing: Enabled + nodeSelector: all() + nodeAddressAutodetectionV4: + interface: "eth.*|en.*|em.*" + nodeAddressAutodetectionV6: + interface: "eth.*|en.*|em.*" +``` + +
+ +最终的Clusterfile会是这样。 + +
+Clusterfile + + +```yaml +apiVersion: apps.sealos.io/v1beta1 +kind: Cluster +metadata: + creationTimestamp: null + name: default +spec: + hosts: + - ips: + - 192.168.0.10:22 + roles: + - master + - amd64 + - ips: + - 192.168.0.11:22 + roles: + - node + - amd64 + image: + - labring/kubernetes:v1.26.1 + - labring/helm:v3.10.3 + - labring/calico:v3.25.0 + ssh: + passwd: xxx + pk: /root/.ssh/id_rsa + port: 22 +status: {} + +--- +BootstrapTokens: null +CertificateKey: "" +LocalAPIEndpoint: + AdvertiseAddress: 192.168.0.10 + BindPort: 6443 +NodeRegistration: + CRISocket: /run/containerd/containerd.sock + IgnorePreflightErrors: null + KubeletExtraArgs: null + Name: "" + Taints: null +Patches: null +SkipPhases: null +apiVersion: kubeadm.k8s.io/v1beta3 +kind: InitConfiguration + +--- +APIServer: + CertSANs: + - 127.0.0.1 + - apiserver.cluster.local + - 10.103.97.2 + - 192.168.0.10 + - 2001:db8::f816:3eff:fe8c:910a + ExtraArgs: + service-cluster-ip-range: 10.96.0.0/22,fd85:ee78:d8a6:8607::1000/116 + audit-log-format: json + audit-log-maxage: "7" + audit-log-maxbackup: "10" + audit-log-maxsize: "100" + audit-log-path: /var/log/kubernetes/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yml + enable-aggregator-routing: "true" + feature-gates: "" + ExtraVolumes: + - HostPath: /etc/kubernetes + MountPath: /etc/kubernetes + Name: audit + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /var/log/kubernetes + MountPath: /var/log/kubernetes + Name: audit-log + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + - HostPath: /etc/kubernetes + MountPath: /etc/kubernetes + Name: audit + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /var/log/kubernetes + MountPath: /var/log/kubernetes + Name: audit-log + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + TimeoutForControlPlane: null +CIImageRepository: "" +CIKubernetesVersion: "" +CertificatesDir: "" +ClusterName: "" +ComponentConfigs: null +ControlPlaneEndpoint: apiserver.cluster.local:6443 +ControllerManager: + ExtraArgs: + node-cidr-mask-size-ipv6: 120 + node-cidr-mask-size-ipv4: 24 + bind-address: 0.0.0.0 + cluster-signing-duration: 876000h + feature-gates: "" + ExtraVolumes: + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true +DNS: + ImageRepository: "" + ImageTag: "" + Type: "" +Etcd: + External: null + Local: + DataDir: "" + ExtraArgs: + listen-metrics-urls: http://0.0.0.0:2381 + ImageRepository: "" + ImageTag: "" + PeerCertSANs: null + ServerCertSANs: null +FeatureGates: null +ImageRepository: "" +KubernetesVersion: v1.26.1 +Networking: + DNSDomain: "" + PodSubnet: 100.64.0.0/10,fd85:ee78:d8a6:8607::1:0000/112 + ServiceSubnet: 10.96.0.0/22,fd85:ee78:d8a6:8607::1000/116 +Scheduler: + ExtraArgs: + bind-address: 0.0.0.0 + feature-gates: "" + ExtraVolumes: + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true +apiVersion: kubeadm.k8s.io/v1beta3 +kind: ClusterConfiguration + +--- +CACertPath: /etc/kubernetes/pki/ca.crt +ControlPlane: + CertificateKey: "" + LocalAPIEndpoint: + AdvertiseAddress: "" + BindPort: 6443 +Discovery: + BootstrapToken: null + File: null + TLSBootstrapToken: "" + Timeout: 5m0s +NodeRegistration: + CRISocket: /run/containerd/containerd.sock + IgnorePreflightErrors: null + KubeletExtraArgs: null + Name: "" + Taints: null +Patches: null +SkipPhases: null +apiVersion: kubeadm.k8s.io/v1beta3 +kind: JoinConfiguration + +--- +apiVersion: kubeproxy.config.k8s.io/v1alpha1 +bindAddress: 0.0.0.0 +bindAddressHardFail: false +clientConnection: + acceptContentTypes: "" + burst: 10 + contentType: application/vnd.kubernetes.protobuf + kubeconfig: "" + qps: 5 +clusterCIDR: "" +configSyncPeriod: 15m0s +conntrack: + maxPerCore: 32768 + min: 131072 + tcpCloseWaitTimeout: 1h0m0s + tcpEstablishedTimeout: 24h0m0s +detectLocal: + bridgeInterface: "" + interfaceNamePrefix: "" +detectLocalMode: "" +enableProfiling: false +healthzBindAddress: 0.0.0.0:10256 +hostnameOverride: "" +iptables: + masqueradeAll: false + masqueradeBit: 14 + minSyncPeriod: 1s + syncPeriod: 30s +ipvs: + excludeCIDRs: + - 10.103.97.2/32 + minSyncPeriod: 0s + scheduler: "" + strictARP: false + syncPeriod: 30s + tcpFinTimeout: 0s + tcpTimeout: 0s + udpTimeout: 0s +kind: KubeProxyConfiguration +clusterCIDR: "100.64.0.0/10,fd85:ee78:d8a6:8607::1:0000/112" +metricsBindAddress: 0.0.0.0:10249 +mode: ipvs +nodePortAddresses: null +oomScoreAdj: -999 +portRange: "" +showHiddenMetricsForVersion: "" +udpIdleTimeout: 250ms +winkernel: + enableDSR: false + forwardHealthCheckVip: false + networkName: "" + rootHnsEndpointName: "" + sourceVip: "" + +--- +address: 0.0.0.0 +apiVersion: kubelet.config.k8s.io/v1beta1 +authentication: + anonymous: + enabled: false + webhook: + cacheTTL: 2m0s + enabled: true + x509: + clientCAFile: /etc/kubernetes/pki/ca.crt +authorization: + mode: Webhook + webhook: + cacheAuthorizedTTL: 5m0s + cacheUnauthorizedTTL: 30s +cgroupDriver: cgroupfs +cgroupsPerQOS: true +clusterDomain: cluster.local +configMapAndSecretChangeDetectionStrategy: Watch +containerLogMaxFiles: 5 +containerLogMaxSize: 10Mi +contentType: application/vnd.kubernetes.protobuf +cpuCFSQuota: true +cpuCFSQuotaPeriod: 100ms +cpuManagerPolicy: none +cpuManagerReconcilePeriod: 10s +enableControllerAttachDetach: true +enableDebugFlagsHandler: true +enableDebuggingHandlers: true +enableProfilingHandler: true +enableServer: true +enableSystemLogHandler: true +enforceNodeAllocatable: +- pods +- pods +eventBurst: 10 +eventRecordQPS: 5 +evictionHard: + imagefs.available: 15% + memory.available: 100Mi + nodefs.available: 10% + nodefs.inodesFree: 5% +evictionPressureTransitionPeriod: 5m0s +failSwapOn: true +fileCheckFrequency: 20s +hairpinMode: promiscuous-bridge +healthzBindAddress: 0.0.0.0 +healthzPort: 10248 +httpCheckFrequency: 20s +imageGCHighThresholdPercent: 85 +imageGCLowThresholdPercent: 80 +imageMinimumGCAge: 2m0s +iptablesDropBit: 15 +iptablesMasqueradeBit: 14 +kind: KubeletConfiguration +kubeAPIBurst: 10 +kubeAPIQPS: 5 +localStorageCapacityIsolation: true +logging: + flushFrequency: 5000000000 + format: text + options: + json: + infoBufferSize: "0" + verbosity: 0 +makeIPTablesUtilChains: true +maxOpenFiles: 1000000 +maxPods: 110 +memoryManagerPolicy: None +memorySwap: {} +memoryThrottlingFactor: 0.8 +nodeLeaseDurationSeconds: 40 +nodeStatusMaxImages: 50 +nodeStatusReportFrequency: 10s +nodeStatusUpdateFrequency: 10s +oomScoreAdj: -999 +podPidsLimit: -1 +port: 10250 +registerNode: true +registryBurst: 10 +registryPullQPS: 5 +rotateCertificates: true +runtimeRequestTimeout: 2m0s +seccompDefault: false +serializeImagePulls: true +shutdownGracePeriod: 0s +shutdownGracePeriodCriticalPods: 0s +staticPodPath: /etc/kubernetes/manifests +streamingConnectionIdleTimeout: 4h0m0s +syncFrequency: 1m0s +topologyManagerPolicy: none +topologyManagerScope: container +volumePluginDir: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/ +volumeStatsAggPeriod: 1m0s +--- +apiVersion: apps.sealos.io/v1beta1 +kind: Config +metadata: + name: calico +spec: + path: charts/calico/values.yaml + strategy: merge + data: | + installation: + enabled: true + kubernetesProvider: "" + calicoNetwork: + bgp: Disabled + ipPools: + - blockSize: 22 + cidr: 100.64.0.0/10 + encapsulation: VXLAN + natOutgoing: Enabled + nodeSelector: all() + - blockSize: 122 + cidr: fd85:ee78:d8a6:8607::1:0000/112 + encapsulation: VXLAN + natOutgoing: Enabled + nodeSelector: all() + nodeAddressAutodetectionV4: + interface: "eth.*|en.*|em.*" + nodeAddressAutodetectionV6: + interface: "eth.*|en.*|em.*" +``` + +
+ +4. 运行 `sealos apply -f Clusterfile` 部署集群。 + +5. 更多参考[Calico官网](https://docs.tigera.io/calico/latest/networking/ipam/ipv6) 和 [k8s官方文档](https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/dual-stack-support/) \ No newline at end of file diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/image-build-standardized.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/image-build-standardized.md new file mode 100644 index 00000000000..aa61c9270a1 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/image-build-standardized.md @@ -0,0 +1,106 @@ +--- +sidebar_position: 1 +--- + +# 镜像构建与标准化目录配置 + +在开展 Sealos 镜像构建任务前,我们建议先构建一个符合规范的目录结构。这样能够使构建过程更加规范,易于管理,同时也能降低出错率。这篇文章将详细指导你如何创建这样一个目录结构,并解释每个目录的用途。 + +## 目录结构示例 + +一个完整的、符合规范的目录结构示例如下: + +```shell +. +├── charts +│   └── nginx +│   ├── Chart.lock +│   ├── charts +│   ├── Chart.yaml +│   ├── README.md +│   ├── templates +│   ├── values.schema.json +│   └── values.yaml +├── images +│   └── shim +│   └── nginxImages +├── init.sh +├── Kubefile +├── manifests +│   └── nginx +│   ├── deployment.yaml +│   ├── ingress.yaml +│   └── service.yaml +├── opt +│   └── helm +└── registry +``` + +## 目录描述 + +每个目录在构建过程中都扮演着特定的角色,以下是他们的详细描述: + +- `Kubefile` (必需):这个文件类似于 Dockerfile,是构建镜像的核心文件。它定义了构建过程中的各个步骤,如基础镜像选择、环境变量设置、文件复制等。 +- `manifests`:这个目录用于存放 Kubernetes 的 yaml 文件,这些文件描述了你的应用的配置信息,如 Pod、Service、Deployment 的配置。 +- `charts`:这个目录用于存放 Helm chart 文件,Helm chart 是 Kubernetes 的一个包管理工具,可以简化 Kubernetes 应用的部署和管理。 +- `images/shim`:这个目录用于存放无法从 yaml 文件或 Helm chart 中自动提取的镜像。在构建过程中,sealos 将自动拉取这些镜像。 +- `opt`:二进制文件存储在这里。 +- `registry`:这个目录用于存放构建过程中拉取到本地的镜像。在构建过程中,该目录将自动生成,无需手动创建。 +- `init.sh`:这个脚本在构建过程中由 GitHub Action 自动运行,你可以在这个脚本中编写一些自动化的工作,如初始化环境、预处理数据等。([cluster-image](https://github.com/labring-actions/cluster-image)的规则) + +## Kubefile 参数 + +`Kubefile` 文件是镜像构建的核心,它支持多种参数,以下是这些参数的详细解析: + +```shell +FROM labring/kubernetes:v1.24.0 +ENV version v1.1.0 +COPY manifests ./manifests +COPY registry ./registry +ENTRYPOINT ["kubectl apply -f manifests/tigera-operator.yaml"] +CMD ["kubectl apply -f manifests/custom-resources.yaml"] +``` + +各个参数的描述: + +- `FROM`:这个指令用于设置构建的基础镜像,所有的构建步骤都基于这个镜像进行。 +- `LABEL`: `LABEL`定义一些sealos集群镜像的内部配置。 + + - `check` 集群镜像运行前的一些检查脚本操作 + - `clean` 集群reset或者节点删除的清理脚本 + - `clean-registry` 集群reset时候的清理镜像仓库的脚本 + - `image` 集群的lvscare镜像地址(sealos的IPVS镜像) + - `init` 集群初始化的脚本 + - `init-registry` 集群初始化时启动容器镜像仓库的脚本 + - `sealos.io.type` 集群镜像类型,目前主要是rootfs、application和patch。 + - rootfs 是运行集群的基础镜像,比如kubernetes、kubernetes-docker这种包含镜像、二进制等集群所需的。(**每个节点都需要存在**) + - application 是应用镜像,比如calico、helm、istio等应用服务的镜像。(**只存储到master0节点**) + - patch是在rootfs镜像后需要调整的,是另一种修改rootfs镜像的方式(**还有一种方式是Config方式**),它会覆盖默认的集群运行的第一个镜像。 + + - `sealos.io.version` 镜像的版本号,目前开启的是v1beta1 + - `version` 集群的版本号,当前是kubernetes的版本号 + - `vip` 是VIP的地址,为修改IPVS的虚IP使用 + +- `ENV`:`ENV`指令将环境变量``设置为值``。(rootfs中默认会有一些默认的环境变量,可以修改rootfs中一些默认参数,比如镜像仓库的账号密码、docker、containerd的存储目录等等) + + 具体的集群镜像需要具体查看,`sealos inspect`镜像看一下对应的环境变量,不同版本的镜像略有不同。 + + - SEALOS_SYS_CRI_ENDPOINT: 当前集群镜像的criSocket (不同类型集群镜像可能不同) + - criData: cri的数据目录 + - defaultVIP: 默认的VIP地址 + - disableApparmor: 是否禁用apparmor (containerd有这个问题) + - registryConfig: 容器镜像仓库的配置目录 + - registryData: 容器镜像仓库的数据目录(因为是目录进行了挂载,其实这个配置没有实际意义,它实际还是存储在/var/lib/sealos下面) + - registryDomain: 默认镜像仓库的域名 + - registryPassword: 默认镜像仓库的密码 + - registryPort: 默认镜像仓库的密码 + - registryUsername: 默认镜像仓库的账户 + - sandboxImage: 默认cri启动的sandbox_image。(无需写repo只需要写镜像名称,eg: pasue:3.7) +- `COPY`:`COPY`指令从``复制新的文件或目录,并将它们添加到容器的文件系统路径``上。(**注意,需要把registry目录进行拷贝,否则集群没有容器镜像**) +- `ENTRYPOINT`:这个指令用于设置镜像的启动命令,当镜像启动时,这条命令会被执行。 +- `CMD`:这个指令也用于设置镜像的启动命令,但它与 ENTRYPOINT 指令的区别在于,如果用户在运行镜像时(`sealos run --cmd`)提供了启动命令,CMD 指令中的命令将会被覆盖。 + +在构建过程中,Sealos 还会自动设置一些内置的环境变量,包括(前缀为'SEALOS_SYS'的环境变量无法被修改): + +- SEALOS_SYS_KUBE_VERSION:Kubernetes的版本号,例如 v1.26.0 +- SEALOS_SYS_SEALOS_VERSION:Sealos的版本号,例如 4.1.3 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/images/build.png b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/images/build.png new file mode 100644 index 00000000000..d1ae7d6aead Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/images/build.png differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/images/registry-build.png b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/images/registry-build.png new file mode 100644 index 00000000000..485b531d28f Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/images/registry-build.png differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/images/sealos-run.png b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/images/sealos-run.png new file mode 100644 index 00000000000..70ef65ffa13 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/images/sealos-run.png differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/sealos-run.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/sealos-run.md new file mode 100644 index 00000000000..6946a3bbc93 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/sealos-run.md @@ -0,0 +1,136 @@ +--- +sidebar_position: 2 +--- + +# Sealos Run 的工作原理 + +以下是 `sealos run` 命令的详细工作原理。为了帮助您更好地理解,我们将其分解为九个主要步骤。 + +## 1. 执行命令 + +首先,用户通过执行以下命令启动 Sealos: + +```bash +sealos run kubernetes:v1.23.8 +``` + +## 2. 执行 Pipeline + +命令执行后,Sealos 开始执行一系列相关的操作步骤,我们称之为 "Pipeline"。这个过程包括以下几个子步骤: + +### 2.1 节点检查 + +Sealos 会对所有节点进行检查,以确保它们都是可用的。例如,检查是否存在重复的主机名,以及所有节点的时间是否已经同步。 + +### 2.2 拉取镜像 + +接着,Sealos 从远程仓库拉取 Kubernetes 的镜像,并将其加载到本地存储。 + +### 2.3 渲染配置 + +然后,Sealos 会对拉取到的镜像的 rootfs(文件系统)进行配置渲染,这是为了准备后续的节点分发。 + +### 2.4 分发镜像文件 + +配置渲染完成后,Sealos 会将渲染后的 rootfs 文件分发到各个节点。 + +### 2.5 分发 Registry 目录 + +此外,Sealos 也会将镜像中的 registry 目录分发到对应的 registry 角色节点。Sealos 支持两种模式: + +- **scp模式**:直接通过 scp 将目录复制到每个节点,这种方式会占用大量的网络带宽。 +- **镜像同步模式**:使用 skopeo sdk 的镜像同步机制,能够实现增量镜像同步,从而节省网络带宽。该功能可通过环境变量 `SEALOS_REGISTRY_SYNC_EXPERIMENTAL=true` 来开启。 + +### 2.6 执行 Bootstrap + +Bootstrap 是关键步骤,包括以下操作: + +#### 2.6.1 添加 Host 解析 + +Sealos 会在每个节点上添加 registry 的 host 解析。 + +#### 2.6.2 执行 Registry-Init 脚本 + +在添加完 host 解析后,Sealos 会执行 registry-init 脚本。 + +#### 2.6.3 执行 Init 脚本 + +最后,Sealos 会执行 init 脚本,启动 Kubernetes 服务。 + +## 3. 执行 InitMaster0 + +Pipeline 执行完成后,Sealos 进入 InitMaster0 阶段。在此阶段,Sealos 会执行以下操作: + +### 3.1 生成 Kubeadm 配置 + +首先,Sealos 生成 Kubeadm 的初始化配置文件。 + +### 3.2 生成并分发证书文件 + +然后,Sealos 生成集群的所有 + +证书文件,并将它们分发到各个节点。 + +### 3.3 初始化 Master0 + +最后,Sealos 执行`kubeadm init`初始化 Master0 节点。 + +## 4. 执行 JoinMaster + +初始化完 Master0 节点后,Sealos 进入 JoinMaster 阶段。在此阶段,Sealos 会执行以下操作: + +### 4.1 同步 Kubeconfig + +首先,Sealos 将 Kubeconfig 文件同步到各个节点。 + +### 4.2 同步证书文件 + +接下来,Sealos 同步证书文件到各个节点。 + +### 4.3 生成 Join 配置 + +然后,Sealos 生成 JoinMaster 配置文件。 + +### 4.4 生成 Join 令牌 + +接着,Sealos 生成 Join 令牌。 + +### 4.5 执行 Join Master 流程 + +最后,Sealos 执行`kubeadm join`流程,让其他 Master 节点加入集群。 + +## 5. 执行 JoinNode + +所有 Master 节点加入集群后,Sealos 进入 JoinNode 阶段,执行以下操作: + +### 5.1 生成 Join 令牌 + +首先,Sealos 再次生成 Join 令牌。 + +### 5.2 生成 IPVS 规则 + +然后,Sealos 生成 IPVS 规则。 + +### 5.3 生成 Join 配置 + +接下来,Sealos 再次生成 JoinNode 配置。 + +### 5.4 执行 Join Node 流程 + +最后,Sealos 执行 Join Node 流程,让 Worker 节点加入集群。 + +## 6. 同步 IPVS + +所有节点加入集群后,Sealos 将 Master 的 IPVS 规则同步到所有节点。这里主要是通过 lvscare 的静态 pod,根据 Master 节点的数量同步静态 pod 的配置。 + +## 7. 执行 Guest 阶段 + +IPVS 规则同步完成后,Sealos 执行 Guest 阶段。这是执行集群镜像命令的阶段。 + +## 8. 写入 Clusterfile + +最后,Sealos 将最终的执行结果写入 Clusterfile。 + +这就是 `sealos run` 命令的工作原理。希望通过这篇文章,您能对 `sealos run` 命令有更深入的理解。以下是我们提到的全景图,以帮助您更好地理解整个流程。 + +![](images/sealos-run.png) diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/template-function.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/template-function.md new file mode 100644 index 00000000000..8cf77555612 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/advanced-guide/template-function.md @@ -0,0 +1,57 @@ +--- +sidebar_position: 9 +--- + +# 模板引入与函数增强 + +在 Sealos 的镜像构建过程中,"tmpl" 后缀的文件在 "etc"、"scripts" 和 "manifests" 这三个目录下的文件会被特殊处理。 + +1. "etc" 目录:这个目录通常用于存放配置文件。在构建过程中,Sealos 会对该目录下的 "tmpl" 后缀的文件进行模板渲染,渲染完成后的文件将被拷贝到集群镜像的相应目录下。 + +2. "scripts" 目录:这个目录通常用于存放执行脚本。Sealos 会对该目录下的 "tmpl" 后缀的文件进行模板渲染,生成的脚本将在集群镜像构建过程中被执行。 + +3. "manifests" 目录:这个目录通常用于存放 Kubernetes 资源清单文件。Sealos 会对该目录下的 "tmpl" 后缀的文件进行模板渲染,生成的清单文件将在集群镜像构建过程中被应用到 Kubernetes 集群中。 + +总的来说,这三个目录下的 "tmpl" 后缀文件在 Sealos 的镜像构建过程中都会被视为模板文件进行处理。这种处理方式提供了更多的灵活性,让我们可以在构建过程中动态生成配置、脚本或者 Kubernetes 资源清单。 + +在构建镜像时,我们支持 `template` 来让维护者完全控制生成的配置文件(模块渲染)。例如: + +```yaml +service: + name: {{ .serviceName }} + port: + {{- if typeIs "string" .servicePort }} + name: {{ .servicePort }} + {{- else if or (typeIs "int" .servicePort) (typeIs "float64" .servicePort) }} + number: {{ .servicePort | int }} + {{- end }} +``` + +请参考 Golang 的 [text/template](https://pkg.go.dev/text/template) 了解基础介绍和更多细节。 + +## 模板函数增强 + +此外,我们支持 `templateFunc` 来增强模板函数。例如: + +```yaml +shim: /var/run/image-cri-shim.sock +cri: /run/containerd/containerd.sock +address: http://{{ .registryDomain }}:{{ .registryPort }} +force: true +debug: false +image: /var/lib/image-cri-shim +{{ if and (ne .SEALOS_SYS_KUBE_VERSION "") (semverCompare "^1.26.0" .SEALOS_SYS_KUBE_VERSION) }}version: v1{{ else }}version: v1alpha2{{ end }} +timeout: 15m +auth: {{ .registryUsername }}:{{ .registryPassword }} +``` + +在这里我们使用 `semverCompare` 来检查用户是否运行在 k8s 版本 v1.26.0 或以上,如果是,生成 `version: v1`,否则生成 `version: v1alpha2`。 +有了这个支持,我们可以很轻松地用一个集群镜像文件管理多版本的 Kubernetes 支持。 + +### 一些最常用的模板函数 + +* [semverCompare](http://masterminds.github.io/sprig/semver.html) 比较语义版本,而不是字符串比较。 +* [default](http://masterminds.github.io/sprig/defaults.html) default 可以在值为空或未定义时提供一个默认值。 +* [toYaml](https://github.com/labring/sealos/blob/main/pkg/template/funcmap.go#L66) 将当前值(对象,映射,数组)显示为 yaml 格式的字符串。 + +完整的支持函数列表,请[点击这里](http://masterminds.github.io/sprig/)。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/images/sealos.webp b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/images/sealos.webp new file mode 100644 index 00000000000..0cc05e478e9 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/images/sealos.webp differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/lifecycle-management/lifecycle-management.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/lifecycle-management/lifecycle-management.md new file mode 100644 index 00000000000..24b9a600181 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/lifecycle-management/lifecycle-management.md @@ -0,0 +1,93 @@ +--- +sidebar_position: 0 +--- + +# K8s 集群生命周期管理 + +Sealos 提供一套强大的工具,使得用户可以便利地管理整个集群的生命周期。 + +## 功能介绍 + +使用 Sealos,您可以安装一个不包含任何组件的裸 Kubernetes 集群。此外,Sealos 还可以在 Kubernetes 之上,通过集群镜像能力组装各种上层分布式应用,如数据库、消息队列等。 + +Sealos 不仅可以安装一个单节点的 Kubernetes 开发环境,还能构建数千节点的生产高可用集群。 + +Sealos 具有自由伸缩集群、备份恢复、释放集群等功能,即使在离线环境中,Sealos 也能提供出色的 Kubernetes 运行体验。 + +## 主要特性 + +- 支持 ARM,v1.20 以上版本离线包支持 containerd 与 docker 集成 +- 提供 99 年证书,支持集群备份,升级 +- 不依赖 ansible、haproxy、keepalived,一个二进制工具,零依赖 +- 提供离线安装,不同 Kubernetes 版本只需使用不同的集群镜像 +- 高可用性由 ipvs 实现的 localLB 提供,占用资源少,稳定可靠,类似 kube-proxy 的实现 +- 使用 image-cri-shim 自动识别镜像名称,使离线交付更方便 +- 几乎兼容所有支持 systemd 的 x86_64 架构的环境 +- 轻松实现集群节点的增加/删除 +- 已有数万用户在线上环境使用 Sealos,稳定可靠 +- 支持集群镜像,自由组合定制你需要的集群,如 openebs 存储+数据库+minio 对象存储 +- 使用 buildah 的 sdk 实现对镜像标准统一,完全兼容 OCI 的标准 + +## 使用 Sealos 运行 Kubernetes 集群 + +使用 Sealos 运行一个 Kubernetes 集群非常简单,只需以下步骤: + +```bash +$ curl -sfL https://raw.githubusercontent.com/labring/sealos/v4.3.0/scripts/install.sh \ + | sh -s v4.3.0 labring/sealos +# 创建一个集群 +$ sealos run labring/kubernetes:v1.25.0-4.2.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \ + --masters 192.168.64.2,192.168.64.22,192.168.64.20 \ + --nodes 192.168.64.21,192.168.64.19 -p [your-ssh-passwd] +``` + +[![asciicast](https://asciinema.org/a/519263.svg)](https://asciinema.org/a/519263?speed=3) + +## 在集群上运行分布式应用 + +通过 `sealos run` 命令,您可以在集群上运行各种分布式应用,如数据库、消息队列、AI 能力,甚至企业级 SaaS 软件。例如: + +```shell +# MySQL 集群 +$ sealos run labring/mysql-operator:8.0.23-14.1 + +# Clickhouse 集群 +$ sealos run labring/clickhouse:0.18.4 + +# Redis 集群 +$ sealos run labring/redis-operator:3.1.4 +``` + +## 自定义集群 + +对于 Sealos 生态没有的集群镜像,用户可以方便地自己构建和定制属于自己的集群镜像。例如: + +[构建一个 ingress 集群镜像](/self-hosting/lifecycle-management/quick-start/build-ingress-cluster-image.md) + +您还可以定制一个完全属于自己的 Kubernetes: + +Sealfile: + +```shell +FROM kubernetes:v1.25.0 +COPY flannel-chart . +COPY mysql-chart . +CMD ["helm install flannel flannel-chart", "helm install mysql mysql-chart"] +``` + +```shell +sealos build -t my-kuberentes:v1.25.0 . +sealos run my-kuberentes:v1.25.0 ... +``` + +## 常见问题 + +**Sealos 是 Kubernetes 安装工具吗?** + +安装部署只是 Sealos 的一个基本功能,如同单机操作系统有 Boot 模块一样,Sealos 的 Boot 模块可以很好地管理 Kubernetes 在任何场景下的生命周期。 + +**Sealos 和 Rancher、KubeSphere 有什么区别?** + +Sealos 的设计理念是 "化整为零,自由组装,大道至简"。Sealos 利用 Kubernetes 的能力,以简单的方式提供给用户真正需要的东西。用户需要的不一定是 Kubernetes,用户需要的是具体的能力。 + +Sealos 是极其灵活的,不会给用户带来额外负担。它的形态取决于用户的需求和安装的应用。Sealos 的核心是分布式应用,所有应用都是一等公民。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-binary.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-binary.md new file mode 100644 index 00000000000..6433a19d058 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-binary.md @@ -0,0 +1,88 @@ +--- +sidebar_position: 4 +--- + +# 构建基于二进制文件的集群镜像 + +此文档主要介绍了如何使用 `sealos` 工具将单一二进制文件(例如 `helm` 或 `kustomize`)打包为集群镜像,并将它们通过在主节点上部署集群镜像进行安装。以 `helm` 为例,我们将详细介绍如何将二进制文件打包成集群镜像。 + +## 创建构建工作空间 + +首先,创建一个基础目录作为构建工作空间: + +```shell +$ mkdir ~/cluster-images +``` + +在工作空间中,创建一个 `opt` 目录用于存储二进制文件: + +```shell +$ cd cluster-images +$ mkdir opt/ +``` + +## 准备二进制文件 + +接下来,我们准备 `helm` 二进制文件。在此,我们从 [github release](https://github.com/helm/helm/releases) 中下载: + +```shell +wget https://get.helm.sh/helm-v3.10.1-linux-amd64.tar.gz +tar -zxvf helm-v3.10.1-linux-amd64.tar.gz +chmod a+x linux-amd64/helm +mv linux-amd64/helm opt/ +``` + +## 创建构建镜像所需的 `Sealfile` 文件 + +创建一个名为 `Sealfile` 的文件,内容如下: + +```shell +FROM scratch +COPY opt ./opt +CMD ["cp opt/helm /usr/bin/"] +``` + +目前的目录结构如下: + +``` +. +├── Sealfile +└── opt + └── helm +``` + +## 构建集群镜像 + +现在,一切准备就绪,你可以开始构建集群镜像了: + +```shell +sealos build -t labring/helm:v3.10.1 . +``` + +**注意:** 首先你需要在本地主机上安装 `sealos` 命令。 + +你可以查看构建日志来了解构建过程。 + +```shell +root@ubuntu:~/cluster-images# sealos build -t labring/helm:v3.10.1 . +... +``` + +查看构建的镜像,现在所有依赖的二进制文件都已经构建进集群镜像中: + +```shell +root@ubuntu:~/cluster-images# sealos images +labring/helm v3.10.1 19ed4a24f0fe 3 minutes ago 45.1 MB +``` + +## 推送镜像 + +你可以将镜像推送至任何 Docker 镜像仓库,下面的命令将镜像推送到 dockerhub: + +```shell +sealos push labring/helm:v3.10.1 +``` + +**注意:** 请使用 `sealos` 命令来操作集群镜像,不支持 Docker 命令。 + +如果你使用的是私有镜像仓库,可以使用 `sealos login` 命令登录你的镜像仓库,然后再推送或者拉取镜像 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-go_template.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-go_template.md new file mode 100644 index 00000000000..135698980bf --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-go_template.md @@ -0,0 +1,106 @@ +--- +sidebar_position: 5 +--- + +# 构建基于 go-template 的集群镜像 + +在构建集群镜像的过程中,我们可以使用 `--env` 选项通过sealos命令行传递一些变量。这些环境变量可以被Kubefile的 `CMD` 命令或者yaml文件模板所使用。 + +## 在 Kubefile 中使用环境变量 + +这个示例定义了一个 `SERVICE_TYPE` 变量,它允许用户在安装应用程序时自定义服务暴露类型,并将参数传递给CMD中的helm命令。 + +Kubefile 示例: + +```shell +FROM scratch +ENV SERVICE_TYPE "NodePort" +COPY charts charts +COPY registry registry +CMD ["helm upgrade --install nginx charts/nginx --namespace=nginx --create-namespace --set service.type=$(SERVICE_TYPE)"] +``` + +运行集群应用并设置一个自定义的 `SERVICE_TYPE=LoadBalancer`,如果不设置,它将默认为 NodePort。 + +```shell +sealos run labring/nginx:v1.23.1 --env SERVICE_TYPE=LoadBalancer +``` + +## 在Yaml文件中使用环境变量 + +准备一个简单的nginx服务的yaml文件,这个文件必须是 `*.tmpl` 扩展名,以便在运行 `sealos run --env` 命令时渲染。 + +```shell +$ cat manifests/service.yaml.tmpl +apiVersion: v1 +kind: Service +metadata: + name: nginx + labels: + name: nginx +spec: + type: {{ .serviceType }} + ports: + - port: 80 + nodePort: {{ .http_NodePort }} + name: http + - port: 443 + nodePort: {{ .https_NodePort }} + name: https + selector: + name: nginx +``` + +下面是一个Kubefile样例,你可以在这里设置默认的环境变量。 + +```shell +FROM scratch +ENV serviceType NodePort +ENV http_NodePort 30080 +ENV https_NodePort 30443 + +COPY manifests manifests +COPY registry registry +CMD ["kubectl apply -f manifests/service.yaml"] +``` + +当你构建镜像时,什么都不会发生,只有在运行应用程序时,它才会渲染。如果没有设置 `--env`,它将使用 Kubefile 的默认 ENV。 + +```shell +sealos run labring/nginx:1.23.1 --env serviceType=LoadBalancer --env http_NodePort=30080 --env https_NodePort=30443 +``` + +你会发现 sealos 会在主节点的本地路径上基于 `service.yaml.tmpl` 渲染一个新的yaml文件 `service.yaml`。 + +**注意** 新版本的应用的rootfs放到了`/var/lib/sealos/data/default/applications`目录,每个应用都有独立的目录。 + +```shell +root@node1:~# ls /var/lib/sealos/data/default/rootfs/manifests |grep service +service.yaml +service.yaml.tmpl +``` + +检查 yaml 内容: + +```shell +root@node1:~# cat /var/lib/sealos/data/default/rootfs/manifests/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: nginx + labels: + name: nginx +spec: + type: NodePort + ports: + - port: 80 + nodePort: 30080 + name: http + - port: 443 + nodePort: 30443 + name: https + selector: + name: nginx +``` + +**注意:**所有类型的文件都支持这个特性(文件名后缀是.tmpl且构建目录在etc、scripts和manifests),你可以自己尝试一下。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-helm_charts.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-helm_charts.md new file mode 100644 index 00000000000..dfcfc668aa8 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-helm_charts.md @@ -0,0 +1,235 @@ +--- +sidebar_position: 3 +--- + +# 构建基于 Helm Charts 的集群镜像 + +让我们以最简单的 nginx 应用程序为例,介绍如何基于 Helm Charts 构建一个基于 nginx 的集群镜像。 + +## 一、准备工作 + +创建一个用于构建工作的基础目录。 + +```shell +$ mkdir ~/cloud-images +``` + +创建一个 `charts` 目录来存储 Kubernetes nginx Helm Charts 文件。 + +```shell +$ cd cloud-images +$ mkdir charts +``` + +## 二、准备Helm Charts + +准备 nginx Helm Charts,这里我们使用 [bitnami 官方的 nginx Helm Charts](https://bitnami.com/stack/nginx),让我们将 Helm Chart 文件拉取到本地并解压到 `charts` 目录中。 + +```shell +helm repo add bitnami https://charts.bitnami.com/bitnami +helm search repo bitnami/nginx +helm pull bitnami/nginx --version=13.2.13 -d charts/ --untar +``` + +**注意:** 首先你应该安装 Helm 命令工具到本地主机。 + +现在,charts 目录的结构如下所示。 + +``` +charts/ +└── nginx + ├── Chart.lock + ├── charts + ├── Chart.yaml + ├── README.md + ├── templates + ├── values.schema.json + └── values.yaml +``` + +## 三、创建Kubefile + +创建一个名为 `Kubefile` 的文件用于镜像构建: + +```shell +$ cat Kubefile +FROM scratch +COPY charts charts +COPY registry registry +CMD ["helm install nginx charts/nginx --namespace=nginx --create-namespace"] +``` + +建议使用 `helm upgrade --install` 而不是 `helm install`,这样可以在以后更新应用程序时重复运行相同的命令。 + +你可以根据需要添加其他选项,例如通过 NodePort 暴露服务。 + +```shell +FROM scratch +COPY charts charts +COPY registry registry +CMD ["helm upgrade --install nginx charts/nginx --namespace=nginx --create-namespace --set service.type=NodePort"] +``` + +## 四、构建集群镜像 + +现在一切准备就绪,你可以开始构建集群镜像。 + +```shell +sealos build -t labring/nginx:v1.23.2 . +``` + +**注意:** 你应该首先将 sealos 命令安装到本地主机。 + +你可以查看构建日志。 + +```shell +root@ubuntu:~/cloud-images# sealos build -t labring/nginx:v1.23.2 . +2022-11-06T15:58:33 info lookup in path charts +2022-11-06T15:58:33 info sub chart is nginx +2022-11-06T15:58:33 warn if you access private registry,you must be 'sealos login' or 'buildah login' +2022-11-06T15:58:33 info pull images [docker.io/bitnami/nginx:1.23.2-debian-11-r29] for platform is linux/amd64 +Pulling image: docker.io/bitnami/nginx:1.23.2-debian-11-r29 +1d8866550bdd: Download complete +cbbfe6232a5b: Download complete +ed342369e859: Download complete +Status: images save success +2022-11-06T15:58:43 info output images [docker.io/bitnami/nginx:1.23.2-debian-11-r29] for platform is linux/amd64 +STEP 1/3: FROM scratch +STEP 2/3: COPY . . +STEP 3/3: CMD ["helm upgrade --install nginx charts/nginx --namespace=nginx --create-namespace --set service.type=NodePort"] +COMMIT labring/nginx:v1.23.2 +Getting image source signatures +Copying blob 9f5a861e0f8d done +Copying config 1b89695273 done +Writing manifest to image destination +Storing signatures +--> 1b896952734 +Successfully tagged localhost/labring/nginx:v1.23.2 +1b8969527343939d60859469708e5420758f7419a421304f81b5132669982de7 +2022-11-06T15:58:44 info + ___ ___ ___ ___ ___ ___ + /\ \ /\ \ /\ \ /\__\ /\ \ /\ \ + /::\ \ /::\ \ /::\ \ /:/ / /::\ \ /::\ \ + /:/\ \ \ /:/\:\ \ /:/\:\ \ /:/ / /:/\:\ \ /:/\ \ \ + _\:\~\ \ \ /::\~\:\ \ /::\~\:\ \ /:/ / /:/ \:\ \ _\:\~\ \ \ + /\ \:\ \ \__\ /:/\:\ \:\__\ /:/\:\ \:\__\ /:/__/ /:/__/ \:\__\ /\ \:\ \ \__\ + \:\ \:\ \/__/ \:\~\:\ \/__/ \/__\:\/:/ / \:\ \ \:\ \ /:/ / \:\ \:\ \/__/ + \:\ \:\__\ \:\ \:\__\ \::/ / \:\ \ \:\ /:/ / \:\ \:\__\ + \:\/:/ / \:\ \/__/ /:/ / \:\ \ \:\/:/ / \:\/:/ / + \::/ / \:\__\ /:/ / \:\__\ \::/ / \::/ / + \/__/ \/__/ \/__/ \/__/ \/__/ \/__/ + + Website :https://www.sealos.io/ + Address :github.com/labring/sealos +``` + +sealos 将自动从 charts 目录中提取镜像,将其拉取到本地并存储在 registry 目录中。 + +现在的目录结构如下所示: + +```shell +. +├── charts +│ └── nginx +│ ├── Chart.lock +│ ├── charts +│ ├── Chart.yaml +│ ├── README.md +│ ├── templates +│ ├── values.schema.json +│ └── values.yaml +├── Kubefile +└── registry + └── docker + └── registry +``` + +在本地查看构建的镜像,现在所有依赖的部署清单和镜像缓存都构建到了集群镜像中。 + +```shell +root@ubuntu:~/cloud-images# + + sealos images +labring/nginx v1.23.2 521c85942ee4 4 minutes ago 56.8 MB +``` + +你可以将镜像推送到任何 Docker 镜像仓库,下面的命令将其推送到 Docker Hub。 + +```shell +sealos push labring/nginx:v1.23.2 +``` + +**注意:** 请使用 sealos 命令操作集群镜像,不支持 Docker 命令。 + +如果你使用私有镜像仓库,只需在拉取或推送镜像之前使用 `sealos login` 命令登录到注册表。 + +```shell +sealos login docker.io -u xxx -p xxx + +sealos login registry.cn-hangzhou.aliyuncs.com -u xxx -p xxx +``` + +## 五、安装集群镜像 + +然后你可以在你的集群中运行集群镜像。 + +```shell +sealos run labring/nginx:v1.23.2 +``` + +helm 二进制命令将安装到你的 Kubernetes 集群的主节点上。 + +```shell +root@ubuntu:~# helm -n nginx ls +``` + +## 六、说明 + +默认情况下,在构建镜像时,sealos 只解析默认的 values.yml 文件,但是你也可以为 sealos 提供自定义的 values.yaml 文件。 + +**自定义 values 文件必须放在与你的 Chart 相同的目录中,并且必须以 `.values.yaml` 的形式命名,例如 `loki-stack.values.yaml`。** + +```shell +. +├── charts +│ ├── loki-stack +│ │ ├── charts +│ │ ├── Chart.yaml +│ │ ├── README.md +│ │ ├── requirements.lock +│ │ ├── requirements.yaml +│ │ ├── templates +│ │ └── values.yaml +│ └── loki-stack.values.yaml +├── init.sh +├── Kubefile +``` + +`loki-stack.values.yaml` 文件内容如下: + +```shell +$ cat charts/loki-stack.values.yaml +promtail: + enabled: false +fluent-bit: + enabled: true +grafana: + enabled: true +``` + +不同的 values 文件可能会输出不同的镜像列表,以使 sealos 能够在 `sealos build` 过程中自动解析镜像。 + +```shell +$ helm template charts/loki-stack/ -f charts/loki-stack/values.yaml|grep image: + image: "grafana/promtail:2.0.0" + image: "grafana/loki:2.0.0" + image: "bats/bats:v1.1.0" + +$ helm template charts/loki-stack/ -f charts/loki-stack.values.yaml|grep image: + image: "grafana/fluent-bit-plugin-loki:1.6.0-amd64" + image: "kiwigrid/k8s-sidecar:0.1.209" + image: "grafana/grafana:6.7.0" + image: "grafana/loki:2.0.0" + image: "bats/bats:v1.1.0" + image: bats/bats:v1.1.0 +``` diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-image-list.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-image-list.md new file mode 100644 index 00000000000..c9e33edaf74 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-image-list.md @@ -0,0 +1,79 @@ +--- +sidebar_position: 1 +--- + +# 构建基于镜像清单的集群镜像 + +本文将指导你如何使用镜像列表构建集群镜像,或使用现有的docker存储的tar包进行构建应用镜像。 + +## 镜像列表 构建 + +``` +. +├── Kubefile +├── cni +│   ├── custom-resources.yaml +│   └── tigera-operator.yaml +├── images +│   └── shim +│   └── CalicoImageList +└── registry + └── docker + └── registry +``` + +```dockerfile +FROM labring/kubernetes:v1.24.0 +COPY cni ./cni +COPY images ./images +COPY registry ./registry +CMD ["kubectl apply -f cni/tigera-operator.yaml","kubectl apply -f cni/custom-resources.yaml"] +``` + +说明: + +CalicoImageList 中的镜像列表将被拉取到本地,然后使用 `kubectl apply -f` 命令将其应用到集群中。 + +镜像列表目前支持: +- docker.io/calico/cni:v3.20.0 这种远程的镜像 +- containers-storage:docker.io/labring/coredns:v0.0.1 这种本地的OCI容器镜像 +- docker-daemon:docker.io/library/nginx:latest 这种本地的docker容器镜像 + + +## 镜像tar包 构建 + +``` +. +├── Kubefile +├── cni +│   ├── custom-resources.yaml +│   └── tigera-operator.yaml +├── images +│   └── skopeo +│   ├── calico.tar +│   └── tar.txt +└── registry + └── docker + └── registry +``` + +```dockerfile +FROM scratch +COPY cni ./cni +COPY images ./images +COPY registry ./registry +CMD ["kubectl apply -f cni/tigera-operator.yaml","kubectl apply -f cni/custom-resources.yaml"] +``` + +说明: + +tar.txt 中的配置会被拉取到本地并重定向镜像列表,然后使用 `kubectl apply -f` 命令将其应用到集群中。 +配置文件格式: + +``` +docker-archive:calico.tar@calico/cni:v3.20.0 +``` + +镜像列表目前支持: +- docker-archive 这种docker存储的镜像,仅支持单个镜像 +- oci-archive 这种oci存储的镜像,仅支持单个镜像 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-manifests.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-manifests.md new file mode 100644 index 00000000000..2618ff743b6 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-manifests.md @@ -0,0 +1,101 @@ +--- +sidebar_position: 2 +--- + +# 构建基于部署清单的集群镜像 + +本文档将详细介绍如何构建基于部署清单(Deployment Manifest)的集群镜像。我们将以一个简单的nginx应用为例来进行说明。 + +## 一、准备工作 + +1. 首先,创建一个基础目录作为构建工作区。 + +```shell +$ mkdir ~/cloud-images +``` + +2. 创建一个名为 `manifests` 的目录来存储 kubernetes nginx 部署 yaml 文件。 + +```shell +$ cd cloud-images +$ mkdir manifests +``` + +## 二、准备清单文件 + +在这个阶段,我们将准备一个简单的nginx kubernetes yaml文件。 + +```shell +$ cat manifests/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + selector: + matchLabels: + app: nginx + replicas: 2 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.23.1 + ports: + - containerPort: 80 +``` + +## 三、创建Kubefile + +在这个阶段,我们需要创建一个Kubefile文件,该文件将用于构建镜像。 + +```shell +FROM scratch +COPY manifests manifests +COPY registry registry +CMD ["kubectl apply -f manifests/deployment.yaml"] +``` + +## 四、构建集群镜像 + +在准备好所有必需的文件和目录后,我们可以开始构建集群镜像。 + +```shell +sealos build -t labring/nginx:v1.23.1 . +``` + +**注意:** 在开始构建前,您需要先在本地主机上安装 sealos 命令。 + +构建过程中,您可以查看构建日志。 + +## 五、验证镜像 + +在构建完毕后,可以通过下列命令查看构建的镜像: + +```shell +root@ubuntu:~/cloud-images# sealos images +labring/nginx v1.23.1 521c85942ee4 4 minutes ago 56.8 MB +``` + +## 六、推送镜像 + +最后,我们可以将构建好的镜像推送至任何Docker镜像仓库,以下命令将其推送至DockerHub。 + +```shell +sealos push labring/nginx:v1.23.1 +``` + +**注意:** 请使用 sealos 命令来操作集群镜像,Docker 命令不受支持。 + +如果你使用的是私有镜像仓库,只需要在拉取或推送镜像前使用 `sealos login` 登录仓库即可。 + +```shell +sealos login docker.io -u xxx -p xxx + +sealos login registry.cn-hangzhou.aliyuncs.com -u xxx -p xxx +``` + +至此,基于部署清单的集群镜像已经构建完成。 \ No newline at end of file diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-scp_exec.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-scp_exec.md new file mode 100644 index 00000000000..3426fd48571 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/build-image/build-image-scp_exec.md @@ -0,0 +1,127 @@ +--- +sidebar_position: 6 +--- + +# 使用 exec 和 scp 命令构建集群镜像 + +默认情况下,`sealos run xx` 只会在第一个主节点上运行命令和复制文件。当你希望在特定节点或所有节点上运行命令或复制文件时,你可以在构建集群镜像时使用 `sealos exec` 或 `sealos scp` 命令。 + +- sealos exec: 连接到一个或多个节点并运行任何 shell 命令; +- sealos scp: 连接到一个或多个节点并将本地文件复制到远程节点。 + +虽然你可以直接在宿主机上使用这些命令,但本文主要描述的是在使用 sealos build 构建集群镜像时如何使用这两个命令。 + +## sealos exec 示例 + +以下是构建一个 openebs 集群镜像的示例。在安装 openebs maystor 之前,需要在节点上执行一些初始化操作,你可以使用 sealos exec 来实现这一点。 + +首先,创建一个用于构建工作的基础目录。 + +```shell +$ mkdir ~/cloud-images +``` + +创建一个 `charts` 目录,用来存储 kubernetes nginx helm charts 文件。 + +```shell +$ cd cloud-images +``` + +创建一个名为 `Kubefile` 的文件,用于镜像构建: + +```shell +$ cat Kubefile +FROM scratch +COPY manifests manifests +COPY registry registry +COPY opt opt +COPY mayastor.sh mayastor.sh +CMD ["bash mayastor.sh"] +``` + +创建一个名为 `mayastor.sh` 的脚本文件,sealos exec 后面的 shell 命令将在所有节点上执行(在所有节点上创建 hugepage、加载内核模块),但其他命令只会在主节点上运行。 + +```shell +$ cat mayastor.sh +#!/usr/bin/env bash +set -e + +sealos exec " +echo vm.nr_hugepages = 1024 | sudo tee -a /etc/sysctl.d/mayastor.conf +sysctl -p +sudo modprobe -- nbd +sudo modprobe -- nvmet +sudo modprobe -- nvmet_rdma +sudo modprobe -- nvme_fabrics +sudo modprobe -- nvme_tcp +sudo modprobe -- nvme_rdma +sudo modprobe -- nvme_loop +cat < /tmp/buildimage/kubeadm.yml < /tmp/buildimage/Kubefile < +Clusterfile + +```yaml +apiVersion: apps.sealos.io/v1beta1 +kind: Cluster +metadata: + creationTimestamp: null + name: default +spec: + hosts: + - ips: + - 192.168.0.2:22 + - 192.168.0.3:22 + - 192.168.0.4:22 + roles: + - master + - amd64 + - ips: + - 192.168.0.5:22 + - 192.168.0.6:22 + - 192.168.0.7:22 + roles: + - node + - amd64 + image: + - labring/kubernetes:v1.24.0 + - labring/helm:v3.8.2 + - labring/calico:v3.24.1 + ssh: + passwd: xxx + pk: /root/.ssh/id_rsa + port: 22 + user: root +status: {} +``` + + + +2. 生成 Clusterfile 后,然后更新集群配置。例如,要修改 pods 的 CIDR 范围,就可以修改 `networking.podSubnet` 和 `spec.data.spec.calicoNetwork.ipPools.cidr` 字段。最终的 Clusterfile 会像是这样: + +
+Clusterfile + +```yaml +apiVersion: apps.sealos.io/v1beta1 +kind: Cluster +metadata: + creationTimestamp: null + name: default +spec: + hosts: + - ips: + - 192.168.0.2:22 + - 192.168.0.3:22 + - 192.168.0.4:22 + roles: + - master + - amd64 + - ips: + - 192.168.0.5:22 + - 192.168.0.6:22 + - 192.168.0.7:22 + roles: + - node + - amd64 + image: + - labring/kubernetes:v1.25.0 + - labring/helm:v3.8.2 + - labring/calico:v3.24.1 + ssh: + passwd: xxx + pk: /root/.ssh/id_rsa + port: 22 + user: root +status: {} +--- +apiVersion: kubeadm.k8s.io/v1beta2 +kind: ClusterConfiguration +networking: + podSubnet: 10.160.0.0/12 +--- +apiVersion: apps.sealos.io/v1beta1 +kind: Config +metadata: + name: calico +spec: + path: charts/calico/values.yaml + strategy: merge + data: | + installation: + enabled: true + kubernetesProvider: "" + calicoNetwork: + ipPools: + - blockSize: 26 + cidr: 10.160.0.0/12 + encapsulation: IPIP + natOutgoing: Enabled + nodeSelector: all() + nodeAddressAutodetectionV4: + interface: "eth.*|en.*" +``` + +
+ +3. 运行 `sealos apply -f Clusterfile` 启动集群。集群运行成功后会把 Clusterfile 保存到 `.sealos/default/Clusterfile` 文件中,可以修改其中字段来重新 apply 对集群进行变更。 + +**注意:** + +- 可以参考[官方文档](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-config/)或运行 `kubeadm config print init-defaults` 命令来打印 kubeadm 配置。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/run-cluster/run-cluster.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/run-cluster/run-cluster.md new file mode 100644 index 00000000000..30235afd65e --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/run-cluster/run-cluster.md @@ -0,0 +1,14 @@ +--- +sidebar_position: 0 +--- + +# Sealos 集群镜像运行 + +在这个目录中,我们提供了一系列详细的教程和资源,帮助您有效地运行和管理 Sealos 集群。以下是每个文件或子目录的简短概述: + +1. **集群初始化**:这部分提供了所有必需的步骤,以启动并初始化一个新的 Sealos 集群。它包括如何配置 Sealos,以及如何运行初始化命令等信息。 +2. **节点管理**:这个部分包括如何添加和移除集群节点,以及如何维护和管理集群节点的详细信息。 +3. **服务管理**:这部分包含了如何在 Sealos 集群上部署和管理各种服务的指南。它包括如何使用 Sealos 的命令行工具来管理服务,以及如何配置服务以满足你的特定需求。 +4. **实战示例**:这部分包含了各种实战示例,包括如何运行和管理各种应用,以及如何处理特定的运维问题。 + +我们希望这个目录可以为您在运行和管理 Sealos 集群时提供全方位的帮助。如果有任何问题或建议,欢迎随时联系我们。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/run-cluster/template-apply-cluster.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/run-cluster/template-apply-cluster.md new file mode 100644 index 00000000000..ae6bf478ad4 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/run-cluster/template-apply-cluster.md @@ -0,0 +1,64 @@ +--- +sidebar_position: 2 +--- + +# 模板配置安装 + +我们也可以使用 Go 模版语法来编写 Clusterfile(就像 [Helm](https://helm.sh/) 一样,但暂不支持部分模版函数,如 `include`/`tpl`/`require`/`lookup`)。 例如,创建 `Clusterfile.yaml` 如下: + +```yaml +apiVersion: apps.sealos.io/v1beta1 +kind: Cluster +metadata: + name: {{ .Values.clusterName }} +spec: + hosts: + - ips: {{ .Values.masters | toYaml | nindent 8 }} + roles: ["master", "amd64"] + {{- with .Values.nodes }} + - ips: {{ . | toYaml | nindent 8 }} + roles: ["node", "amd64"] + {{- end }} + image: {{ .Values.images | toYaml | nindent 4 }} + ssh: + passwd: {{ env "SSH_PASSWORD" .Values.ssh.passwd }} + pk: {{ default "~/.ssh/id_rsa" .Values.ssh.pk }} + port: {{ default 22 .Values.ssh.port | int }} + user: {{ default "root" .Values.ssh.user }} +--- +apiVersion: kubeadm.k8s.io/v1beta3 +kind: ClusterConfiguration +networking: + dnsDomain: {{ default "cluster.local" .Values.networking.dnsDomain }} + serviceSubnet: {{ default "10.96.0.0/18" .Values.networking.serviceSubnet }} + podSubnet: {{ default "100.64.0.0/17" .Values.networking.podSubnet }} +``` + +随后,创建一个自定义的 values 文件 `example.values.yaml`: + +```yaml +clusterName: default +images: + - dockerhub.tencentcloudcr.com/labring/kubernetes:v1.23.8 + - dockerhub.tencentcloudcr.com/labring/calico:v3.24.1 +masters: + - 10.74.16.27:22 + - 10.74.16.140:22 + - 10.74.16.101:22 +nodes: [] +ssh: + # passwd: notSetYet + pk: /path/to/private/key/file + port: 22 + user: root +networking: + dnsDomain: cluster.local + serviceSubnet: 10.96.0.0/18 + podSubnet: 100.64.0.0/17 +``` + +然后就可以像这样部署集群了: + +```shell +$ sealos apply -f Clusterfile.yaml --values example.values.yaml --set clusterName=testlocal --env SSH_PASSWORD=s3cret +``` diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/run-cluster/upgrade-cluster.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/run-cluster/upgrade-cluster.md new file mode 100644 index 00000000000..1a2cbe08276 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/operations/run-cluster/upgrade-cluster.md @@ -0,0 +1,48 @@ +--- +sidebar_position: 3 +--- + +# 如何升级集群 + +如果你想要升级你的 Kubernetes 集群,你只需要运行以下命令: + +```sh +sealos run labring/kubernetes:<新版本号> +``` + +确保你已经建立了集群。 + +## 实例说明 + +1. 假设你已经运行过以下命令: + +```sh +sealos run labring/kubernetes:v1.24.0 labring/calico:v3.22.1 --masters 192.168.64.8 --nodes 192.168.64.7 +``` + +2. 现在你想要升级集群到 v1.25.0,你可以这样操作: + +```sh +sealos run labring/kubernetes:v1.25.0 +``` + +在运行到 'kubeadm upgrade v1.25.0' 的时候,你将看到: + +```txt +[upgrade/version] You have chosen to change the cluster version to "v1.25.0" +[upgrade/versions] Cluster version: v1.24.0 +[upgrade/versions] kubeadm version: v1.25.0 +[upgrade] Are you sure you want to proceed? [y/N]: +``` + +输入 'y' 来继续升级。 + +如果**出现错误**,你可以再次运行命令 'sealos run labring/kubernetes:v1.25.0'。即使失败,它也能保证得到相同的结果。 + +## 注意事项 + +1. **升级不能跨过次版本号**。比如从 'v1.23.0' 升级到 'v1.25.0' 是不允许的。如果你确实需要从 'v1.23.0' 升级到 'v1.25.0',你可以分成两步来操作,比如先从 'v1.23.0' 升级到 'v1.24.0',然后再从 'v1.24.0' 升级到 'v1.25.0'。 + +2. 一旦升级成功,集群挂载的旧版本镜像就会被替换。添加主节点或工作节点将会应用新版本。 + +这就是升级 Kubernetes 集群的整个过程。如果你在升级过程中遇到任何问题,不要犹豫,尽快查阅相关文档或者寻求帮助。 \ No newline at end of file diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/quick-start/build-ingress-cluster-image.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/quick-start/build-ingress-cluster-image.md new file mode 100644 index 00000000000..30d2cfa8dc4 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/quick-start/build-ingress-cluster-image.md @@ -0,0 +1,65 @@ +--- +sidebar_position: 3 +--- + +# 构建一个 Ingress 集群镜像 + +这里展示了如何用 helm 构建一个 nginx-ingress 集群镜像。 + +## 下载 helm chart + +```shell +$ mkdir ingress-nginx && cd ingress-nginx +$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx +$ helm pull ingress-nginx/ingress-nginx +``` + +随后就能找到下载的 chart: + +```shell +$ ls +ingress-nginx-4.1.0.tgz +``` + +## 添加镜像列表 + +sealos 会下载镜像列表中的镜像并缓存到 registry 目录。 + +目录必须形如 `images/shim/[your image list filename]`: + +```shell +$ cat images/shim/nginxImages +k8s.gcr.io/ingress-nginx/controller:v1.2.0 +k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1 +``` + +## 编写 Dockerfile + +```Dockerfile +FROM scratch +COPY ../examples . +CMD ["helm install ingress-nginx ingress-nginx-4.1.0.tgz --namespace ingress-nginx --create-namespace"] +``` + +## 构建集群镜像 + +```shell +$ sealos build -f Dockerfile -t docker.io/fanux/ingress-nginx:v1.2.0 . +``` + +sealos 在构建的时候会自动添加镜像列表中的镜像依赖到集群镜像中,通过神奇的方式保存了里面依赖的 Docker 镜像。 +并且在到别的环境中运行的时候更神奇的自动检测集群中是否有 Docker 镜像,有的话自动下载,没有的话才会去 k8s.gcr.io 下载。 +用户无需修改 helm chart 中的 docker 镜像地址,这里用到了镜像缓存代理的黑科技。 + +## 推送到镜像 registry + +```shell +$ sealos login docker.io +$ sealos push docker.io/fanux/ingress-nginx:v1.2.0 +``` + +## 运行集群镜像 + +```shell +$ sealos run docker.io/fanux/ingress-nginx:v1.2.0 +``` diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/quick-start/deploy-kubernetes.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/quick-start/deploy-kubernetes.md new file mode 100644 index 00000000000..6d900af995a --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/quick-start/deploy-kubernetes.md @@ -0,0 +1,192 @@ +--- +sidebar_position: 2 +keywords: [K8s, K8s 安装, K8s 部署, K8s 离线安装, K8s 离线部署] +--- + +# 安装 K8s 集群 + +Sealos 支持安装 `amd64` 和 `arm64` 架构的 K8s 集群。 + +## 先决条件 + +首先需要[下载 Sealos 命令行工具](/self-hosting/lifecycle-management/quick-start/install-cli.md),sealos 是一个简单的 Golang 二进制文件,可以安装在大多数 Linux 操作系统中。 + +以下是一些基本的安装要求: + ++ 每个集群节点应该有不同的主机名。主机名不要带下划线。 ++ 所有节点的时间需要同步。 ++ 需要在 K8s 集群的**第一个 master 节点**上运行 `sealos run` 命令,目前**集群外的节点不支持集群安装**。 ++ 建议使用干净的操作系统来创建集群。**不要自己装 Docker!** ++ 支持大多数 Linux 发行版,例如:Ubuntu、CentOS、Rocky linux。 ++ 支持 [Docker Hub](https://hub.docker.com/r/labring/kubernetes/tags) 中的所有 Kubernetes 版本。 ++ 支持使用 Containerd 作为容器运行时。 ++ 在公有云上安装请使用**私有 IP**。 + +## 查看集群镜像 + +Sealos 所有的集群镜像都可以在 [cluster-image-docs](https://github.com/labring-actions/cluster-image-docs) 仓库里找到。除了推送到 Docker Hub 之外,这些镜像还被同步到了阿里云的镜像仓库。 + +Docker Hub 上可以通过以下链接查看 Sealos 所有的集群镜像:[https://hub.docker.com/u/labring](https://hub.docker.com/u/labring). + +使用 [Registry Explorer](https://explore.ggcr.dev/) 可以查看 K8s 集群镜像的所有版本,直接输入 `registry.cn-shanghai.aliyuncs.com/labring/kubernetes`,然后点击 “Submit Query”: + +![](images/registry-explorer.png) + +就会看到这个集群镜像的所有 tag。 + +Docker Hub 同理,输入 `docker.io/labring/kubernetes` 即可查看所有 tag。 + +:::info注意 + +K8s 的小版本号越高,集群越稳定。例如 v1.28.x,其中的 x 就是小版本号。建议使用小版本号比较高的 K8s 版本。到本文截止时间为止,v1.27 最高的版本号是 v1.27.7,而 v1.28 最高的版本号是 v1.28.3,所以**建议使用 v1.27.7**。你需要根据实际情况来选择最佳的 K8s 版本 + +::: + +## 安装 K8s 单机版 + +```shell +# sealos version must >= v4.1.0 +$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 --single +``` + +## 安装 K8s 集群 + +```shell +$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 \ + --masters 192.168.64.2,192.168.64.22,192.168.64.20 \ + --nodes 192.168.64.21,192.168.64.19 -p [your-ssh-passwd] +``` + +注意:labring/helm 应当在 labring/cilium 之前。 + +参数说明: + +| 参数名 | 参数值示例 | 参数说明 | +| --- | --- | --- | +| --masters | 192.168.0.2 | K8s master 节点地址列表 | +| --nodes | 192.168.0.3 | K8s node 节点地址列表 | +| --ssh-passwd | [your-ssh-passwd] | ssh 登录密码 | +|kubernetes | labring/kubernetes:v1.25.0 | K8s 集群镜像 | + +在干净的服务器上直接执行上面命令,不要做任何多余操作即可安装一个高可用 K8s 集群。 + +## 安装各种分布式应用 + +```shell +sealos run registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 # install helm +sealos run registry.cn-shanghai.aliyuncs.com/labring/openebs:v3.9.0 # install openebs +sealos run registry.cn-shanghai.aliyuncs.com/labring/minio-operator:v4.5.5 registry.cn-shanghai.aliyuncs.com/labring/ingress-nginx:4.1.0 +``` + +这样高可用的 Minio 等应用都有了,不用关心所有的依赖问题。 + +## 增加 K8s 节点 + +增加 node 节点: + +```shell +$ sealos add --nodes 192.168.64.21,192.168.64.19 +``` + +增加 master 节点: + +```shell +$ sealos add --masters 192.168.64.21,192.168.64.19 +``` + +## 删除 K8s 节点 + +删除 node 节点: + +```shell +$ sealos delete --nodes 192.168.64.21,192.168.64.19 +``` + +删除 master 节点: + +```shell +$ sealos delete --masters 192.168.64.21,192.168.64.19 +``` + +## 清理 K8s 集群 + +```shell +$ sealos reset +``` + + + +## 离线安装 K8s + +离线环境只需要提前导入镜像,其它步骤与在线安装一致。 + +首先在有网络的环境中导出集群镜像: + +```shell +$ sealos pull registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 +$ sealos save -o kubernetes.tar registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 +``` + +### 导入镜像并安装 + +将 kubernetes.tar 拷贝到离线环境, 使用 load 命令导入镜像即可: + +```shell +$ sealos load -i kubernetes.tar +``` + +剩下的安装方式与在线安装的步骤一致: + +```shell +$ sealos images # 查看集群镜像是否导入成功 +$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 # 单机安装,集群安装同理 +``` + +### 快速启动 K8s 集群 + +也可以不用 load 命令导入镜像,直接使用以下命令即可安装 K8s: + +```shell +$ sealos run kubernetes.tar # 单机安装,集群安装同理 +``` + +## 集群镜像版本支持说明 + +### 支持 Containerd 的 K8s + +推荐使用 Containerd 作为容器运行时 (CRI) 的集群镜像版本,Containerd 是一种轻量级、高性能的容器运行时,与 Docker 兼容。使用 Containerd 的 Kubernetes 镜像可以提供更高的性能和资源利用率。以下是支持 Containerd 的集群镜像版本支持说明: + +| K8s 版本 | Sealos 版本 | CRI 版本 | 集群镜像版本 | +| -------- | ----------------- | -------- | -------------------------- | +| `<1.25` | `>=v4.0.0` | v1alpha2 | labring/kubernetes:v1.24.0 | +| `>=1.25` | `>=v4.1.0` | v1alpha2 | labring/kubernetes:v1.25.0 | +| `>=1.26` | `>=v4.1.4-rc3` | v1 | labring/kubernetes:v1.26.0 | +| `>=1.27` | `>=v4.2.0-alpha3` | v1 | labring/kubernetes:v1.27.0 | +| `>=1.28` | `>=v5.0.0` | v1 | labring/kubernetes:v1.28.0 | + +根据 Kubernetes 版本的不同,您可以选择不同的 Sealos 版本和 CRI 版本。例如,如果您要使用 Kubernetes v1.26.0 版本,您可以选择 sealos v4.1.4-rc3 及更高版本,并使用 v1 CRI 版本。 + +### 支持 Docker 的 K8s + +当然,你也可以选择使用 Docker 作为容器运行时,以下是支持 Docker 的集群镜像版本支持说明: + +| K8s 版本 | Sealos 版本 | CRI 版本 | 集群镜像版本 | +| -------- | ----------------- | -------- | --------------------------------- | +| `<1.25` | `>=v4.0.0` | v1alpha2 | labring/kubernetes-docker:v1.24.0 | +| `>=1.25` | `>=v4.1.0` | v1alpha2 | labring/kubernetes-docker:v1.25.0 | +| `>=1.26` | `>=v4.1.4-rc3` | v1 | labring/kubernetes-docker:v1.26.0 | +| `>=1.27` | `>=v4.2.0-alpha3` | v1 | labring/kubernetes-docker:v1.27.0 | +| `>=1.28` | `>=v5.0.0` | v1 | labring/kubernetes-docker:v1.28.0 | + + +与支持 Containerd 的 Kubernetes 镜像类似,您可以根据 Kubernetes 版本的不同选择不同的 Sealos 版本和 CRI 版本。例如,如果您要使用 Kubernetes v1.26.0 版本,您可以选择 sealos v4.1.4-rc3 及更高版本,并使用 v1 CRI 版本。 + +### 支持 Containerd 的 k3s + +| K3s 版本 | Sealos 版本 | 集群镜像版本 | +|----------|------------|---------------------| +| `>=1.24` | `>=v5.0.0` | labring/k3s:v1.24.0 | + +## 总结 + +您可以根据自己的需求和偏好,在不同的镜像类型和版本中进行选择。同时,不要忘记查看 [更新日志](https://github.com/labring/sealos/blob/main/CHANGELOG/CHANGELOG.md),以了解各个版本的更新内容和修复问题。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/quick-start/images/registry-explorer.png b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/quick-start/images/registry-explorer.png new file mode 100644 index 00000000000..a9e28004026 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/quick-start/images/registry-explorer.png differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/quick-start/install-cli.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/quick-start/install-cli.md new file mode 100644 index 00000000000..99c91f281ac --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/quick-start/install-cli.md @@ -0,0 +1,100 @@ +--- +sidebar_position: 1 +keywords: [sealos, sealos 命令行, sealos 下载] +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# 下载 Sealos 命令行工具 + +你可以通过运行命令来获取版本列表: + +```shell +$ curl --silent "https://api.github.com/repos/labring/sealos/releases" | jq -r '.[].tag_name' +``` + +> 注意:在选择版本时,建议使用稳定版本例如 `v4.3.0`。像 `v4.3.0-rc1`、`v4.3.0-alpha1` 这样的版本是预发布版,请谨慎使用。 + +设置 `VERSION` 环境变量为 latest 版本号,或者将 `VERSION` 替换为您要安装的 Sealos 版本: + +```shell +$ VERSION=`curl -s https://api.github.com/repos/labring/sealos/releases/latest | grep -oE '"tag_name": "[^"]+"' | head -n1 | cut -d'"' -f4` +``` + +## 二进制自动下载 + +```shell + +$ curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/main/scripts/install.sh | PROXY_PREFIX=https://mirror.ghproxy.com sh -s ${VERSION} labring/sealos + +``` + +## 二进制手动下载 + + + + +```shell +$ wget https://mirror.ghproxy.com/https://github.com/labring/sealos/releases/download/${VERSION}/sealos_${VERSION#v}_linux_amd64.tar.gz \ + && tar zxvf sealos_${VERSION#v}_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin +``` + + + + +```shell +$ wget https://mirror.ghproxy.com/https://github.com/labring/sealos/releases/download/${VERSION}/sealos_${VERSION#v}_linux_arm64.tar.gz \ + && tar zxvf sealos_${VERSION#v}_linux_arm64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin +``` + + + + +## 包管理工具安装 + +### DEB 源 + +```shell +$ echo "deb [trusted=yes] https://apt.fury.io/labring/ /" | sudo tee /etc/apt/sources.list.d/labring.list +$ sudo apt update +$ sudo apt install sealos +``` + +### RPM 源 + +```shell +$ sudo cat > /etc/yum.repos.d/labring.repo << EOF +[fury] +name=labring Yum Repo +baseurl=https://yum.fury.io/labring/ +enabled=1 +gpgcheck=0 +EOF +$ sudo yum clean all +$ sudo yum install sealos +``` + +## 源码安装 + +### 前置依赖 +1. `linux` +2. `git` +3. `golang` 1.20+ +4. `libgpgme-dev libbtrfs-dev libdevmapper-dev` + +如果在 `arm64` 环境下需要添加 `:arm64` 后缀。 + +### 构建 + +```shell +# git clone the repo +$ git clone https://github.com/labring/sealos.git +# just make it +$ make build BINS=sealos +``` + +## 下一步 + +[安装 K8s 集群](/self-hosting/lifecycle-management/quick-start/deploy-kubernetes.md)。 + diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/Image-cri-shim/_category_.json b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/Image-cri-shim/_category_.json new file mode 100644 index 00000000000..950b839be0a --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/Image-cri-shim/_category_.json @@ -0,0 +1,3 @@ +{ + "position" : 3 +} diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/Image-cri-shim/image-cri-shim.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/Image-cri-shim/image-cri-shim.md new file mode 100644 index 00000000000..2a2fb7892ca --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/Image-cri-shim/image-cri-shim.md @@ -0,0 +1,121 @@ +--- +sidebar_position: 3 +--- + +# image-cri-shim 使用指南 + +## 工作原理 + +image-cri-shim 是一个基于 CRI (Container Runtime Interface) 和 kubelet 的 gRPC (Google Remote Procedure Call) shim。CRI 是 Kubernetes 中用于与容器运行时进行交互的接口,而 kubelet 是负责维护容器运行状态和节点级别的资源管理的 Kubernetes 组件。 + +image-cri-shim 的主要功能是自动识别镜像名称,让用户在使用 Kubernetes 部署容器时无需手动指定镜像名称。这样可以降低用户的操作难度,提高部署容器的便利性。 + +在实际使用中,image-cri-shim 可以作为一个中间件,接收来自 kubelet 的请求,然后将请求转发给容器运行时。通过自动识别镜像名称,image-cri-shim 可以简化容器镜像的部署流程,减轻用户的操作负担。 + +``` ++------------+ +----------------+ +-------------------+ +| User | | Kubelet | | image-cri-shim | +| (Kubernetes| | (Node agent) | | (Middleware) | +| Manifest) | | | | | ++-----+------+ +-------+--------+ +-------+-----------+ + | | | + | YAML Manifest | | + |---------------> | | + | | | + | | | + | | CRI Request | + | |------------------------> | + | | | + | | Image Name | + | | Auto-Recognition | + | | | + | | | + | | CRI Response | + | | <------------------------+ + | | | + | | | + | Container | | + | Deployment | | + | <----------------------| | + | | | + | | | ++------------+ +-------+--------+ +-------+-----------+ + +``` + +从上述流程图可以看出,用户创建一个包含容器信息的 Kubernetes YAML 清单,然后将该清单提交给 kubelet。kubelet 是 Kubernetes 节点上的代理,负责管理容器。 +接着,kubelet 将 CRI 请求发送给 image-cri-shim 中间件。image-cri-shim 的主要任务是自动识别镜像名称,它会处理这个 CRI 请求并获取相关的镜像信息。当 image-cri-shim 识别到镜像名称后,它会将 CRI 响应返回给 kubelet。 + +最后,kubelet 使用从 image-cri-shim 获取的镜像名称来部署容器。这个过程对用户是透明的,用户无需手动指定镜像名称,从而简化了容器部署流程并提高了便利性。 + +## 架构图 + +image-cri-shim 的架构如下图所示: + +![](images/image-cri-shim.png) + + +## 使用说明 + +```yaml +shim: /var/run/image-cri-shim.sock +cri: /run/containerd/containerd.sock +address: http://sealos.hub:5000 +force: true +debug: true +timeout: 15m +auth: admin:passw0rd + +registries: +- address: http://172.18.1.38:5000 + auth: admin:passw0rd +``` +这段配置文件是一个用于设置 image-cri-shim 的 YAML 格式文件。配置文件中包含了一些关键的参数,以下是每个参数的解释: + +1. shim: 指定 image-cri-shim 的 UNIX 套接字文件路径。这个路径用于与 kubelet 之间的通信。 +2. cri: 指定容器运行时(如 containerd)的 UNIX 套接字文件路径。image-cri-shim 会使用这个路径与容器运行时进行通信。 +3. address: 定义镜像仓库的地址。在本例中,镜像仓库地址为 http://sealos.hub:5000。 +4. force: 设置为 true 时,image-cri-shim 会在强制启动shim,无需等待cri启动后启动。 +5. debug: 设置为 true 时,启用调试模式,输出更多的日志信息。 +6. timeout: 定义镜像操作的超时时间。在本例中,超时时间为 15 分钟(15m)。 +7. auth: 定义用于访问镜像仓库的身份验证凭据。在本例中,用户名为 admin,密码为 passw0rd。 + +此外,配置文件还包含了一个 registries 列表,用于定义其他镜像仓库及其身份验证凭据。在这个例子中,只有一个其他仓库: +- address: 该仓库的地址为 http://172.18.1.38:5000。 +- auth: 用于访问该仓库的身份验证凭据。在本例中,用户名为 admin,密码为 passw0rd。 +这个配置文件为 image-cri-shim 提供了所需的信息,以便正确地与 kubelet 和容器运行时(如 containerd)进行通信,以及访问和管理镜像仓库。 + +注意: image-cri-shim 能够同时兼容 CRI API v1alpha2 和 v1。 + +### 管理服务 + +image-cri-shim 通常作为一个系统服务运行。要管理 image-cri-shim,您可以使用系统服务管理工具(如 systemctl)来启动、停止、重启或查看服务状态。首先,确保您已经正确地安装了 image-cri-shim 并将其配置为一个系统服务。 + +1. 启动服务: `systemctl start image-cri-shim` +2. 停止服务: `systemctl stop image-cri-shim` +3. 重启服务: `systemctl restart image-cri-shim` +4. 查看服务状态: `systemctl status image-cri-shim` + +### 日志管理 + +要查看 image-cri-shim 服务的日志,您可以使用 journalctl 命令。journalctl 是一个用于查询和显示系统日志的工具,它与 systemd 服务管理器一起使用。 + +以下是使用 journalctl 查看 image-cri-shim 服务日志的命令: + +```shell +journalctl -u image-cri-shim +``` + +这将显示 image-cri-shim 服务的全部日志。如果您希望实时查看日志,可以添加 -f 参数: + +```shell +journalctl -u image-cri-shim -f +``` + +此外,您还可以根据时间过滤日志。例如,如果您只想查看过去一小时的日志,可以使用以下命令: + +```shell +journalctl -u image-cri-shim --since "1 hour ago" +``` + +这些命令应该能帮助您查看和分析 image-cri-shim 服务的日志,从而更好地了解服务的运行状态和可能出现的问题。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/Image-cri-shim/images/image-cri-shim.png b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/Image-cri-shim/images/image-cri-shim.png new file mode 100644 index 00000000000..5c8d5f81b23 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/Image-cri-shim/images/image-cri-shim.png differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/lvscare/_category_.json b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/lvscare/_category_.json new file mode 100644 index 00000000000..e47d9e07a6d --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/lvscare/_category_.json @@ -0,0 +1,3 @@ +{ + "position" : 99 +} \ No newline at end of file diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/lvscare/images/01.webp b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/lvscare/images/01.webp new file mode 100644 index 00000000000..0cc05e478e9 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/lvscare/images/01.webp differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/lvscare/lvscare.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/lvscare/lvscare.md new file mode 100644 index 00000000000..683793f0049 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/lvscare/lvscare.md @@ -0,0 +1,74 @@ +# LVScare 使用指南 + +## 介绍 + +LVScare是一款基于IPVS技术的轻量级负载均衡和健康检查工具,可以实时监控和管理后端服务。Sealos,一个云操作系统,它的生命周期管理是一个基于kubeadm的Kubernetes HA安装工具,适用于在任何Linux系统中安装和升级高可用Kubernetes集群。两者结合能实现Kubernetes master节点的高可用性。Sealos利用其生命周期管理能力,通过配合LVScare的轻量级,0依赖,高可用的特性,可以非常有效地保证Kubernetes集群的稳定性和可靠性。 + +### LVScare的工作原理与特点 + +LVScare通过IPVS实时监控后端服务(real servers)的健康状态。如果某个服务变得不可用,LVScare会立即将其权重设为0(用于TCP优雅终止),并在下一次检查期间从服务列表中移除。服务恢复正常后,LVScare会自动将其重新加入到服务列表。LVScare的这种设计使得它具备轻量级,0依赖,高可用的特性。占用资源少,稳定可靠,类似于kube-proxy的实现,可以通过ipvs实现的localLB保证服务的持续可用。 + +## Sealos与LVScare的集成 + +在Sealos中,我们利用了官方推荐的静态Pod的方式,自动配置和管理LVScare,以实现Kubernetes集群的高可用性。Sealos会在安装Kubernetes集群的过程中自动使用LVScare进行master节点的健康检查和负载均衡。这意味着,即使某个master节点出现故障,也不会影响Kubernetes集群的整体功能。 + +![](./images/01.webp) + +### 如何运行LVScare静态Pod + +首先,通过`sealctl static-pod`命令生成LVScare的配置,并将其放入`/etc/kubernetes/manifests`目录。这样,Kubernetes集群中的所有节点都能获取到这份配置。 + +```bash +lvscare care --vs 10.103.97.12:6443 --rs 192.168.0.2:6443 --rs 192.168.0.3:6443 --rs 192.168.0.4:6443 --interval 5 --mode route +``` + +### 生成和调整静态Pod配置 + +在需要在每个节点上启动LVScare时,我们可以使用以下命令生成静态Pod的配置: + +```bash +sealctl static-pod lvscare --vip 10.103.97.2:6443 --name lvscare --image lvscare:latest --masters 192.168.0.2:6443,192.168 + +.0.3:6443 --print +``` + +当master节点有变化时,Sealos只需重新执行`sealctl static-pod`命令即可调整master节点,简化了维护静态Pod的逻辑。在集群join节点之前,我们需要调用`sealctl ipvs`(该命令直接调用LVScare sdk)手动启动IPVS规则,维护好IPVS集群。节点join成功后,Kubernetes的静态Pod就可以接管IPVS规则了。 + +## 使用LVScare的优势 + +### 高可用性 + +结合LVScare,Sealos可以实现Kubernetes集群master节点的高可用性。 + +### 健康检查机制 + +LVScare的健康检查机制可以及时发现并处理问题,防止单节点故障引发的更大问题。 + +### 无缝集成 + +作为Sealos中的静态Pod,LVScare可以与Kubernetes集群其他部分无缝集成。 + +### 简化运维 + +Sealos自动配置和管理LVScare,大大简化了Kubernetes集群的运维工作。 + +## LVScare使用示例 + +请注意,所有的real server需要在同一主机上监听,并设置为`route`模式。然后,你可以在前台运行LVScare。例如: + +```bash +docker run -p 8081:80 --name echoserver1 -d cilium/echoserver +docker run -p 8082:80 --name echoserver2 -d cilium/echoserver +docker run -p 8083:80 --name echoserver3 -d cilium/echoserver +lvscare care --vs 169.254.0.1:80 --rs 127.0.0.1:8081 --rs 127.0.0.1:8082 --rs 127.0.0.1:8083 --logger DEBG --health-schem http --health-path / +``` + +## 清理 + +最后,你可以使用以下命令进行清理: + +```bash +lvscare care --vs 169.254.0.1:80 --logger DEBG -C +``` + +结论:LVScare是一款基于IPVS的轻量级负载均衡和健康检查工具,它能与Sealos无缝集成,极大地提高了Kubernetes集群的可用性和性能。试一试,看看LVScare如何帮助你更好地管理你的Kubernetes集群! diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/_category_.json b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/_category_.json new file mode 100644 index 00000000000..a788e786e6c --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/_category_.json @@ -0,0 +1,3 @@ +{ + "position" : 2 +} diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/cert.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/cert.md new file mode 100644 index 00000000000..9de055627c8 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/cert.md @@ -0,0 +1,31 @@ +--- +sidebar_position: 1 +--- + + +# cert 证书管理 + +`cert` 命令用于生成 Kubernetes 集群所需的证书文件。在 Kubernetes 集群中,证书用于确保组件之间的通信安全,例如 API server、kubelet 和 etcd 等。证书通过 TLS(Transport Layer Security)协议实现加密,以确保数据在传输过程中的保密性和完整性。 + +`sealctl cert` 命令可以根据提供的参数自动生成证书。这些参数包括节点 IP、节点名称、服务 CIDR、DNS 域以及可选的其他备用名称。通过生成并配置这些证书,您可以确保 Kubernetes 集群的安全通信。 + + + +``` +cert 命令用于生成 Kubernetes 证书。 + +参数: + --alt-names 备用名称,例如 sealos.io 或 10.103.97.2。可以包含多个备用名称。 + --node-name 节点名称,例如 master0。 + --service-cidr 服务网段,例如 10.103.97.2/24。 + --node-ip 节点的 IP 地址,例如 10.103.97.2。 + --dns-domain 集群 DNS 域,默认值为 cluster.local。 + --cert-path Kubernetes 证书文件路径,默认值为 /etc/kubernetes/pki。 + --cert-etcd-path Kubernetes etcd 证书文件路径,默认值为 /etc/kubernetes/pki/etcd。 + +示例: + sealctl cert --alt-names sealos.io --alt-names 10.103.97.2 \ + --node-name master0 --service-cidr 10.103.97.2/24 \ + --node-ip 10.103.97.2 --dns-domain cluster.local + +``` diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/cri.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/cri.md new file mode 100644 index 00000000000..cd36074f7b6 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/cri.md @@ -0,0 +1,48 @@ +--- +sidebar_position: 2 +--- + +# CRI 容器管理 + +`cri` 命令是用于管理和检查 Kubernetes 集群中的容器运行时(Container Runtime Interface,CRI)环境。容器运行时是负责运行容器的底层技术,如 Docker、containerd 或者 CRI-O 等。在 Kubernetes 中,容器运行时用于启动、停止和管理容器,以支持集群中的工作负载。 + +`sealctl cri` 命令提供了一组子命令,使您能够执行与容器运行时相关的各种操作,例如检查运行时是否是 Docker、是否正在运行,列出 Kubernetes 容器,删除容器,拉取镜像,检查镜像是否存在以及获取 CGroup 驱动信息等。 + +通过使用 `sealctl cri` 命令,您可以轻松地管理和检查 Kubernetes 集群中的容器运行时环境,确保其正确配置和正常运行。 + + + +```shell +sealctl cri [flags] +``` + + + +子命令: + +1. `socket`:检测 CRI 套接字。 + +```shell +sealctl cri socket +``` + +2. `cgroup-driver`:获取容器运行时的 cgroup 驱动。 + +```shell +sealctl cri cgroup-driver [--short] +``` + +- `--short`:仅打印结果。 + +全局参数: + +- `--socket-path`:CRI 套接字路径。 +- `--config`:CRI 配置文件。 + +示例: + +```shell +sealctl cri socket +sealctl cri cgroup-driver --short + +``` \ No newline at end of file diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/hostname.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/hostname.md new file mode 100644 index 00000000000..a6d4451d071 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/hostname.md @@ -0,0 +1,20 @@ +--- +sidebar_position: 3 +--- + + +# hostname 获取主机名 + +获取操作系统的主机名: + +```shell +sealctl hostname +``` + +示例: + +```shell +sealctl hostname +``` + +执行此命令将返回操作系统的主机名。无需传递任何参数。 \ No newline at end of file diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/hosts.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/hosts.md new file mode 100644 index 00000000000..df7431ec469 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/hosts.md @@ -0,0 +1,59 @@ +--- +sidebar_position: 4 +--- + +# hosts 管理 + +`hosts` 命令是用于管理操作系统的 hosts 文件。hosts 文件是一个用于解析域名到 IP 地址的文件,通常在本地系统中用于覆盖 DNS 解析。通过修改 hosts 文件,您可以为一个特定的域名分配一个自定义的 IP 地址,而不必依赖 DNS 服务器。 + +`sealctl hosts` 提供了以下三个子命令来实现 hosts 文件的管理: + +1. `list`:列出当前 hosts 文件中的所有条目。 +2. `add`:向 hosts 文件中添加一个新的域名与 IP 地址映射。 +3. `delete`:从 hosts 文件中删除一个指定的域名与 IP 地址映射。 + +通过这些子命令,您可以方便地查看、添加和删除 hosts 文件中的映射,从而更好地控制域名到 IP 地址的解析。 + +1. `sealctl hosts list`:列出当前 hosts 文件中的条目。 + + 示例: + + ```shell + sealctl hosts list + ``` + + + +2. `sealctl hosts add`:向 hosts 文件中添加一个新条目。 + + 参数: + + - `--ip`:IP 地址(必填) + - `--domain`:域名(必填) + + 示例: + + ```shell + sealctl hosts add --ip 192.168.1.100 --domain example.com + ``` + +3. `sealctl hosts delete`:从 hosts 文件中删除一个条目。 + + 参数: + + - `--domain`:要删除的域名(必填) + + 示例: + + ```shell + sealctl hosts delete --domain example.com + ``` + +注意:您可以在任何 `hosts` 子命令后面添加 `--path` 参数来指定 hosts 文件的路径。默认路径为 `/etc/hosts`(Linux 系统)。 + +示例: + +```shell +sealctl hosts list --path /custom/path/hosts +``` + diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/ipvs.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/ipvs.md new file mode 100644 index 00000000000..b903d23e648 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/ipvs.md @@ -0,0 +1,72 @@ +--- +sidebar_position: 6 +--- + +# ipvs 管理 + +`ipvs` 命令用于创建和管理本地的 IPVS 负载均衡。IPVS(IP Virtual Server)是 Linux 内核中的一个模块,它允许在内核空间实现高性能的负载均衡。`ipvs` 命令通过管理虚拟服务器和真实服务器的映射关系,实现对服务的负载均衡。 + +`sealctl ipvs` 支持以下功能: + +1. 创建和管理虚拟服务器 (virtual server) 和真实服务器 (real server) 的映射关系。 +2. 提供健康检查功能,定期检查真实服务器的健康状态,并根据需要对其进行上下线操作。 +3. 支持两种代理模式:`route` 和 `link`。 +4. 支持配置代理调度算法(如轮询、加权轮询等)。 +5. 支持一次性创建代理规则(`--run-once` 标志)或持续运行并管理代理规则。 +6. 支持清理功能:通过 `-C` 或 `--clean` 标志,可以清除现有的 IPVS 规则并退出。 + +通过 `sealctl ipvs` 命令,用户可以轻松地在本地创建和管理高性能的负载均衡服务。 + +**用法** + +```shell +sealctl ipvs [flags] +``` + +**选项** + +- `-C`, `--clean`: 清除现有规则,然后退出。 +- `--health-insecure-skip-verify`: 跳过不安全请求的验证(默认为 true)。 +- `--health-path string`: 用于探测的 URL 路径(默认为 "/healthz")。 +- `--health-req-body string`: 健康检查器发送的请求体。 +- `--health-req-headers stringToString`: HTTP 请求头(默认为 [])。 +- `--health-req-method string`: HTTP 请求方法(默认为 "GET")。 +- `--health-schem string`: 探测器的 HTTP 方案(默认为 "https")。 +- `--health-status ints`: 有效状态码。 +- `-h`, `--help`: ipvs 帮助。 +- `-i`, `--iface string`: 要创建的虚拟接口的名称,与 kube-proxy 的行为相同(默认为 "lvscare")。仅在 mode=link 时启用。 +- `--interval durationOrSecond`: 健康检查间隔(默认为 0s)。 +- `--ip ip`: 作为路由网关的目标 IP,与 route 模式一起使用。 +- `--logger string`: 日志级别:DEBG/INFO(默认为 "INFO")。 +- `--masqueradebit int`: IPTables masquerade 位。仅在 mode=link 时启用。 +- `--mode string`: 代理模式:route/link(默认为 "route")。 +- `--rs strings`: 真实服务器地址,例如 192.168.0.2:6443。 +- `--run-once`: 创建代理规则并退出。 +- `--scheduler string`: 代理调度器(默认为 "rr")。 +- `--vs string`: 虚拟服务器地址,例如 169.254.0.1:6443。 + +**全局选项** + +- `--debug`: 启用调试日志。 +- `--show-path`: 启用显示代码路径。 + +**使用文档** + +要使用 `sealctl ipvs` 命令,请按照以下步骤操作: + +1. 为命令提供必要的选项和参数。 +2. 执行命令,将创建或管理本地 IPVS 负载均衡。 + +**示例** + +创建代理规则并退出: + +```shell +sealctl ipvs --vs 169.254.0.1:6443 --rs 192.168.0.2:6443 --run-once +``` + +清除现有 IPVS 规则: + +```shell +sealctl ipvs --clean +``` diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/registry.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/registry.md new file mode 100644 index 00000000000..dbe1b40640e --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/registry.md @@ -0,0 +1,48 @@ +--- +sidebar_position: 5 +--- + +# registry 镜像仓库 + +## Sealos:sealctl registry serve 命令详解与使用指南 + +在构建并管理 Docker 镜像仓库过程中,Sealos 提供了 `sealctl registry serve` 命令以方便用户进行相关操作。本文将详细介绍 `sealctl registry serve` 命令的使用方法和示例。 + +### 基本介绍 + +`sealctl registry serve` 命令的主要作用是启动一个 Docker 分发镜像仓库服务器,支持两种模式:`filesystem` 和 `inmem`。 + +1. **Filesystem 模式**:在此模式下,sealctl 将运行一个针对指定目录的 Docker 分发镜像仓库服务器。该模式下,镜像数据将存储在硬盘上。**该命令还用于sealos做增量镜像同步** + +2. **In-memory 模式**:在此模式下,sealctl 将运行一个内存中的 Docker 分发镜像仓库服务器。该模式下,镜像数据仅保存在内存中,进程退出后数据将丢失。 + +### 命令参数 + +`sealctl registry serve filesystem ` 命令支持以下参数: + +- `--disable-logging`: 禁用日志输出,默认为 false。 +- `--log-level`: 配置日志级别,默认为 'error'。 +- `-p, --port`: 服务器监听的端口,默认为随机未使用的端口。 + +### 使用示例 + +以下是一些 `sealctl registry serve` 命令的使用示例: + +#### 在文件系统中启动镜像仓库服务器 + +```bash +sealctl registry serve filesystem --port=5000 +``` + +以上命令将在端口5000上启动一个文件系统镜像仓库服务器。 + +#### 在内存中启动镜像仓库服务器 + +```bash +sealctl registry serve inmem +``` + +以上命令将启动一个内存镜像仓库服务器。该服务器在进程退出后,存储的数据将丢失。 + +通过 `sealctl registry serve` 命令,用户可以轻松地管理和操作 Docker 镜像仓库。无论是在开发环境,还是在生产环境中,它都是一个强大且易用的工具。 + diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/sealctl.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/sealctl.md new file mode 100644 index 00000000000..8ee151bd6dc --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/sealctl.md @@ -0,0 +1,68 @@ +--- +sidebar_position: 0 +--- + +# Sealctl 使用指南 + +Sealos 提供 sealctl 是使用 Sealos 与 集群节点进行操作的命令行工具。它包括以下几个子命令: + +1. `cert`:管理证书,用于生成、查看和更新TLS证书。 +2. `cri`:管理容器运行时接口(CRI)配置,例如Docker或containerd。 +3. `hostname`:查看或设置系统主机名。 +4. `hosts`:管理系统的hosts文件,用于定义静态主机名到IP地址映射。 +5. `ipvs`:管理IP虚拟服务器(IPVS)规则,用于负载均衡和代理。 +6. `registry`:管理镜像仓库,用于存储容器镜像仓库格式镜像以及镜像仓库管理。 +7. `static_pod`:管理静态Pod,可以创建静态Pod的配置。 +8. `token`:生成和管理访问令牌,用于授权访问Kubernetes集群。 + +通过这些子命令,您可以方便地管理和配置您的Sealos系统,实现对容器、镜像仓库、网络等各个方面的控制。 + + + + +# sealos 依赖命令 + +1. **添加Hosts** + + 在指定 IP 地址的节点上添加一个新的 hosts 记录。参数包括 IP 地址、主机名和域名。使用`sealctl hosts add `命令 + +2. **删除Hosts** + + 删除指定 IP 地址节点上的一个 hosts 记录。参数包括 IP 地址和域名。使用`sealctl hosts delete`命令 + +3. **hostname** + + 获取指定 IP 地址节点的主机名。 使用`sealctl hostname`命令 + +4. **IPVS负载均衡** + + 在指定 IP 地址的节点上配置 IPVS,实现负载均衡。参数包括节点 IP 地址、虚拟 IP 地址和主节点 IP 地址列表。 使用`sealctl ipvs`命令 + +5. **清空IPVS规则** + + 清除指定 IP 地址节点上的 IPVS 配置。参数包括节点 IP 地址和虚拟 IP 地址。 使用`sealctl ipvs`命令 + +6. **静态POD生成** + + 在指定 IP 地址的节点上部署一个静态 Pod(lvscare)。参数包括节点 IP 地址、虚拟 IP 地址、Pod 名称、镜像名称和主节点 IP 地址列表。使用`sealctl static-pod lvscare`命令 + +7. **处理集群交互认证的token** + + 为指定 IP 地址的节点生成一个 token。参数包括节点 IP 地址、配置文件和证书密钥。使用`sealctl token`命令 + +8. **获取节点的cgroup** + + 获取指定 IP 地址节点的cri CGroup 信息。 使用`sealctl cri cgroup`命令 + +9. **获取节点的cri-socket** + + 获取指定 IP 地址节点的 cri Socket 信息。 使用`sealctl cri socket`命令 + +10. **在节点生成https自签名证书** + + 为指定 IP 地址的节点生成证书。参数包括节点 IP 地址、备用名称列表、主机 IP 地址、主机名、服务 CIDR 和 DNS 域名。 使用`sealctl cert` 命令 + +11. **节点启动registry** + +​ 在指定节点启动regsitry,为进行增量镜像同步。使用`sealctl registry serve`命令 + diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/static-pod.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/static-pod.md new file mode 100644 index 00000000000..0b6e8450802 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/static-pod.md @@ -0,0 +1,41 @@ +--- +sidebar_position: 7 +--- + +# static-pod 配置 + +`static-pod` 命令用于生成静态 Pod,这些 Pod 是由 kubelet 直接管理的,而不是通过 API 服务器。静态 Pod 在某些场景下非常有用,比如设置和管理 Kubernetes 集群中的控制平面组件。 + +`sealctl static-pod` 命令提供了一种简便的方法,用于生成用于特定目的的静态 Pod 配置文件。目前,它主要支持生成 `lvscare` 静态 Pod,`lvscare` 是一种用于管理 IPVS 规则的工具。 + +使用 `sealctl static-pod lvscare`,您可以根据指定的参数(如 VIP、主节点地址、镜像名称等)生成 `lvscare` 静态 Pod YAML 文件。然后,该文件可以存储在 kubelet 的静态 Pod 路径下,kubelet 将自动创建和管理相应的 Pod。 + + + +**用法** + +```shell +sealctl static-pod lvscare [flags] +``` + +**选项** + +- `--vip`: 默认 VIP IP(默认为 "10.103.97.2:6443")。 +- `--name`: 生成 lvscare 静态 Pod 名称。 +- `--image`: 生成 lvscare 静态 Pod 镜像(默认为 `sealos.hub:5000/sealos/lvscare:latest`)。 +- `--masters`: 生成 master 地址列表。 +- `--print`: 是否打印 YAML。 + +**示例** + +生成 lvscare 静态 Pod 文件并打印 YAML: + +```shell +sealctl static-pod lvscare --vip 10.103.97.2:6443 --name lvscare --image lvscare:latest --masters 192.168.0.2:6443,192.168.0.3:6443 --print +``` + +如果没有使用 `--print` 选项,将直接生成配置文件到 `/etc/kubernetes/manifests` 并启用静态 Pod: + +```shell +sealctl static-pod lvscare --vip 10.103.97.2:6443 --name lvscare --image lvscare:latest --masters 192.168.0.2:6443,192.168.0.3:6443 +``` diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/tar&&untar.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/tar&&untar.md new file mode 100644 index 00000000000..a37f10ccb64 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/tar&&untar.md @@ -0,0 +1,60 @@ +--- +sidebar_position: 9 +--- + +# tar 与 untar 详解 + +Sealos 提供了 `sealctl tar` 和 `sealctl untar` 命令以便于用户进行文件或文件夹的压缩和解压。本文将详细介绍这两个命令的使用方法。 + +## sealctl tar 命令 + +`sealctl tar` 命令的主要作用是将指定路径的目录压缩成归档文件。注意,这将剥离父目录。 + +**命令参数:** + +- `--clear`:是否在压缩完成后删除源文件,默认为 false。 +- `--compression`:压缩算法,可用选项有 tar/gzip/zstd/disable,默认为 disable。 +- `-o, --output`:归档文件的路径。 + +**基本用法:** + +```bash +sealctl tar [flags] [options] +``` + +## sealctl untar 命令 + +`sealctl untar` 命令的主要作用是在指定路径 `src` 查找匹配 glob 模式的归档文件,并在 `dst` 路径进行解压。 + +**命令参数:** + +- `--clear`:是否在解压完成后删除源文件,默认为 false。 +- `-o, --output`:解压归档文件的路径。 + +**基本用法:** + +```bash +sealctl untar [flags] [options] +``` + +## 使用示例 + +以下是一些 `sealctl tar` 和 `sealctl untar` 命令的使用示例: + +**创建一个压缩文件:** + +```bash +sealctl tar --output=/path/to/archive.tar /path/to/source +``` + +以上命令将 `source` 目录压缩为 `archive.tar` 文件。 + +**解压一个压缩文件:** + +```bash +sealctl untar --output=/path/to/destination /path/to/archive.tar +``` + +以上命令将 `archive.tar` 文件解压到 `destination` 目录。 + +通过 `sealctl tar` 和 `sealctl untar` 命令,用户可以轻松地进行文件或文件夹的压缩和解压操作。这两个命令在文件管理中,尤其是在备份和迁移文件时,都是非常有用的工具。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/token.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/token.md new file mode 100644 index 00000000000..8a9c08571ae --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealctl/token.md @@ -0,0 +1,38 @@ +--- +sidebar_position: 8 +--- + +# token 管理 + +`sealctl token` 命令的主要目的是为了生成一个用于连接主节点(master)和工作节点(node)的 token。在 Kubernetes 集群中,当您想要将一个新的工作节点加入到集群时,通常需要提供一个 token 作为身份验证。这个 token 确保只有拥有正确 token 的工作节点才能加入到集群中。 + +`sealctl token` 命令通过接收配置文件(可选)和证书密钥(可选)作为参数,生成一个用于身份验证的 token。在默认情况下,如果不提供配置文件和证书密钥,命令会使用内置的默认设置来生成 token。 + +总之,`sealctl token` 命令用于生成一个用于身份验证的 token,允许工作节点安全地加入到 Kubernetes 集群中。使用这个命令可以简化节点加入集群的过程,确保集群的安全性。 + + +**用法** + +```shell +sealctl token [config] [certificateKey] +``` + +**参数** + +- `config`: 配置文件(可选)。 +- `certificateKey`: 证书密钥(可选)。 + +**示例** + +使用默认参数生成 token: + +```shell +sealctl token +``` + +使用自定义配置文件和证书密钥生成 token: + +```shell +sealctl token my-config my-certificate-key +``` + diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/_category_.json b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/_category_.json new file mode 100644 index 00000000000..c9cb98244eb --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/_category_.json @@ -0,0 +1,3 @@ +{ + "position" : 1 +} diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/app-cluster-image.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/app-cluster-image.md new file mode 100644 index 00000000000..ec858e07d4c --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/app-cluster-image.md @@ -0,0 +1,41 @@ +--- +sidebar_position: 11 +--- + +# 应用集群镜像使用指南 + +Sealos 提供了一个名为 [cluster-image](https://github.com/labring-actions/cluster-image) 的仓库,该仓库在 GitHub 上用于构建并发布 Kubernetes 集群的应用镜像。这些镜像可以通过提交代码到这个仓库来创建,并可以发布到 `docker.io/labring/` 作为官方的应用镜像。它支持构建 Docker 容器镜像以及应用的集群镜像。 + +## 镜像的类型 + +仓库支持三种类型的镜像构建: + +- **APP集群镜像**:主要是构建应用镜像,使用 GitHub Action,会同时支持 amd64 和 arm64 架构。 +- **配置集群镜像**:主要是构建配置镜像,使用 GitHub Action,没有容器镜像不区分架构,一般是一些脚本相关的配置或者覆盖默认的配置镜像。 +- **Docker镜像**:主要是构建容器镜像,使用 GitHub Action,会同时支持 amd64 和 arm64 架构。 + +## 镜像构建的工作流程 + +你可以直接在 GitHub 仓库中创建 Issue 来触发镜像的构建。这里提供了几个示例可以参考: + +- `/imagebuild_dockerimages helm v3.8.2 Key1=Value1,Key2=Value2` +- `/imagebuild_configs coredns v0.0.1` +- `/imagebuild_apps helm v3.8.2` + +每种类型的镜像构建命令的格式为 `/imagebuild_<类型> <应用名称> <版本> [Key=Value,...]`,其中 `<类型>` 是 `dockerimages`、`configs` 或 `apps`, `<应用名称>` 和 `<版本>` 分别代表应用的名称和版本,`[Key=Value,...]` 是可选的buildArg参数,仅用于 `dockerimages` 类型。 + +## 镜像配置的存放位置 + +你可以在 `applications/<应用名称>/<版本>/` 目录下放置你的配置文件,包括 Dockerfile、Kubefile 和 init.sh 等。init.sh 脚本通常用于下载一些依赖的二进制文件,如 helm、kubectl-minio 等。你可以选择使用 Dockerfile 或 Kubefile 来编写你的镜像构建逻辑。 + +## 镜像构建规则 + +对于每种类型的镜像,构建规则略有不同。通常,你需要在应用的目录下创建不同的子目录并放置不同类型的文件,然后 Sealos 会根据这些文件来构建镜像。具体的规则如下: + +1. `charts` 目录:放置一些集群镜像需要的 Helm chart,Kubernetes 会根据扫描的 chart 获取镜像并构建 + +出 registry 目录放到与 Kubefile 同级的目录。 +2. `manifests` 目录:直接放置一些 Kubernetes yaml 配置,Kubernetes 会扫描 manifests 目录所有的镜像并构建出 registry 目录放到与 Kubefile 同级的目录。 +3. `images/shim` 目录:主要存储一些额外的镜像列表并构建出 registry 目录放到与 Kubefile 同级的目录。 +4. 如果需要模板,在 `etc`、`charts`、`manifests` 放置一些以 `.tmpl` 结尾的文件可以被 `sealos run` 环境变量渲染后去掉 `.tmpl`,比如渲染之前是 `aa.yaml.tmpl`,渲染后为 `aa.yaml`。请注意文件名不要与现有的文件冲突。 +5. `registry` 必须放在与 Kubefile 同级的目录,否则无法拷贝到 master0 的私有仓库。制作镜像时也需要注意这一点。不要把 registry 存放到 chart 里,否则 helm 扫描可能会很慢,可能导致 OOM。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/add.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/add.md new file mode 100644 index 00000000000..f5f6e79bfc9 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/add.md @@ -0,0 +1,60 @@ +--- +sidebar_position: 4 +--- + +# add 集群节点添加 + +`sealos add` 是 Sealos 命令行工具中的一个命令,主要用于向集群中添加节点。本指南将详细介绍其使用方法和选项。 + +**注意要保证控制节点的个数为奇数个以保证etcd可以正常选举** + +## 基本用法 + +### 添加节点 + +要向集群中添加节点,可以使用 `--nodes` 选项: + +```bash +sealos add --nodes x.x.x.x +``` + +在上述命令中,`x.x.x.x` 应替换为你想要添加的节点的 IP 地址。 + +### 添加控制节点 + +要向集群中添加控制节点,可以使用 `--masters` 选项: + +```bash +sealos add --masters x.x.x.x +``` + +### 同时添加控制节点和节点 + +如果你想同时向集群中添加控制节点和节点,可以同时使用 `--masters` 和 `--nodes` 选项: + +```bash +sealos add --masters x.x.x.x --nodes x.x.x.x +sealos add --masters x.x.x.x-x.x.x.y --nodes x.x.x.x-x.x.x.y +``` + +## 选项 + +`sealos add` 命令提供了以下选项: + +- `--cluster='default'`: 要执行加入操作的集群的名称。默认为 `default`。 + +- `--masters=''`: 要加入的主节点。 + +- `--nodes=''`: 要加入的节点。 + +每个选项后都可以跟随一个参数。 + +## 使用示例 + +以下是一个使用示例,该示例向集群中添加了 IP 地址为 `192.168.0.2` 的节点: + +```bash +sealos add --nodes 192.168.0.2 +``` + +以上就是 `sealos add` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/apply.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/apply.md new file mode 100644 index 00000000000..defa546ea78 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/apply.md @@ -0,0 +1,84 @@ +--- +sidebar_position: 1 +--- + +# apply 启动集群 + +`sealos apply` 是 Sealos 命令行工具中的一个重要命令,用于在 Kubernetes 集群中运行集群镜像。本指南将详细介绍其使用方法和选项。 + +## 基本用法 + +`sealos apply` 命令的基本用法如下: + +```shell +$ sealos apply -f Clusterfile +``` + +Clusterfile 内容: + +```yaml +apiVersion: apps.sealos.io/v1beta1 +kind: Cluster +metadata: + name: default +spec: + # 服务器 IP 地址列表和角色 + hosts: + - ips: + - 192.168.0.2:22 + - 192.168.0.3:22 + - 192.168.0.4:22 + roles: + - master + - amd64 + - ips: + - 192.168.0.5:22 + - 192.168.0.6:22 + - 192.168.0.7:22 + roles: + - node + - amd64 + image: + - labring/kubernetes:v1.25.0 + - labring/helm:v3.8.2 + - labring/calico:v3.24.1 + ssh: + passwd: xxx + pk: /root/.ssh/id_rsa + port: 22 + user: root +``` + +这条命令会根据指定的 `Clusterfile` 文件在 Kubernetes 集群中运行集群镜像。 + +## 选项 + +`sealos apply` 命令提供了多种选项,用于定制命令的行为: + +- `-f, --Clusterfile='Clusterfile'`: 指定要应用的集群文件。默认为 `Clusterfile`。 +- `--config-file=[]`: 指定自定义Config文件的路径,用于替换或者修改资源。 +- `--env=[]`: 设置在命令执行过程中要使用的环境变量。 +- `--set=[]`: 在命令行上设置值,一般是替换模板的值。 +- `--values=[]`: 指定要应用到 `Clusterfile` 的values文件,一般是用于模板方式。 + +每个选项后面都可以跟随一个或多个参数。多个参数之间用逗号分隔。 + +例如,你可以使用 `--set` 选项在命令行上设置一些值: + +```shell +sealos apply -f Clusterfile --set key1=value1,key2=value2 +``` + +这条命令会将 `key1` 和 `key2` 的值设置为 `value1` 和 `value2`,然后应用 `Clusterfile`。 + +同样,你也可以使用 `--values` 选项指定一个值文件: + +```shell +sealos apply -f Clusterfile --values values.yaml +``` + +这条命令会根据 `values.yaml` 文件中的值应用 `Clusterfile`。 + +**更多示例请参考[启动镜像](/self-hosting/lifecycle-management/operations/run-cluster/)** + +以上就是 `sealos apply` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/build.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/build.md new file mode 100644 index 00000000000..4cf6b5ca5ae --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/build.md @@ -0,0 +1,69 @@ +--- +sidebar_position: 6 +--- + +# build 构建镜像 + +Sealos 的 `build` 命令用于使用 Sealfiles、Kubefiles、Dockerfiles 或 Containerfiles 中的指令构建 OCI 镜像。这是 Sealos 构建集群镜像的基础命令。 + +如果没有指定任何参数,Sealos 将使用当前工作目录作为构建上下文,并查找指令文件。如果不存在 Sealfile、Kubefile、Dockerfile 或 Containerfile,则构建失败。 + +下面是一些主要的 `build` 选项: + +1. `--all-platforms`:尝试为所有基础镜像平台构建镜像。 +2. `--authfile`:认证文件的路径。 +3. `--build-arg`:向构建器提供的 `argument=value`。 +4. `--build-context`:向构建器提供额外构建上下文的 `argument=value`。 +5. `--creds`:访问 registry 使用的 `[username[:password]]`。 +6. `-D, --disable-compression`:默认不压缩图层。 +7. `--env`:为镜像设置环境变量。 +8. `-f, --file`:Dockerfile 的 `pathname 或 URL`。 +9. `--force-rm`:即使构建不成功,也始终在构建后删除中间容器。 +10. `--format`:构建的镜像的清单和元数据的 `format`。 +11. `--from`:用于替换 Containerfile 中第一条 FROM 指令的值的镜像名称。 +12. `--http-proxy`:传递 HTTP Proxy 环境变量。 +13. `--isolation`:使用的进程隔离 `type`。可以是 'oci' 或 'chroot'。 +14. `--max-pull-procs`:拉取时使用的最大 goroutine 数量。 +15. `--platform`:设置镜像的 OS/ARCH/VARIANT 为提供的值,而不是主机的当前操作系统和架构。 +16. `--pull`:从 registry 拉取镜像,如果新的或存储中不存在,则拉取,如果 false,只有在不存在时才拉取镜像,如果 always,即使命名的镜像存在于存储中,也拉取镜像,如果 never,只使用存储中可用的镜像。 +17. `-q, --quiet`:克制不宣布构建指令和镜像读/写进度。 +18. `--retry`:在执行 push/pull 失败时重试的次数。 +19. `--retry-delay`:在 push/pull 失败时重试的延迟。 +20. `--rm`:在成功构建后删除中间容器。 +21. `--save-image`:保存从特定目录解析的镜像,以 registry 格式存储。 +22. `--sign-by`:使用指定 `FINGERPRINT` 的 GPG 密钥签名镜像。 +23. `-t, --tag`:应用到构建镜像的标签 `name`。 + +24. `--target`:设置要构建的目标构建阶段。 +25. `--timestamp`:将创建的时间戳设置为指定的 epoch 秒,以允许确定性构建,默认为当前时间。 + +这些选项可以灵活地应对多种构建需求,包括针对特定平台的构建、环境变量设置、构建上下文管理、镜像签名等。使用 `--save-image` 选项,Sealos 可以自动识别镜像列表(包括从镜像列表、Helm charts、manifests 中解析出的镜像)并保存为 registry 格式。 + +进程隔离模式 `--isolation` 支持 'oci' 和 'chroot' 两个参数。如果本地支持 OCI,可以选择 'oci' 模式;如果不支持 OCI,应该使用 'chroot' 模式。 + +`--save-image` 是 Sealos 构建命令的一个选项,这个选项的作用是在构建过程中自动查找并保存需要的镜像。在 Sealos 中,构建一个镜像可能涉及到其他依赖镜像。这些依赖镜像可能来自镜像列表、Helm charts 或 集群 manifests。当使用 `--save-image` 选项时,Sealos 将根据构建上下文,自动解析这些依赖并将其保存为 Docker Registry 格式。 + +例如,以下是一个使用 `--save-image` 选项的示例: + +```bash +sealos build -t myapp:v1.0.0 -f Dockerfile . +``` + +在这个示例中,Sealos 将使用当前目录作为构建上下文,从 Dockerfile 文件中读取构建指令,并尝试构建出一个标记为 `myapp:v1.0.0` 的镜像。同时,Sealos 将解析 Dockerfile 文件中所有 `FROM` 指令引用的基础镜像,并将这些镜像保存下来。这些镜像将以 Docker Registry 的格式保存,可以被直接推送到 Docker Registry 中。 + +如果你的构建上下文中还包含了 Helm charts 或 集群manifests,Sealos 也会解析这些文件中引用的镜像,并将这些镜像一并保存。 + +总的来说,`--save-image` 选项为 Sealos 的构建过程提供了一种自动处理依赖镜像的方式,大大提高了构建镜像的便捷性和效率。 + +下面有一些详细的示例: + +- [基于镜像清单构建](/self-hosting/lifecycle-management/operations/build-image/build-image-image_list.md) +- [基于部署清单构建](/self-hosting/lifecycle-management/operations/build-image/build-image-manifests.md) +- [基于helm-charts构建](/self-hosting/lifecycle-management/operations/build-image/build-image-helm_charts.md) +- [基于二进制构建](/self-hosting/lifecycle-management/operations/build-image/build-image-binary.md) +- [基于go-template构建](/self-hosting/lifecycle-management/operations/build-image/build-image-go_template.md) +- [基于exec和scp构建](/self-hosting/lifecycle-management/operations/build-image/build-image-scp_exec.md) + +通过 Sealos `build` 命令,可以基于多种指令文件构建 OCI 镜像,为sealos提供所需的镜像。这个过程包括处理 Dockerfile 或其他指令文件中的各种指令,如 `FROM`、`RUN`、`ADD` 等,以及处理镜像层次、镜像标签等。构建过程也包括拉取基础镜像、运行命令、保存结果等步骤。每一个步骤都可以通过上述的选项进行详细的控制和定制,以满足不同的构建需求。 + +以上就是 `sealos build` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/cert.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/cert.md new file mode 100644 index 00000000000..c41a88581f6 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/cert.md @@ -0,0 +1,44 @@ +--- +sidebar_position: 3 +--- + +# cert 更新集群证书 + +`sealos cert` 是 Sealos 命令行工具中的一个命令,主要用于在集群中更新 API 服务器的证书。本指南将详细介绍其使用方法和选项。 + +## 基本用法 + +要在证书中添加域名或 IP,可以使用 `--alt-names` 选项: + +```bash +sealos cert --alt-names sealos.io,10.103.97.2,127.0.0.1,localhost +``` + +在上述命令中,`sealos.io,10.103.97.2,127.0.0.1,localhost` 应替换为你想要添加的域名和 IP 地址。 + +**注意**:在执行此操作之前,你最好先备份旧的证书。 + +执行 `sealos cert` 命令后,会更新集群 API 服务器的证书,你无需手动重启 API 服务器,sealos会自动帮你重启服务。 + +## 选项 + +`sealos cert` 命令提供了以下选项: + +- `--alt-names=''`: 在证书中添加域名或 IP,例如 `sealos.io` 或 `10.103.97.2`。 + +- `-c, --cluster='default'`: 要执行 exec 操作的集群的名称。默认为 `default`。 + +每个选项后都可以跟随一个参数。 + +## 校验证书 + +更新证书后,你可以使用以下命令进行校验: + +```bash +kubectl -n kube-system get cm kubeadm-config -o yaml +openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text +``` + +上述命令将获取 kube-system 命名空间中的 kubeadm-config 配置映射,并显示 apiserver.crt 证书的详细信息。 + +以上就是 `sealos cert` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/commands.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/commands.md new file mode 100644 index 00000000000..cff45b9b383 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/commands.md @@ -0,0 +1,56 @@ +--- +sidebar_position: 0 +--- + +# Sealos 命令说明 + +## 集群管理命令 + +- `apply`:使用 Clusterfile 在 Kubernetes 集群内运行集群镜像。 +- `cert`:更新 Kubernetes API 服务器的证书。 +- `run`:轻松运行云原生应用。 +- `reset`:重置集群中的所有内容。 +- `status`:查看 Sealos集群 的状态。 + +## 节点管理命令 + +- `add`:将节点添加到集群中。 +- `delete`:从集群中删除节点。 + +## 远程操作命令 + +- `exec`:在指定节点上执行 shell 命令或脚本。 +- `scp`:将文件复制到指定节点的远程位置。 + +## 实验性命令 + +- `registry`:与镜像仓库相关的命令。 + +## 容器和镜像命令 + +- `build`:使用 Sealfile 或 Kubefile 中的指令构建镜像。 +- `create`:创建集群,但不运行 CMD,用于检查镜像。 +- `inspect`:检查容器或镜像的配置。 +- `images`:列出本地存储中的镜像。 +- `load`:从文件中加载镜像。 +- `login`:登录到容器仓库。 +- `logout`:登出容器仓库。 +- `manifest`:操作清单列表和镜像索引。 +- `merge`:合并多个镜像为一个。 +- `pull`:从指定位置拉取镜像。 +- `push`:将镜像推送到指定的目标。 +- `rmi`:从本地存储中删除一个或多个镜像。 +- `save`:将镜像保存到存档文件中。 +- `tag`:为本地镜像添加一个附加名称。 + +## 其他命令 + +- `completion`:为指定的 shell 生成自动补全脚本。 +- `docs`:生成 API 参考。 +- `env`:打印 Sealos 使用的所有环境信息。 +- `gen`:生成具有所有默认设置的 Clusterfile。 +- `version`:打印版本信息。 + +Sealos 的 `--debug` 参数是一个全局参数,用于开启调试模式,以便在出现问题时能更详细地了解系统的运行情况。 + +有关安装说明,请参见[下载 Sealos 命令行工具](/self-hosting/lifecycle-management/quick-start/install-cli.md); 如需安装 Kubernetes 集群,请参见[安装 Kubernetes 集群](/self-hosting/lifecycle-management/quick-start/deploy-kubernetes.md)。 \ No newline at end of file diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/create.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/create.md new file mode 100644 index 00000000000..03cf8cf9d07 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/create.md @@ -0,0 +1,43 @@ +--- +sidebar_position: 6 +--- + +# create 创建工作目录 + +`sealos create` 是 Sealos 命令行工具中的一个命令,主要用于在不执行 CMD 的情况下创建集群工作目录,以便审查镜像。本指南将详细介绍其使用方法和选项。 + +## 基本用法 + +`sealos create` 命令用于创建集群工作目录,但不实际运行,主要用于调试或测试,它可以输出集群镜像的地址,你可以校验集群镜像内容是否与预期一致。 + +```bash +sealos create docker.io/labring/kubernetes:v1.24.0 +``` + +在上述命令中,`clustername` 代表你要创建的集群的名称。 + +## 选项 + +`sealos create` 命令提供了以下选项: + +- `-c, --cluster='default'`: 要创建但不实际运行的集群的名称。默认为 `default`。 + +- `--platform='linux/arm64/v8'`: 将镜像的操作系统/架构/版本设置为提供的值,而不是主机的当前操作系统和架构(例如 `linux/arm`)。 + +- `--short=false`: 如果为真,只打印挂载路径。 + +- `-e, --env=[]`: 指定渲染模板文件时使用的环境变量。 + +每个选项后都可以跟随一个参数。 + +## 示例 + +例如,你可以使用以下命令创建一个名为 `mycluster` 的集群,但不实际运行它: + +```bash +sealos create -e registryPort=8443 docker.io/labring/kubernetes:v1.24.0 +``` + +此命令将创建一个镜像名称为 `docker.io/labring/kubernetes:v1.24.0` 的集群工作目录,并输出集群镜像的地址。`-e registryPort=8443` 选项指定了在渲染模板文件时使用的环境变量,其中 `registryPort` 被设置为 `8443`。请注意,这个示例中集群并没有被实际运行。 + +以上就是 `sealos create` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/delete.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/delete.md new file mode 100644 index 00000000000..6072f79d58a --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/delete.md @@ -0,0 +1,68 @@ +--- +sidebar_position: 4 +--- + +# delete 集群节点删除 + +`sealos delete` 是 Sealos 命令行工具中的一个命令,主要用于从集群中移除节点。本指南将详细介绍其使用方法和选项。 + +**注意要保证控制节点的个数为奇数个以保证etcd可以正常选举** + +## 基本用法 + +### 删除节点 + +要从集群中删除节点,可以使用 `--nodes` 选项: + +```bash +sealos delete --nodes x.x.x.x +``` + +在上述命令中,`x.x.x.x` 应替换为你想要删除的节点的 IP 地址。如果不小心删除了错误的节点,可以使用 `sealos add` 命令恢复它: + +```bash +sealos add --nodes x.x.x.x +``` + +### 删除控制节点 + +要从集群中删除控制节点,可以使用 `--masters` 选项: + +```bash +sealos delete --masters x.x.x.x +``` + +请注意,如果指定了 `--masters` 参数,sealos 将删除你的控制节点。 + +### 删除控制节点和节点 + +如果你想同时删除控制节点和节点,可以同时使用 `--masters` 和 `--nodes` 选项: + +```bash +sealos delete --masters x.x.x.x --nodes x.x.x.x +sealos delete --masters x.x.x.x-x.x.x.y --nodes x.x.x.x-x.x.x.y +``` + +## 选项 + +`sealos delete` 命令提供了以下选项: + +- `--cluster='default'`: 执行删除操作应用的集群的名称。默认为 `default`。 + +- `--force=false`: 可以输入一个 `--force` 标志以强制删除节点。 + +- `--masters=''`: 要移除的控制节点。 + +- `--nodes=''`: 要移除的节点。 + +每个选项后都可以跟随一个参数。 + +## 使用示例 + +以下是一个使用示例,该示例删除了 IP 地址为 `192.168.0.2` 的节点: + +```bash +sealos delete --nodes 192.168.0.2 +``` + +以上就是 `sealos delete` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/env.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/env.md new file mode 100644 index 00000000000..89ea851ea94 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/env.md @@ -0,0 +1,39 @@ +--- +sidebar_position: 7 +--- + +# env 环境变量 + +`sealos env` 是 Sealos 命令行工具中的一个命令,用于展示目前sealos支持的环境变量以及当前的环境变量值。 + +## 基本用法 + +### 查看环境变量 + +要查看环境变量,可以使用 `sealos env` 命令: + +```bash +sealos env +``` + +### 查看环境变量以及说明 + +要查看环境变量以及说明,可以使用 `sealos env -v` 命令: + +```bash +sealos env -v +``` + + +## 如何设置环境变量 + +```shell +BUILDAH_LOG_LEVEL=debug sealos images +``` + +```shell +SEALOS_REGISTRY_SYNC_EXPERIMENTAL=true sealos build -t xxx . +``` + + +以上就是 `sealos env` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/exec.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/exec.md new file mode 100644 index 00000000000..7b0f955021f --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/exec.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 5 +--- + +# exec 执行命令 + +`sealos exec` 是 Sealos 命令行工具中的一个命令,用于在指定的集群节点上执行 Shell 命令或脚本。本指南将详细介绍其使用方法和选项。 + +## 基本用法 + +基本的 `sealos exec` 命令格式如下: + +```bash +sealos exec "shell command or script" +``` + +在上述命令中,`shell command or script` 是你要在集群节点上执行的 Shell 命令或脚本。 + +## 选项 + +`sealos exec` 命令提供了以下选项: + +- `-c, --cluster='default'`: 要在其上执行命令的集群的名称。默认为 `default`。 + +- `--ips=[]`: 在具有指定 IP 地址的节点上运行命令。 + +- `-r, --roles='':`: 在具有指定角色的节点上运行命令。目前支持 master,node,registry + +每个选项后都可以跟随一个或多个参数。 + +## 示例 + +例如,你可以使用以下命令在默认集群的所有节点上查看 `/etc/hosts` 文件的内容: + +```bash +sealos exec "cat /etc/hosts" +``` + +如果你想在名为 `my-cluster` 的集群的 `master` 和 `node` 角色的节点上查看 `/etc/hosts` 文件的内容,可以使用以下命令: + +```bash +sealos exec -c my-cluster -r master,node "cat /etc/hosts" +``` + +如果你只想在 IP 地址为 `172.16.1.38` 的节点上查看 `/etc/hosts` 文件的内容,可以使用以下命令: + +```bash +sealos exec -c my-cluster --ips 172.16.1.38 "cat /etc/hosts" +``` + +以上就是 `sealos exec` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/gen.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/gen.md new file mode 100644 index 00000000000..2df2301ef04 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/gen.md @@ -0,0 +1,49 @@ +--- +sidebar_position: 3 +--- + +# gen 生成集群配置 + +Sealos 的 `gen` 命令是用于生成 Kubernetes 集群的配置文件(Clusterfile),这个配置文件可以在之后通过 `sealos apply` 命令来应用。`gen` 命令可以帮助用户快速生成一个基本的配置文件,用户可以在此基础上根据自己的需求进行修改和调整。 + +下面是 `sealos gen` 命令的基本使用方法和一些常见的示例: + +1. 生成一个默认配置的单节点集群: + + ```bash + sealos gen labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 + ``` + +注意:labring/helm 应当在 labring/calico 之前。 + +2. 生成一个包含多个镜像、指定了主节点和工作节点的集群: + + ```bash + sealos gen labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \ + --masters 192.168.0.2,192.168.0.3,192.168.0.4 \ + --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --passwd 'xxx' + ``` + +注意:labring/helm 应当在 labring/calico 之前。 + +3. 指定 SSH 端口,对于所有服务器使用相同的 SSH 端口: + + ```bash + sealos gen labring/kubernetes:v1.24.0 --masters 192.168.0.2,192.168.0.3,192.168.0.4 \ + --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --port 24 --passwd 'xxx' + ``` + + 对于使用不同 SSH 端口的服务器: + + ```bash + sealos gen labring/kubernetes:v1.24.0 --masters 192.168.0.2,192.168.0.3:23,192.168.0.4:24 \ + --nodes 192.168.0.5:25,192.168.0.6:25,192.168.0.7:27 --passwd 'xxx' + ``` + +在生成了 Clusterfile 之后,用户可以根据自己的需求来修改这个文件。添加或修改环境变量;修改集群cidr配置。完成修改后,用户就可以通过 `sealos apply` 命令来根据这个配置文件来创建或更新集群了。 + +示例说明: + +- [自定义配置安装](/self-hosting/lifecycle-management/operations/run-cluster/gen-apply-cluster.md) + +以上就是 `sealos gen` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/images.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/images.md new file mode 100644 index 00000000000..ad080890832 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/images.md @@ -0,0 +1,65 @@ +--- +sidebar_position: 6 +--- + +# image 镜像列表 + +Sealos 的 `images` 命令主要用于查看本地存储的镜像。用户可以通过它来查看本地所有的镜像,或者筛选查看特定的镜像。该命令支持多种参数,可以帮助用户更方便的查看和管理镜像。 + +## 基本用法 + +基本的 `sealos images` 命令将显示所有非中间阶段的本地镜像,例如: + +```bash +sealos images +``` + +这将显示本地存储的所有最终阶段镜像。 + +## 示例 + +以下是 `sealos images` 命令的一些常见示例: + +1. 显示所有镜像,包括构建的中间镜像: + + ```bash + sealos images --all + ``` + +2. 显示特定镜像: + + ```bash + sealos images [imageName] + ``` + +3. 以指定的 Go 模板格式显示镜像: + + ```bash + sealos images --format '{{.ID}} {{.Name}} {{.Size}} {{.CreatedAtRaw}}' + ``` + +## 参数 + +以下是 `sealos images` 命令的一些常用参数: + +- `-a, --all`:显示所有镜像,包括构建过程中的中间镜像。 + +- `--digests`:显示镜像的摘要。 + +- `-f, --filter`:根据提供的条件过滤输出结果。 + +- `--format`:使用 Go 模板对镜像进行美化打印。 + +- `--history`:显示镜像的命名历史。 + +- `--json`:以 JSON 格式输出。 + +- `--no-trunc`:不截断输出。 + +- `-n, --noheading`:不打印列标题。 + +- `-q, --quiet`:只显示镜像 ID。 + +通过组合使用这些参数,用户可以轻松地获取和管理本地存储的镜像。例如,使用 `--all` 参数可以查看所有镜像,包括中间镜像;使用 `--filter` 参数可以根据特定条件过滤镜像;使用 `--json` 参数可以以 JSON 格式输出镜像信息,方便进行程序化处理等。 + +以上就是 `sealos images` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/inspect.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/inspect.md new file mode 100644 index 00000000000..bed4b134332 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/inspect.md @@ -0,0 +1,79 @@ +--- +sidebar_position: 6 +--- + +# inspect 详细信息 + +Sealos 的 `inspect` 命令主要用于查看构建容器或已构建镜像的配置信息。该命令支持查看镜像或容器的详细信息,包括其元数据、环境变量、启动命令等。 + +## 基本用法 + +使用 `sealos inspect` 命令查看指定容器或镜像的配置信息。例如,查看指定容器的配置: + +```bash +sealos inspect containerID +``` + +或者查看指定镜像的配置: + +```bash +sealos inspect --type image imageWithTag +``` + +## 示例 + +以下是 `sealos inspect` 命令的一些常见示例: + +1. 查看容器配置: + + ```bash + sealos inspect containerID + ``` + +2. 查看镜像配置: + + ```bash + sealos inspect --type image imageWithTag + ``` + +3. 查看镜像ID的配置信息: + + ```bash + sealos inspect --type image @imageID # 或直接输入imageID, '@' 是可选的 + ``` + +4. 查看远程镜像仓库的配置信息: + + ```bash + sealos inspect --type image docker://alpine:latest + ``` + +5. 查看本地OCI归档文件中镜像的配置信息: + + ```bash + sealos inspect --type image oci-archive:/abs/path/of/oci/tarfile.tar + ``` + +6. 查看本地Docker归档文件中镜像的配置信息: + + ```bash + sealos inspect --type image docker-archive:/abs/path/of/docker/tarfile.tar + ``` + +7. 使用 Go 模板格式显示镜像环境变量: + + ```bash + sealos inspect --format '{{.OCIv1.Config.Env}}' alpine + ``` + +## 参数 + +以下是 `sealos inspect` 命令的一些常用参数: + +- `-f, --format`:使用 Go 模板格式显示输出结果。**模板结构代码[InspectOutput](https://github.com/labring/sealos/blob/f8a17787822714c5fdf21f2a75cc86fadb88adfa/pkg/buildah/inspect.go#L189)** + +- `-t, --type`:指定查看的类型,可以是容器(`container`)或镜像(`image`)。 + +根据你的需要,你可以结合使用这些参数,以获取特定的配置信息。例如,使用 `-t` 参数可以指定你想要查看的是容器的配置信息还是镜像的配置信息;使用 `-f` 参数,可以定义特定的输出格式,方便对输出结果进行处理或解析。 + +以上就是 `sealos inspect` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/load.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/load.md new file mode 100644 index 00000000000..d85772714ac --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/load.md @@ -0,0 +1,25 @@ +--- +sidebar_position: 6 +--- + +# load 加载镜像 + +`sealos load` 是一个用来从存档文件中加载镜像的命令。这对于需要从已有的存档文件中导入镜像非常有用,尤其是在没有网络连接的环境中。 + +## 用法: + +`sealos load [flags] [options]` + +## 参数: + +以下是 `sealos load` 命令的参数: + +- `-i, --input=''`: 从 tar 存档文件中加载镜像。 + +## 示例: + +- 从一个存档文件中加载镜像:`sealos load -i myimage.tar` + +注意,在使用 `sealos load` 命令时,你需要确保指定的存档文件存在,并且格式正确。如果你在导入镜像时遇到问题,你可能需要检查你的存档文件,以确保它们没有被损坏或格式化错误。 + +以上就是 `sealos load` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/login.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/login.md new file mode 100644 index 00000000000..cec64c82b0d --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/login.md @@ -0,0 +1,39 @@ +--- +sidebar_position: 6 +--- + +# login 登录仓库 + +`sealos login` 命令用于在指定服务器上登录容器注册表。登录注册表后,你可以拉取、推送镜像。 + +## 用法: + +`sealos login [flags] [options] registryName` + +## 参数: + +以下是 `sealos login` 命令的参数: + +- `--authfile=''`: 身份验证文件的路径。可以使用环境变量 REGISTRY_AUTH_FILE 来覆盖。 + +- `--cert-dir=''`: 使用指定路径的证书来访问镜像仓库。 + +- `--get-login=true`: 返回注册表的当前登录用户。 + +- `-k, --kubeconfig=''`: 使用 kubeconfig 登录到 sealos 镜像仓库 hub.sealos.io。 + +- `-p, --password=''`: 注册表的密码。 + +- `--password-stdin=false`: 从标准输入获取密码。 + +- `-u, --username=''`: 注册表的用户名。 + +- `-v, --verbose=false`: 将更详细的信息写入标准输出。 + +## 示例: + +- 登录到 quay.io 注册表:`sealos login -u myusername -p mypassword quay.io ` + +注意,在使用 `sealos login` 命令时,你需要确保提供了正确的用户名和密码,否则登录过程可能会失败。如果你在登录过程中遇到问题,你可能需要检查你的用户名和密码,以确保它们没有输入错误或被遗忘。 + +以上就是 `sealos login` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/logout.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/logout.md new file mode 100644 index 00000000000..843b157a1ba --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/logout.md @@ -0,0 +1,26 @@ +--- +sidebar_position: 6 +--- + +# logout 登出仓库 + +`sealos logout` 命令用于在指定服务器上移除本地缓存的镜像仓库的账号和密码。 + +## 用法: + +`sealos logout [flags] [options] registryName` + +## 参数: + +以下是 `sealos logout` 命令的参数: + +- `--authfile=''`: 身份验证文件的路径。可以使用环境变量 REGISTRY_AUTH_FILE 来覆盖。 + +- `-a, --all=false`: 删除所有的认证信息。 + + +## 示例: + +- 登出到 quay.io 镜像仓库:`sealos logout quay.io ` + +以上就是 `sealos logout` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/manifest.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/manifest.md new file mode 100644 index 00000000000..52d7809bc1b --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/manifest.md @@ -0,0 +1,20 @@ +--- +sidebar_position: 6 +--- + +# manifest 镜像清单 + +Sealos 的 `manifest` 命令用于创建、修改和推送 manifest 列表和镜像索引。这些功能主要用于处理镜像的多架构支持。在 Docker 和 OCI 镜像规范中,manifest 列表(也被称为 "fat manifest")或镜像索引允许一个镜像标签(如 `myimage:latest`)在多种硬件架构(如 amd64, arm64, ppc64le 等)上都能使用。 + +以下是一些主要的 `manifest` 子命令: + +1. `create`:创建新的 manifest 列表或镜像索引。例如:`sealos manifest create localhost/list` +2. `add`:将镜像添加到 manifest 列表或镜像索引中。例如:`sealos manifest add localhost/list localhost/image` +3. `annotate`:在 manifest 列表或镜像索引的条目中添加或更新信息。例如:`sealos manifest annotate --annotation A=B localhost/list localhost/image` +4. `inspect`:显示 manifest 列表或镜像索引的内容。例如:`sealos manifest inspect localhost/list` +5. `push`:将 manifest 列表或镜像索引推送到 registry。例如:`sealos manifest push localhost/list transport:destination` +6. `remove` 和 `rm`:从 manifest 列表或镜像索引中移除条目,或者完全删除 manifest 列表或镜像索引。例如:`sealos manifest remove localhost/list sha256:entryManifestDigest` 或 `sealos manifest rm localhost/list` + +通过 `sealos manifest` 命令,可以灵活地管理 manifest 列表或镜像索引,为多架构的 Docker 或 OCI 镜像提供支持。用户可以根据自己的需求,创建自定义的 manifest 列表,方便在不同的硬件架构上部署和运行 Docker 镜像。 + +用户如果想通过manifest命令构建多架构镜像,可以参考文档[构建支持多架构的集群镜像](/self-hosting/lifecycle-management/operations/build-image/build-multi-arch-image.md) diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/merge.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/merge.md new file mode 100644 index 00000000000..e6f01f2dfc8 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/merge.md @@ -0,0 +1,21 @@ +--- +sidebar_position: 6 +--- + +# merge 合并镜像 + +Sealos 的 `merge` 命令的主要作用是将多个镜像合并为一个。它通过读取各个输入镜像的 Dockerfile,将其中的命令和层次结构合并到一个新的镜像中。这个命令的运行逻辑很像 `build` 命令,许多参数也是相同的。 + +这个功能在多个镜像有共享层的情况下非常有用,因为它可以减少镜像的大小,节省存储空间。同时,由于合并后的镜像包含了多个镜像的全部功能,所以它可以帮助简化应用部署。 + +以下是 `sealos merge` 的基本使用示例: + +```bash +sealos merge -t new:0.1.0 kubernetes:v1.19.9 mysql:5.7.0 redis:6.0.0 +``` + +在这个示例中,`kubernetes:v1.19.9`、`mysql:5.7.0` 和 `redis:6.0.0` 这三个镜像被合并为一个新的镜像 `new:0.1.0`。 + +`sealos merge` 命令提供了丰富的选项来定制合并过程,例如 `--all-platforms` 用于尝试为所有基础镜像平台构建镜像,`--build-arg` 用于向构建器提供参数,`--no-cache` 用于禁用现有的缓存镜像,等等。 + +请注意,`sealos merge` 命令会根据各个输入镜像的 Dockerfile 来构建新的镜像,所以如果输入镜像的 Dockerfile 不兼容,或者有任何构建错误,那么这个命令可能会失败。在使用 `sealos merge` 命令时,请确保你了解每个输入镜像的 Dockerfile,并根据需要进行调整。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/pull.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/pull.md new file mode 100644 index 00000000000..6f52bed1a00 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/pull.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 6 +--- + +# pull 拉取镜像 + +`sealos pull` 是一个非常有用的命令,它可以从容器镜像仓库下载镜像并将其存储在本地。用户可以通过镜像的标签(tag)或摘要(digest)来获取镜像。如果没有指定标签,那么会默认下载带有 'latest' 标签(如果存在)的镜像。 + +通过使用这个命令,用户可以方便地从远程仓库下载所需的镜像,极大地提高了工作效率。 + +## 用法: + +`sealos pull [flags] [options] imageName` + +## 参数: + +以下是 `sealos pull` 命令的参数: + +- `-a, --all-tags=false`: 下载仓库中所有带有标签的镜像。 + +- `--authfile=''`: 认证文件的路径。可以使用环境变量 REGISTRY_AUTH_FILE 进行覆盖。 + +- `--cert-dir=''`: 用于访问镜像仓库的证书的指定路径。 + +- `--creds=''`: 使用 `[username[:password]]` 访问镜像仓库。 + +- `--decryption-key=[]`: 解密镜像所需要的密钥。 + +- `--platform=[linux/arm64/v8]`: 选择镜像时,优先使用指定的 OS/ARCH,而不是当前操作系统和架构。 + +- `--policy='missing'`: 设置策略,可选的值包括 'missing', 'always', 'never'。 + +- `-q, --quiet=false`: 在拉取镜像时,不输出进度信息。 + +- `--remove-signatures=false`: 在拉取镜像时,不复制签名。 + +- `--retry=3`: 在拉取失败时的重试次数。 + +- `--retry-delay=2s`: 拉取失败时,重试之间的延迟。 + +## 示例: + +- 拉取一个镜像:`sealos pull my-image:latest` + +- 从 Docker 守护进程拉取一个镜像:`sealos pull docker-daemon:my-image:tag` + +- 从特定的仓库拉取一个镜像:`sealos pull myregistry/myrepository/my-image:tag` + +- 拉取多个镜像:`sealos pull imageID1 imageID2 imageID3` + +以上就是 `sealos push` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/push.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/push.md new file mode 100644 index 00000000000..9f5241bfd1d --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/push.md @@ -0,0 +1,107 @@ +--- +sidebar_position: 6 +--- + +# push 上传镜像 + +`sealos push` 是 Sealos 命令行工具中的一个命令,用于将镜像推送到指定的位置。这个命令在你需要将本地 Docker 镜像推送到远程镜像仓库的时候特别有用。本指南将详细介绍其使用方法。 + +## 基本用法 + +基本的 `sealos push` 命令格式如下: + +```bash +sealos push IMAGE_ID DESTINATION +``` + +在上述命令中,`IMAGE_ID` 是你想要推送的镜像的 ID,而 `DESTINATION` 是你想要推送到的位置。 `DESTINATION` 使用 "transport:details" 格式,如果未指定,将复用源 IMAGE 作为 DESTINATION。 + +在 Sealos 中,传输方式定义了源镜像和目标镜像在复制过程中的格式和位置。以下是 Sealos 支持的各种传输方式: + +1. `containers-storage`: 此传输方式用于存储和管理在本地运行的容器。例如,使用 Podman 或 CRI-O 创建的容器的镜像。 + +2. `dir`: 这种传输方式将镜像存储在本地文件系统的一个目录中,该目录结构符合 OCI 布局。 + +3. `docker`: 这种传输方式用于与 Docker 注册表进行交互,如 Docker Hub 或任何其他兼容的私有注册表。 + +4. `docker-archive`: 此传输方式将镜像存储为一个本地的 Docker tar 文件(`.tar`),这是 Docker 的原生格式。 + +5. `docker-daemon`: 这种传输方式用于与本地 Docker 守护程序交互,可以从 Docker 守护程序中提取镜像,或者将镜像推送到 Docker 守护程序。 + +6. `oci`: 该传输方式将镜像存储在一个符合 OCI 布局的目录中,它是一种开放的容器镜像格式。 + +7. `oci-archive`: 这种传输方式将镜像存储为一个本地的 OCI tar 文件(`.tar`)。 + +8. `ostree`: 这种传输方式将镜像存储在 OSTree 存储库中,这是一种支持原子升级和回滚的文件系统。 + +9. `sif`: 这是 Singularity SIF 格式,主要用于高性能计算和数据密集型应用。 + +示例: + +- 将一个镜像推送到 Docker 注册表:`sealos push my-image:latest docker://my-registry.example.com/my-image:latest` + +- 将一个镜像从 Docker 守护程序导出:`sealos push docker-daemon:my-image:latest dir:/path/to/save/` + +- 将一个镜像推送到本地的容器存储:`sealos push my-image:latest containers-storage:my-new-image:latest` + +## 示例 + +例如,你可以使用以下命令将一个镜像推送到 `registry.example.com` 的仓库: + +```bash +sealos push my_image_id docker://registry.example.com/my_repository:my_tag +``` + +## 可选参数 + +- `--all`: 该参数用于推送清单列表引用的所有镜像。 + +- `--authfile`: 该参数用于指定身份验证文件的路径。 可以使用 REGISTRY_AUTH_FILE 环境变量进行覆盖。 + +- `--cert-dir`: 该参数用于指定访问注册表所需的证书的路径。 + +- `--compression-format`: 该参数用于指定要使用的压缩格式。 + +- `--compression-level`: 该参数用于指定要使用的压缩级别。 + +- `--cr-option` 参数是用于控制是否将镜像的自定义资源(Custom Resource,简称 CR)推送到目标镜像仓库的。 + + 具体来说,这个参数的可选值包括: + + - "yes": 将会把镜像以及其关联的 CR 都推送到目标镜像仓库。 + + - "no": 仅推送镜像,而不推送任何 CR。 + + - "only": 仅推送 CR,不推送镜像本身。 + + - "auto": 根据镜像和 CR 的实际状态自动决定是否推送。例如,如果 CR 有更改或者不存在于目标仓库,就会被推送。 + + 请注意,这个参数主要在处理包含自定义资源(如 Kubernetes CRD 对象)的镜像时使用,它能够让你更加灵活地控制镜像和 CR 的推送过程。 + +- `--creds`: 该参数用于访问注册表,使用 `[username[:password]]` 形式。 + +- `--digestfile`: 该参数在复制图像后,将结果图像的摘要写入文件。 + +- `-D`, `--disable-compression`: 该参数用于不压缩层。 + +- `--encrypt-layer`: 该参数用于指定要加密的层,0 索引层索引支持负索引(例如,0 是第一层,-1 是最后一层)。 如果未定义,则在指定 encryption-key 标志时将加密所有层。 + +- `--encryption-key`: 该参数用于指定加密图像所需的密钥,与加密协议一起使用(例如,jwe:/path/to/key.pem)。 + +- `-f`, `--format`: 该参数用于指定目标中要使用的清单类型(oci, v2s1, 或 v2s2)(默认是源的清单类型,带回退)。 + +- `-q`, `--quiet`: 该参数用于在推送图像时不输出进度信息。 + +- `--remove-signatures`: 该参数用于在推送图像时不复制签名。 + +- `--retry + +`: 该参数用于指定在推送/拉取失败时的重试次数。 + +- `--retry-delay`: 该参数用于指定在推送/拉取失败时重试之间的延迟。 + +- `--rm`: 该参数用于在推送成功后删除清单列表。 + +- `--sign-by`: 该参数用于使用指定的 `FINGERPRINT` 的 GPG 密钥签名图像。 + +以上就是 `sealos push` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/registry.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/registry.md new file mode 100644 index 00000000000..746b32a8f87 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/registry.md @@ -0,0 +1,232 @@ +--- +sidebar_position: 8 +--- + +# registry 镜像仓库命令 + +## Sealos:sealos registry save 命令详解与使用指南 + +`registry save` 命令用于将远程的 Docker 镜像拉取到本地并保存在指定的目录中。这对于在离线或者内网环境中部署容器镜像特别有用。 + +在执行 `registry save` 命令时,将自动获取 `sealos login` 认证信息进行仓库认证。 + +**使用说明** + +1. 使用context自动获取镜像 + + 使用默认方式拉取并保存镜像。这种模式会自动解析 `charts` 目录、`manifests` 目录和 `images` 目录以获取镜像列表。 + + **使用示例** + + ```shell + sealos registry save --registry-dir=/tmp/registry1 my-context + ``` + + +2. 指定镜像列表方式 + + 使用参数传入镜像列表 + + **使用示例** + + ```shell + sealos registry save --registry-dir=/tmp/registry2 --images=docker.io/library/busybox:latest + ``` + +**选项** + +以下选项适用于 `save` 命令及其子命令: + +- `--max-procs`: 拉取镜像时使用的最大并行进程数。 +- `--registry-dir`: 保存镜像的本地目录。 +- `--arch`: 镜像的目标架构,例如:`amd64`、`arm64` 等。 +- `--images`: 需要拉取并保存的镜像列表,以逗号分隔。例如:"my-image1:latest,my-image2:v1.0"。 + +## Sealos:sealos registry serve 命令详解与使用指南 + +在管理 Docker 镜像仓库过程中,Sealos 提供了 `sealos registry serve` 命令以方便用户进行相关操作。本文将详细介绍 `sealos registry serve` 命令的使用方法和示例。 + +### 基本介绍 + +`sealos registry serve` 命令的主要作用是启动一个 Docker 分发镜像仓库服务器,支持两种模式:`filesystem` 和 `inmem`。 + +1. **Filesystem 模式**:在此模式下,sealctl 将运行一个针对指定目录的 Docker 分发镜像仓库服务器。该模式下,镜像数据将存储在硬盘上。 + +2. **In-memory 模式**:在此模式下,sealctl 将运行一个内存中的 Docker 分发镜像仓库服务器。该模式下,镜像数据仅保存在内存中,进程退出后数据将丢失。 + +### 命令参数 + +`sealos registry serve filesystem ` 命令支持以下参数: + +- `--disable-logging`: 禁用日志输出,默认为 false。 +- `--log-level`: 配置日志级别,默认为 'error'。 +- `-p, --port`: 服务器监听的端口,默认为随机未使用的端口。 + +### 使用示例 + +以下是一些 `sealos registry serve` 命令的使用示例: + +#### 在文件系统中启动镜像仓库服务器 + +```bash +sealos registry serve filesystem --port=5000 +``` + +以上命令将在端口5000上启动一个文件系统镜像仓库服务器。 + +#### 在内存中启动镜像仓库服务器 + +```bash +sealos registry serve inmem +``` + +以上命令将启动一个内存镜像仓库服务器。该服务器在进程退出后,存储的数据将丢失。 + +通过 `sealctl registry serve` 命令,用户可以轻松地管理和操作 Docker 镜像仓库。无论是在开发环境,还是在生产环境中,它都是一个强大且易用的工具。 + + +## Sealos:sealos registry passwd 命令详解与使用指南 + +在管理 Docker 镜像仓库过程中,Sealos 提供了 `sealos registry passwd` 命令以方便用户对集群registry进行密码修改。它提供了一种简便的方法,帮助用户修改 registry 的密码。 + +### 基本用法 + +使用 `sealos registry passwd` 命令来修改registry的密码。 + +```bash +sealos registry passwd +``` + +### 参数 + +以下是 `sealos registry passwd` 命令的参数: + +- `-c, --cluster-name`:集群名称,默认为'default'。 + +- `-f, --cri-shim-file-path`:镜像 cri shim 文件路径,如果为空将不会更新镜像 cri shim 文件。默认路径为'/etc/image-cri-shim.yaml'。 + +- `-p, --htpasswd-path`:registry 密码文件路径。默认路径为'/etc/registry/registry_htpasswd'。 + +### 使用步骤 + +1. 执行 `sealos registry passwd` 命令,可以根据需要指定参数来进行配置。 + +2. 根据命令提示,输入新的密码。 + +3. 命令执行成功后,registry 的密码将被修改为新的密码。 + +### 演示说明 + +[![asciicast](https://asciinema.org/a/Qu05jah4ZZmjMuFR4vHEKvBsQ.svg)](https://asciinema.org/a/Qu05jah4ZZmjMuFR4vHEKvBsQ) + +**在使用过程中,会让用户选择registry类型** + +- registry: 二进制启动,执行`systemctl restart registry`进行重启镜像仓库。 +- containerd: containerd启动,执行"nerdctl restart sealos-registry"进行重启镜像仓库。 +- docker: docker启动,执行"docker restart sealos-registry"进行重启镜像仓库。 + +### 注意事项 + +**修改 registry 密码后,修改Clusterfile中的registry密码** +修改 registry 密码后,所有使用该 registry 的节点和服务都需要更新配置,以使用新的密码进行身份验证。否则,它们将无法从该 registry 拉取或推送镜像。 + +如果你不确定如何更新节点和服务的配置,建议在修改 registry 密码之前,先查阅相关文档或者寻求专业的技术支持。 + +## Sealos:`sealos registry sync` 命令详解与使用指南 + +Sealos 的 `registry sync` 命令可帮助您在两个 registry 之间同步所有镜像。这不仅可以用于镜像的迁移,还可以备份您的镜像。 + +### 命令基本用法 + +执行 `sealos registry sync` 命令来进行镜像同步: + +```bash +sealos registry sync source dst +``` + +这里的 `source` 表示源 registry 的地址,而 `dst` 是目标 registry 的地址。 + +例如,您想将地址为 127.0.0.1:41669 的 registry 中的所有镜像同步到地址为 sealos.hub:5000 的 registry,您应执行以下命令: + +```bash +sealos registry sync 127.0.0.1:41669 sealos.hub:5000 +``` + +### 认证与权限 + +在执行 `sealos registry sync` 命令之前,请确保您具有访问源 registry 和目标 registry 的权限。可以使用`sealos login`对registry进行认证登录。 + +### 同步过程 + +请注意,镜像同步可能需要一些时间,这取决于镜像的数量和大小,以及网络的速度。在同步过程中,请保持网络的连通性,并确保在同步完成之前不要中断命令的执行。 + +重要的是,`sealos registry sync` 命令支持增量同步,已经存在于目标 registry 的镜像不会重新同步。 + +### 参数选项 + +`sealos registry sync` 命令还提供了一些参数选项,允许您更精细地控制同步过程: + +- `--override-arch ARCH`:使用指定的 `ARCH` 替代当前机器的架构来选择镜像。 + +- `--override-os OS`:使用指定的 `OS` 替代当前操作系统来选择镜像。 + +- `--override-variant VARIANT`:使用指定的 `VARIANT` 替代当前的架构变种来选择镜像。 + +- `-a` 或 `--all`:如果源镜像是一个列表,同步所有镜像。这对异构环境下特别有用,因为默认情况下,只会同步当前架构的镜像。 + +例如,如果您想同步所有架构的镜像,可以添加 `-a` 参数: + +```bash +sealos registry sync -a 127.0.0.1:41669 sealos.hub:5000 +``` + +以上就是 `sealos registry sync` 命令的详细说明与使用指南。希望这些信息能帮助您更好地理解和使用这个命令。如果您在使用过程中遇到任何问题,欢迎随时提问。 + +## Sealos:`sealos registry copy` 命令详解与使用指南 + +Sealos 的 `registry copy` 命令用于将指定镜像从一个 registry 复制到另一个 registry。这能帮助您在不同的 registry 之间进行镜像的迁移或备份。 + +### 命令基本用法 + +使用 `sealos registry copy` 命令来进行镜像的复制: + +```bash +sealos registry copy source-image dst +``` + +这里的 `source-image` 表示源镜像的全名(包括地址和镜像名),`dst` 是目标 registry 的地址。 + +例如,要将名为 `127.0.0.1:41669/my-image:tag` 的镜像复制到地址为 `sealos.hub:5000` 的 registry,您可以执行以下命令: + +```bash +sealos registry copy 127.0.0.1:41669/my-image:tag sealos.hub:5000 +``` + +### 认证与权限 + +在执行 `sealos registry copy` 命令之前,请确保您具有访问源镜像和目标 registry 的权限。可以使用`sealos login`对registry进行认证登录。 + +### 复制过程 + +请注意,镜像复制可能需要一些时间,这取决于镜像的大小,以及网络的速度。在复制过程中,请保持网络的连通性,并确保在复制完成之前不要中断命令的执行。 + +### 参数选项 + +`sealos registry copy` 命令提供了一些参数选项,允许您更精细地控制复制过程: + +- `--override-arch ARCH`:使用指定的 `ARCH` 替代当前机器的架构来选择镜像。 + +- `--override-os OS`:使用指定的 `OS` 替代当前操作系统来选择镜像。 + +- `--override-variant VARIANT`:使用指定的 `VARIANT` 替代当前的架构变种来选择镜像。 + +- `-a` 或 `--all`:如果源镜像是一个列表,复制所有镜像。这对异构环境下特别有用,因为默认情况下,只会复制当前架构的镜像。 + +例如,如果您想复制所有架构的镜像,可以添加 `-a` 参数: + +```bash +sealos registry copy -a 127.0.0.1:41669/my-image:tag sealos.hub:5000 +``` + + +以上就是 `sealos registry` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/reset.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/reset.md new file mode 100644 index 00000000000..611df9bae44 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/reset.md @@ -0,0 +1,61 @@ +--- +sidebar_position: 2 +--- + +# reset 重置集群 + +`sealos reset` 是 Sealos 命令行工具中的一个命令,用于重置整个集群。这个命令在你想要彻底清空集群数据或者重建集群的时候特别有用。本指南将详细介绍其使用方法。 + +## 基本用法 + +基本的 `sealos reset` 命令格式如下: + +```bash +sealos reset --cluster cluster_name +``` + +在上述命令中,`cluster_name` 是你想要重置的集群的名称。 + +## 示例 + +例如,你可以使用以下命令重置名为 `mycluster` 的集群: + +```bash +sealos reset --cluster mycluster +``` + +## 可选参数 + +- `--force`: 该参数用于强制重置集群,即使集群重置操作未能成功完成。 + +```bash +sealos reset --cluster mycluster --force +``` + +- `--masters`: 该参数用于指定要重置的 master 节点。 + +```bash +sealos reset --cluster mycluster --masters master1 +``` + +- `--nodes`: 该参数用于指定要重置的工作节点。 + +```bash +sealos reset --cluster mycluster --nodes node1 node2 +``` + +- `-p`, `--passwd`: 该参数用于提供密码进行身份验证。 + +- `-i`, `--pk`: 该参数用于指定用于公钥认证的身份(私钥)读取的文件。 + +- `--pk-passwd`: 该参数用于解密 PEM 编码私钥的口令。 + +- `--port`: 该参数用于指定要连接的远程主机的端口。 + +- `-u`, `--user`: 该参数用于指定要作为身份验证的用户名。 + +```bash +sealos reset --cluster mycluster --user username --pk /root/.ssh/id_rsa --pk-passwd yourpassword +``` + +以上就是 `sealos reset` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 \ No newline at end of file diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/rmi.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/rmi.md new file mode 100644 index 00000000000..7114566351d --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/rmi.md @@ -0,0 +1,53 @@ +--- +sidebar_position: 6 +--- + +# rmi 删除本地镜像 + +`sealos rmi` 是 Sealos 命令行工具中的一个命令,用于删除本地存储的一个或多个镜像。这个命令可以帮助你清理无用或者过时的镜像,节省存储空间。本指南将详细介绍其使用方法。 + +## 基本用法 + +基本的 `sealos rmi` 命令格式如下: + +```bash +sealos rmi imageID +``` + +在上述命令中,`imageID` 是你想要删除的镜像的 ID。 + +## 示例 + +例如,你可以使用以下命令删除 ID 为 `imageID` 的镜像: + +```bash +sealos rmi imageID +``` + +如果你想要删除多个镜像,只需要在命令行中列出所有的镜像 ID,例如: + +```bash +sealos rmi imageID1 imageID2 imageID3 +``` + +## 可选参数 + +- `-a`, `--all`: 该参数用于删除所有镜像。使用此选项时,命令将不接受任何镜像 ID。 + +```bash +sealos rmi --all +``` + +- `-f`, `--force`: 该参数用于强制删除镜像,以及使用该镜像的任何容器。 + +```bash +sealos rmi --force imageID +``` + +- `-p`, `--prune`: 该参数用于修剪悬挂的镜像(没有标签且没有被任何容器引用的镜像)。 + +```bash +sealos rmi --prune +``` + +以上就是 `sealos rmi` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/run.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/run.md new file mode 100644 index 00000000000..03117703b6d --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/run.md @@ -0,0 +1,84 @@ +--- +sidebar_position: 1 +--- + +# run 运行集群镜像 + +Sealos 的 `run` 命令是一个强大且灵活的工具,它支持集群初始化、应用安装、多镜像执行,单机集群等操作。下面是对于 `sealos run` 命令及其参数的详细解释和一些使用示例。 + +## 命令概览 + +``` +sealos run --masters [arg] --nodes [arg] [Options] +``` + +`` 参数是您想要在集群中运行的 Docker 镜像名称和版本。`--masters` 和 `--nodes` 是您想要运行这个镜像的 master 节点和 node 节点的 IP 列表。 + +### 选项解释 + +- `--cluster='default'`: 要运行操作的集群名称。 + +- `--cmd=[]`: 覆盖镜像中的 CMD 指令。 + +- `--config-file=[]`: 自定义配置文件的路径,用于替换资源。 + +- `-e, --env=[]`: 在命令执行期间设置的环境变量。 + +- `-f, --force=false`: 强制覆盖此集群中的应用。 + +- `--masters=''`: 要运行的 master 节点。 + +- `--nodes=''`: 要运行的 node 节点。 + +- `-p, --passwd=''`: 使用提供的密码进行认证。 + +- `-i, --pk='/root/.ssh/id_rsa'`: 选择从其中读取公钥认证身份的私钥文件。 + +- `--pk-passwd=''`: 解密 PEM 编码的私钥的密码。 + +- `--port=22`: 远程主机的连接端口。 + +- `-t, --transport='oci-archive'`: 从 tar 归档文件加载镜像传输。(可选值: oci-archive, docker-archive) + +- `-u, --user=''`: 认证的用户名。 + +## 示例 + +1. 创建集群到您的裸机服务器,指定 IP 列表: +``` +sealos run labring/kubernetes:v1.24.0 --masters 192.168.0.2,192.168.0.3,192.168.0.4 \ + --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --passwd 'xxx' +``` + +2. 多镜像运行: +``` +sealos run labring/kubernetes:v1.24.0 labring/helm:v3.11.3 calico:v3.24.6 \ + --masters 192.168.64.2,192.168.64.22,192.168.64.20 --nodes 192.168.64.21,192.168.64.19 +``` + +3. 指定服务器的 InfraSSH 端口: +``` +sealos run labring/kubernetes:v1.24.0 --masters 192.168.0.2,192.168.0.3,192.168.0.4 \ + --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --port 24 --passwd 'xxx' +``` + +4. 自定义 VIP Kubernetes 集群: +``` +sealos run -e defaultVIP=10.103.97.2 labring/kubernetes:v1.24.0 --masters 192.168.0.2,192.168.0.3,192.168.0.4 \ + --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --passwd 'xxx' +``` + +5. 创建单节点 Kubernetes 集群: +``` +sealos run labring/kubernetes:v1.24.0 +``` + +6. 使用自定义环境变量创建集群: +``` +sealos run -e DashBoardPort=8443 mydashboard:latest --masters 192.168.0.2,192.168.0.3,192.168.0.4 \ + --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --passwd 'xxx' +``` + +这些示例展示了 `sealos run` 命令的强大和灵活性,可以根据您的需求进行定制和调整。 + +更多示例请参考 [运行集群](/self-hosting/lifecycle-management/operations/run-cluster.md)。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/save.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/save.md new file mode 100644 index 00000000000..cea21ca7351 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/save.md @@ -0,0 +1,39 @@ +--- +sidebar_position: 6 +--- + +# save 保存镜像 + +`sealos save` 是 Sealos 命令行工具中的一个命令,用于将镜像保存到归档文件中。这个命令可以帮助你方便地备份和迁移你的镜像。本指南将详细介绍其使用方法。 + +## 基本用法 + +基本的 `sealos save` 命令格式如下: + +```bash +sealos save -o outputFilename imageName +``` + +在上述命令中,`outputFilename` 是你想要保存的归档文件的名称,`imageName` 是你想要保存的镜像的名称。 + +## 示例 + +例如,你可以使用以下命令将名为 `labring/kubernetes:latest` 的镜像保存到一个名为 `kubernetes.tar` 的归档文件中: + +```bash +sealos save -o kubernetes.tar labring/kubernetes:v1.24.0 +``` + +## 可选参数 + +- `--format`: 这个参数用于指定保存镜像的传输方式。目前可用的选项有 `oci-archive` 和 `docker-archive`、`oci-dir`,`docker-dir`。默认值是 `oci-archive`。 +- `-m`: 这个参数可以同时保存多个镜像,但是仅限于`docker-archive`格式。 + +例如,你可以使用以下命令将名为 `labring/kubernetes:latest` 的镜像以 `docker-archive` 的方式保存到一个名为 `kubernetes.tar` 的归档文件中: + +```bash +sealos save -o kubernetes.tar --format docker-archive labring/kubernetes:v1.24.0 +sealos save -o kubernetes.tar -m --format docker-archive labring/kubernetes:v1.24.0 labring/helm:v3.5.0 +``` + +以上就是 `sealos save` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/scp.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/scp.md new file mode 100644 index 00000000000..1508424fb4f --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/scp.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 5 +--- + +# scp 拷贝文件 + +`sealos scp` 是 Sealos 命令行工具中的一个命令,用于将文件复制到指定的集群节点。本指南将详细介绍其使用方法和选项。 + +## 基本用法 + +基本的 `sealos scp` 命令格式如下: + +```bash +sealos scp "source file path" "destination file path" +``` + +在上述命令中,`source file path` 是你要复制的文件的本地路径,`destination file path` 是你要将文件复制到的远程节点路径。 + +## 选项 + +`sealos scp` 命令提供了以下选项: + +- `-c, --cluster='default'`: 要将文件复制到其上的集群的名称。默认为 `default`。 + +- `--ips=[]`: 将文件复制到具有指定 IP 地址的节点。 + +- `-r, --roles='':`: 将文件复制到具有指定角色的节点。 + +每个选项后都可以跟随一个或多个参数。 + +## 示例 + +例如,你可以使用以下命令将本地的 `/root/aa.txt` 文件复制到默认集群的所有节点的 `/root/dd.txt`: + +```bash +sealos scp "/root/aa.txt" "/root/dd.txt" +``` + +如果你想在名为 `my-cluster` 的集群的 `master` 和 `node` 角色的节点上复制文件,可以使用以下命令: + +```bash +sealos scp -c my-cluster -r master,node "/root/aa.txt" "/root/dd.txt" +``` + +如果你只想在 IP 地址为 `172.16.1.38` 的节点上复制文件,可以使用以下命令: + +```bash +sealos scp -c my-cluster --ips 172.16.1.38 "/root/aa.txt" "/root/dd.txt" +``` + +以上就是 `sealos scp` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/tag.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/tag.md new file mode 100644 index 00000000000..c3e250cc344 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/commands/tag.md @@ -0,0 +1,33 @@ +--- +sidebar_position: 6 +--- + +# tag 添加镜像名称 + +`sealos tag` 是 Sealos 命令行工具中的一个命令,用于给本地存储的镜像添加一个或多个附加名称。这个命令可以帮助你更好地管理你的镜像。本指南将详细介绍其使用方法。 + +## 基本用法 + +基本的 `sealos tag` 命令格式如下: + +```bash +sealos tag imageName newName +``` + +在上述命令中,`imageName` 是你要操作的镜像的名称,`newName` 是你想要添加的新标签。 + +## 示例 + +例如,你可以使用以下命令给名为 `imageName` 的镜像添加一个新的名称 `firstNewName`: + +```bash +sealos tag imageName firstNewName +``` + +你也可以一次添加多个名称,例如,添加 `firstNewName` 和 `SecondNewName` 两个名称: + +```bash +sealos tag imageName firstNewName SecondNewName +``` + +以上就是 `sealos tag` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/kubernetes-cluster-image.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/kubernetes-cluster-image.md new file mode 100644 index 00000000000..f09d34f7bf1 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/kubernetes-cluster-image.md @@ -0,0 +1,55 @@ +--- +sidebar_position: 10 +--- + +# Kubernetes 集群镜像说明文档 + +本文档主要介绍 Sealos 官方提供的 rootfs 类型集群镜像,包括镜像名称、镜像类型以及镜像版本等方面的说明。 + +## 镜像名称 + +Sealos 官方发布的集群镜像主要包括以下几种: + +1. kubernetes:使用 containerd 作为容器运行时(CRI)的 Kubernetes 镜像。 +2. kubernetes-docker:使用 docker 作为容器运行时(CRI)的 Kubernetes 镜像。 +3. kubernetes-crio:使用 crio 作为容器运行时(CRI)的 Kubernetes 镜像。 + +目前,Sealos 主要提供了 Kubernetes 相关的镜像,而其他类型的集群镜像,如 k3s、k0s 等,尚未提供。 + +## 镜像类型 + +根据容器运行时(CRI)的不同,Sealos 提供了不同类型的 Kubernetes 集群镜像: + +1. 使用 containerd 作为 CRI 的 Kubernetes 镜像。 +2. 使用 docker 作为 CRI 的 Kubernetes 镜像。 +3. 使用 crio 作为 CRI 的 Kubernetes 镜像。 + +用户可以根据自己的需求和偏好,选择合适的镜像类型。 + +## 镜像版本 + +Sealos 官方提供的集群镜像有多个版本可供选择,例如: + +### 1. 开发版(Development version) + +适用于想要尝试项目最新功能的用户。开发版可能包含尚未经过完整测试的新功能和改进,因此可能不够稳定。 + +示例:`v1.26(v1.26-amd64/v1.26-arm64)` + +### 2. 最新版(Latest version) + +通常比开发版更稳定,但可能不包含所有的新功能。这是推荐给大多数用户使用的版本。 + +示例:`v1.26.0(v1.26.0-amd64/v1.26.0-arm64)` + +### 3. 发布版(Release version,包含历史版本) + +包含了历史版本的发布版。发布版通常经过了严格的测试,被认为是稳定的。 + +示例:`v1.26.0-4.1.5(v1.26.0-4.1.5-amd64/v1.26.0-4.1.5-arm64)` `4.1.5`是sealos对应版本号 + +在选择镜像版本时,用户需要根据自己的需求和偏好来选择适合的版本。另外,Sealos 还提供了针对不同处理器架构的子版本,以满足用户在不同硬件平台上的需求。 + +## 总结 + +本文档对 Sealos 官方提供的 rootfs 类型集群镜像进行了说明,包括镜像名称、镜像类型以及镜像版本等方面。用户可以根据自己的需求和偏好,在不同的镜像类型和版本中进行选择,以便在 Kubernetes 集群中运行容器。 diff --git a/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/sealos.md b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/sealos.md new file mode 100644 index 00000000000..69c2cc67ce9 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/lifecycle-management/reference/sealos/sealos.md @@ -0,0 +1,16 @@ +--- +sidebar_position: 0 +--- + +# Sealos 使用指南 + +Sealos 是一个统一的云操作系统,用于管理云原生应用。它提供了一系列命令行工具来帮助用户管理 Kubernetes 集群,管理节点,远程操作,管理容器和镜像,以及其他一些功能。下面是这些命令的详细介绍: + +本章节主要介绍 Sealos 的使用指南以及集群镜像相关说明。 + +- Sealos使用指南: 有关每个命令的详细信息,包括所有受支持的参数和子命令, 请参阅 [sealos](/self-hosting/lifecycle-management/reference/sealos/commands.md) 参考文档。 +- 集群镜像: + - [Rootfs集群镜像](/self-hosting/lifecycle-management/reference/sealos/kubernetes-cluster-image.md) + - [Application集群镜像](/self-hosting/lifecycle-management/reference/sealos/app-cluster-image.md) + + diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/QA.md b/docs/5.0/docs/developer-guide/self-hosting/sealos/QA.md new file mode 100644 index 00000000000..eb8b12389da --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/sealos/QA.md @@ -0,0 +1,110 @@ +--- +sidebar_position: 3 +--- + +# 常见问题 + +在部署及使用 Sealos Cloud 过程中,您可能会遇到各种问题。为了更好地帮助您解决这些问题,我们对常见问题进行了总结,并提供了详细的答案和解决方法。 + +## 部署问题 + +下面总结了部署过程中可能遇到的问题及解决方法,假如您遇到了其他问题,请在 [Sealos 社区](https://forum.laf.run/)中联系我们。 + +### Q1:iptables / ip_forward 问题 + +**问题描述**:在部分操作系统中,iptables 或 IPv4 IP 转发默认未启用,例如旧版本的 Centos、RHEL 等。这可能导致部署过程中无法正常创建 +iptables 规则或转发数据包,从而导致集群无法正常启动。 + +**解决方法**:需要在每个节点上执行以下命令,以启用 iptables 和 IP 转发: + +```shell +$ modprobe br_netfilter +$ echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables +$ echo 1 > /proc/sys/net/ipv4/ip_forward +``` + +### Q2:系统内核问题 + +- **问题描述**:如果系统内核版本过低,可能导致集群无法正常启动。低版本内核也可能导致依赖 MongoDB 5.0 的应用无法正常运行。 +- **解决方法**:在部署前,请确保系统内核版本至少为 5.4 或更高。 + +### Q3:系统资源问题 + +- **问题描述**:系统资源紧张可能会导致部署过程中出现卡顿或停滞,当您等待过久时,请检查系统资源是否足够。 +- **解决方法**:使用命令 `kubectl describe nodes` 查看节点资源状态。一般情况下可以从 CPU、内存、存储等方向排查系统资源是否充足。 + +### Q4:网络问题 + +- **问题描述**: 在部署过程中,服务器的不当配置可能会引发多种网络问题,例如: + 1. http_proxy / https_proxy 环境变量配置; + 2. 服务器防火墙配置; + 3. 服务器路由配置; +- **解决方法**: 遇到网络问题时,请检查以上配置是否正确。 + +## 证书及域名相关问题 + +### 证书更新 + +在您使用 Sealos 过程中,证书是保障集群安全的重要组成部分。以下是详细的证书更新步骤,这些步骤可以帮助您在证书即将过期时顺利更新: + +1. **备份旧证书**: + + 在主节点 `master0` 上,您需要先备份当前使用的证书。这是一个防止更新过程中出现问题而导致证书丢失的重要步骤。使用以下命令进行备份: + + ```shell + $ kubectl get secret -n sealos-system wildcard-cert -o yaml > cert-backup.yaml + ``` + + 此命令会将名为 `wildcard-cert` 的证书以 YAML 格式保存到文件 `cert-backup.yaml` 中。 + +2. **保存新证书**: + + 将您已经准备好的新证书文件保存到 `master0` 节点上。确保新的证书文件(通常是 `.crt` 和 `.key` 文件)在节点上的某个位置。 + +3. **更新证书**: + + 使用以下脚本来更新证书。您需要替换脚本中的 `` 和 ``,以指向您的新证书文件和密钥文件的实际路径。 + + ```shell + #!/bin/bash + # 设置变量 + CRT_FILE= + KEY_FILE= + + # 将证书和密钥文件内容进行Base64编码 + CRT_BASE64=$(cat $CRT_FILE | base64 -w 0) + KEY_BASE64=$(cat $KEY_FILE | base64 -w 0) + + # 构建部分更新的JSON对象 + PATCH_JSON='{"data":{"tls.crt":"'$CRT_BASE64'","tls.key":"'$KEY_BASE64'"}}' + + # 使用kubectl patch命令更新Secret + kubectl patch secret wildcard-cert -n sealos-system -p $PATCH_JSON + ``` + + 这个脚本的主要作用是将新证书的内容编码为 Base64 格式,并使用 `kubectl patch` 命令更新 Kubernetes 集群中的相应 Secret + 对象。 + +### 域名更换 + +域名更换是一个更加复杂的过程,因为它通常涉及到集群内多个组件和服务的配置更改。目前,我们尚未在文档中提供域名更换的详细教程。不过,我们计划在未来推出 +Sealos 集群管理面板,该面板将提供更加简便的方法来替换集群域名和证书。 + +请注意,域名更换通常需要对集群的网络配置进行深入了解,并且可能涉及到 DNS +设置、服务发现等多个方面。因此,建议在执行此类操作时,确保您具备相应的技术知识或咨询专业人士的帮助。 + +### 用户注册开关 + +关闭用户注册: + +```shell +kubectl get cm -n sealos desktop-frontend-config -o yaml | sed 's/signUpEnabled: true/signUpEnabled: false/g' | kubectl apply -f - +kubectl rollout restart deployment desktop-frontend -n sealos +``` + +开启用户注册: + +```shell +kubectl get cm -n sealos desktop-frontend-config -o yaml | sed 's/signUpEnabled: false/signUpEnabled: true/g' | kubectl apply -f - +kubectl rollout restart deployment desktop-frontend -n sealos +``` diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/chrome-certificate-1.jpg b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/chrome-certificate-1.jpg new file mode 100644 index 00000000000..680d572141b Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/chrome-certificate-1.jpg differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/chrome-certificate-2.jpg b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/chrome-certificate-2.jpg new file mode 100644 index 00000000000..8b6a354702c Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/chrome-certificate-2.jpg differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/firefox-export-certificate-1.png b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/firefox-export-certificate-1.png new file mode 100644 index 00000000000..6e2c46692cf Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/firefox-export-certificate-1.png differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/firefox-export-certificate-2.jpg b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/firefox-export-certificate-2.jpg new file mode 100644 index 00000000000..a99aaeaf5a0 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/firefox-export-certificate-2.jpg differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/firefox-export-certificate-3.jpg b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/firefox-export-certificate-3.jpg new file mode 100644 index 00000000000..8a42e6c08c8 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/firefox-export-certificate-3.jpg differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/safari-export-certificate-1.jpg b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/safari-export-certificate-1.jpg new file mode 100644 index 00000000000..3a211ccd3e1 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/safari-export-certificate-1.jpg differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/safari-export-certificate-2.jpg b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/safari-export-certificate-2.jpg new file mode 100644 index 00000000000..357d5880dbe Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/safari-export-certificate-2.jpg differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/safari-export-certificate-3.jpg b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/safari-export-certificate-3.jpg new file mode 100644 index 00000000000..9c33c03204f Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/safari-export-certificate-3.jpg differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-cost-center.jpg b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-cost-center.jpg new file mode 100644 index 00000000000..e8e59ccb870 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-cost-center.jpg differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate.jpg b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate.jpg new file mode 100644 index 00000000000..97dbcc274b2 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate.jpg differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate1.png b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate1.png new file mode 100644 index 00000000000..3f1bfaebdc2 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate1.png differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate2.png b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate2.png new file mode 100644 index 00000000000..7c33e2693e9 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate2.png differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate3.png b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate3.png new file mode 100644 index 00000000000..609a653a4f1 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate3.png differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate4.png b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate4.png new file mode 100644 index 00000000000..6c6a20aadb7 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license-activate4.png differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license.png b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license.png new file mode 100644 index 00000000000..aa820a06c10 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/sealos-license.png differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/images/windows-trust-certificate.jpg b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/windows-trust-certificate.jpg new file mode 100644 index 00000000000..243d0d2d558 Binary files /dev/null and b/docs/5.0/docs/developer-guide/self-hosting/sealos/images/windows-trust-certificate.jpg differ diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/install-object-storage.md b/docs/5.0/docs/developer-guide/self-hosting/sealos/install-object-storage.md new file mode 100644 index 00000000000..cade1f86851 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/sealos/install-object-storage.md @@ -0,0 +1,43 @@ +--- +sidebar_position: 2 +--- + +# 部署对象存储 + +下载 helm 图表。 + +```bash +curl -O https://raw.githubusercontent.com/minio/operator/master/helm-releases/operator-5.0.6.tgz +``` + +安装 minio-operator。 + +```bash +helm install --namespace minio-system --create-namespace minio-operator operator-5.0.6.tgz +``` + +安装 Minio、Controller 等。 + +```bash +# DOMAIN 是 Sealos 集群的域名 +# 环境变量设置 Minio 管理员账户(默认的 Minio 管理员账户为 username/passw0rd) +# -e minioAdminUser={16位随机大小写字符串} -e minioAdminPassword={32位随机大小写字符串} +sealos run ghcr.io/labring/sealos-cloud-objectstorage:latest -e cloudDomain={DOMAIN} +``` + +# 卸载对象存储 + +安装「对象存储」失败,可以使用脚本清理残留资源,卸载「对象存储」也可以使用脚本清理。 + +```bash +#!/usr/bin/env bash +set +e + +kubectl delete app objectstorage -n app-system +kubectl delete ns objectstorage-system objectstorage-frontend +helm uninstall minio-operator -n minio-system +kubectl delete ns minio-system +kubectl delete crd objectstoragebuckets.objectstorage.sealos.io objectstorageusers.objectstorage.sealos.io +kubectl delete clusterrole objectstorage-manager-role objectstorage-metrics-reader objectstorage-proxy-role +kubectl delete clusterrolebinding objectstorage-manager-rolebinding objectstorage-proxy-rolebinding +``` \ No newline at end of file diff --git a/docs/5.0/docs/developer-guide/self-hosting/sealos/installation.md b/docs/5.0/docs/developer-guide/self-hosting/sealos/installation.md new file mode 100644 index 00000000000..34755fe2860 --- /dev/null +++ b/docs/5.0/docs/developer-guide/self-hosting/sealos/installation.md @@ -0,0 +1,428 @@ +--- +sidebar_position: 1 +toc_max_heading_level: 5 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Sealos 集群部署 + +export const Highlight = ({children, color}) => ( + + {children} + +); + +:::tip + +大规模集群以及企业生产环境强烈建议使用 [Sealos 私有云的企业版或者定制版](/self-hosting)。 + +::: + +## 准备工作 + +### 服务器 + +以下是一些基本的要求: + +- 每个集群节点应该有不同的主机名。 +- 所有节点的时间需要同步。 +- 建议使用干净的操作系统来创建集群。**不要自己装 Docker!** +- 支持大多数 Linux 发行版,例如:Ubuntu、Debian、CentOS、Rocky linux。 +- **系统内核版本在 5.4 及以上**。 +- **必须使用 root 用户安装!** + +推荐配置: + +推荐使用 Ubuntu 22.04 LTS 操作系统,内核版本在 5.4 及以上,配置如下: + +| 操作系统 | 内核版本 | CPU | 内存 | 存储 | Masters | Nodes | +|------------------|-------|-----|------|-------|---------|-------| +| Ubuntu 22.04 LTS | ≥ 5.4 | 8C | 16GB | 100GB | 奇数台 | 任意 | + +:::info注意 +Kubernetes 和 Sealos Cloud 的系统组件在每个 Master 节点上大约需要 2 核心(2c)和 2GB 内存(2g),在每个 Node 节点上则需要大约 +1 核心(1c)和 1GB 内存(1g),请确保集群中每个节点都有足够的计算资源以支持系统组件的运行。 +::: + +### 网络 + ++ 所有节点之间网络互通; ++ 需要在 Kubernetes 集群的**第一个 Master 节点**上执行脚本,目前**集群外的节点不支持集群安装**; ++ 所有节点之间可以互相通信。 + +### 域名 + ++ 需要一个域名用于访问 Sealos 及相关服务; ++ 如果您没有域名,可以使用 `nip.io` 提供的免费域名服务。 + +### 证书 + +Sealos 需要使用证书来保证通信安全,默认在您不提供证书的情况下我们会使用 [cert-manager](https://cert-manager.io/docs/) 来自动签发证书。 + +如果您能提供证书,证书需要解析下列域名 (假设您提供的域名为:cloud.example.io): + +- `*.cloud.example.io` +- `cloud.example.io` + +## 安装步骤 + +为了便于部署,我们提供了一个一键安装脚本。该脚本可以从零开始部署 Sealos 集群,也可以在已有的 Kubernetes 集群上部署 Sealos +集群(在已有集群上执行时请谨慎操作)。 + +:::info注意 + +该脚本只支持在 “使用 Sealos 安装的 Kubernetes 集群” 上部署 Sealos 集群,暂不支持其他方式部署的 Kubernetes。 + +关于如何使用 Sealos 部署 Kubernetes +集群,可以参考:[安装 Kubernetes 集群](/self-hosting/lifecycle-management/quick-start/deploy-kubernetes.md) +,支持 [Docker Hub](https://hub.docker.com/r/labring/kubernetes/tags) 中的几乎所有 Kubernetes 版本(**暂不支持 1.28 及以上版本 +**)。 + +::: + +如果您的机器还没有安装过 Kubernetes,**建议直接使用该脚本连同 Kubernetes 和 Sealos 集群一起安装。** + +根据您的域名情况,可以分为以下几种安装方式: + +### 1、无公网域名,也不想自定义域名 + +如果您没有公网域名,也不需要自定义域名,可以选择直接使用 `nip.io` 提供的免费域名服务。`nip.io` 是一个免费的通配符 DNS 服务,它可以将动态分配的 IP 地址映射到一个固定的子域名上,特别适合用于本地开发环境。具体的工作原理为: + +您可以使用任何 IP 地址作为 `nip.io` 子域名的一部分,而 `nip.io` 会将它解析回相应的 IP 地址。例如,如果你有一个内网 IP 地址 `192.168.1.10`,你可以使用 `192.168.1.10.nip.io` 作为域名,所有向这个域名发送的请求都会被解析到 `192.168.1.10` 这个 IP 地址上。这样就无需修改本地 hosts 文件,也不需要搭建内网 DNS 服务,直接通过这个域名就能访问内网服务了。 + +使用 nip.io 作为 Sealos 的域名非常简单,只需在第一个 Master 节点上执行以下命令,并根据提示输入参数: + +```bash +$ curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/v5.0.0-beta5/scripts/cloud/install.sh -o /tmp/install.sh && bash /tmp/install.sh \ + --cloud-version=v5.0.0-beta5 \ + --image-registry=registry.cn-shanghai.aliyuncs.com --zh \ + --proxy-prefix=https://mirror.ghproxy.com +``` + +当需要你输入 Sealos Cloud 域名时,你需要输入这种格式的域名:`[ip].nip.io`,其中 [ip] 是你的 Master 节点 IP。 + +安装完成后,终端会输出 Sealos 访问域名以及用户名和密码,例如: + +```bash +Sealos cloud login info: +Cloud Version: latest +URL: https://10.214.210.102.nip.io +admin Username: admin +admin Password: sealos2023 +``` + +### 2、有公网域名,想公网访问 + +如果你有自己的公网域名,并且想通过公网访问 Sealos,那你就需要准备好公网受信任的 SSL/TLS 证书。你可以通过 acme.sh 等工具自动签发证书,也可以从域名提供商处下载免费证书或者购买商业证书。 + +:::info注意 +如果你的公网 IP 在国内,那么域名必须要备案! +::: + +准备好域名证书后,需要将证书放到第一个 Master 节点的某个目录中,例如 `/root/certs/`。 + +:::info注意 + +您还需要在域名服务商处添加一条该域名的 A 记录,地址解析到第一个 Master 节点的公网 IP 地址。同时还需要添加一条泛解析记录,将该域名的子域名也解析到第一个 Master 节点的公网 IP 地址。 + +例如 (假设你的域名是 `cloud.example.io`,假设你的 Master 节点公网地址是 `192.168.1.10`): + +```bash +cloud.example.io A 192.168.1.10 +*.cloud.example.io A 192.168.1.10 +``` + +::: + +然后在第一个 Master 节点上执行以下命令,并根据提示输入参数: + +```bash +$ curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/v5.0.0-beta5/scripts/cloud/install.sh -o /tmp/install.sh && bash /tmp/install.sh \ + --cloud-version=v5.0.0-beta5 \ + --image-registry=registry.cn-shanghai.aliyuncs.com --zh \ + --proxy-prefix=https://mirror.ghproxy.com \ + --cloud-domain= \ + --cert-path= \ + --key-path= +``` + ++ `` 需要替换成你自己的公网域名。 ++ `` 需要替换成你的证书位置,通常是 `.crt` 或 `.pem` 文件。例如:`/root/certs/example.crt`。 ++ `` 需要替换成你的私钥位置,通常是 `.key` 或 `.pem` 文件。例如:`/root/certs/example.key`。 + +### 3、有公网域名,想内网访问 + +如果您有自己的公网域名,但是只有内网 IP,或者只想在内网访问 Sealos,那您只需要在域名服务商处添加一条该域名的 A 记录,地址解析到第一个 Master 节点的内网 IP 地址。同时还需要添加一条泛解析记录,将该域名的子域名也解析到第一个 Master 节点的内网 IP 地址。 + +例如 (假设你的域名是 `cloud.example.io`,假设你的 Master 节点内网地址是 `192.168.1.10`): + +```bash +cloud.example.io A 192.168.1.10 +*.cloud.example.io A 192.168.1.10 +``` + +然后在第一个 Master 节点上执行以下命令,并根据提示输入参数: + +```bash +$ curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/v5.0.0-beta5/scripts/cloud/install.sh -o /tmp/install.sh && bash /tmp/install.sh \ + --cloud-version=v5.0.0-beta5 \ + --image-registry=registry.cn-shanghai.aliyuncs.com --zh \ + --proxy-prefix=https://mirror.ghproxy.com \ + --cloud-domain= +``` + +其中 `` 需要替换成你自己的公网域名。 + +安装过程中 Sealos 会使用 [cert-manager](https://cert-manager.io/docs/) 来自签名证书。 + +### 4、无公网域名,但想自定义域名 + +如果您没有公网域名,但是需要自定义域名,那么就需要在内网自建 DNS,然后将自定义域名解析到第一个 Master 节点的内网 IP 地址。 + +:::note + +假设您的第一个 Master 节点的内网 IP 地址为 `192.168.1.10`。假设您的域名为 `cloud.example.io`。 + +::: + +可以考虑使用 CoreDNS 来自建 DNS 服务,参考配置: + +```nginx +(global_cache) { + cache { + # [5, 60] + success 65536 3600 300 + # [1, 10] + denial 8192 600 60 + prefetch 1 60m 10% + } +} + +.:53 { + errors + health + ready + + import global_cache + + template IN A cloud.example.io { + answer "{{ .Name }} 60 IN A 192.168.1.10" + fallthrough + } + + forward . 223.5.5.5 + + log + loop + reload 6s +} +``` + +这样不管您访问 `cloud.example.io` 还是 `*.cloud.example.io` 都会解析到第一个 Master 节点的内网 IP 地址。 + +然后在第一个 Master 节点上执行以下命令,并根据提示输入参数: + +```bash +$ curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/v5.0.0-beta5/scripts/cloud/install.sh -o /tmp/install.sh && bash /tmp/install.sh \ + --cloud-version=v5.0.0-beta5 \ + --image-registry=registry.cn-shanghai.aliyuncs.com --zh \ + --proxy-prefix=https://mirror.ghproxy.com \ + --cloud-domain= +``` + +其中 `` 需要替换成你自己的自定义域名。 + +安装过程中 Sealos 会使用 [cert-manager](https://cert-manager.io/docs/) 来自签名证书。 + +## 信任自签名证书 + +如果您选择了上面提供的安装方式中的 1 或 3 或 4,那么您的证书默认是不受浏览器信任的,当你访问 Sealos Cloud 时,浏览器会提示下面的信息: + +![](images/chrome-certificate-1.jpg) + +即使点击继续访问,进入 Sealos Cloud 之后也无法正常显示 App 图标,无法打开 App。 + +![](images/chrome-certificate-2.jpg) + +我们需要导出自签名证书,并让系统信任自签名证书。步骤如下。 + +### 导出自签名证书 + +各个浏览器导出自签名证书的步骤略有不同。以下是在一些常用浏览器中导出自签名证书的步骤: + +#### Chrome (以及基于 Chromium 的浏览器如新版 Edge 和 Brave) + +1. 在浏览器地址栏左侧点击 “不安全” 字样。 +2. 点击 “证书无效”,这将打开一个证书信息窗口。 +3. 在打开的证书窗口中,切换到 “详细信息” 标签页。 +4. 在 “详细信息” 标签页中,找到并点击 “导出”。 +5. 选择一个文件名和保存位置,然后完成导出过程。 + +#### Firefox + +1. 点击页面中的 “高级”。 + + ![](images/firefox-export-certificate-1.png) + +2. 然后点击 “查看证书”。 + + ![](images/firefox-export-certificate-2.jpg) + +3. 在证书页面中点击 “PEM (证书)”。 + + ![](images/firefox-export-certificate-3.jpg) + +#### Safari + +1. 点击页面中的 “显示详细信息”。 + + ![](images/safari-export-certificate-1.jpg) + +2. 然后点击 “查看此证书”。 + + ![](images/safari-export-certificate-2.jpg) + +3. 在证书视图中,可以看到一个带有证书链的窗口。 + + ![](images/safari-export-certificate-3.jpg) + +4. 拖动红框圈出来的证书到桌面或文件夹中,证书就会被导出了。 + +### 信任自签名证书 + +#### macOS + +在 macOS 上信任自签名证书可以使用以下命令: + +```bash +# 假设证书保存在 ~/Downloads/10.214.210.102.nip.io.cer +$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/Downloads/10.214.210.102.nip.io.cer +``` + +您也可以通过以下步骤来操作: + +##### 1、添加证书到钥匙串 + +1. 启动**钥匙串访问** (Keychain Access) 应用程序,点击左侧 “系统钥匙串” 下方的 “系统” 类别。 +2. 然后打开 “访达”,进入证书保存位置,**双击证书文件**:这通常是一个 `.cer`,`.crt`,或 `.pem` 文件。 +3. 输入您的用户名和密码以允许修改。 +4. 证书现在应该已经被添加到您的钥匙串中。 + +##### 2、信任证书 + +1. 在钥匙串访问中,从 “系统” 类别的列表中找到刚刚添加的自签名证书,并双击它。 +2. 在打开的窗口中,展开 “信任” 部分。 +3. 在 “当使用此证书时” 选项旁边,有一个下拉菜单,默认设置可能是 “使用系统默认值”。要信任证书,请改为 “始终信任”。 +4. 关闭证书信息窗口,系统可能会提示您验证您的用户名和密码,以确认更改。 +5. 现在,证书已经被标记为受信任。 + +:::info注意 + +自签名证书不由第三方证书颁发机构 (CA) 颁发,因此,其他设备也不会信任该证书。如果您是在公司或组织内部使用自签名证书,可能需要在每个需要信任此证书的设备上手动进行上述步骤。 + +::: + +#### Windows + +1. 在根证书文件点鼠标右键,选择 “安装证书”。 +2. 选择 “当前用户” 或者 “本地计算机”,下一步 +3. “将所有的证书都放入下列存储”,“浏览”,“受信任的根证书颁发机构”,“确定”,下一步。 +4. 完成,“是”,确定。 + +![](images/windows-trust-certificate.jpg) + +#### Linux + +Linux 不同发行版更新根证书存储的命令不一样,用来保存私有证书的路径也不一样。需要先复制自签名 CA 证书到特定路径,再运行命令更新根证书存储。 + + + + + ```bash + # Debian/Ubuntu/Gentoo + # - 安装 + $ sudo cp root_ca.crt /usr/local/share/ca-certificates/root_ca.crt + # update-ca-certificates 会添加 /etc/ca-certificates.conf 配置文件中指定的证书 + # 另外所有 /usr/local/share/ca-certificates/*.crt 会被列为隐式信任 + $ sudo update-ca-certificates + + # - 删除 + $ sudo rm /usr/local/share/ca-certificates/root_ca.crt + $ sudo update-ca-certificates --fresh + ``` + + + + + ```bash + # CentOS/Fedora/RHEL + $ yum install ca-certificates + # 启用动态 CA 配置功能: + $ update-ca-trust force-enable + $ cp root_ca.crt /etc/pki/ca-trust/source/anchors/ + $ update-ca-trust + ``` + + + + + ```bash + # Alpine + $ apk update && apk add --no-cache ca-certificates + $ cp root_ca.crt /usr/local/share/ca-certificates/ + $ update-ca-certificates + ``` + + + + + ```bash + # OpenSUSE/SLES + $ cp root_ca.crt /etc/pki/trust/anchors/ + $ update-ca-certificates + ``` + + + + +## 激活集群 + +集群安装完成后,默认只有 5 元的额度,你需要激活集群以获取赠送的 299 元余额。步骤如下: + +1. 首先点击桌面的「许可证」打开许可证应用: + + ![](images/sealos-license.png) + +2. 然后点击「激活/购买」: + + ![](images/sealos-license-activate.jpg) + + 然后浏览器会跳转到 License 页面,并跳出一个弹窗: + + ![](images/sealos-license-activate1.png) + +3. 如果你还没有在该页面创建过集群,就点击「理立即开始」创建一个集群;如果你已经创建过集群了,只需要点击「已有集群」便会跳转到已有集群。 + + 跳转到集群列表之后。你就会看到集群已经被激活了: + + ![](images/sealos-license-activate2.png) + +4. 点击 「License 管理」,然后下载免费赠送的价值 299 元的 License: + + ![](images/sealos-license-activate3.png) + +5. 然后回到 Sealos 集群的「许可证」应用界面,点击「上传 License 文件」: + + ![](images/sealos-license-activate4.png) + + 选择刚刚下载的 License 文件进行上传,然后点击右下角的「激活 License」,便可激活 License。激活成功后,集群中的余额就变成了 304 元。 + + ![](images/sealos-cost-center.jpg) \ No newline at end of file diff --git "a/docs/5.0/docs/developer-guide/system-design/01-\347\263\273\347\273\237\346\236\266\346\236\204.md" "b/docs/5.0/docs/developer-guide/system-design/01-\347\263\273\347\273\237\346\236\266\346\236\204.md" new file mode 100644 index 00000000000..df449fa318b --- /dev/null +++ "b/docs/5.0/docs/developer-guide/system-design/01-\347\263\273\347\273\237\346\236\266\346\236\204.md" @@ -0,0 +1,31 @@ +# 系统架构 + +## 设计哲学 + +Sealos的目的是打造基于Kubernetes的云操作系统,在系统与普通用户的交互过程中尽可能多的向用户屏蔽掉Kubernetes的复杂性,使这部分功能尽可能的简单。同时对于具有专业知识的云计算领域人员,Sealos又期望提供专业高效的工具使其完成工作。 + +基于这个目标,Sealos提出了**"一切皆应用"**的设计理念。把每个功能抽象成一个个独立又可以相互配合的应用,不同需求和目的的人员操作不同的应用完成不同的功能。尽可能的与用户在使用单机操作系统时的体验保持一致。 + +## 整体架构 + +Sealos整体架构图如下: + +![Architecture](./images/architecture_light.png#gh-light-mode-only) + +![Architecture](./images/architecture_dark.png#gh-dark-mode-only) + +Sealos在原生Kubernetes集群的基础上,搭建了一系列的CRD与Controller,这些Controller构成了每一个应用的基础。 + +### 应用架构 + +Sealos 上的应用采用前后端分离的架构,同时前端能够提供 `SSR` 能力,使得应用也可以单独对外提供服务,而不需要绑定在 Sealos 单体上。 + +每个应用都通过Kubernetes CRD实现,应用的主要处理逻辑在CRD对应的Controller中进行。 + +大部分的应用数据同样持久化在CR中,部分结构性比较强的数据存储在集群内的数据库中。 + +应用架构以及交互示意图如下:(以App Launchpad 与Terminal应用与其交互为例子) + +![Application](./images/application_light.png#gh-light-mode-only)![Application](./images/application_dark.png#gh-dark-mode-only) + +又图可知,对于 Sealos 上的各种应用而言,它们可以直接与 `Kubernetes` 的服务进行交互,也可以与各种 CRD Controller 比如 Terminal Controller 和 Ingress-Nginx Controller 等等进行交互。应用之间也可以互相调用,比如用户在数据库应用中新建的数据库,可以直接唤起终端应用并自动连接上数据库进行调试。 diff --git "a/docs/5.0/docs/developer-guide/system-design/02-\347\224\250\346\210\267\347\263\273\347\273\237.md" "b/docs/5.0/docs/developer-guide/system-design/02-\347\224\250\346\210\267\347\263\273\347\273\237.md" new file mode 100644 index 00000000000..7ce59233e7f --- /dev/null +++ "b/docs/5.0/docs/developer-guide/system-design/02-\347\224\250\346\210\267\347\263\273\347\273\237.md" @@ -0,0 +1,5 @@ +# 用户系统 + +## 概述 + +Sealos使用namespace \ No newline at end of file diff --git "a/docs/5.0/docs/developer-guide/system-design/03-\350\256\241\350\264\271\347\263\273\347\273\237.md" "b/docs/5.0/docs/developer-guide/system-design/03-\350\256\241\350\264\271\347\263\273\347\273\237.md" new file mode 100644 index 00000000000..1d2cbb89dca --- /dev/null +++ "b/docs/5.0/docs/developer-guide/system-design/03-\350\256\241\350\264\271\347\263\273\347\273\237.md" @@ -0,0 +1 @@ +# 计费系统 \ No newline at end of file diff --git "a/docs/5.0/docs/developer-guide/system-design/04-\347\233\221\346\216\247\344\270\216\345\221\212\350\255\246\347\263\273\347\273\237.md" "b/docs/5.0/docs/developer-guide/system-design/04-\347\233\221\346\216\247\344\270\216\345\221\212\350\255\246\347\263\273\347\273\237.md" new file mode 100644 index 00000000000..60e2944f378 --- /dev/null +++ "b/docs/5.0/docs/developer-guide/system-design/04-\347\233\221\346\216\247\344\270\216\345\221\212\350\255\246\347\263\273\347\273\237.md" @@ -0,0 +1 @@ +# 监控与告警系统 \ No newline at end of file diff --git "a/docs/5.0/docs/developer-guide/system-design/05-\347\263\273\347\273\237\345\272\224\347\224\250.md" "b/docs/5.0/docs/developer-guide/system-design/05-\347\263\273\347\273\237\345\272\224\347\224\250.md" new file mode 100644 index 00000000000..7e759f9f446 --- /dev/null +++ "b/docs/5.0/docs/developer-guide/system-design/05-\347\263\273\347\273\237\345\272\224\347\224\250.md" @@ -0,0 +1 @@ +# 系统应用 \ No newline at end of file diff --git a/docs/5.0/docs/developer-guide/system-design/images/application_dark.png b/docs/5.0/docs/developer-guide/system-design/images/application_dark.png new file mode 100644 index 00000000000..403e9223d16 Binary files /dev/null and b/docs/5.0/docs/developer-guide/system-design/images/application_dark.png differ diff --git a/docs/5.0/docs/developer-guide/system-design/images/application_light.png b/docs/5.0/docs/developer-guide/system-design/images/application_light.png new file mode 100644 index 00000000000..500f67bbe58 Binary files /dev/null and b/docs/5.0/docs/developer-guide/system-design/images/application_light.png differ diff --git a/docs/5.0/docs/developer-guide/system-design/images/architecture_dark.png b/docs/5.0/docs/developer-guide/system-design/images/architecture_dark.png new file mode 100644 index 00000000000..6d14555ef4d Binary files /dev/null and b/docs/5.0/docs/developer-guide/system-design/images/architecture_dark.png differ diff --git a/docs/5.0/docs/developer-guide/system-design/images/architecture_light.png b/docs/5.0/docs/developer-guide/system-design/images/architecture_light.png new file mode 100644 index 00000000000..17bf8cf5d6a Binary files /dev/null and b/docs/5.0/docs/developer-guide/system-design/images/architecture_light.png differ diff --git a/docs/5.0/docs/images/overview-1.png b/docs/5.0/docs/images/overview-1.png new file mode 100644 index 00000000000..2e468cd5051 Binary files /dev/null and b/docs/5.0/docs/images/overview-1.png differ diff --git a/docs/5.0/docs/quick-start/images/quick-start-1.png b/docs/5.0/docs/quick-start/images/quick-start-1.png new file mode 100644 index 00000000000..9863b9bb7d6 Binary files /dev/null and b/docs/5.0/docs/quick-start/images/quick-start-1.png differ diff --git a/docs/5.0/docs/quick-start/images/quick-start-2.png b/docs/5.0/docs/quick-start/images/quick-start-2.png new file mode 100644 index 00000000000..4dd6e1490fb Binary files /dev/null and b/docs/5.0/docs/quick-start/images/quick-start-2.png differ diff --git a/docs/5.0/docs/quick-start/images/quick-start-3.png b/docs/5.0/docs/quick-start/images/quick-start-3.png new file mode 100644 index 00000000000..cbf55f2b51f Binary files /dev/null and b/docs/5.0/docs/quick-start/images/quick-start-3.png differ diff --git a/docs/5.0/docs/quick-start/images/quick-start-4.png b/docs/5.0/docs/quick-start/images/quick-start-4.png new file mode 100644 index 00000000000..b9df7d944ef Binary files /dev/null and b/docs/5.0/docs/quick-start/images/quick-start-4.png differ diff --git a/docs/5.0/docs/quick-start/images/quick-start-5.png b/docs/5.0/docs/quick-start/images/quick-start-5.png new file mode 100644 index 00000000000..5bcf3889fce Binary files /dev/null and b/docs/5.0/docs/quick-start/images/quick-start-5.png differ diff --git a/docs/5.0/docs/quick-start/images/quick-start-6.png b/docs/5.0/docs/quick-start/images/quick-start-6.png new file mode 100644 index 00000000000..7ba71e49514 Binary files /dev/null and b/docs/5.0/docs/quick-start/images/quick-start-6.png differ diff --git a/docs/5.0/docs/quick-start/quick-start.md b/docs/5.0/docs/quick-start/quick-start.md new file mode 100644 index 00000000000..5171679f357 --- /dev/null +++ b/docs/5.0/docs/quick-start/quick-start.md @@ -0,0 +1,32 @@ +# 部署的第一个应用 + +flarum是一款简洁优雅,功能强大的论坛软件。 + +本文以flarum为例,介绍如何使用Sealos来部署应用。 + +首先进入到Sealos公有云网站,登陆之后会看到如下图所示的桌面环境: + +![](./images/quick-start-1.png) + +点击应用商店app,就可以看到如下图所示的应用列表: + +![](./images/quick-start-2.png) + +在右上角搜索flarum,搜索完成之后点击进入,可以看到如下图所示的完整应用信息: + +![](./images/quick-start-3.png) + +点击部署应用,无需任何配置,略作等待之后就可以部署成功。 + +之后进入应用管理就可以看到自己刚刚部署的应用了。 + +![](./images/quick-start-4.png) + +点击详情可以查看每个应用的详细部署信息,包括实例数,CPU,存储,网络等等。 + +![](./images/quick-start-5.png) + +直接点击系统分类的公网链接地址就可以进行访问了。 + +![](./images/quick-start-6.png) + diff --git "a/docs/5.0/docs/resources/01-\346\233\264\346\226\260\346\227\245\345\277\227.md" "b/docs/5.0/docs/resources/01-\346\233\264\346\226\260\346\227\245\345\277\227.md" new file mode 100644 index 00000000000..1c7654defbd --- /dev/null +++ "b/docs/5.0/docs/resources/01-\346\233\264\346\226\260\346\227\245\345\277\227.md" @@ -0,0 +1,11 @@ +# 社区 + +Sealos 是一个由用户和贡献者参与推动的开源项目,如果您对产品使用存在疑问和建议,可尝试以下方式寻求支持。我们的团队与社区会竭尽所能为您提供帮助。 + ++ 📱 扫码加入社区微信交流群👇 + + ![](https://oss.laf.run/htr4n1-images/sealos-qr-code.jpg) + ++ 💬 加入我们的 [Discord 服务器](https://discord.gg/qzBmGGZGk7),与 Sealos 开发者和终端用户进行交流。 ++ 🐦 在 [Twitter](https://twitter.com/sealosio) 上关注我们。 ++ 🐞 请将任何 Sealos 的 Bug、问题和需求提交到 [GitHub Issue](https://github.com/labring/sealos/issues/new/choose)。 \ No newline at end of file diff --git "a/docs/5.0/docs/resources/02-\346\224\257\346\214\201/01-\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/docs/5.0/docs/resources/02-\346\224\257\346\214\201/01-\345\270\270\350\247\201\351\227\256\351\242\230.md" new file mode 100644 index 00000000000..e69de29bb2d diff --git "a/docs/5.0/docs/resources/02-\346\224\257\346\214\201/02-\350\201\224\347\263\273\346\210\221\344\273\254.md" "b/docs/5.0/docs/resources/02-\346\224\257\346\214\201/02-\350\201\224\347\263\273\346\210\221\344\273\254.md" new file mode 100644 index 00000000000..ee13e8d7873 --- /dev/null +++ "b/docs/5.0/docs/resources/02-\346\224\257\346\214\201/02-\350\201\224\347\263\273\346\210\221\344\273\254.md" @@ -0,0 +1,13 @@ +# 联系我们 + +# 社区 + +Sealos 是一个由用户和贡献者参与推动的开源项目,如果您对产品使用存在疑问和建议,可尝试以下方式寻求支持。我们的团队与社区会竭尽所能为您提供帮助。 + ++ 📱 扫码加入社区微信交流群👇 + + ![](https://oss.laf.run/htr4n1-images/sealos-qr-code.jpg) + ++ 💬 加入我们的 [Discord 服务器](https://discord.gg/qzBmGGZGk7),与 Sealos 开发者和终端用户进行交流。 ++ 🐦 在 [Twitter](https://twitter.com/sealosio) 上关注我们。 ++ 🐞 请将任何 Sealos 的 Bug、问题和需求提交到 [GitHub Issue](https://github.com/labring/sealos/issues/new/choose)。 \ No newline at end of file diff --git "a/docs/5.0/docs/resources/03-\351\232\220\347\247\201\344\270\216\346\234\215\345\212\241\346\224\277\347\255\226/01-privacy-policy.md" "b/docs/5.0/docs/resources/03-\351\232\220\347\247\201\344\270\216\346\234\215\345\212\241\346\224\277\347\255\226/01-privacy-policy.md" new file mode 100644 index 00000000000..2cb3d8d9540 --- /dev/null +++ "b/docs/5.0/docs/resources/03-\351\232\220\347\247\201\344\270\216\346\234\215\345\212\241\346\224\277\347\255\226/01-privacy-policy.md" @@ -0,0 +1,58 @@ +# Sealos 云服务隐私政策 + +我们非常重视您的隐私保护,在您使用本服务时,我们将按照以下政策收集、使用、披露和保护您的个人信息。请您仔细阅读并充分理解本隐私政策。 + +**信息收集** + +1. 在您注册或使用本服务时,我们可能收集您的姓名、电话号码、电子邮件地址、地址等个人信息。 +2. 在您使用本服务过程中产生的信息,如操作日志、访问IP地址、设备型号等。 +3. 我们可能会通过 Cookies 或其他技术收集和存储您访问本服务的相关信息,以便为您提供更好的用户体验。 + +**信息使用** + +1. 我们会根据法律法规规定以及与用户之间的约定来处理用户的个人信息。 +2. 我们可能会将收集到的信息用于改进服务质量、开发新产品或功能等目的。 +3. 我们可能会将收集到的信息用于向您推送与本服务相关的通知或广告。 + +**信息披露** + +1. 我们不会向任何第三方披露您的个人信息,除非: + + 1. 您事先同意; + + 2. 法律法规要求; + + 3. 为维护我们或其他用户的合法权益。 + +2. 我们可能与关联公司、合作伙伴分享您的个人信息,但我们会采取相应的保密措施,确保信息安全。 + +**信息保护** + +1. 我们采取各种安全措施,包括加密、访问控制等技术手段,以保护您的个人信息免受未经授权的访问、使用或泄露。 +2. 我们会定期对收集、存储和处理的个人信息进行安全评估,以确保个人信息安全。 +3. 在发生个人信息泄露等安全事件时,我们会立即启动应急预案,并在法律法规规定的范围内向您及时告知。 + +**用户权利** + +1. 您有权随时查阅、更正或删除您的个人信息。 +2. 您有权拒绝我们收集您的个人信息,但这可能导致您无法使用本服务的部分功能。 +3. 您有权要求我们停止处理您的个人信息,但这可能导致您无法继续使用本服务。 + +**隐私政策更新** + +1. 我们可能会对本隐私政策进行修改。如本隐私政策发生变更,我们将在本服务页面上发布修改后的隐私政策。如您继续使用本服务,则视为同意修改后的隐私政策。 +2. 我们鼓励您定期查阅本隐私政策,以了解我们如何保护您的个人信息。 + +**未成年人保护** + +我们非常重视对未成年人个人信息的保护,如您为未成年人,请在监护人指导下使用本服务,并请监护人帮助您在使用本服务过程中正确处理个人信息。 + +**跨境数据传输** + +由于我们的服务器可能位于不同国家或地区,您同意我们可能需要将您的个人信息传输至其他国家或地区,并在该等国家或地区存储和处理以向您提供服务。我们会采取适当措施确保跨境传输的数据仍然受到适当保护。 + +**联系我们** + +1. 如您对本隐私政策有任何疑问、建议或投诉,请通过以下方式与我们联系(微信): + [fangnux] +2. 我们将尽快回复并解决您提出的问题。 \ No newline at end of file diff --git "a/docs/5.0/docs/resources/03-\351\232\220\347\247\201\344\270\216\346\234\215\345\212\241\346\224\277\347\255\226/02-terms-of-service.md" "b/docs/5.0/docs/resources/03-\351\232\220\347\247\201\344\270\216\346\234\215\345\212\241\346\224\277\347\255\226/02-terms-of-service.md" new file mode 100644 index 00000000000..d3970c9ea33 --- /dev/null +++ "b/docs/5.0/docs/resources/03-\351\232\220\347\247\201\344\270\216\346\234\215\345\212\241\346\224\277\347\255\226/02-terms-of-service.md" @@ -0,0 +1,64 @@ +# Sealos 云服务服务协议 + +Sealos 云服务服务协议是您与珠海环界云计算有限公司(以下简称“我们”或“本公司”)之间就云服务(以下简称“本服务”)的使用等相关事项所订立的协议。请您仔细阅读并充分理解本协议各条款,特别是免除或者限制我们责任的条款、对您权益的限制条款、争议解决和法律适用条款等。如您不同意本协议任一内容,请勿注册或使用本服务。 + +**第1条 服务内容** + +1. 我们将向您提供存储、计算、网络传输等基于互联网的信息技术服务。 +2. 我们将为您提供相关技术支持和客户服务,帮助您更好地使用本服务。 +3. 您同意我们有权自行决定变更、中断、终止或暂停本服务的全部或部分功能,且无需对您承担任何责任。 + +**第2条 用户注册与账户管理** + +1. 您在使用本服务前需要注册一个账户。您保证在注册时提供的信息真实、准确、完整,并及时更新。 +2. 您应妥善保管账户名和密码,对由此产生的全部行为负责。如发现他人使用您的账户,应立即通知我们。 +3. 我们有权对您的账户进行审查,如发现您的账户存在异常情况,我们有权暂停或终止向您提供服务。 + +**第3条 使用规则** + +1. 您不得利用本服务从事任何违法活动或侵犯他人合法权益的行为,包括但不限于侵犯知识产权、泄露他人商业机密等。 +2. 您不得通过任何手段恶意注册账户,包括但不限于以牟利、炒作、套现等目的。 +3. 您不得利用本服务传播任何违法、有害、恶意软件等信息。 +4. 您应遵守相关法律法规及本协议的规定,对在本服务中发布的信息及使用本服务所产生的结果承担全部责任。 + +**第4条 费用及支付** + +1. 您同意支付与本服务相关的费用,具体费用标准以我们公布的价格为准。 +2. 我们可能会根据市场情况调整费用标准,并提前通知您。您如继续使用本服务,则视为同意调整后的费用标准。 +3. 如您未按时支付费用,我们有权暂停或终止向您提供本服务,并保留追讨欠款及要求赔偿的权利。 + +**第5条 服务免责与责任限制** + +1. 本服务按照现有技术和条件所能达到的水平提供。我们不能保证本服务无故障、安全完全可靠或满足您的所有需求。 +2. 如因不可抗力导致本服务发生故障或无法正常使用,我们不承担责任。 +3. 对于因您自身原因导致的数据丢失、损坏等情况,我们不承担责任。 + +**第6条 隐私政策** + +您同意接受并遵守我们制定的隐私政策。隐私政策为本协议的一部分,具体内容请参见下文“隐私政策”。 + +**第7条 知识产权** + +1. 我们对本服务及相关软件、技术、文档等拥有全部知识产权,除非经我们明确许可,您不得进行复制、分发、出租、反向工程等行为。 +2. 您在使用本服务过程中产生的数据和内容(包括但不限于文件、图片等)之知识产权归您所有,但为了向您提供服务,您同意授权我们在必要范围内对其进行存储、备份等操作。 + +**第8条 协议终止** + +1. 如您违反本协议规定,我们有权立即终止向您提供服务,并保留追究法律责任的权利。 +2. 如您决定停止使用本服务,可以申请注销账户,本协议自账户注销之日起终止。 + +**第9条 争议解决和法律适用** + +1. 本协议的签订、履行、解释和争议解决均适用中华人民共和国法律。 +2. 若您与我们发生争议,应先友好协商解决;协商不成的,任何一方均有权将争议提交至有管辖权的人民法院诉讼解决。 + +**第10条 网络安全** + +1. 如果利用平台服务提供违反国家法律的服务,您需要自行承担后果。 +2. 您对外提供的服务需要做好监管职责,如有用户在您的服务上从事违反国家法律的行为,您需自行承担后果。 +3. 我们如果发现您存在违法行为,将会对相关部门发起诉讼,并为有关部门提供证据。 + +**第11条 其他条款** + +1. 如本协议中部分条款因违反法律法规而被视为无效,不影响其他条款的效力。 +2. 本公司保留对本协议及隐私政策的最终解释权。如您对本协议或隐私政策有任何疑问,请联系我们。 \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/application/a-overview/a-overview.md b/docs/5.0/docs/user-doc/application/a-overview/a-overview.md new file mode 100644 index 00000000000..a1de9ab321c --- /dev/null +++ b/docs/5.0/docs/user-doc/application/a-overview/a-overview.md @@ -0,0 +1,7 @@ +# 概述 + +Sealos 的桌面环境类似于单机操作系统 macOS 或 Windows 的桌面环境,桌面上的每个图标都是一个 App,类似于 Windows 的快捷方式。同时,与单机操作系统一样,Sealos 也有一些系统自带的 App。 + +Sealos提供了两个App来帮助您管理应用,分别是**应用商店**和**应用管理**。 + +使用应用商店您可以一件部署我们所提供的应用,而应用管理可以让您更加精细的控制任何您想使用的应用。 \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/application/b-app-store/b-app-store.md b/docs/5.0/docs/user-doc/application/b-app-store/b-app-store.md new file mode 100644 index 00000000000..95832b038d8 --- /dev/null +++ b/docs/5.0/docs/user-doc/application/b-app-store/b-app-store.md @@ -0,0 +1,17 @@ +# 应用商店 + +应用商店提供了一系列预制的应用模板,这些应用模板可用于快速创建和部署网站和各种应用程序。 + +你可以在模板市场中找到各种类型的模板,比如博客、AI 应用、低代码应用、网盘、IM 应用、中间件等等。 + +这些模板旨在简化开发过程,使开发者能够快速启动和部署项目,而无需从零开始构建整个网站,也无需关心应用之间的各种依赖关系。 + +与 Vercel 的模板市场相比,Sealos 的应用商店在应用范围和功能上有所不同。Vercel 主要专注于前端项目的部署,它的模板主要是为了支持网站的界面和用户交互部分,但它不支持数据的持久化存储,所有的数据都是临时的,一旦应用重启,数据就会丢失。 + +Sealos 应用商店中的模版不仅支持前端项目,还支持后端和其他各类应用的部署。 + +更重要的是,Sealos 支持挂载持久化存储,这对于需要存储大量数据或者保持数据持久化的应用来说至关重要。例如,对于电商网站、大型社交媒体应用或企业级应用来说,数据的持久化是必不可少的功能。 + +## 快速开始 + +我们已经在Sealos的快速开始中(此处应有链接)使用应用商店新建了一个flarum应用,只需要使用同样的方式部署其他应用即可。 \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/01-quick-start.md b/docs/5.0/docs/user-doc/application/c-app-launchpad/01-quick-start.md new file mode 100644 index 00000000000..46c3c765483 --- /dev/null +++ b/docs/5.0/docs/user-doc/application/c-app-launchpad/01-quick-start.md @@ -0,0 +1,29 @@ +--- +sidebar_position: 1 +--- + +# 快速开始 + +下面将演示如何在 Sealos 云操作系统中,使用应用管理快速安装一些比较常见的应用。 + +## 快速安装 Nginx + +首先在Sealos桌面环境中打开应用管理。 + +在打开后的页面中,可以查看自己已经部署的各种应用的具体情况。 + +![](./images/quick-start-1.png) + +点击右上角新建应用,进入新建应用界面。 + +![](./images/quick-start-2.png) + +在这个页面中可以配置应用启动的各种信息。 + +部署完成后点击「详情」进入应用详情界面。 + +![](./images/quick-start-3.png) + +可以看到 Nginx 应用的运行情况,包括 CPU 占用、内存占用等。如果配置了外网访问的话,点击外网地址即可通过外网域名直接打开 Nginx 界面。 + +![](./images/quick-start-4.png) diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/02-update-app.md b/docs/5.0/docs/user-doc/application/c-app-launchpad/02-update-app.md new file mode 100644 index 00000000000..720df981442 --- /dev/null +++ b/docs/5.0/docs/user-doc/application/c-app-launchpad/02-update-app.md @@ -0,0 +1,11 @@ +--- +sidebar_position: 2 +--- + +# 更新应用 + +Sealos部署完应用后,可以随时修改应用配置。 + +只需要在应用详情页面点击右上角的「变更」按钮,然后就可以修改配置了。修改完成之后点击右上角的「变更」即可。 + +![](./images/quick-start-3.png) \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/03-add-domain.md b/docs/5.0/docs/user-doc/application/c-app-launchpad/03-add-domain.md new file mode 100644 index 00000000000..bb5b710dc83 --- /dev/null +++ b/docs/5.0/docs/user-doc/application/c-app-launchpad/03-add-domain.md @@ -0,0 +1,79 @@ +--- +sidebar_position: 3 +--- + +# 自定义域名 + +想让您的用户能够享受与您的品牌一致的专属体验?只需要在应用启动的时候为你的项目指定一个自定义域名。 + +自定义域名有两种情况,分别是部署时接入和部署完成后接入。 + +## 部署时接入 + +如果您在部署应用时接入自定义域名,只需要在部署应用时打开「外网访问」,Sealos 会给您的应用自动分配一个外网域名。 + +![](./images/app-launchpad-domain.png) + +然后需要到您的域名服务商处,添加该域名的 `CNAME` 解析到上面分配的外网域名。以阿里云为例: + +![](./images/aliyun-cname.png) + +等待解析生效后即可回到 Sealos 中绑定自定义域名,直接点击右侧的「自定义域名」: + +![](./images/app-launchpad-domain2.png) + +在弹出的界面中输入您的自定义域名,然后点击确认即可。 + +![](./images/app-launchpad-domain3.png) + +最终点击右上角的「部署」开始部署应用,部署完成后点击外网地址即可通过自定义域名访问应用。 + +### 设置自定义域名证书 + +在「应用管理」中成功设置自定义域名,但是无法访问域名并显示证书不安全。 这是因为 cert-manager 没有成功签发证书。为了解决这个问题,我们可以手动设置证书。 + +首先,确认在云厂商中成功设置 CNAME,并且下载域名对应的证书。 + +打开「应用管理」,设置自定义域名。 + + + +打开「终端」,依次执行以下命令。 + +```bash +# 用证书文件信息创建 tls.crt(使用证书文件信息替换掉 xxxx) +cat > tls.crt < tls.key < 注意:在弹性伸缩的上下文中,提到的“使用率”通常是指应用实例的平均使用率。例如,如果一个应用有两个实例,那么其 CPU 平均使用率将是这两个实例的 CPU 使用率的平均值。 + +弹性伸缩的工作原理: + +1. **监控**:持续监控应用的关键性能指标,如 CPU 使用率或内存使用量。 +2. **决策**:根据设定的目标(例如 CPU 使用率不超过 50%),系统会计算出为了达到这一目标所需增加或减少的应用实例数量。 +3. **调整**:基于计算结果,弹性伸缩会自动指示 Sealos 的控制器增加或减少应用实例的数量,以保持资源使用率在预定目标范围内。 + +假设我们为一个应用设置了如下规则:CPU 使用率不得超过 50%,实例数量可在 1 至 5 之间变动。在这种设定下,弹性伸缩将会: + +- 当应用的平均 CPU 使用率超过 50% 时,系统会增加实例数量,最多增至 5 个。 +- 当应用的平均 CPU 使用率低于 50% 时,系统会减少实例数量,但至少保持 1 个实例运行。 + +![](./images/autoscale.png) \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/07-configmap.md b/docs/5.0/docs/user-doc/application/c-app-launchpad/07-configmap.md new file mode 100644 index 00000000000..721023d469f --- /dev/null +++ b/docs/5.0/docs/user-doc/application/c-app-launchpad/07-configmap.md @@ -0,0 +1,17 @@ +--- +sidebar_position: 6 +--- + +# 配置文件 + +在Sealos应用程序中,配置文件的使用非常重要,尤其是当应用程序需要处理大量或复杂的配置信息时。与环境变量相比,配置文件可以提供一种更灵活、更可靠的配置管理方式。环境变量更适合用于传递少量、简单的配置数据。 + +配置文件的主要优势在于其能够存储和管理复杂的配置数据,这些配置数据可以包含配置文件、命令行参数、环境变量等信息。这些数据可以在应用容器启动时注入到容器中,从而允许你对应用程序的行为进行调整,而无需重新构建镜像。 + +下面以 Nginx 容器为例,说明如何使用配置文件来调整应用的行为: + +- **文件名**: 对应 Nginx 容器里的文件,可以参考镜像提供者给出的说明。 +- **文件值**: 文件对应的内容。如果内容过于复杂,建议在本地编辑完成后,再复制粘贴到相应位置。 +- **注意事项**:配置文件是挂载单个文件,而不是挂载目录。你需要明确指定要挂载的具体文件,而非仅仅指定一个目录路径。 + +![](./images/applaunchpad13.png) \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/08-persistent-volume.md b/docs/5.0/docs/user-doc/application/c-app-launchpad/08-persistent-volume.md new file mode 100644 index 00000000000..d30f6516d42 --- /dev/null +++ b/docs/5.0/docs/user-doc/application/c-app-launchpad/08-persistent-volume.md @@ -0,0 +1,13 @@ +--- +sidebar_position: 7 +--- + +# 持久化存储 + +在 Sealo 中,容器可以轻松地被创建和销毁。虽然这为部署和管理应用带来了灵活性,但它也带来了数据持久性的挑战。如果应用在容器内部存储数据,那么当容器被销毁时,所有存储在容器内的数据也会丢失。 + +持久化存储可以确保数据存储在容器外部,即使在容器重启或重新部署的情况下也能保证数据不会丢失。**如果你的应用需要保留数据(例如数据库、文件存储系统或任何存储用户数据的服务),一定要使用持久化存储!** + +假设你要部署一个 Nextcloud,Nextcloud 容器的所有数据都存储在 `/var/www/html` 这个目录下,因此我们需要将该目录下的数据通过外挂存储进行持久化。 + +![](./images/persistent-volume.png) \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/09-how-to-deploy-the-application-to-desktop.md b/docs/5.0/docs/user-doc/application/c-app-launchpad/09-how-to-deploy-the-application-to-desktop.md new file mode 100644 index 00000000000..b0cb9bd9bf8 --- /dev/null +++ b/docs/5.0/docs/user-doc/application/c-app-launchpad/09-how-to-deploy-the-application-to-desktop.md @@ -0,0 +1,39 @@ +# 部署到桌面 + +## 使用 Terminal 编写 app.yaml + +### 关键信息 + +- type: iframe,标识为一个 web 应用 +- spec name 为桌面显示的名称 +- url 应用地址 +- icon 是在 desktop 上显示的图标 + +```yaml +apiVersion: app.sealos.io/v1 +kind: App +metadata: + name: app-sample +spec: + name: Image Hub Demo + icon: + type: iframe + data: + url: https://hub.sealos.io/ + desc: + icon: https://cloud.sealos.io/logo.svg + menuData: + displayType: normal +``` + +![appyaml.png](./images/app-yaml.png) + +### apply yaml + +``` +kubectl apply -f app.yaml +``` + +![apply](./images/app-apply-command.png) + +### 刷新浏览器,桌面即可看到 App diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/c-app-launchpad.md b/docs/5.0/docs/user-doc/application/c-app-launchpad/c-app-launchpad.md new file mode 100644 index 00000000000..582694e199b --- /dev/null +++ b/docs/5.0/docs/user-doc/application/c-app-launchpad/c-app-launchpad.md @@ -0,0 +1,59 @@ +# 应用管理 + +**应用管理** 是 Sealos 内置的单镜像部署工具,主要用于简化和加速应用程序的部署过程,可以帮助您在 5 分钟内完成应用的部署和上线。 + +目前「应用管理」具备以下功能: + +- 支持使用私有镜像部署应用; +- 支持根据应用需求,自定义所需的 CPU 和内存资源; +- 支持多副本; +- 弹性伸缩 (HPA); +- 提供外网访问地址,便于公网访问; +- 允许用户为应用配置自定义域名,提高品牌识别度和用户体验; +- ConfigMap 配置文件; +- 应用数据的持久化存储,保障数据的安全性和持续性; +- 提供应用和 Pod 的实时监控,帮助用户及时发现并解决问题; +- 记录和管理应用日志,便于问题追踪和性能分析; +- 分析系统事件(Events),提供关键信息帮助优化应用性能; +- 一键进入容器终端,方便管理和调试; +- 支持将应用的多个端口暴露到外网。 + +## [快速开始](/quick-start/use-app-launchpad.md) + +快速安装一些比较常见的应用。 + +## [更新应用](/guides/applaunchpad/update-app.md) + +应用部署完成后修改应用配置。 + +## [自定义域名](/guides/applaunchpad/add-domain.md) + +为应用接入自定义域名。 + +## [暴露多端口](/guides/applaunchpad/expose-multi-ports.md) + +将应用的多个端口暴露到外网中。 + +## [环境变量](/guides/applaunchpad/environment.md) + +通过环境变量为应用提供配置信息。 + +## [配置文件](/guides/applaunchpad/configmap.md) + +通过配置文件为应用提供配置信息。 + +## [弹性伸缩](/guides/applaunchpad/autoscale.md) + +通过弹性伸缩来根据负载自动调整应用的实例数量。 + +## [持久化存储](/guides/applaunchpad/persistent-volume.md) + +使用持久化存储来保障数据的持久化。 + +## [部署到桌面](/guides/applaunchpad/persistent-volume.md) + +如何把自定义应用部署到sealos的桌面 + +## [更多案例](/guides/applaunchpad/persistent-volume.md) + +更多使用应用管理部署应用的案例 \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/11.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/11.png new file mode 100644 index 00000000000..a4ba0152400 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/11.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/aliyun-cname.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/aliyun-cname.png new file mode 100644 index 00000000000..54651df5931 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/aliyun-cname.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-apply-command.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-apply-command.png new file mode 100644 index 00000000000..f8a5fe3e636 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-apply-command.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-launchpad-domain.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-launchpad-domain.png new file mode 100644 index 00000000000..9e88bb76dc3 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-launchpad-domain.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-launchpad-domain2.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-launchpad-domain2.png new file mode 100644 index 00000000000..b5a9dd12dc4 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-launchpad-domain2.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-launchpad-domain3.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-launchpad-domain3.png new file mode 100644 index 00000000000..5eb0377da0e Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-launchpad-domain3.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-yaml.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-yaml.png new file mode 100644 index 00000000000..e9ae045a513 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/app-yaml.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad1.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad1.png new file mode 100644 index 00000000000..0e2d87f9612 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad1.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad10.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad10.png new file mode 100644 index 00000000000..37bbf7ab57d Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad10.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad11.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad11.png new file mode 100644 index 00000000000..ceeb631f312 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad11.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad13.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad13.png new file mode 100644 index 00000000000..9317aa9f5c5 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad13.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad14.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad14.png new file mode 100644 index 00000000000..a7551be2882 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad14.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad2.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad2.png new file mode 100644 index 00000000000..01639505990 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad2.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad3.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad3.png new file mode 100644 index 00000000000..fd28e1f9fb6 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad3.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad4.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad4.png new file mode 100644 index 00000000000..82b4603f4ca Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad4.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad5.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad5.png new file mode 100644 index 00000000000..c4f8f7c33d9 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad5.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad6.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad6.png new file mode 100644 index 00000000000..6019b61ca10 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad6.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad7.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad7.png new file mode 100644 index 00000000000..73fcdcc39cf Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad7.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad8.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad8.png new file mode 100644 index 00000000000..227d5f1b8cf Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad8.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad9.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad9.png new file mode 100644 index 00000000000..77eb0919f86 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/applaunchpad9.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/autoscale.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/autoscale.png new file mode 100644 index 00000000000..e8b4907448f Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/autoscale.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/environment-1.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/environment-1.png new file mode 100644 index 00000000000..78a5f3f2e72 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/environment-1.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/environment-2.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/environment-2.png new file mode 100644 index 00000000000..a0189b569ab Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/environment-2.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/multi-ports1.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/multi-ports1.png new file mode 100644 index 00000000000..ab08b16299b Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/multi-ports1.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/persistent-volume.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/persistent-volume.png new file mode 100644 index 00000000000..b904addd338 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/persistent-volume.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/quick-start-1.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/quick-start-1.png new file mode 100644 index 00000000000..fd1d00f6c3e Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/quick-start-1.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/quick-start-2.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/quick-start-2.png new file mode 100644 index 00000000000..6f3b2db14e7 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/quick-start-2.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/quick-start-3.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/quick-start-3.png new file mode 100644 index 00000000000..5e6739fe642 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/quick-start-3.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/quick-start-4.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/quick-start-4.png new file mode 100644 index 00000000000..22bf8f559e8 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/quick-start-4.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/set-cert1.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/set-cert1.png new file mode 100644 index 00000000000..373e56b2bee Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/set-cert1.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/set-cert2.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/set-cert2.png new file mode 100644 index 00000000000..b7ea59eed18 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/set-cert2.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/set-cert3.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/set-cert3.png new file mode 100644 index 00000000000..0fddf457489 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/set-cert3.png differ diff --git a/docs/5.0/docs/user-doc/application/c-app-launchpad/images/set-cert4.png b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/set-cert4.png new file mode 100644 index 00000000000..aa4fc627bc1 Binary files /dev/null and b/docs/5.0/docs/user-doc/application/c-app-launchpad/images/set-cert4.png differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Go Apps.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Go Apps.md" new file mode 100644 index 00000000000..6d6a4f1adb0 --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Go Apps.md" @@ -0,0 +1,151 @@ +# 快速安装 Go 程序 + +首先,确保你已经安装了以下工具: + +- Docker + +## 步骤1:编写你的 Go 程序 + +```go +package main + +import ( + "fmt" + "net/http" +) + +func main() { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello,Wolrd!") + }) + + http.ListenAndServe(":8080", nil) +} +``` + +## 步骤2:创建Docker镜像 + +- 在与`main.go`相同的目录中,创建一个名为`Dockerfile`的文件,包含以下内容: + +``` +FROM golang:1.17 as builder + +WORKDIR /app +COPY . . + +RUN go mod init myapp +RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . + +FROM alpine:latest +RUN apk --no-cache add ca-certificates +WORKDIR /app +COPY --from=builder /app/main /app/ + +EXPOSE 8080 +ENTRYPOINT ["/app/main"] +``` + +这个`Dockerfile`定义了一个多阶段构建过程。在第一阶段,我们使用官方的`golang`镜像作为基础镜像,然后编译Go应用程序。在第二阶段,我们使用轻量级的`alpine`镜像,将编译好的二进制文件复制到`/app`目录,并将8080端口暴露。 + +- 在`Dockerfile`所在的目录运行以下命令,为Go应用程序构建Docker镜像: + +``` +docker build -t your_image_name . +``` + +将`your_image_name`替换为您的镜像名称和标签。 + + + +## 步骤3:推送Docker镜像 + +- 将创建的Docker镜像推送到Docker仓库,如Docker Hub或者私有仓库。**假设您已经登录到Docker仓库**,使用以下命令推送镜像 + + - 首先标记Docker镜像,在推送镜像之前,需要为其添加一个标签,以便 Docker 知道将其推送到哪个仓库。运行以下命令为镜像添加标签: + + ``` + docker tag your-image-name your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-image-name` 替换为你的本地镜像名称,`your-dockerhub-username` 替换为你的 Docker Hub 用户名,`your-repo-name` 替换为你在 Docker Hub 上要创建的仓库名称,`your-tag` 替换为你为镜像设置的标签(例如:latest)。 + + 例如: + + ``` + docker tag demo damager6666/demo:latest + ``` + + - 接下来推送Docker镜像,使用以下命令将镜像推送到 Docker Hub: + + ``` + docker push your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-dockerhub-username`、`your-repo-name` 和 `your-tag` 替换为实际的值。例如: + + ``` + docker push damager6666/demo:latest + ``` + +## 步骤4:登陆 Sealos + +- 进入 [Sealos](https://cloud.sealos.io/) 官网 + +![](images/java-example-0.png) + +## 步骤5:打开 「应用管理」 应用 + +![](images/java-example-3.png) + +## 步骤 6:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](images/java-example-4.png) + +## 步骤7:应用部署 + +- 基础配置: + + - 应用名称(自定义):go-demo + - 镜像名(**步骤5**中推送的镜像):damager6666/demo:latest + - CPU(推荐):1 Core + - 内存(推荐):1 G + +- 部署模式: + + - 实例数(自定义):1 + +![](images/java-example-5.png) + +- 网络配置: + + - 容器暴露端口:8080 + + - 外网访问:开启 + +![](images/java-example-6.png) + +## 步骤8:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](images/java-example-7.png) + +## 步骤9:访问应用 + +- 点击「应用管理」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](images/java-example-8.png) + +- 在浏览器上输入 + +``` +https://tmgkflgdlstl.cloud.sealos.io/hello +``` + +![](images/java-example-9.png) + +- 页面上显示 ”Hello,World! “ ,表示你的 Go 应用程序已经在 Sealos 上运行 + diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Java Apps.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Java Apps.md" new file mode 100644 index 00000000000..9a036f53487 --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Java Apps.md" @@ -0,0 +1,272 @@ +# 快速安装 Java 程序 + +首先,确保你已经安装了以下工具: + +- Docker +- Maven + +## 步骤1:编写你的 Java 程序 + +- 这里直接通过 [Spring Initializr](https://start.spring.io/) 生成生成一个基本的 Spring Boot 项目。 + +![](images/java-example-1.png) + +- 打开项目的 `pom.xml` 文件,在 `` 部分添加以下内容,以包含MySQL JDBC驱动: + + ``` + + mysql + mysql-connector-java + + ``` + +- 接下来,在 `src/main/resources` 目录下的 `application.properties` 文件中添加以下内容,以配置数据库连接: + + ``` + spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8 + spring.datasource.username=root + spring.datasource.password=your_password + spring.jpa.hibernate.ddl-auto=update + ``` + +## 步骤2:创建实体类和存储类 + +在项目中创建一个新的Java类,如 `Person.java`,用于表示数据库中的实体。添加以下内容: + +```java +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class Person { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String name; + + // Getters and setters + // ... +} +``` +- 然后创建一个存储库接口,如 `PersonRepository.java`: + + ```java + import org.springframework.data.jpa.repository.JpaRepository; + import org.springframework.stereotype.Repository; + + @Repository + public interface PersonRepository extends JpaRepository { + } + ``` + +## 步骤3:创建 Web 控制器 + +- 在项目的 `src/main/java` 目录下,创建一个简单的 Web 控制器。例如,创建一个名为 `PersonController.java` 的文件,并添加以下内容: + +```java +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +public class PersonController { + @Autowired + private PersonRepository personRepository; + + @GetMapping("/getPersons") + public String getAllPersons() { + List persons = personRepository.findAll(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < persons.size(); i++) { + sb.append("id: " + persons.get(i).getId() + " name: " + persons.get(i).getName() + "/n"); + } + System.out.println(sb.toString()); + return sb.toString(); + } + + @PostMapping(value = "/addPerson") + public Person addPerson(@RequestBody Person person) { + return personRepository.save(person); + } + +} +``` + +## 步骤4:构建应用程序 + +- 使用maven构建项目,运行以下命令 + + ``` + mvn clean install + ``` + + ​ ![](images/java-example-2.png) + +## 步骤5:创建Docker镜像 + +- 在 Java 项目的根目录下,创建一个名为 `Dockerfile` 的文件。这个文件将包含构建 Docker 镜像所需的指令。以下是一个简单的示例 Dockerfile: + + ``` + # 使用官方的 OpenJDK 镜像作为基础镜像 + FROM openjdk:8-jre-slim + + # 设置工作目录 + WORKDIR /app + + # 复制构建好的 JAR 文件到镜像中 + COPY target/demo-0.0.1-SNAPSHOT.jar /app/demo-0.0.1-SNAPSHOT.jar + + # 暴露应用程序的端口 + EXPOSE 8080 + + # 设置启动命令 + CMD ["java", "-jar", demo-0.0.1-SNAPSHOT.jar"] + ``` + +- 在项目根目录下,运行以下命令构建 Docker 镜像: + +``` +docker build -t java-demo . +``` + +## 步骤6:推送Docker镜像 + +- 将创建的Docker镜像推送到Docker仓库,如Docker Hub或者私有仓库。**假设您已经登录到Docker仓库**,使用以下命令推送镜像 + + - 首先标记Docker镜像,在推送镜像之前,需要为其添加一个标签,以便 Docker 知道将其推送到哪个仓库。运行以下命令为镜像添加标签: + + ``` + docker tag your-image-name your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-image-name` 替换为你的本地镜像名称,`your-dockerhub-username` 替换为你的 Docker Hub 用户名,`your-repo-name` 替换为你在 Docker Hub 上要创建的仓库名称,`your-tag` 替换为你为镜像设置的标签(例如:latest)。 + + 例如: + + ``` + docker tag java-demo damager6666/demo:v2 + ``` + + - 接下来推送Docker镜像,使用以下命令将镜像推送到 Docker Hub: + + ``` + docker push your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-dockerhub-username`、`your-repo-name` 和 `your-tag` 替换为实际的值。例如: + + ``` + docker push damager6666/java-demo:v2 + ``` + +## 步骤7:登陆 Sealos + +- 进入 [Sealos](https://cloud.sealos.io/) 官网 + +![](images/java-example-0.png) + +## 步骤8:打开 「数据库」 应用 + +![](images/java-example-10.png) + +## 步骤9:创建数据库 + +- 点击新建数据库 + +![](images/java-example-11.png) + +- 基础配置: + - 集群类型:mysql + - 集群名称 : demo-db + - CPU(推荐):1 Core + - 内存(推荐):1 G + - 实例数:1 + - 存储容量: 1 Gi +- 点击 部署集群 + +## 步骤10:配置数据库 + +![](images/java-example-12.png) + +- 点击一键连接到数据库执行以下语句: + + - 创建 test_db 数据库 + + ```sql + create database test_db; + ``` + + - 创建 test 表 + + ```sql + CREATE TABLE `name_info` ( + `id` int(11) NOT NULL, + `name` varchar(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) + ); + ``` + + - 插入数据 + + ```sql + insert into test values (1,'Sealos'); + ``` + +## 步骤11:打开 「应用管理」 应用 + +![](images/java-example-3.png) + +## 步骤 12:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](images/java-example-4.png) + +## 步骤13:应用部署 + +- 基础配置: + + - 应用名称(自定义):java-demo + - 镜像名:damager6666/java-demo:v2 + - CPU(推荐):1 Core + - 内存(推荐):1 G + +- 部署模式: + + - 实例数(自定义):1 + +![](images/java-example-5.png) + +- 网络配置: + + - 容器暴露端口:8080 + + - 外网访问:开启 + +![](images/java-example-6.png) + +## 步骤14:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](images/java-example-7.png) + +## 步骤15:访问应用 + +- 点击「应用管理」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](images/java-example-8.png) + +- 在浏览器上输入 + +``` +https://tmgkflgdlstl.cloud.sealos.io/getPersons +``` + +![](images/java-example-13.png) + +- 页面上显示之间插入到数据库的数据 ,表示你的 Java 应用程序已经在 Sealos 上运行 \ No newline at end of file diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Node.js Apps.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Node.js Apps.md" new file mode 100644 index 00000000000..410c2a5ba93 --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Node.js Apps.md" @@ -0,0 +1,227 @@ +# 快速安装 Node.js 程序 + +首先,确保你已经安装了以下工具: + +- Docker + +## 步骤1:编写你的 Node.js 程序 + +- 在目录下创建一个名为 `app.js` 的文件,并添加以下代码: + + ```js + const express = require('express'); + const mysql = require('mysql'); + const app = express(); + + const db = mysql.createConnection({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, + }); + + db.connect((err) => { + if (err) throw err; + console.log('Connected to the database.'); + }); + + app.get('/', (req, res) => { + db.query('SELECT id, name FROM users', (err, results) => { + if (err) throw err; + res.send(JSON.stringify(results)); + }); + }); + + app.listen(8080, () => { + console.log('Server is running on port 8080'); + }); + + ``` + +- 在项目根目录下创建一个名为 `package.json` 的文件,并包含以下内容: + + ```json + { + "name": "nodejs-web-app-mysql", + "version": "1.0.0", + "main": "app.js", + "scripts": { + "start": "node app.js" + }, + "dependencies": { + "express": "^4.17.1", + "mysql": "^2.18.1" + } + } + ``` + +## 步骤2:创建 Docker 镜像 + +- 在项目的根目录下,创建一个名为 `Dockerfile` 的文件。这个文件将包含构建 Docker 镜像所需的指令。以下是一个简单的示例 Dockerfile: + +```dockerfile +FROM node:16 + +WORKDIR /app + +COPY package*.json ./ + +RUN npm install + +COPY . . + +EXPOSE 8080 + +CMD ["npm", "start"] +``` + +## 步骤3:构建 Docker 镜像 + +- 在包含 `Dockerfile` 的目录中运行以下命令来构建 Docker 镜像: + + ``` + docker build -t nodejs-demo . + ``` + +## 步骤4:推送Docker镜像 + +- 将创建的Docker镜像推送到Docker仓库,如Docker Hub或者私有仓库。**假设您已经登录到Docker仓库**,使用以下命令推送镜像 + + - 首先标记Docker镜像,在推送镜像之前,需要为其添加一个标签,以便 Docker 知道将其推送到哪个仓库。运行以下命令为镜像添加标签: + + ``` + docker tag your-image-name your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-image-name` 替换为你的本地镜像名称,`your-dockerhub-username` 替换为你的 Docker Hub 用户名,`your-repo-name` 替换为你在 Docker Hub 上要创建的仓库名称,`your-tag` 替换为你为镜像设置的标签(例如:latest)。 + + 例如: + + ``` + docker tag nodejs-demo damager6666/nodejs-demo:v1 + ``` + + - 接下来推送Docker镜像,使用以下命令将镜像推送到 Docker Hub: + + ``` + docker push your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-dockerhub-username`、`your-repo-name` 和 `your-tag` 替换为实际的值。例如: + + ``` + docker push damager6666/nodejs-demo:v1 + ``` + + + +## 步骤5:登陆 Sealos + +- 进入 [Sealos](https://cloud.sealos.io/) 官网 + +![](images/java-example-0.png) + +## 步骤6:打开 「数据库」 应用 + +![](images/java-example-10.png) + +## 步骤7:创建数据库 + +- 点击新建数据库 + +![](images/java-example-11.png) + +- 基础配置: + - 集群类型:mysql + - 集群名称 : demo-db + - CPU(推荐):1 Core + - 内存(推荐):1 G + - 实例数:1 + - 存储容量: 1 Gi +- 点击 部署集群 + +## 步骤8:配置数据库 + +![](images/java-example-12.png) + +- 点击一键连接到数据库执行以下语句: + + - 创建 test_db 数据库 + + ```sql + create database test_db; + ``` + + - 创建 test 表 + + ```sql + CREATE TABLE `name_info` ( + `id` int(11) NOT NULL, + `name` varchar(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) + ); + ``` + + - 插入数据 + + ```sql + insert into test values (1,'Sealos'); + ``` + + + +## 步骤9:打开 「应用管理」 应用 + +![](images/java-example-3.png) + +## 步骤 10:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](images/java-example-4.png) + +## 步骤11:应用部署 + +- 基础配置: + + - 应用名称(自定义):nodejs-demo + - 镜像名:damager6666/nodejs-demo:v1 + - CPU(推荐):1 Core + - 内存(推荐):1 G + +- 部署模式: + + - 实例数(自定义):1 + +![](images/nodejs-example-0.png) + +- 网络配置: + + - 容器暴露端口:8080 + + - 外网访问:开启 + +![](images/java-example-6.png) + +## 步骤12:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](images/java-example-7.png) + +## 步骤13:访问应用 + +- 点击「应用管理」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](images/java-example-8.png) + +- 在浏览器上输入 + +``` +https://tmgkflgdlstl.cloud.sealos.io/getPersons +``` + +![](images/nodejs-example-1.png) + +- 页面上显示之间插入到数据库的数据 ,表示你的 Node.js应用程序已经在 Sealos 上运行 \ No newline at end of file diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Python Apps.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Python Apps.md" new file mode 100644 index 00000000000..dcaae39c6e3 --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Python Apps.md" @@ -0,0 +1,247 @@ +# 快速安装 Python 程序 + +首先,确保你已经安装了以下工具: + +- Docker + +## 步骤1:编写你的 Python 程序 + +- 在目录下创建一个名为 `app.py` 的文件,并添加以下代码: + + ```python + from flask import Flask, render_template + import mysql.connector + + app = Flask(__name__) + + def get_data_from_database(): + cnx = mysql.connector.connect( + host="java-demo-db-mysql.ns-7otl3mb2.svc", + user="root", + password="l9h8f24b", + database="test_db" + ) + + cursor = cnx.cursor() + cursor.execute("SELECT * FROM test") + data = cursor.fetchall() + cursor.close() + cnx.close() + + return data + + @app.route('/') + def index(): + data = get_data_from_database() + return render_template('index.html', data=data) + + if __name__ == '__main__': + app.run(host='0.0.0.0', debug=True) + ``` + +- 在项目目录下创建一个名为 `requirements.txt` 的文件,以列出应用程序所需的依赖。 + +``` +Flask +mysql-connector-python +``` + +- 在项目目录中创建一个名为 `templates` 的文件夹,并在其中创建一个名为 `index.html` 的文件。将以下内容添加到 `index.html`: + + ~~~html + + + + + Data from MySQL + + +

Data from MySQL

+ + + + + + + {% for row in data %} + + + + + + {% endfor %} +
Column1Column2Column3
{{ row[0] }}{{ row[1] }}{{ row[2] }}
+ + + ``` + + 请将 `Column1`、`Column2` 和 `Column3` 替换为您要显示的实际列名。 + ~~~ + +## 步骤2:创建 Docker 镜像 + +- 在项目的根目录下,创建一个名为 `Dockerfile` 的文件。这个文件将包含构建 Docker 镜像所需的指令。以下是一个简单的示例 Dockerfile: + + ```dockerfile + FROM python:3.8 + + WORKDIR /app + + COPY requirements.txt . + + RUN pip install --no-cache-dir -r requirements.txt + + COPY . . + + EXPOSE 5000 + + CMD ["python", "app.py"] + ``` + +## 步骤3:构建 Docker 镜像 + +- 在包含 `Dockerfile` 的目录中运行以下命令来构建 Docker 镜像: + + ``` + docker build -t python-demo . + ``` + +## 步骤4:推送Docker镜像 + +- 将创建的Docker镜像推送到Docker仓库,如Docker Hub或者私有仓库。**假设您已经登录到Docker仓库**,使用以下命令推送镜像 + + - 首先标记Docker镜像,在推送镜像之前,需要为其添加一个标签,以便 Docker 知道将其推送到哪个仓库。运行以下命令为镜像添加标签: + + ``` + docker tag your-image-name your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-image-name` 替换为你的本地镜像名称,`your-dockerhub-username` 替换为你的 Docker Hub 用户名,`your-repo-name` 替换为你在 Docker Hub 上要创建的仓库名称,`your-tag` 替换为你为镜像设置的标签(例如:latest)。 + + 例如: + + ``` + docker tag python-demo damager6666/python-demo:v1 + ``` + + - 接下来推送Docker镜像,使用以下命令将镜像推送到 Docker Hub: + + ``` + docker push your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-dockerhub-username`、`your-repo-name` 和 `your-tag` 替换为实际的值。例如: + + ``` + docker push damager6666/python-demo:v1 + ``` + + + +## 步骤5:登陆 Sealos + +- 进入 [Sealos](https://cloud.sealos.io/) 官网 + +![](images/java-example-0.png) + +## 步骤6:打开 「数据库」 应用 + +![](images/java-example-10.png) + +## 步骤7:创建数据库 + +- 点击新建数据库 + +![](images/java-example-11.png) + +- 基础配置: + - 集群类型:mysql + - 集群名称 : demo-db + - CPU(推荐):1 Core + - 内存(推荐):1 G + - 实例数:1 + - 存储容量: 1 Gi +- 点击 部署集群 + +## 步骤8:配置数据库 + +![](images/java-example-12.png) + +- 点击一键连接到数据库执行以下语句: + + - 创建 test_db 数据库 + + ```sql + create database test_db; + ``` + + - 创建 test 表 + + ```sql + CREATE TABLE `name_info` ( + `id` int(11) NOT NULL, + `name` varchar(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) + ); + ``` + + - 插入数据 + + ```sql + insert into test values (1,'Sealos'); + ``` + + + +## 步骤9:打开 「应用管理」 应用 + +![](images/java-example-3.png) + +## 步骤 10:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](images/java-example-4.png) + +## 步骤11:应用部署 + +- 基础配置: + + - 应用名称(自定义):python-demo + - 镜像名:damager6666/python-demo:v1 + - CPU(推荐):1 Core + - 内存(推荐):1 G + +- 部署模式: + + - 实例数(自定义):1 + +![](images/python-example-0.png) + +- 网络配置: + + - 容器暴露端口:5000 + + + - 外网访问:开启 + +![](images/python-example-1.png) + +## 步骤12:部署应用 + +![](images/python-example-2.png) + +## 步骤13:访问应用 + +- 点击「应用管理」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](images/python-example-3.png) + +- 在浏览器上输入外网地址,可以访问到刚刚存入到 MySQL 中的数据,表示程序已经成功 Sealos 上 + + ```http + https://mkqreaqfgwac.cloud.sealos.io/ + ``` + +![](images/python-example-4.png) \ No newline at end of file diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Vue Apps.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Vue Apps.md" new file mode 100644 index 00000000000..1b9873b42e0 --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/Quick installation of Vue Apps.md" @@ -0,0 +1,144 @@ +# 快速安装 Vue 程序 + +首先,确保你已经安装了以下工具: + +- Docker +- Node.js +- npm + +## 步骤1:安装 Vue CLI + +```bash +npm install -g @vue/cli +``` + +## 步骤2:使用 Vue CLI 创建一个新项目 + +```bash +vue create my-vue-app +``` + +## 步骤3:使用 Vue CLI 构建项目的生产版本 + +```bash +cd my-vue-app +npm run build +``` + +## 步骤4:创建Docker镜像 + +- 在与my-vue-app目录中,创建一个名为`Dockerfile`的文件,包含以下内容: + +```dockerfile +# 使用 nginx 镜像作为基础镜像 +FROM nginx:1.21-alpine + +# 复制构建的前端文件到 nginx 容器中 +COPY dist/ /usr/share/nginx/html + +# 暴露端口 +EXPOSE 80 + +# 启动 nginx +CMD ["nginx", "-g", "daemon off;"] +``` + +- 在`Dockerfile`所在的目录运行以下命令,为 Vue 应用程序构建 Docker 镜像: + +```bash +docker build -t my-vue-app . +``` + +## 步骤5:推送Docker镜像 + +将创建的Docker镜像推送到Docker仓库,如Docker Hub或者私有仓库。**假设您已经登录到Docker仓库**,使用以下命令推送镜像 + +- 首先标记Docker镜像,在推送镜像之前,需要为其添加一个标签,以便 Docker 知道将其推送到哪个仓库。运行以下命令为镜像添加标签: + + ``` + docker tag your-image-name your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-image-name` 替换为你的本地镜像名称,`your-dockerhub-username` 替换为你的 Docker Hub 用户名,`your-repo-name` 替换为你在 Docker Hub 上要创建的仓库名称,`your-tag` 替换为你为镜像设置的标签(例如:latest)。 + + 例如: + + ``` + docker tag my-vue-app damager6666/my-vue-app:v1 + ``` + +- 接下来推送Docker镜像,使用以下命令将镜像推送到 Docker Hub: + + ``` + docker push your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-dockerhub-username`、`your-repo-name` 和 `your-tag` 替换为实际的值。例如: + + ``` + docker push damager6666/my-vue-app:v1 + ``` + + +## 步骤6:登录 Sealos + +- 进入 [Sealos](https://cloud.sealos.io/) 官网 + +![](images/java-example-0.png) + +## 步骤7:打开 「应用管理」 应用 + +![](images/java-example-3.png) + +## 步骤 8:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](images/java-example-4.png) + +## 步骤9:应用部署 + +- 基础配置: + + - 应用名称(自定义):my-vue-app + - 镜像名(**步骤5**中推送的镜像):damager6666/my-vue-app:v1 + - CPU(推荐):1 Core + - 内存(推荐):1 G + +- 部署模式: + + - 实例数(自定义):1 + +![](images/vue-example-0.png) + +- 网络配置: + + - 容器暴露端口:80 + + - 外网访问:开启 + +![](images/vue-example-1.png) + +## 步骤10:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](images/vue-example-2.png) + +## 步骤11:访问应用 + +- 点击「应用管理」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](images/vue-example-3.png) + +- 在浏览器上输入 + +``` +https://mvpztqzczudy.cloud.sealos.io +``` + +![](images/vue-example-4.png) + +- 页面上显示 ”Hello,Vue.js! “ ,表示你的 Vue 应用程序已经在 Sealos 上运行 + diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-0.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-0.png" new file mode 100644 index 00000000000..f856ec873a6 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-0.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-1.png" new file mode 100644 index 00000000000..83b3f85e444 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-10.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-10.png" new file mode 100644 index 00000000000..7164ba6a31f Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-10.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-11.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-11.png" new file mode 100644 index 00000000000..b1cf562ca8c Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-11.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-12.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-12.png" new file mode 100644 index 00000000000..6eedee90f87 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-12.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-13.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-13.png" new file mode 100644 index 00000000000..3548b505e15 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-13.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-2.png" new file mode 100644 index 00000000000..179f4b85a5f Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-3.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-3.png" new file mode 100644 index 00000000000..07db46ce9e6 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-3.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-4.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-4.png" new file mode 100644 index 00000000000..670338bb9b0 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-4.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-5.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-5.png" new file mode 100644 index 00000000000..a79b84e285a Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-5.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-6.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-6.png" new file mode 100644 index 00000000000..d5f28559a33 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-6.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-7.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-7.png" new file mode 100644 index 00000000000..4a14b632edd Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-7.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-8.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-8.png" new file mode 100644 index 00000000000..19a4f0f3276 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-8.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-9.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-9.png" new file mode 100644 index 00000000000..b5582f255cd Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/java-example-9.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/nodejs-example-0.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/nodejs-example-0.png" new file mode 100644 index 00000000000..629be8f5f14 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/nodejs-example-0.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/nodejs-example-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/nodejs-example-1.png" new file mode 100644 index 00000000000..83d4acd117f Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/nodejs-example-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-0.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-0.png" new file mode 100644 index 00000000000..86d53a8b85c Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-0.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-1.png" new file mode 100644 index 00000000000..2f03cf92b39 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-2.png" new file mode 100644 index 00000000000..19dcda99374 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-3.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-3.png" new file mode 100644 index 00000000000..54ceb5547f3 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-3.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-4.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-4.png" new file mode 100644 index 00000000000..3ffbe07560b Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/python-example-4.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-0.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-0.png" new file mode 100644 index 00000000000..648276d1412 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-0.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-1.png" new file mode 100644 index 00000000000..e47a1b27115 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-2.png" new file mode 100644 index 00000000000..dab8d56621b Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-3.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-3.png" new file mode 100644 index 00000000000..9ac654f2439 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-3.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-4.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-4.png" new file mode 100644 index 00000000000..b0020952109 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/01-\345\270\270\347\224\250\350\257\255\350\250\200\345\272\224\347\224\250/images/vue-example-4.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/02-AI\345\272\224\347\224\250/imgs/sealos1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/02-AI\345\272\224\347\224\250/imgs/sealos1.png" new file mode 100644 index 00000000000..7313d36f548 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/02-AI\345\272\224\347\224\250/imgs/sealos1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/02-AI\345\272\224\347\224\250/imgs/sealos2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/02-AI\345\272\224\347\224\250/imgs/sealos2.png" new file mode 100644 index 00000000000..32f0fb67f31 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/02-AI\345\272\224\347\224\250/imgs/sealos2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/02-AI\345\272\224\347\224\250/install-fastgpt-on-desktop.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/02-AI\345\272\224\347\224\250/install-fastgpt-on-desktop.md" new file mode 100644 index 00000000000..011060f9c9c --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/02-AI\345\272\224\347\224\250/install-fastgpt-on-desktop.md" @@ -0,0 +1,15 @@ +# 快速安装 FastGpt AI 知识库 + +无需服务器、无需魔法、无需域名,点击即可部署 👇 + +[![](https://raw.githubusercontent.com/labring-actions/templates/main/Deploy-on-Sealos.svg)](https://cloud.sealos.io/?openapp=system-fastdeploy%3FtemplateName%3Dfastgpt) + +由于需要部署数据库,部署完后需要等待 2~4 分钟才能正常访问。默认用了最低配置,首次访问时会有些慢。 + +![](./imgs/sealos1.png) + +## 运行 + +点击 sealos 提供的【外网地址】即可使用。登录用户名为: root,密码是刚设置的环境变量,上图中设置了: 1234 + +![](./imgs/sealos2.png) diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/03-\345\215\232\345\256\242\345\271\263\345\217\260/install-halo.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/03-\345\215\232\345\256\242\345\271\263\345\217\260/install-halo.md" new file mode 100644 index 00000000000..120af78ff06 --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/03-\345\215\232\345\256\242\345\271\263\345\217\260/install-halo.md" @@ -0,0 +1,143 @@ +--- +sidebar_position: 2 +--- + +# 快速安装 Halo + +在 Sealos 上快速部署 Halo 博客平台 + +![](../images/halo_img-1.png) + +[Halo](https://github.com/halo-dev/halo) 是一款强大易用的开源建站工具,本文将介绍如何在 Sealos 上部署 Halo,同时在 [Sealos 上部署 PostgreSQL](../../quick-start/install-db-with-database.md) 可以帮助你轻松地管理和维护数据库,以满足不同的业务需求。 + +## 步骤 1:准备 PostgreSQL + +### 使用 Sealos 数据库安装 PostgreSQL + +参考 [Sealos 上部署 PostgreSQL](../../quick-start/install-db-with-database.md) ,一分钟即可成功安装和使用 PostgreSQL。 + +### 查看数据库配置: + +保存这里生成的配置中包含数据库的用户名密码以及数据库连接方式,用于下文 Halo 中配置: + +![](../images/halo_img-6.png) + +> 图中可以看到 PostgreSQL 连接配置为: +> +> Username: postgres +> +> Password: rcx7f47m +> +> Connection: postgresql://postgres:rcx7f47m@dbname-postgresql.ns-sy32q9p9.svc:5432 + +## 步骤 2: 在 Sealos 中部署 Halo应用 + +### 打开 应用管理 + +![](../images/halo_img-7.png) + +![](../images/halo_img-8.png) + +### 填写配置 + +- 自定义应用名称 + +- 镜像名称设置为 `halohub/halo:2.5` + +- CPU 和存储应根据实际情况进行配置,memory 需要 `500Mi` 的内存才能启动 Halo,这里可以参考官方 prepare:https://docs.halo.run/getting-started/prepare + +- 暴露端口应为 `8090`。同时,设置为外网访问将自动为应用配置一个出口域名用于外网访问,同时需要在 Halo 中进行配置该地址 + +- 环境变量包括数据库配置和其他相关配置。需要注意的是,你需要根据你在 [步骤 1](查看数据库配置:) 中设置的用户名、密码和 DNS 来配置数据库连接信息。同时,你还需要为 Halo 配置超级管理员的用户名和密码。 + +配置 Halo 环境变量 + +```Bash +spring.sql.init.platform=postgresql +spring.r2dbc.url=r2dbc:pool:postgresql://postgres:rcx7f47m@dbname-postgresql.ns-sy32q9p9.svc:5432/halo +spring.r2dbc.username=postgres +spring.r2dbc.password=rcx7f47m +halo.external-url=tmtdvfjiyyfh.cloud.sealos.io +halo.security.initializer.superadminusername=root +halo.security.initializer.superadminpassword=sealos +``` + +环境变量配置详解: + +| 参数名 | 描述 | +| -------------------------------------------- | -------------------------------------------------------- | +| spring.r2dbc.url | 数据库连接地址,详细可查阅下方的 数据库链接格式 | +| spring.r2dbc.username | 数据库用户名 | +| spring.r2dbc.password | 数据库密码 | +| spring.sql.init.platform | 数据库平台名称,支持 postgresql、mysql、h2 | +| halo.external-url | 外部访问链接,如果需要在公网访问,需要配置为实际访问地址 | +| halo.security.initializer.superadminusername | 初始超级管理员用户名 | +| halo.security.initializer.superadminpassword | 初始超级管理员密码 | + +数据库的链接格式(这里我们使用 postgresql 的格式): + +| 链接方式 | 链接地址格式 | spring.sql.init.platform | +| ----------- | ---------------------------------------------------------------------------------- | ------------------------ | +| PostgreSQL | r2dbc:pool:postgresql://`{HOST}`:`{PORT}`/`{DATABASE}` | postgresql | +| MySQL | r2dbc:pool:mysql://`{HOST}`:`{PORT}`/`{DATABASE}` | mysql | +| MariaDB | r2dbc:pool:mariadb://`{HOST}`:`{PORT}`/`{DATABASE}` | mysql | +| H2 Database | r2dbc:h2:file:///`${halo.work-dir}`/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE | h2 | + +### 网络配置 + +![](../images/halo_img-9.png) + +### 环境变量配置 + +![](../images/halo_img-10.png) + +### 配置持久化存储卷 + +挂载 `/root/.halo2` 目录来持久化 halo 数据 : + +![](../images/halo_img-11.png) + +## 步骤 3: 使用外网访问 Halo + +成功启动应用后,即可通过外网访问地址访问 Halo 进行配置: + +![](../images/halo_img-12.png) + +![](../images/halo_img-13.png) + +### 初始化 Halo + +![](../images/halo_img-14.png) + +![](../images/halo_img-15.png) + +### First Halo + +![](../images/halo_img-16.png) + +![](../images/halo_img-17.png) + +![](../images/halo_img-18.png) + +## FAQ + +### 忘记密码 + +#### 进入 「应用管理」,点击日志查看 + +![](../images/halo_img-19.png) + +![](../images/halo_img-20.png) + +可以看到这里的日志中:用户名:`admin` 密码:`QTu2J2xgUQ3ngqUo` + +#### 或终端执行如下命令查看日志 + +![](../images/halo_img-21.png) + +``` +root@td3q8uc46:~# kubectl logs halo-0 | grep 'Generated random password:' | tail -1 +2023-05-30T13:32:16.942+08:00 INFO 7 --- [-controller-t-1] r.h.app.security.SuperAdminInitializer : === Generated random password: QTu2J2xgUQ3ngqUo for super administrator: admin === +``` + +![](../images/halo_img-22.png) \ No newline at end of file diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/03-\345\215\232\345\256\242\345\271\263\345\217\260/install-wordpress.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/03-\345\215\232\345\256\242\345\271\263\345\217\260/install-wordpress.md" new file mode 100644 index 00000000000..41f1c465897 --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/03-\345\215\232\345\256\242\345\271\263\345\217\260/install-wordpress.md" @@ -0,0 +1,103 @@ +--- +sidebar_position: 1 +--- + +# 快速安装 WordPress + +[WordPress](https://github.com/WordPress/WordPress) 是一款功能强大、易用、开源的内容管理系统 (CMS), 可以用于在互联网上发布网站、新闻、博客等内容。它提供了便捷的内容编辑、发布和更新方法 , 同时也可以通过主题和插件进行高度自定义。WordPress 已经成为非常成功和普及的 CMS 系统 , 在全球有超过 3 千万个网站使用 WordPress 搭建。 + +> 使用 Sealos 安装 WordPress,可以大幅度减少安装时间,极速开启用户的内容输出之旅。 + +WordPress 需要搭配 MySQL 数据库一同安装使用。作为使用 Sealos 的最佳实践,建议使用**数据库**应用独立安装 MySQL 数据库,依托独立数据库,快速安装 WordPress。 + +## 新建 MySQL 实例 + +进入 [Sealos](https://cloud.sealos.io) 桌面环境,在「数据库」中,快速配置需要的数据库实例,等待数据库部署完成。 + +![](../images/wordpress_15.png) + +![](../images/wordpress_16.png) + +![](../images/wordpress_17.png) + +**注:此时的 MySQL 实例中并不存在用户自定义数据库,需要在终端中手动创建** + +## 新建数据库 + +通过**数据库**应用安装的 MySQL 实例时,并不会自动创建用户自定义数据库。在使用应用程序连接 MySQL 数据库时,您需要在 MySQL 实例中手动创建相应的数据库。 + +可以通过如下方式进入数据库的终端命令行 + +![](../images/wordpress_12.png) +![](../images/wordpress_13.png) + +也可以在终端中自行输入命令 + +`mysql -u username -p -h yourhost` + +![](../images/wordpress_14.png) + +数据库连接成功后,可以按照如下命令创建数据库 + +`CREATE DATABASE yourdb;` + +至此,您已经在 MySQL 实例中手动创建了一个用户自定义数据库。 + +## 应用管理 + +点击应用管理,进入安装界面。 + +![](../images/wordpress_1.png) + +## 基础配置 + +首先设置自定义的应用名称,选择需要安装的镜像。Sealos 既支持公有镜像源,也支持私有镜像源。本示例选用的官方镜像源,不指定镜像版本时,默认拉取 latest 版本。 + +其次,为 WordPress 配置 CPU 与内存资源,WordPress 十分的轻量级,较少的资源就可以保证程序的正常运行。 + +![](../images/wordpress_8.png) + +## 网络配置 + +网络配置方面,打开外网访问,Sealos 会为用户自动分配出口域名用作外网访问,如果用户已经注册了自己的自定义域名,那么可以将自定义域名 cname 到该出口域名,这样就可以使用该自定义域名访问用户安装的应用。 + +注:后续演示,使用的是 Sealos 随机生成的出口域名。 + +![](../images/wordpress_9.png) + +## 高级配置 + +在高级配置中,需要根据数据库的实际情况配置 WordPress 的环境变量。 + +高级配置中,需要为 WordPress 配置环境变量与本地存储。 + +WordPress 常见环境变量如下所示: + +```Plain +WORDPRESS_DB_HOST 数据库实例的ip地址 +WORDPRESS_DB_USER 连接数据库的用户 +WORDPRESS_DB_PASSWORD 连接库所需的用户密码 +WORDPRESS_DB_NAME 连接的数据库名称 +``` + +根据之前安装的 MySQL 示例,可以这样配置环境变量: + +```Plain +WORDPRESS_DB_HOST=mysql-host:3306 +WORDPRESS_DB_USER=root +WORDPRESS_DB_PASSWORD=root_passwd +WORDPRESS_DB_NAME=yourdb +``` + +WordPress 官方镜像的存储卷挂载地址为:`/var/www/html`,用户根据需求为应用分配存储空间。 + +这样,WordPress 也一并安装成功,点击详情,通过外网地址就可以成功访问。 + +![](../images/wordpress_10.png) + +点击该链接,如下页面,证明安装成功 + +![](../images/wordpress_11.png) + +**注:如部署失败 , 优先排查 WordPress 访问的用户自定义数据库是否存在于 MySQL 实例中** + diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/04-\346\213\224\346\265\213\347\263\273\347\273\237/install-uptime-kuma.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/04-\346\213\224\346\265\213\347\263\273\347\273\237/install-uptime-kuma.md" new file mode 100644 index 00000000000..293547d7a0d --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/04-\346\213\224\346\265\213\347\263\273\347\273\237/install-uptime-kuma.md" @@ -0,0 +1,60 @@ +--- +sidebar_position: 1 +--- + +# 快速安装 Uptime Kuma + +![](../images/uptimekuma_img-0.png) + +[Uptime Kuma](https://github.com/louislam/uptime-kuma) 是一款开源的、易于使用的服务器监控工具。它可以帮助你实时监控服务器的运行状态、响应时间以及其他关键指标,以确保你的服务器始终保持最佳状态。如果你想快速安装 Uptime Kuma,可以按照以下步骤进行操作: + +### 步骤 1:首先进入 [Sealos](https://cloud.sealos.io) 桌面环境并打开「应用管理」 + +![](../images/uptimekuma_img-1.png) + +### 步骤 2: 新建应用 + +在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](../images/uptimekuma_img-2.png) + +### 步骤 3: 设置启动参数 + +在启动参数中,按照以下方式进行设置: + +- 容器暴露端口指定为 3001。 +- 设置为外网访问即可通过给出的域名访问。 + +![](../images/uptimekuma_img-3.png) + +![](../images/uptimekuma_img-4.png) + +### 步骤 4: 设置存储卷 + +在高级配置中,添加存储卷挂载来持久化 Uptime Kuma 数据目录 `/app/data`。这样可以确保应用数据在容器重启后不会丢失。 + +![](../images/uptimekuma_img-5.png) + +### 步骤五:部署应用 + +点击「部署应用」后即可启动应用: + +![](../images/uptimekuma_img-6.png) + +### 步骤 6: 访问应用 + +一旦应用启动成功,你就可以使用应用的外网地址进行访问了。在浏览器中输入应用的域名,即可访问应用的主界面。 + +![](../images/uptimekuma_img-7.png) + +### 步骤 7: 创建管理员账户 + +为了保护 Uptime Kuma 的安全性,首次进入你需要创建一个管理员账户,填写管理员账户的基本信息,包括用户名、密码。填写完毕后,点击创建按钮进行注册。 + +![](../images/uptimekuma_img-8.png) + +### 步骤 8: 添加自定义监控项 + +![](../images/uptimekuma_img-9.png) + +![](../images/uptimekuma_img-10.png) \ No newline at end of file diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/05-\344\275\216\344\273\243\347\240\201\345\271\263\345\217\260/install-appsmith.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/05-\344\275\216\344\273\243\347\240\201\345\271\263\345\217\260/install-appsmith.md" new file mode 100644 index 00000000000..ff4f000b6d7 --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/05-\344\275\216\344\273\243\347\240\201\345\271\263\345\217\260/install-appsmith.md" @@ -0,0 +1,65 @@ +# 快速安装 Appsmith + +[Appsmith](https://github.com/appsmithorg/appsmith) 是一个用于构建、部署和维护内部应用程序的开源平台。您可以构建任何东西,从简单的 CRUD 应用程序、管理面板、仪表板到自定义业务应用程序和复杂的多步骤工作流。 + +## 步骤 1:在 [Sealos](https://cloud.sealos.io) 桌面环境中打开 「应用管理」 应用 + +![](../images/appsmith-1.png) + +## 步骤 2:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](../images/appsmith-2.png) + +## 步骤 3:应用部署 + +- 基础配置: + + - 应用名称(自定义):appsmith + + - 镜像名(默认最新版本):appsmith/appsmith-ce + + - CPU(推荐):2 Core + + - 内存(推荐):4 G + +- 部署模式: + + - 实例数(自定义):1 + +![](../images/appsmith-3.png) + +- 网络配置: + + - 容器暴露端口:80 + + - 外网访问:开启 + +![](../images/appsmith-4.png) + +- 高级配置: + + - 自定义本地存储,持久化 Appsmith 的数据(推荐 15 G)。 + +![](../images/appsmith-5.png) + +## 步骤 4:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](../images/appsmith-6.png) + +## 步骤 5:访问应用 + +- 点击「详情」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 + +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](../images/appsmith-7.png) + +- 访问成功! + +![](../images/appsmith-8.png) + + diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/05-\344\275\216\344\273\243\347\240\201\345\271\263\345\217\260/install-illacloud.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/05-\344\275\216\344\273\243\347\240\201\345\271\263\345\217\260/install-illacloud.md" new file mode 100644 index 00000000000..ef254bfca4a --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/05-\344\275\216\344\273\243\347\240\201\345\271\263\345\217\260/install-illacloud.md" @@ -0,0 +1,67 @@ +# 快速安装 ILLA Cloud + +[ILLA Cloud](https://www.illacloud.com/zh) 是一个开源的低代码平台,使用户能够创建、部署和管理内部应用程序。通过 ILLA Cloud,您可以使用直观的拖放组件来灵活地构建各种应用程序,从基本的 CRUD 应用程序到更复杂的多步骤工作流程。 + +## 步骤 1:在 [Sealos](https://cloud.sealos.io) 桌面环境中打开 「应用管理」 应用 + +![illa_home](../images/illa_home.jpg) + +## 步骤 2:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![illa0](../images/illa0.png) + +## 步骤 3:应用部署 + +- 基础配置: + + - 应用名称(自定义):illa-builder + + - 镜像名(默认最新版本):illasoft/illa-builder + + - CPU(推荐):0.5 Core + + - 内存(推荐):512 MB + +- 部署模式: + + - 实例数(自定义):1 + +- 注意:我们这里使用的是最低配置,您可以根据自己的需求加大配置。 + +![illa1](../images/illa1.jpg) + +- 网络配置: + + - 容器暴露端口:2022 + + - 外网访问:开启 + +- 注意:空白的域名可以运行 ILLA Cloud,但您也可以使用自己的域名。 + +![illa2](../images/illa2.jpg) + +- 高级配置: + + - 自定义本地数据库和磁盘(最低 1G)。 + +![illa3](../images/illa3.jpg) + +## 步骤 4:部署应用 + +- 点击「部署应用」开始部署应用。 + +![illa4](../images/illa4.jpg) + +## 步骤 5:访问应用 + +- 点击「详情」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 + +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![illa5](../images/illa5.jpg) + +- 访问成功! + +![illa6](../images/illa6.jpg) diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/05-\344\275\216\344\273\243\347\240\201\345\271\263\345\217\260/install-pageplug.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/05-\344\275\216\344\273\243\347\240\201\345\271\263\345\217\260/install-pageplug.md" new file mode 100644 index 00000000000..2e80833180b --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/05-\344\275\216\344\273\243\347\240\201\345\271\263\345\217\260/install-pageplug.md" @@ -0,0 +1,71 @@ +# 快速安装 PagePlug + +[PagePlug](https://github.com/cloudtogo/pageplug) 是 [Appsmith](https://github.com/appsmithorg/appsmith) 的中国化项目,基于 Appsmith 做了整体性能优化及汉化,也集合了特色表单解决方案 Formily 组件、图表解决方案 Echarts 组件、低代码小程序开发等,是面向研发使用的一个开源的、声明式的、可视化的、符合开发者直觉的前端低代码框架。 + +## 步骤 1:在 [Sealos](https://cloud.sealos.io) 桌面环境中打开 「应用管理」 应用 + +![](../images/pageplug-1.png) + +## 步骤 2:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](../images/pageplug-2.png) + +## 步骤 3:应用部署 + +- 基础配置: + + - 应用名称(自定义):pageplug + + - 镜像名(默认最新版本):cloudtogouser/pageplug-ce + + - CPU(推荐):2 Core + + - 内存(推荐):4 G + +- 部署模式: + + - 实例数(自定义):1 + +![](../images/pageplug-3.png) + +- 网络配置: + + - 容器暴露端口:80 + + - 外网访问:开启 + +![](../images/pageplug-4.png) + +- 高级配置: + + - 自定义本地存储,持久化 PagePlug 的数据。 + +![](../images/pageplug-5.png) + +## 步骤 4:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](../images/pageplug-6.png) + +## 步骤 5:访问应用 + +- 点击「详情」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 + +![](../images/pageplug-7.png) + +![](../images/pageplug-8.png) + +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](../images/pageplug-9.png) + +- 若访问出现 503 异常,等待一会重试即可。 + +![](../images/pageplug-10.png) + +- 访问成功! + +![](../images/pageplug-11.png) diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/06-CI:CD\345\272\224\347\224\250/install-gitea.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/06-CI:CD\345\272\224\347\224\250/install-gitea.md" new file mode 100644 index 00000000000..28808a70568 --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/06-CI:CD\345\272\224\347\224\250/install-gitea.md" @@ -0,0 +1,113 @@ +# 快速安装 Gitea + +喝杯茶吧!无痛自托管多合一软件开发服务,包括 Git 托管、代码审查、团队协作、包注册和 CI/CD。 + +## 步骤 1:登陆 Sealos + +- 进入 [Sealos](https://cloud.sealos.io/) 官网 + +![](../images/gitea-0.png) + +## 步骤 2:打开 「应用管理」 应用 + +![](../images/gitea-1.png) + +## 步骤 3:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](../images/gitea-2.png) + +## 步骤 4:应用部署 + +- 基础配置: + + - 应用名称(自定义):gitea + - 镜像名(默认最新版本):gitea/gitea:latest-rootless + - CPU(推荐):1 Core + - 内存(推荐):1 G + +- 部署模式: + + - 实例数(自定义):1 + + ![](../images/gitea-3.png) + +- 网络配置: + + - 容器暴露端口:3000 + - 外网访问:开启 + + ![](../images/gitea-4.png) + +- 高级配置: + + - 自定义本地存储,持久化 Gitea 的数据(推荐 1 G)。 + +![](../images/gitea-5.png) + +## 步骤 5:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](../images/gitea-6.png) + +## 步骤6:配置数据库 + +- 通过 Sealos 为 Gitea 配置 MySQL 数据库 +- 进入 Database + +![](../images/gitea-9.png) + +- 新建数据库 + +![](../images/gitea-10.png) + +- 部署集群 + +- 基础配置: + + - 集群类型:mysql + - 数据库版本:ac-mysql-8.0.30 + - CPU(推荐):1 Core + - 内存(推荐):1 G + + +![](../images/gitea-11.png) + +- 部署成功后进入详情页面查看 MySQL 连接信息 + +![](../images/gitea-12.png) + +- 点击一键连接进入 MySQL 终端连接 + +![](../images/gitea-13.png) + +- 执行 + +```sql +CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'; +``` + +创建 Gitea 所需要的数据库 + +![](../images/gitea-14.png) + +## 步骤 7:访问应用 + +- 点击「App Launchpad」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 + +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](../images/gitea-7.png) + +- 访问外网地址后进入到配置页面,根据刚刚创建的 MySQL 的详情页面进行配 + +![](../images/gitea-15.png) + +配置好后点击安装,等待一会便可进入到登陆页面,部署成功! + +![](../images/gitea-16.png) + +![](../images/gitea-17.png) + diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/07-BaaS\345\272\224\347\224\250/install-fireboom.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/07-BaaS\345\272\224\347\224\250/install-fireboom.md" new file mode 100644 index 00000000000..891248b8de3 --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/07-BaaS\345\272\224\347\224\250/install-fireboom.md" @@ -0,0 +1,106 @@ +# 快速安装 Fireboom + +[Fireboom](https://fireboom.io) ⾯向开发者的可视化 API 开发平台,为开发者提供**声明式开发框架**、**可视化编辑套件**和**钩子机制**。 + +![fireboom introduction](../images/fireboom/fireboom-intro.jpeg) + +官网地址: https://fireboom.io + +**功能特性** + +- 分钟级交付: 将传统模式下 2天才能完成的接⼝缩短⾄ 2分钟 + +- 前端变全栈: 可视化开发,显著降低接⼝开发⻔槛,让前端搞定前后端秒变全栈 + +- 后端不搬砖: 声明式编程,避免复制粘贴,减少bug概率,让后端专注于业务开发 + +## 步骤 1:新建应用 + +- 在 [Sealos](https://cloud.sealos.io) 桌面环境中打开 「应用管理」 应用 + +![](../images/appsmith-1.png) + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](../images/appsmith-2.png) + + +## 步骤 2:应用部署 + +- 基础配置: + + - 应用名称(自定义):fireboom + + - 镜像名(默认最新版本):fireboomapi/fireboom_server:latest + + - CPU(推荐):2 Core ( 最低1 Core) + + - 内存(推荐):4 G (最低 512 M) + +- 部署模式: + + - 实例数(自定义):1 + +![](../images/fireboom/2-1.png) + +- 网络配置: + + - 控制面板:9123 + - API端点:9991,开启外网 + +![](../images/fireboom/2-2.png) + +- 高级配置: + + - 命令设置: + - 参数设置: dev (dev表示开发模式,start表示生产模式) + + - 持久化存储: + + - 元数据:/fbserver/store + - 上传文件:/fbserver/upload + + +![](../images/fireboom/2-3.png) + +## 步骤 3:部署应用 + +1, 点击「部署应用」开始部署应用。 + +![](../images/fireboom/3-1.png) + +2, 点击「详情」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 + +![](../images/fireboom/3-2.png) + +## 步骤 4:访问应用 + +- 访问控制面板:9123对应的域名 + +![](../images/fireboom/4-1.png) + +- 访问API端点:9991对应的域名 + +``` +status ok +``` + +## 步骤 5:配置Fireboom(可选) + +设置后,可方便使用swagger文档~ + +1, 查看API外网地址: 设置-> 系统 + +![](../images/fireboom/5-1.png) + +2, 修改为:API端点地址,9991对应的公网地址 + + - 静态值:选择静态值,设置为 **API端点** 公网域名 + - 环境变量:前往 环境变量 ,找到 FB_API_PUBLIC_URL 设置为 **API端点** 公网域名 + +![](../images/fireboom/5-2.png) + + +3, 使用swagger文档测试API + +![](../images/fireboom/5-3.png) \ No newline at end of file diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/08-IM\345\272\224\347\224\250/IM\345\272\224\347\224\250.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/08-IM\345\272\224\347\224\250/IM\345\272\224\347\224\250.md" new file mode 100644 index 00000000000..b2c53ab1004 --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/08-IM\345\272\224\347\224\250/IM\345\272\224\347\224\250.md" @@ -0,0 +1,177 @@ +# 快速安装 Tailchat + +[Tailchat](https://tailchat.msgbyte.com/) 是一款插件化易拓展的开源 IM 应用。可拓展架构赋予 Tailchat 无限可能性。 + +前端微内核架构 + 后端微服务架构 使得 Tailchat 能够驾驭任何定制化/私有化的场景 + +面向企业与私域用户打造,高度自由的群组管理与定制化的面板展示可以让私域主能够更好的展示自己的作品,管理用户,打造自己的品牌与圈子。 + +![](../images/tailchat/0.png) + + +## 首先在 [Sealos](https://cloud.sealos.io) 桌面环境中打开「应用管理」 + +![](../images/tailchat/1.png) + +## 新建应用 + +![](../images/tailchat/2.png) + +### 创建依赖 + +`tailchat` 作为企业级的应用,最小依赖: `mongodb`, `redis`, `minio`. + +接下来让我们来一一创建。 + +#### mongodb + +为了方便起见我们固定一个实例,并且为数据库绑定本地存储。 + +使用的镜像是 `mongo:4` + +需要注意的是因为我没有给数据库设置密码,因此不要对外网提供网络服务。容器暴露端口填数据库默认服务端口 `27017` 即可 + +内容如下: + +![](../images/tailchat/3.png) + +点击部署应用提交部署 + +耐心等待一会,就可以看到应用已经启动起来了 + +![](../images/tailchat/4.png) + +> 需要注意的是初始分配的64m对于mongodb来说实在太小了,所以通过变更应用改为了128m。可以随时分配资源大小这也是sealos/k8s很方便的一点 + +#### minio + +接下来我们创建minio, minio是一个开源的对象存储服务。我们同样可以通过`sealos`的点点点来快速创建 + +使用的镜像是: `minio/minio` + +需要注意的是我们要进行一些调整: + +- 暴露端口: 9000 +- 运行命令改为: `minio` +- 命令参数改为: `server /data` +- 设置环境变量: + - MINIO_ROOT_USER: tailchat + - MINIO_ROOT_PASSWORD: com.msgbyte.tailchat +- 本地存储: `/data` + +最终结果如下: + +![](../images/tailchat/5.png) + +点击部署按钮同样看到服务已经正常启动起来了。 + +#### redis + +最后我们需要部署redis作为内容缓存与信息转发。 + +使用镜像: `redis:alpine` + +暴露端口: `6379` + +最终结果如下: + +![](../images/tailchat/6.png) + + +### 创建 Tailchat 本体 + +此时Tailchat所需要的依赖均已部署完毕,如下: + +![](../images/tailchat/7.png) + +现在我们来部署 `Tailchat` 本体。 + +`Tailchat` 的本体会相对复杂一点,不过因为`sealos`纯UI操作也不会太过复杂。 + +- 使用镜像: `moonrailgun/tailchat` +- 暴露端口: `11000`(记得要打开外网访问) +- 配置环境变量如下: + ``` + SERVICEDIR=services,plugins + TRANSPORTER=redis://redis:6379 + REDIS_URL=redis://redis:6379 + MONGO_URL=mongodb://mongo/tailchat + MINIO_URL=minio:9000 + MINIO_USER=tailchat + MINIO_PASS=com.msgbyte.tailchat + ``` + +最终效果如下: + +![](../images/tailchat/8.png) + +耐心等待一段时间后可以看到`Tailchat` 服务已经启动起来了 + +![](../images/tailchat/9.png) + +## 预览服务 + +首先我们可以先检查一下`Tailchat`服务的可用性,可以通过外网地址提供的服务后面加上 `/health` 来检查服务可用性, 如: `https://.cloud.sealos.io/health` + +当启动完毕后,Tailchat服务会返回如下内容: + +![](../images/tailchat/10.png) + +这段json字符串中包含了使用的镜像版本,节点名称,系统占用,微服务加载情况。 + +这里我们可以看到我的常见的服务, 如`user`/`chat.message`以及一些带有插件前缀的服务如`plugin.registry`都已经正常启动起来了,说明我们的服务端是正常运行的。 + +现在我们可以直接访问我们的外网地址,可以看到经过短暂的加载后,页面正常打开自动跳转到了登录界面。 + +![](../images/tailchat/11.png) + +随便注册一个账号,可以看到我们可以正常进入Tailchat的主界面, 如下图: + +![](../images/tailchat/12.png) + +至此我们的服务已经成功在 sealos 中落地了。 + +## 扩容服务 + +当然,作为一个分布式架构的系统,`Tailchat` 天然是支持水平扩容的。而在 `sealos` 想要实现扩容也非常简单, 只需要通过变更操作修改实例数即可: + +![](../images/tailchat/13.png) + +![](../images/tailchat/14.png) + +![](../images/tailchat/15.png) + +此时当我们访问 `https://.cloud.sealos.io/health` 可以看到我们可以访问到不同的节点 + +![](../images/tailchat/16.png) + +## 添加 Tailchat 入口到桌面 + +打开 Terminal, 输入`vim app.yml`创建并编辑一个配置文件 + +输入以下内容,注意url要换成自己部署的网址 + +```yml +apiVersion: app.sealos.io/v1 +kind: App +metadata: + name: tailchat-app-entry +spec: + name: Tailchat + icon: + type: iframe + data: + url: + desc: + icon: https://tailchat.msgbyte.com/img/logo.svg + menuData: + displayType: normal +``` + +按`esc`退出编辑模式, 按`:wq`保存并退出vim + +输入`kubectl apply -f app.yml`启动配置。 + +完毕后刷新页面,此时我们可以看到我们的入口就出现在`sealos`的桌面上了 + +![](../images/tailchat/17.png) diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/09-\345\205\266\344\273\226\345\272\224\347\224\250/install-anki.md" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/09-\345\205\266\344\273\226\345\272\224\347\224\250/install-anki.md" new file mode 100644 index 00000000000..2c5a619a440 --- /dev/null +++ "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/09-\345\205\266\344\273\226\345\272\224\347\224\250/install-anki.md" @@ -0,0 +1,142 @@ +# 快速安装 Anki 自定义同步服务器 + +Anki 是一个辅助记忆软件,其本质是一个卡片排序工具--**即依据使用者对卡片上的自定义内容进行主动测试、自我评判后,其内部算法根据评判结果更改每张卡片下次测试时间的排序工具。** + +所谓的卡片,专业说法叫 Flash Card(抽认卡或闪卡),是一小块纸片,分为正反两面,将问题和提示写在一面,将答案写在另一面。使用方法就是先看正面的问题与提示,在脑中回想答案,然后翻出反面进行对照验证。 + +闪卡的核心制作原则就是:**一个知识点一张卡**。因此非常适合用来学习英文,也可以用来记忆历史事件时间、公式等等。 + +Anki 的同步服务器在国外,还是一个个人项目,带宽很小,同步速度很慢,如果我们想在多个客户端之间同步学习进度和新增的知识点,那将非常痛苦。 + +为了解决这个问题,我们需要部署一个自定义的同步服务器,然后让客户端去使用这个同步服务器。 + +## Anki 同步服务器部署 + +自从 2023 年 2 月份,Anki 发布了 PC 端 2.1.57 版本以后,Anki 的 PC 端,安卓端,iOS 端用户都可以自定义同步服务器了,并且不再需要安装插件。从此 Anki 小伙伴再也不用担心 Anki 同步的问题了,困扰 Anki 用户多年的同步问题终于得到彻底解决。 + +社区目前只有 [anki-sync-server-rs](https://github.com/ankicommunity/anki-sync-server-rs) 这个项目支持最新的 Anki 版本,其他的同步服务器项目基本上都失效了。这个项目是用 Rust 写的,追踪 [Anki 官方](https://github.com/ankitects/anki) 同步服务端的进度,它们都是基于sqlite c 作为数据存储后端。 + +下面我们将在 Sealos 中部署并配置 anki-sync-server-rs。 + +首先在浏览器地址栏输入网址 [https://cloud.sealos.io/](https://cloud.sealos.io/) 进入 Sealos 桌面。然后打开「应用管理」: + +![](../images/2023-06-26-11-54-EIVahX.jpg) + +点击「新建应用」: + +![](../images/2023-06-26-11-55-NDkuEg.jpg) + +依次输入应用名和镜像名,容器暴露端口是 `27701`,并开启外网访问: + +![](../images/2023-06-26-11-59-FxJE12.png) + +继续向下,展开「高级配置」,点击「编辑环境变量」: + +![](../images/2023-06-26-12-01-DKect7.png) + +将以下内容粘贴到环境变量输入框中: + +```bash +ANKISYNCD_USERNAME= +ANKISYNCD_PASSWORD= +``` + +请将 `` 替换为你自己的用户名,将 `` 替换为你自己的密码。 + +![](../images/2023-06-26-12-05-CWczxm.png) + +点击「新增存储卷」: + +![](../images/2023-06-26-12-06-lvv6ms.png) + +挂载路径填入 `/app`,然后点击确认: + +![](../images/2023-06-26-12-07-s8W7iu.png) + +最后点击右上角的部署应用即可。 + +部署完成后点击「详情」进入应用详情界面。 + +![](../images/2023-06-26-12-09-RslDGj.png) + +这里可以看到实例的运行状态,一定要等到状态是 running 才算是部署成功。如果一段时间以后状态还不是 running,可以点击「详情」查看故障原因: + +![](../images/2023-06-26-13-09-Vs9ccy.png) + +部署成功后,可以看到应用的运行情况,包括 CPU 占用、内存占用等。点击外网地址即可通过外网域名直接打开同步服务器的 Web 界面。 + +![](../images/2023-06-26-13-09-YFHPYc.png) + +如果出现以下的界面,则表示部署成功: + +![](../images/2023-06-26-13-09-FwsbfW.png) + +查看日志的方法也很简单,直接点击实例右侧的「三个点」,然后点击「日志」即可查看日志: + +![](../images/2023-06-26-13-09-hdHfxP.png) + +![](../images/2023-06-26-13-09-nwrxrv.png) + +## 客户端设置 + +### 桌面端 + +桌面客户端(macOS/Windows/Linux)配置方法如下: + +1. 先打开「首选项」 + + ![](../images/2023-06-26-12-24-QHYKZt.png) + +2. 点击「**网络**」,往下看,可以看到标有 `self-hosted sync server(自定义同步服务器)` 的方框,在里面填写您的服务端的地址: + + ![](../images/2023-06-26-12-26-HYOaBJ.png) + +3. 重启 Anki,然后点击「**同步**」: + + ![](../images/2023-06-26-12-28-ccnUOj.png) + +4. 这时候会弹出一个输入框让你输入用户名和密码,你需要将你之前设置的用户名和密码输入进去: + + ![](../images/2023-06-26-12-29-z5E9gi.png) + +5. 点击确认后,就会开始同步了。 + + +### 安卓端 + +安卓端也是直接配置即可,我的 AnkiDroid 版本是 `2.15.6`。你可以通过「设置 -> 高级设置 -> 自定义同步服务器」找到配置页面。 + +![](../images/2022-04-10-14-31-vrNHJU.png) + +再填写用户名和密码: + +> 设置 -> 常用设置 -> AnkiWeb账户 + +这样就算配置完成了,所有的牌组都同步过来了。 + +![](../images/2022-04-10-14-32-ADfk8T.png) +![](../images/2022-04-10-14-32-1iudM0.png) + +官方的版本比较旧,如果你想使用更激进的社区版本,可以到这个页面下载最新的 Beta 版: + ++ [https://github.com/ankidroid/Anki-Android/releases](https://github.com/ankidroid/Anki-Android/releases) + +建议下载 **arm64-v8a** 版本。 + +安装完成后,可以通过「设置 -> 同步 -> 自定义同步服务器」找到配置页面: + +![](../images/2023-06-26-12-39-1jsF0t.jpeg) + +再填写用户名和密码: + +> 设置 -> 同步 -> AnkiWeb账户 + +### iOS 端 + +AnkiMobile 也已经支持和自建的同步服务器同步了。至少对于版本 Ankimobile 2.0.90(20090.2) 来说,似乎是可行的,这是一位 iOS 系统用户[在 Anki 论坛报告的](https://forums.ankiweb.net/t/ankimobile-self-sync-server-failure-the-one-bundled-in-version-2-1-60-qt6/27862)。 + +如果设置完成后发现不能同步可以参考下面的内容再试一次: + +> If you're using AnkiMobile and are unable to connect to a server on your local network, please go into the iOS settings, locate Anki near the bottom, and toggle "Allow Anki to access local network" off and then on again. + +上面的内容摘自 [ANki tutorial](https://docs.ankiweb.net/sync-server.html#client-setup) \ No newline at end of file diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2022-04-10-10-52-H2ZWUZ.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2022-04-10-10-52-H2ZWUZ.png" new file mode 100644 index 00000000000..025a0c4e45a Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2022-04-10-10-52-H2ZWUZ.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2022-04-10-14-31-vrNHJU.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2022-04-10-14-31-vrNHJU.png" new file mode 100644 index 00000000000..1ca1cd0ed53 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2022-04-10-14-31-vrNHJU.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2022-04-10-14-32-1iudM0.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2022-04-10-14-32-1iudM0.png" new file mode 100644 index 00000000000..5ba9b3ad878 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2022-04-10-14-32-1iudM0.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2022-04-10-14-32-ADfk8T.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2022-04-10-14-32-ADfk8T.png" new file mode 100644 index 00000000000..ac8de099a1a Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2022-04-10-14-32-ADfk8T.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-11-54-EIVahX.jpg" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-11-54-EIVahX.jpg" new file mode 100644 index 00000000000..1b1fe554ea5 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-11-54-EIVahX.jpg" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-11-55-NDkuEg.jpg" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-11-55-NDkuEg.jpg" new file mode 100644 index 00000000000..a773666c4ff Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-11-55-NDkuEg.jpg" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-11-59-FxJE12.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-11-59-FxJE12.png" new file mode 100644 index 00000000000..fdc343a80ed Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-11-59-FxJE12.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-01-DKect7.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-01-DKect7.png" new file mode 100644 index 00000000000..b4d2db4792a Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-01-DKect7.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-05-CWczxm.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-05-CWczxm.png" new file mode 100644 index 00000000000..d512ad14195 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-05-CWczxm.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-06-lvv6ms.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-06-lvv6ms.png" new file mode 100644 index 00000000000..28a241ade20 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-06-lvv6ms.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-07-s8W7iu.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-07-s8W7iu.png" new file mode 100644 index 00000000000..aa8e415fb5b Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-07-s8W7iu.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-09-RslDGj.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-09-RslDGj.png" new file mode 100644 index 00000000000..0935a645d99 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-09-RslDGj.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-24-QHYKZt.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-24-QHYKZt.png" new file mode 100644 index 00000000000..a446015a5c5 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-24-QHYKZt.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-26-HYOaBJ.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-26-HYOaBJ.png" new file mode 100644 index 00000000000..6996e718eb5 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-26-HYOaBJ.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-28-ccnUOj.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-28-ccnUOj.png" new file mode 100644 index 00000000000..c76f2e0535a Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-28-ccnUOj.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-29-z5E9gi.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-29-z5E9gi.png" new file mode 100644 index 00000000000..ba4d166331c Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-29-z5E9gi.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-39-1jsF0t.jpeg" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-39-1jsF0t.jpeg" new file mode 100644 index 00000000000..7ca839b52b2 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-12-39-1jsF0t.jpeg" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-FwsbfW.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-FwsbfW.png" new file mode 100644 index 00000000000..ac7134504f8 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-FwsbfW.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-Vs9ccy.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-Vs9ccy.png" new file mode 100644 index 00000000000..59460d087f2 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-Vs9ccy.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-YFHPYc.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-YFHPYc.png" new file mode 100644 index 00000000000..0fc1e2d152b Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-YFHPYc.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-hdHfxP.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-hdHfxP.png" new file mode 100644 index 00000000000..00e7aa10391 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-hdHfxP.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-nwrxrv.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-nwrxrv.png" new file mode 100644 index 00000000000..08ff96c0c12 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/2023-06-26-13-09-nwrxrv.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-1.png" new file mode 100644 index 00000000000..700c4e0d4d3 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-2.png" new file mode 100644 index 00000000000..bca16d41669 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-3.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-3.png" new file mode 100644 index 00000000000..01876eeff7a Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-3.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-4.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-4.png" new file mode 100644 index 00000000000..fad0d90a71d Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-4.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-5.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-5.png" new file mode 100644 index 00000000000..d6567da245a Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-5.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-6.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-6.png" new file mode 100644 index 00000000000..78b505e7529 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-6.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-7.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-7.png" new file mode 100644 index 00000000000..9771645376a Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-7.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-8.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-8.png" new file mode 100644 index 00000000000..ca7f7e62e60 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/appsmith-8.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/2-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/2-1.png" new file mode 100644 index 00000000000..5fb4c0ec51f Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/2-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/2-2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/2-2.png" new file mode 100644 index 00000000000..714ad389184 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/2-2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/2-3.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/2-3.png" new file mode 100644 index 00000000000..e0d5a1a605d Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/2-3.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/3-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/3-1.png" new file mode 100644 index 00000000000..10d9ef1b793 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/3-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/3-2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/3-2.png" new file mode 100644 index 00000000000..eef62cdfc5f Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/3-2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/4-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/4-1.png" new file mode 100644 index 00000000000..880e86b32ce Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/4-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/5-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/5-1.png" new file mode 100644 index 00000000000..b8f83e07b0d Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/5-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/5-2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/5-2.png" new file mode 100644 index 00000000000..b9b2404dc9c Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/5-2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/5-3.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/5-3.png" new file mode 100644 index 00000000000..5e22398cdfc Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/5-3.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/fireboom-architecture.jpeg" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/fireboom-architecture.jpeg" new file mode 100644 index 00000000000..7f9660c847f Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/fireboom-architecture.jpeg" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/fireboom-intro.jpeg" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/fireboom-intro.jpeg" new file mode 100644 index 00000000000..848bd2b5d97 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/fireboom/fireboom-intro.jpeg" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-0.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-0.png" new file mode 100644 index 00000000000..51d1b856472 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-0.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-1.png" new file mode 100644 index 00000000000..40327086916 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-10.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-10.png" new file mode 100644 index 00000000000..ebcad36657b Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-10.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-11.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-11.png" new file mode 100644 index 00000000000..7de1f375aa4 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-11.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-12.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-12.png" new file mode 100644 index 00000000000..32fea7a571b Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-12.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-13.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-13.png" new file mode 100644 index 00000000000..da74e2ae6af Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-13.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-14.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-14.png" new file mode 100644 index 00000000000..70d6971d990 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-14.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-15.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-15.png" new file mode 100644 index 00000000000..cd370d79a7b Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-15.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-16.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-16.png" new file mode 100644 index 00000000000..1c2de6f7d4c Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-16.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-17.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-17.png" new file mode 100644 index 00000000000..a41d1df04ff Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-17.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-2.png" new file mode 100644 index 00000000000..bca16d41669 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-3.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-3.png" new file mode 100644 index 00000000000..7cbc77cebe6 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-3.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-4.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-4.png" new file mode 100644 index 00000000000..7011b776993 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-4.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-5.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-5.png" new file mode 100644 index 00000000000..edadcc1ae00 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-5.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-6.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-6.png" new file mode 100644 index 00000000000..4044b336778 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-6.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-7.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-7.png" new file mode 100644 index 00000000000..e2cd50bc191 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-7.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-8.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-8.png" new file mode 100644 index 00000000000..9db3b3c06cf Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-8.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-9.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-9.png" new file mode 100644 index 00000000000..e8dffac2625 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/gitea-9.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-1.png" new file mode 100644 index 00000000000..51d7a08dd35 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-10.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-10.png" new file mode 100644 index 00000000000..47ac9bd3b6a Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-10.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-11.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-11.png" new file mode 100644 index 00000000000..986e50a61e6 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-11.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-12.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-12.png" new file mode 100644 index 00000000000..21e55e93ae9 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-12.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-13.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-13.png" new file mode 100644 index 00000000000..7911c018cf4 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-13.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-14.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-14.png" new file mode 100644 index 00000000000..c3d2cc3bde0 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-14.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-15.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-15.png" new file mode 100644 index 00000000000..11197b975ec Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-15.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-16.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-16.png" new file mode 100644 index 00000000000..d443d3d8dfe Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-16.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-17.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-17.png" new file mode 100644 index 00000000000..1e88fe4f3c5 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-17.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-18.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-18.png" new file mode 100644 index 00000000000..b93a0dcfc9f Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-18.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-19.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-19.png" new file mode 100644 index 00000000000..17c863592f8 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-19.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-2.png" new file mode 100644 index 00000000000..5a9d401f263 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-20.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-20.png" new file mode 100644 index 00000000000..9ed9ed3435f Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-20.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-21.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-21.png" new file mode 100644 index 00000000000..6a1c4a896f5 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-21.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-22.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-22.png" new file mode 100644 index 00000000000..d5e70681e57 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-22.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-3.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-3.png" new file mode 100644 index 00000000000..29ba87c9cc5 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-3.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-4.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-4.png" new file mode 100644 index 00000000000..0790b5ce2e4 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-4.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-5.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-5.png" new file mode 100644 index 00000000000..f35eebc16cd Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-5.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-6.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-6.png" new file mode 100644 index 00000000000..933d0efde05 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-6.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-7.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-7.png" new file mode 100644 index 00000000000..93a5e88a6e8 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-7.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-8.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-8.png" new file mode 100644 index 00000000000..9b41cf4dee0 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-8.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-9.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-9.png" new file mode 100644 index 00000000000..609c7c0959c Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/halo_img-9.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa0.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa0.png" new file mode 100644 index 00000000000..bca16d41669 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa0.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa1.jpg" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa1.jpg" new file mode 100644 index 00000000000..908af82a6ed Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa1.jpg" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa2.jpg" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa2.jpg" new file mode 100644 index 00000000000..b7ddd076b3a Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa2.jpg" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa3.jpg" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa3.jpg" new file mode 100644 index 00000000000..4a897b409c6 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa3.jpg" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa4.jpg" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa4.jpg" new file mode 100644 index 00000000000..ed4f9c4e40b Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa4.jpg" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa5.jpg" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa5.jpg" new file mode 100644 index 00000000000..f233bedc7a0 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa5.jpg" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa6.jpg" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa6.jpg" new file mode 100644 index 00000000000..f5691f979ba Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa6.jpg" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa_home.jpg" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa_home.jpg" new file mode 100644 index 00000000000..a7cd310760b Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/illa_home.jpg" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-1.png" new file mode 100644 index 00000000000..700c4e0d4d3 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-10.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-10.png" new file mode 100644 index 00000000000..0aa0f2546ce Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-10.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-11.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-11.png" new file mode 100644 index 00000000000..ef702aadb7e Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-11.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-2.png" new file mode 100644 index 00000000000..bca16d41669 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-3.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-3.png" new file mode 100644 index 00000000000..00edfb9382b Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-3.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-4.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-4.png" new file mode 100644 index 00000000000..c947ad852ca Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-4.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-5.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-5.png" new file mode 100644 index 00000000000..289789fd639 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-5.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-6.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-6.png" new file mode 100644 index 00000000000..a58fbc16537 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-6.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-7.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-7.png" new file mode 100644 index 00000000000..414ff44e067 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-7.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-8.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-8.png" new file mode 100644 index 00000000000..dc7bb21bd4e Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-8.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-9.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-9.png" new file mode 100644 index 00000000000..0011841a7d1 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/pageplug-9.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/0.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/0.png" new file mode 100644 index 00000000000..3b876679928 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/0.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/1.png" new file mode 100644 index 00000000000..8594460ab60 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/10.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/10.png" new file mode 100644 index 00000000000..a8785255d65 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/10.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/11.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/11.png" new file mode 100644 index 00000000000..4582e3ffe3f Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/11.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/12.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/12.png" new file mode 100644 index 00000000000..1eca4f3c1ab Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/12.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/13.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/13.png" new file mode 100644 index 00000000000..1c592128b98 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/13.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/14.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/14.png" new file mode 100644 index 00000000000..d5ab998613d Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/14.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/15.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/15.png" new file mode 100644 index 00000000000..d8ae3e93589 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/15.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/16.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/16.png" new file mode 100644 index 00000000000..ab8def218f7 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/16.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/17.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/17.png" new file mode 100644 index 00000000000..6dedc0883d3 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/17.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/2.png" new file mode 100644 index 00000000000..0cbffe89e7b Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/3.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/3.png" new file mode 100644 index 00000000000..d08b062b0a4 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/3.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/4.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/4.png" new file mode 100644 index 00000000000..97b8d6a7c99 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/4.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/5.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/5.png" new file mode 100644 index 00000000000..3568a104c8c Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/5.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/6.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/6.png" new file mode 100644 index 00000000000..6a25d0523ce Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/6.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/7.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/7.png" new file mode 100644 index 00000000000..05553d34735 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/7.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/8.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/8.png" new file mode 100644 index 00000000000..50dbf2e31bc Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/8.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/9.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/9.png" new file mode 100644 index 00000000000..5b117a1c33f Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/tailchat/9.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-0.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-0.png" new file mode 100644 index 00000000000..2281aaa4123 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-0.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-1.png" new file mode 100644 index 00000000000..a19a6b255b3 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-10.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-10.png" new file mode 100644 index 00000000000..6a7fb98ddb4 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-10.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-2.png" new file mode 100644 index 00000000000..0cbffe89e7b Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-3.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-3.png" new file mode 100644 index 00000000000..56f6c056be6 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-3.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-4.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-4.png" new file mode 100644 index 00000000000..abda6fa2d15 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-4.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-5.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-5.png" new file mode 100644 index 00000000000..8c9b87c88d9 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-5.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-6.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-6.png" new file mode 100644 index 00000000000..8aa71909987 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-6.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-7.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-7.png" new file mode 100644 index 00000000000..810d8e793df Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-7.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-8.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-8.png" new file mode 100644 index 00000000000..1a657270d13 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-8.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-9.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-9.png" new file mode 100644 index 00000000000..6aeebd4b6de Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/uptimekuma_img-9.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_1.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_1.png" new file mode 100644 index 00000000000..d641378d420 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_1.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_10.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_10.png" new file mode 100644 index 00000000000..d1cd7993028 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_10.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_11.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_11.png" new file mode 100644 index 00000000000..103bf474654 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_11.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_12.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_12.png" new file mode 100644 index 00000000000..80c69d18580 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_12.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_13.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_13.png" new file mode 100644 index 00000000000..250114b79ef Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_13.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_14.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_14.png" new file mode 100644 index 00000000000..d180432b02c Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_14.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_15.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_15.png" new file mode 100644 index 00000000000..87711203809 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_15.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_16.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_16.png" new file mode 100644 index 00000000000..b490fade878 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_16.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_17.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_17.png" new file mode 100644 index 00000000000..9d0bc039160 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_17.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_2.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_2.png" new file mode 100644 index 00000000000..83254bdb6cd Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_2.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_3.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_3.png" new file mode 100644 index 00000000000..1b0a1f926bb Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_3.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_4.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_4.png" new file mode 100644 index 00000000000..86ad0a605c7 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_4.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_5.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_5.png" new file mode 100644 index 00000000000..1a9a1566ae1 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_5.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_6.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_6.png" new file mode 100644 index 00000000000..52b0dc908d4 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_6.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_7.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_7.png" new file mode 100644 index 00000000000..a18bfa6d170 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_7.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_8.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_8.png" new file mode 100644 index 00000000000..484684f79ae Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_8.png" differ diff --git "a/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_9.png" "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_9.png" new file mode 100644 index 00000000000..24db5cadb90 Binary files /dev/null and "b/docs/5.0/docs/user-doc/application/c-app-launchpad/\346\233\264\345\244\232\346\241\210\344\276\213/images/wordpress_9.png" differ diff --git a/docs/5.0/docs/user-doc/control/kubepanel/Kubepanel.md b/docs/5.0/docs/user-doc/control/kubepanel/Kubepanel.md new file mode 100644 index 00000000000..213a6de6755 --- /dev/null +++ b/docs/5.0/docs/user-doc/control/kubepanel/Kubepanel.md @@ -0,0 +1,25 @@ +# Kubepanel + +kubepanel是一款可视化的kubernetes管理面板。熟悉k8s的用户可以在其中直接查看和管理各种kubernetes资源。 + +## 快速开始 + +### 进入kubepanel + +直接点击桌面上的kubepanel app就可以直接进入kubepanel页面。 + +![](./images/kubepanel-1.png) + +可以在其中看到部署信息,资源概览,与发生事件等信息。 + +## 部署资源 + +进入kubepanel后,点击左下角加号,即可使用其部署资源。 + +![](./images/kubepanel-2.png) + +部署资源直接使用yml文件,可以自己编写或者导入,也可以点击左上角choose a template选择您所需要的模版然后进行修改。 + +![](./images/kubepanel-3.png) + +修改完成配置文件之后,点击右下角的create即可开始部署,等待部署完成即可。 diff --git a/docs/5.0/docs/user-doc/control/kubepanel/images/kubepanel-1.png b/docs/5.0/docs/user-doc/control/kubepanel/images/kubepanel-1.png new file mode 100644 index 00000000000..6f19cbdd2b5 Binary files /dev/null and b/docs/5.0/docs/user-doc/control/kubepanel/images/kubepanel-1.png differ diff --git a/docs/5.0/docs/user-doc/control/kubepanel/images/kubepanel-2.png b/docs/5.0/docs/user-doc/control/kubepanel/images/kubepanel-2.png new file mode 100644 index 00000000000..c4d0a30a733 Binary files /dev/null and b/docs/5.0/docs/user-doc/control/kubepanel/images/kubepanel-2.png differ diff --git a/docs/5.0/docs/user-doc/control/kubepanel/images/kubepanel-3.png b/docs/5.0/docs/user-doc/control/kubepanel/images/kubepanel-3.png new file mode 100644 index 00000000000..bec8b990793 Binary files /dev/null and b/docs/5.0/docs/user-doc/control/kubepanel/images/kubepanel-3.png differ diff --git a/docs/5.0/docs/user-doc/control/terminal/images/database-terminal-1.png b/docs/5.0/docs/user-doc/control/terminal/images/database-terminal-1.png new file mode 100644 index 00000000000..f1fcc577c7f Binary files /dev/null and b/docs/5.0/docs/user-doc/control/terminal/images/database-terminal-1.png differ diff --git a/docs/5.0/docs/user-doc/control/terminal/images/database-terminal.png b/docs/5.0/docs/user-doc/control/terminal/images/database-terminal.png new file mode 100644 index 00000000000..01dba426f6b Binary files /dev/null and b/docs/5.0/docs/user-doc/control/terminal/images/database-terminal.png differ diff --git a/docs/5.0/docs/user-doc/control/terminal/images/nginx-terminal-1.png b/docs/5.0/docs/user-doc/control/terminal/images/nginx-terminal-1.png new file mode 100644 index 00000000000..ecb9443c962 Binary files /dev/null and b/docs/5.0/docs/user-doc/control/terminal/images/nginx-terminal-1.png differ diff --git a/docs/5.0/docs/user-doc/control/terminal/images/nginx-terminal.png b/docs/5.0/docs/user-doc/control/terminal/images/nginx-terminal.png new file mode 100644 index 00000000000..c8fa6b4ae9f Binary files /dev/null and b/docs/5.0/docs/user-doc/control/terminal/images/nginx-terminal.png differ diff --git a/docs/5.0/docs/user-doc/control/terminal/images/terminal-1.png b/docs/5.0/docs/user-doc/control/terminal/images/terminal-1.png new file mode 100644 index 00000000000..763adf7558e Binary files /dev/null and b/docs/5.0/docs/user-doc/control/terminal/images/terminal-1.png differ diff --git a/docs/5.0/docs/user-doc/control/terminal/images/terminal-pod.png b/docs/5.0/docs/user-doc/control/terminal/images/terminal-pod.png new file mode 100644 index 00000000000..9e649dac3a1 Binary files /dev/null and b/docs/5.0/docs/user-doc/control/terminal/images/terminal-pod.png differ diff --git a/docs/5.0/docs/user-doc/control/terminal/images/terminal.webp b/docs/5.0/docs/user-doc/control/terminal/images/terminal.webp new file mode 100644 index 00000000000..d1daf72539d Binary files /dev/null and b/docs/5.0/docs/user-doc/control/terminal/images/terminal.webp differ diff --git a/docs/5.0/docs/user-doc/control/terminal/terminal.md b/docs/5.0/docs/user-doc/control/terminal/terminal.md new file mode 100644 index 00000000000..111e09de94f --- /dev/null +++ b/docs/5.0/docs/user-doc/control/terminal/terminal.md @@ -0,0 +1,80 @@ +--- +sidebar_position: 4 +--- + +# 终端 + +终端是Sealos云操作系统内置的应用,它是一款非常强大的应用,与单机操作系统的终端一样,允许用户与操作系统进行直接交互,可以通过键入命令来执行各种操作。 + +终端的价值在于其高效,灵活和强大的特性。对于许多任务来说,使用终端比使用图形用户界面(GUI)更快更简洁。对于开发者而言,终端是必不可少的工具。使用终端,可以让用户深入理解和控制 Sealos 云操作系统。 + +## 快速开始 + +### 进入应用容器的终端 + +假设你在应用管理中部署了一个Nginx应用,点击应用管理进入应用详情页面后,点击应用右侧的终端即可进入当前应用的终端。 + +![](./images/terminal-1.png) + +## 终端一键直连数据库 + +还可以在终端中一键直连数据库 App中创建的数据库。 + +进入数据库详情页面,点击左侧的「一键连接」: + +![](./images/database-terminal.png) + +就会直接跳转到终端 App 并连接数据库: + +![](./images/database-terminal-1.png) + +## 终端直接操作 Kubernetes 资源 + +:::danger + +以下操作需要一定的 Kubernetes 和容器相关知识基础,否则不要轻易操作。 + +::: + +资深 Kubernetes 用户可以直接使用终端来操作 Kubernetes 资源,对于资深用户而言,终端的优势有很多: + ++ 可以批量操作和自动化 ++ 高度灵活性 ++ 可以进行深入的故障排查 + +以下是一些常见的终端中操作 Kubernetes 资源的示例: + +### 查看用户的 Pod 列表 + +```bash +kubectl get pods +``` + +### 创建和管理资源对象 + +```bash +# 使用YAML或JSON文件创建资源 +$ kubectl create -f + +# 使用YAML或JSON文件创建或更新资源 +$ kubectl apply -f + +# 删除指定类型和名称的资源 +$ kubectl delete + +# 查看指定 Deployment 的滚动更新状态 +$ kubectl rollout status deployment/ +``` + +### 故障排查 + +```bash +# 获取指定资源的详细信息,包括事件和状态 +$ kubectl describe + +# 获取指定 Pod 中指定容器的日志 +$ kubectl logs -c + +# 在指定 Pod 中打开一个终端,以便进行调试 +$ kubectl exec -it +``` \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/cronjob/cronjob.md b/docs/5.0/docs/user-doc/cronjob/cronjob.md new file mode 100644 index 00000000000..dc0d05d2f2f --- /dev/null +++ b/docs/5.0/docs/user-doc/cronjob/cronjob.md @@ -0,0 +1,35 @@ +# 定时任务 + +定时任务顾名思义,可以定时的帮助我们完成一些工作。sealos提供了的定时任务app可以让我们快速的完成任务的配置,查看具体任务的执行情况。 + +## 快速开始 + +### 创建定时任务 + +进入sealos桌面,点击定时任务,进入到定时任务的创建页面。 + +![](./images/cronjob-1.png) + +#### cron表达式 + +配置中的cron表达式是一种配置定时任务的特殊语法,如果不熟悉该语法的具体规则可以点击更多示例查看文档。 + +#### 类型 + +当前sealos的定时任务支持三种类型: + +- 访问URL:访问某个特定的URL +- 扩缩容Launchpad:对某个应用做扩缩容操作 +- 执行命令:使用某个应用程序执行某个命令,可以看做使用GUI直接配置kubernetes中的cronjob + +配置好各项参数之后,点击右上角部署即可完成定时任务的部署。 + +## 查看任务详情 + +部署任务之后,点击定时任务app会出现任务列表: + +![](./images/cronjob-2.png) + +点击详情,可以查看任务具体的执行情况与日志。 + +![](./images/cronjob-3.png) \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/cronjob/images/cronjob-1.png b/docs/5.0/docs/user-doc/cronjob/images/cronjob-1.png new file mode 100644 index 00000000000..8858d30e84c Binary files /dev/null and b/docs/5.0/docs/user-doc/cronjob/images/cronjob-1.png differ diff --git a/docs/5.0/docs/user-doc/cronjob/images/cronjob-2.png b/docs/5.0/docs/user-doc/cronjob/images/cronjob-2.png new file mode 100644 index 00000000000..5be593d40c9 Binary files /dev/null and b/docs/5.0/docs/user-doc/cronjob/images/cronjob-2.png differ diff --git a/docs/5.0/docs/user-doc/cronjob/images/cronjob-3.png b/docs/5.0/docs/user-doc/cronjob/images/cronjob-3.png new file mode 100644 index 00000000000..5ed993d6666 Binary files /dev/null and b/docs/5.0/docs/user-doc/cronjob/images/cronjob-3.png differ diff --git a/docs/5.0/docs/user-doc/database/database.md b/docs/5.0/docs/user-doc/database/database.md new file mode 100644 index 00000000000..cb12d442dc0 --- /dev/null +++ b/docs/5.0/docs/user-doc/database/database.md @@ -0,0 +1,300 @@ +--- +sidebar_position: 1 +--- + +# 数据库 + +**数据库**是一个应用的核心组成部分,Sealos自带的数据库应用,提供了一个数据库集群部署管理工具,可以帮助你快速部署和管理数据库集群。目前支持 MySQL、PostgreSQL、MongoDB、Redis、Kafka等主流数据库。 + +目前数据库支持如下特性: + ++ 弹性伸缩 ++ 支持多版本、多类型 数据库 ++ 数据库 连接:一键连接、外网访问 ++ 数据库 连接:手动备份、自动备份 ++ 数据库 监控:资源、状态、性能监控 ++ 数据库 迁移:公网迁移、文件迁移 ++ 数据库 高可用:支持多个 数据库 实例 ++ 可视化 数据库 管理:新建、删除、更新 、暂停、重启 数据库 + + +## 快速开始 + +以部署一个 PostgreSQL 数据库为例,体验 **数据库** 的便捷性。 + +在Sealos桌面进入数据库应用: + +![](./images/quick-start-1.png) + +进入后点击新建数据库: + +![](./images/quick-start-2.png) + +填写数据库名并选择对应的数据库和参数: + +![](./images/quick-start-3.png) + +填写完参数之后,点击右上角部署即可完成数据库部署。 + +部署成功之后,可以数据库主页面看到自己的部署情况。 + +![](./images/quick-start-4.png) + +点击每个数据库的详情,可以查看具体的配置信息。 + +![](./images/quick-start-5.png) + +## 数据库连接 + +### 内网一键连接 + +进入对应的数据库详情页面,在页面左侧包含连接信息,点击连接,即可使用系统自带的终端应用现场连接数据库。 + +![connect_1](./images/connect_1.png) + +连接成功后,在终端操作数据库: + +![connect_2](./images/connect_2.png) + +### 外网访问 + +外网访问默认是关闭的,需要手动开启。 + +进入数据库详情页 ,点击链接信息右侧的外网访问按钮。 + +![connect_3](./images/connect_3.png) + +外网访问需要额外的网络计费,确认开启之后即可开启。 + +![connect_4](./images/connect_4.png) + +开启之后,数据库的连接信息会哦出现外网地址一栏,通过这些信息即可使用数据库连接工具进行连接。 + +![connect_5](./images/connect_5.png) + +## 数据库备份 + +数据库提供有手动备份和自动备份两种备份方式,可以根据需要自由选择。 + +### 手动备份 +在数据库详情页面,点击进入备份列表,右上角备份按钮。 + +![backup_1](./images/backup_1.png) + +填写备份信息,开始备份: + +![backup_2](./images/backup_2.png) + +查看备份状态: + +![backup_3](./images/backup_3.png) + +![backup_4](./images/backup_4.png) + + +### 自动备份 +在数据库详情页面,点击进入备份列表,右上角备份按钮。 + +![backup_1](./images/backup_1.png) + +开启自动备份,填写备份信息: + +![backup_6](./images/backup_6.png) + + +## 数据库迁移 + +以 MySQL 数据库为例,介绍数据库迁移的过程。 + +### 公网迁移 + +公网迁移涉及两个数据库:源数据库、目标数据库。源数据库是迁移的数据来源,目标数据库是迁移的数据目的地。 + +以下介绍中以本地数据库做为源数据库进行演示。 + +进入目标数据库,使用终端连接: + +![migration_1](./images/migration_1.png) + +在终端界面中创建对应的database(如果已经存在对应的database,则跳过这一步) + +![migration_2](./images/migration_2.png) +```bash +# 创建数据库sql语句,示例: +create database testmysql; +``` + +进入目标数据库公网迁移界面,点击迁移按钮: + +![migration_3](./images/migration_3.png) + +查看迁移配置信息,并勾选我已知晓。 + +![migration_4](./images/migration_4.png) + +复制迁移配置信息,如下: +```bash +# 设置配置信息sql语句,示例: +$ set global binlog_format=ROW; +$ set binlog_row_image ='FULL'; +``` + +5. 在源数据库中执行设置配置信息(MySQL、Postgres需要手动配置信息,Mongo不需要进行配置): +```bash +# 设置配置信息sql语句,示例: +$ set global binlog_format=ROW; +$ set binlog_row_image ='FULL'; +``` +![migration_5](./images/migration_5.png) + +进入目标数据库,填写源数据库的迁移信息,要迁移哪些表,并填写要迁移到目标数据库中哪个database: + +![migration_6](./images/migration_6.png) + +如果需要持续从源数据库迁移数据,可开启高级配置中的持续迁移,如下: + +![migration_7](./images/migration_7.png) + +查看迁移任务信息: + +![migration_8](./images/migration_8.png) + +进入目标数据库,连接目标数据库,检查迁移数据是否完整: + +![migration_9](./images/migration_9.png) + +### 文件迁移 + +进入目标数据库,使用终端连接。 + +![migration_10](./images/migration_10.png) + +在终端界面中创建对应的database(如果已经存在对应的database,则跳过这一步) + +```bash +# 创建数据库sql语句,示例: +$ create database testmysql; +``` +![migration_11](./images/migration_11.png) + +点击数据库中的文件导入,进入文件导入页面,开始迁移: + +![migration_12](./images/migration_12.png) + +文件迁移中,等待迁移结果 + +![migration_13](./images/migration_13.png) + +![migration_14](./images/migration_14.png) + +连接数据库,检查迁移数据是否完整 + +![migration_15](./images/migration_15.png) + +## 更新数据库配置 + +由于数据库的某些参数在修改后无法立即生效,因此需要通过应用yaml来实现修改参数并重启数据库通过yaml修改参数会导致数据库**重启**,整个过程大概会持续**20s**左右。这里以**Postgres**数据库的参数修改为例,具体操作步骤如下。 + +首先进入桌面上的终端应用。 + +![migration_15](./images/update-1.png) + +进入之后,使用vim编辑pg-config.yaml + +```bash +vim pg-config.yaml +``` + +![](./images/config-2.png) + +复制下方的yaml到pg-config.yaml中,并保存。 + +![](./images/config-3.png) + +```yaml +apiVersion: apps.kubeblocks.io/v1alpha1 +kind: OpsRequest +metadata: + name: test +spec: + clusterRef: test-pg #修改为自己的数据库名 + reconfigure: + componentName: postgresql + configurations: #以下配置仅供参考,只需保留要修改的部分即可,并修改对应的参数的值 + - keys: + - key: postgresql.conf + parameters: + - key: max_connections #设置可以同时与数据库建立的最大连接数 + value: "1000" + name: postgresql-configuration + ttlSecondsAfterSucceed: 0 + type: Reconfiguring +``` + +**常见的postgres参数**: + +| 参数名 | 描述 | +| -------------------- | ------------------------------------------- | +| max_connections | 设置可以同时与数据库建立
的最大连接数 | +| max_wal_size | 设置WAL文件的最大大小 | +| min_wal_size | 设置WAL文件的最小大小 | +| max_worker_processes | 设置PostgreSQL可以启动
的最大后台进程数 | +| shared_buffers | 设置PostgreSQL可以启动
的最大后台进程数 | + +**常见的mysql参数**: + +| 参数名 | 描述 | +| ----------------------- | ---------------------- | +| innodb_buffer_pool_size | 设置InnoDB缓冲池的大小 | +| max_connections | 允许的最大并发连接数 | +| query_cache_size | 查询缓存的大小 | +| thread_cache_size | 线程缓存的大小 | +| max_allowed_packet | 最大数据包大小 | +| innodb_log_file_size | InnoDB日志文件的大小 | + +**常见的mongo参数**: + +| 参数名 | 描述 | +| ----------------------- | ---------------- | +| storage.dbPath | 数据文件存放路径 | +| storage.journal.enabled | 启用日志 | +| net.port | 服务器端口 | +| net.bindIp | 绑定的IP地址 | + +**常见的redis参数**: + +| 参数名 | 描述 | +| ---------------- | ---------------- | +| maxclients | 最大客户端连接数 | +| maxmemory | 最大内存使用量 | +| maxmemory-policy | 内存淘汰策略 | +| appendonly | AOF持久化开关 | +| appendfsync | AOF文件刷新频率 | + +使用如下命令应用pg-config.yaml + +```bash +kubectl apply -f pg-config.yaml +``` + +![](./images/config-4.png) + +应用命令之后,可以使用如下命令检查pg-config.yaml是否应用成功 + +```bash +# OpsRequest中对应的状态为Succeed且pod对应的状态为Running则说明配置应用成功 +kubectl get OpsRequest +kubectl get pod +``` + +![](./images/config-5.png) + +进入数据库查看配置是否生效: + +```bash +show max_connections; +``` + + +![](https://bearsblog.oss-cn-beijing.aliyuncs.com/img/config-6.png)![](./images/config-7.png) + diff --git a/docs/5.0/docs/user-doc/database/images/backup_1.png b/docs/5.0/docs/user-doc/database/images/backup_1.png new file mode 100644 index 00000000000..8c9e8c50867 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/backup_1.png differ diff --git a/docs/5.0/docs/user-doc/database/images/backup_2.png b/docs/5.0/docs/user-doc/database/images/backup_2.png new file mode 100644 index 00000000000..02f239da516 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/backup_2.png differ diff --git a/docs/5.0/docs/user-doc/database/images/backup_3.png b/docs/5.0/docs/user-doc/database/images/backup_3.png new file mode 100644 index 00000000000..e0d5dca8c2e Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/backup_3.png differ diff --git a/docs/5.0/docs/user-doc/database/images/backup_4.png b/docs/5.0/docs/user-doc/database/images/backup_4.png new file mode 100644 index 00000000000..58c37d7c5d2 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/backup_4.png differ diff --git a/docs/5.0/docs/user-doc/database/images/backup_5.png b/docs/5.0/docs/user-doc/database/images/backup_5.png new file mode 100644 index 00000000000..8c9e8c50867 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/backup_5.png differ diff --git a/docs/5.0/docs/user-doc/database/images/backup_6.png b/docs/5.0/docs/user-doc/database/images/backup_6.png new file mode 100644 index 00000000000..48b20cf2b8c Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/backup_6.png differ diff --git a/docs/5.0/docs/user-doc/database/images/config-1.png b/docs/5.0/docs/user-doc/database/images/config-1.png new file mode 100644 index 00000000000..d8c8c62be3a Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/config-1.png differ diff --git a/docs/5.0/docs/user-doc/database/images/config-2.png b/docs/5.0/docs/user-doc/database/images/config-2.png new file mode 100644 index 00000000000..4bd234485bf Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/config-2.png differ diff --git a/docs/5.0/docs/user-doc/database/images/config-3.png b/docs/5.0/docs/user-doc/database/images/config-3.png new file mode 100644 index 00000000000..1f6d2ff3383 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/config-3.png differ diff --git a/docs/5.0/docs/user-doc/database/images/config-4.png b/docs/5.0/docs/user-doc/database/images/config-4.png new file mode 100644 index 00000000000..02f9a61eddd Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/config-4.png differ diff --git a/docs/5.0/docs/user-doc/database/images/config-5.png b/docs/5.0/docs/user-doc/database/images/config-5.png new file mode 100644 index 00000000000..412e0bbe7fc Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/config-5.png differ diff --git a/docs/5.0/docs/user-doc/database/images/config-6.png b/docs/5.0/docs/user-doc/database/images/config-6.png new file mode 100644 index 00000000000..5f49dd84f12 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/config-6.png differ diff --git a/docs/5.0/docs/user-doc/database/images/config-7.png b/docs/5.0/docs/user-doc/database/images/config-7.png new file mode 100644 index 00000000000..88f930a876f Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/config-7.png differ diff --git a/docs/5.0/docs/user-doc/database/images/connect_1.png b/docs/5.0/docs/user-doc/database/images/connect_1.png new file mode 100644 index 00000000000..52c6879b4d2 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/connect_1.png differ diff --git a/docs/5.0/docs/user-doc/database/images/connect_2.png b/docs/5.0/docs/user-doc/database/images/connect_2.png new file mode 100644 index 00000000000..76215ce1c9a Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/connect_2.png differ diff --git a/docs/5.0/docs/user-doc/database/images/connect_3.png b/docs/5.0/docs/user-doc/database/images/connect_3.png new file mode 100644 index 00000000000..0a205d4a362 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/connect_3.png differ diff --git a/docs/5.0/docs/user-doc/database/images/connect_4.png b/docs/5.0/docs/user-doc/database/images/connect_4.png new file mode 100644 index 00000000000..a1a4366d15c Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/connect_4.png differ diff --git a/docs/5.0/docs/user-doc/database/images/connect_5.png b/docs/5.0/docs/user-doc/database/images/connect_5.png new file mode 100644 index 00000000000..0b4a3b398f7 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/connect_5.png differ diff --git a/docs/5.0/docs/user-doc/database/images/connect_6.png b/docs/5.0/docs/user-doc/database/images/connect_6.png new file mode 100644 index 00000000000..3125cbb7bf1 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/connect_6.png differ diff --git a/docs/5.0/docs/user-doc/database/images/connect_7.png b/docs/5.0/docs/user-doc/database/images/connect_7.png new file mode 100644 index 00000000000..e8bce07c9cd Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/connect_7.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_1.png b/docs/5.0/docs/user-doc/database/images/migration_1.png new file mode 100644 index 00000000000..d5527ccf511 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_1.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_10.png b/docs/5.0/docs/user-doc/database/images/migration_10.png new file mode 100644 index 00000000000..d5527ccf511 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_10.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_11.png b/docs/5.0/docs/user-doc/database/images/migration_11.png new file mode 100644 index 00000000000..89525529685 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_11.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_12.png b/docs/5.0/docs/user-doc/database/images/migration_12.png new file mode 100644 index 00000000000..12561fb4eba Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_12.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_13.png b/docs/5.0/docs/user-doc/database/images/migration_13.png new file mode 100644 index 00000000000..074b4882b95 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_13.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_14.png b/docs/5.0/docs/user-doc/database/images/migration_14.png new file mode 100644 index 00000000000..409e77e907a Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_14.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_15.png b/docs/5.0/docs/user-doc/database/images/migration_15.png new file mode 100644 index 00000000000..54589726b67 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_15.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_2.png b/docs/5.0/docs/user-doc/database/images/migration_2.png new file mode 100644 index 00000000000..89525529685 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_2.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_3.png b/docs/5.0/docs/user-doc/database/images/migration_3.png new file mode 100644 index 00000000000..2bc1d55549e Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_3.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_4.png b/docs/5.0/docs/user-doc/database/images/migration_4.png new file mode 100644 index 00000000000..9a49e93f1b6 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_4.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_5.png b/docs/5.0/docs/user-doc/database/images/migration_5.png new file mode 100644 index 00000000000..e9b0d128758 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_5.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_6.png b/docs/5.0/docs/user-doc/database/images/migration_6.png new file mode 100644 index 00000000000..271c5bafd8b Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_6.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_7.png b/docs/5.0/docs/user-doc/database/images/migration_7.png new file mode 100644 index 00000000000..77841165996 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_7.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_8.png b/docs/5.0/docs/user-doc/database/images/migration_8.png new file mode 100644 index 00000000000..3202d5031fb Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_8.png differ diff --git a/docs/5.0/docs/user-doc/database/images/migration_9.png b/docs/5.0/docs/user-doc/database/images/migration_9.png new file mode 100644 index 00000000000..54589726b67 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/migration_9.png differ diff --git a/docs/5.0/docs/user-doc/database/images/quick-start-1.png b/docs/5.0/docs/user-doc/database/images/quick-start-1.png new file mode 100644 index 00000000000..c642966a5a4 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/quick-start-1.png differ diff --git a/docs/5.0/docs/user-doc/database/images/quick-start-2.png b/docs/5.0/docs/user-doc/database/images/quick-start-2.png new file mode 100644 index 00000000000..1be531d6633 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/quick-start-2.png differ diff --git a/docs/5.0/docs/user-doc/database/images/quick-start-3.png b/docs/5.0/docs/user-doc/database/images/quick-start-3.png new file mode 100644 index 00000000000..30a5f4615a1 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/quick-start-3.png differ diff --git a/docs/5.0/docs/user-doc/database/images/quick-start-4.png b/docs/5.0/docs/user-doc/database/images/quick-start-4.png new file mode 100644 index 00000000000..b40774a1786 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/quick-start-4.png differ diff --git a/docs/5.0/docs/user-doc/database/images/quick-start-5.png b/docs/5.0/docs/user-doc/database/images/quick-start-5.png new file mode 100644 index 00000000000..83f6b24a51d Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/quick-start-5.png differ diff --git a/docs/5.0/docs/user-doc/database/images/start_10.png b/docs/5.0/docs/user-doc/database/images/start_10.png new file mode 100644 index 00000000000..6e10d9cedd0 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/start_10.png differ diff --git a/docs/5.0/docs/user-doc/database/images/start_11.png b/docs/5.0/docs/user-doc/database/images/start_11.png new file mode 100644 index 00000000000..633705ae905 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/start_11.png differ diff --git a/docs/5.0/docs/user-doc/database/images/start_12.png b/docs/5.0/docs/user-doc/database/images/start_12.png new file mode 100644 index 00000000000..f08ae8c081d Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/start_12.png differ diff --git a/docs/5.0/docs/user-doc/database/images/start_2.png b/docs/5.0/docs/user-doc/database/images/start_2.png new file mode 100644 index 00000000000..016fe962470 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/start_2.png differ diff --git a/docs/5.0/docs/user-doc/database/images/start_3.png b/docs/5.0/docs/user-doc/database/images/start_3.png new file mode 100644 index 00000000000..f687bb3cda4 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/start_3.png differ diff --git a/docs/5.0/docs/user-doc/database/images/start_4.png b/docs/5.0/docs/user-doc/database/images/start_4.png new file mode 100644 index 00000000000..175419decad Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/start_4.png differ diff --git a/docs/5.0/docs/user-doc/database/images/start_5.png b/docs/5.0/docs/user-doc/database/images/start_5.png new file mode 100644 index 00000000000..da9edd9ca8c Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/start_5.png differ diff --git a/docs/5.0/docs/user-doc/database/images/start_6.png b/docs/5.0/docs/user-doc/database/images/start_6.png new file mode 100644 index 00000000000..e61a8d5befb Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/start_6.png differ diff --git a/docs/5.0/docs/user-doc/database/images/start_7.png b/docs/5.0/docs/user-doc/database/images/start_7.png new file mode 100644 index 00000000000..63aeada4ce9 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/start_7.png differ diff --git a/docs/5.0/docs/user-doc/database/images/start_8.png b/docs/5.0/docs/user-doc/database/images/start_8.png new file mode 100644 index 00000000000..8e2d489183a Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/start_8.png differ diff --git a/docs/5.0/docs/user-doc/database/images/start_9.png b/docs/5.0/docs/user-doc/database/images/start_9.png new file mode 100644 index 00000000000..cbb8d4a36ce Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/start_9.png differ diff --git a/docs/5.0/docs/user-doc/database/images/update-1.png b/docs/5.0/docs/user-doc/database/images/update-1.png new file mode 100644 index 00000000000..0cea1558a92 Binary files /dev/null and b/docs/5.0/docs/user-doc/database/images/update-1.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/1.png b/docs/5.0/docs/user-doc/objectstorage/images/1.png new file mode 100644 index 00000000000..3ff6dfa9b02 Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/1.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/10.png b/docs/5.0/docs/user-doc/objectstorage/images/10.png new file mode 100644 index 00000000000..e636144a8ee Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/10.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/11.png b/docs/5.0/docs/user-doc/objectstorage/images/11.png new file mode 100644 index 00000000000..12624610f67 Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/11.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/12.png b/docs/5.0/docs/user-doc/objectstorage/images/12.png new file mode 100644 index 00000000000..4ae45dedc78 Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/12.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/13.png b/docs/5.0/docs/user-doc/objectstorage/images/13.png new file mode 100644 index 00000000000..e3cc905cd04 Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/13.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/14.png b/docs/5.0/docs/user-doc/objectstorage/images/14.png new file mode 100644 index 00000000000..66dff9b0eec Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/14.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/15.png b/docs/5.0/docs/user-doc/objectstorage/images/15.png new file mode 100644 index 00000000000..0022dce6edd Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/15.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/16.png b/docs/5.0/docs/user-doc/objectstorage/images/16.png new file mode 100644 index 00000000000..442bdb7e067 Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/16.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/17.png b/docs/5.0/docs/user-doc/objectstorage/images/17.png new file mode 100644 index 00000000000..0e768c7adef Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/17.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/2.png b/docs/5.0/docs/user-doc/objectstorage/images/2.png new file mode 100644 index 00000000000..386fb07680d Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/2.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/3.png b/docs/5.0/docs/user-doc/objectstorage/images/3.png new file mode 100644 index 00000000000..3e17d0f6863 Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/3.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/4.png b/docs/5.0/docs/user-doc/objectstorage/images/4.png new file mode 100644 index 00000000000..17ffbdd8d58 Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/4.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/5.png b/docs/5.0/docs/user-doc/objectstorage/images/5.png new file mode 100644 index 00000000000..61c1098e18a Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/5.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/6.png b/docs/5.0/docs/user-doc/objectstorage/images/6.png new file mode 100644 index 00000000000..4f8e59ec725 Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/6.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/7.png b/docs/5.0/docs/user-doc/objectstorage/images/7.png new file mode 100644 index 00000000000..65a4e96dbca Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/7.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/8.png b/docs/5.0/docs/user-doc/objectstorage/images/8.png new file mode 100644 index 00000000000..827eb00383d Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/8.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/images/9.png b/docs/5.0/docs/user-doc/objectstorage/images/9.png new file mode 100644 index 00000000000..6ba91e30a63 Binary files /dev/null and b/docs/5.0/docs/user-doc/objectstorage/images/9.png differ diff --git a/docs/5.0/docs/user-doc/objectstorage/objectstorage.md b/docs/5.0/docs/user-doc/objectstorage/objectstorage.md new file mode 100644 index 00000000000..0ccc8b87cba --- /dev/null +++ b/docs/5.0/docs/user-doc/objectstorage/objectstorage.md @@ -0,0 +1,229 @@ +--- +sidebar_position: 1 +--- + +# 对象存储 + +「对象存储」是 Sealos 内置的对象存储服务,主要用于存储和管理非结构化数据。 + +目前「对象存储」具备以下功能: + +- 上传文件到「存储桶」 +- 从「存储桶」下载文件 +- 公开「存储桶」的访问权限 +- 使用 SDK 访问「存储桶」 +- 监控「存储桶」资源指标 +- 静态托管 + +## 快速开始 + +### 上传文件 + +进入「对象存储」 +![](./images/1.png) + +创建「存储桶」 +![](./images/2.png) + +设置「存储桶」名字为 test,权限为 private +![](./images/3.png) + +「存储桶」创建成功 +![](./images/4.png) + +上传文件 +![](./images/5.png) + +上传文件成功 +![](./images/6.png) + +## 公开「存储桶」的访问权限 + +点击「编辑」 +![](./images/7.png) + +设置「存储桶权限」为 publicRead,点击「应用」 +![](./images/8.png) + +复制文件链接 +![](./images/9.png) + +粘贴到浏览器地址栏访问文件 +![](./images/10.png) + +## 查看访问密钥配置 + +对象存储用户由唯一的 Access Key(用户名)和对应的 Secret Key(密码)组成。Internal 为对象存储的内部访问地址,External +为对象存储的外部访问地址。 +![](./images/11.png) + +## 使用 SDK 访问「存储桶」 + +SDK 访问「存储桶」需要三个参数:AccessKey、SecretKey、Endpoint。参数都在访问密钥中,Internal 是内网地址 Endpoint,External 是外网地址 +Endpoint。如果需要使用 Region 参数,默认使用 us-east-1。 + +### Go Client SDK + +详细文档参考:https://min.io/docs/minio/linux/developers/go/API.html + +例子:使用 Go Client SDK 上传 style.css 文件到 sv3dd7u4-test 存储桶,将 Endpoint 设置为外网地址 External。如果服务部署在当前 +K8s 集群内,可以将 Endpoint 改为内网地址 Internal。 + +```go +package main + +import ( + "context" + "fmt" + "log" + "os" +) +import "github.com/minio/minio-go/v7" +import "github.com/minio/minio-go/v7/pkg/credentials" + +func main() { + endpoint := "objectstorageapi.xxx.xxx.xxx" + accessKey := "xxxxxxxx" + secretKey := "xxxxxxxxxxxxxxxx" + // init minio client + minioClient, err := minio.New(endpoint, &minio.Options{ + Creds: credentials.NewStaticV4(accessKey, secretKey, ""), + }) + if err != nil { + log.Fatalln(err) + } + // get local file + file, err := os.Open("./style.css") + if err != nil { + fmt.Println(err) + return + } + defer file.Close() + + fileStat, err := file.Stat() + if err != nil { + fmt.Println(err) + return + } + // put object + uploadInfo, err := minioClient.PutObject(context.Background(), "sv3dd7u4-test", "style.css", file, fileStat.Size(), minio.PutObjectOptions{ContentType: "text/css"}) + if err != nil { + fmt.Println(err) + return + } + fmt.Println("Successfully uploaded bytes: ", uploadInfo) +} +``` + +文件上传成功 +![](./images/12.png) + +### Java Client SDK + +详细文档参考:https://min.io/docs/minio/linux/developers/java/API.html + +例子:使用 Java Client SDK 上传 style1.css 文件到 sv3dd7u4-test 存储桶,将 Endpoint 设置为外网地址 External。如果服务部署在当前 +K8s 集群内,可以将 Endpoint 改为内网地址 Internal。 + +```xml + + + io.minio + minio + 8.5.9 + +``` + +```javascript +package org.example; + +import io.minio.MinioClient; +import io.minio.UploadObjectArgs; + +public class FileUploader { + public static void main(String[] args) throws Exception { + + MinioClient minioClient = + MinioClient.builder() + .endpoint("https://objectstorageapi.xxx.xxx.xxx") + .credentials("xxxxxxxx", "xxxxxxxxxxxxxxxx") + .build(); + + + minioClient.uploadObject( + UploadObjectArgs.builder() + .bucket("sv3dd7u4-test") + .object("style1.css") + .filename("src/main/java/org/example/style1.css") + .build()); + + System.out.println("Successfully uploaded bytes."); + } +} +``` + +文件上传成功 +![](./images/13.png) + +### 其他语言 SDK 略 + +详细文档参考:https://min.io/docs/minio/linux/developers/minio-drivers.html + +## 静态托管 + +创建一个权限为 publicRead/publicReadwrite 的「存储桶」,点击「打开托管」 +![](./images/14.png) + +点击地址跳转访问 +![](./images/15.png) + +点击「自定义域名」 +![](./images/16.png) + +跳转到「应用管理」的「变更」中,可以自定义域名 +![](./images/17.png) + + + +## 部署与卸载 + +### 部署 + +下载 helm 图表。 + +```bash +curl -O https://raw.githubusercontent.com/minio/operator/master/helm-releases/operator-5.0.6.tgz +``` + +安装 minio-operator。 + +```bash +helm install --namespace minio-system --create-namespace minio-operator operator-5.0.6.tgz +``` + +安装 Minio、Controller 等。 + +```bash +# DOMAIN 是 Sealos 集群的域名 +# 环境变量设置 Minio 管理员账户(默认的 Minio 管理员账户为 username/passw0rd) +# -e minioAdminUser={16位随机大小写字符串} -e minioAdminPassword={32位随机大小写字符串} +sealos run ghcr.io/labring/sealos-cloud-objectstorage:latest -e cloudDomain={DOMAIN} +``` + +### 卸载 + +安装「对象存储」失败,可以使用脚本清理残留资源,卸载「对象存储」也可以使用脚本清理。 + +``` +#!/usr/bin/env bash +set +e + +kubectl delete app objectstorage -n app-system +kubectl delete ns objectstorage-system objectstorage-frontend +helm uninstall minio-operator -n minio-system +kubectl delete ns minio-system +kubectl delete crd objectstoragebuckets.objectstorage.sealos.io objectstorageusers.objectstorage.sealos.io +kubectl delete clusterrole objectstorage-manager-role objectstorage-metrics-reader objectstorage-proxy-role +kubectl delete clusterrolebinding objectstorage-manager-rolebinding objectstorage-proxy-rolebinding +``` + diff --git a/docs/5.0/docs/user-doc/system-function/01-introduce/01-introduce.md b/docs/5.0/docs/user-doc/system-function/01-introduce/01-introduce.md new file mode 100644 index 00000000000..8c970bd3db1 --- /dev/null +++ b/docs/5.0/docs/user-doc/system-function/01-introduce/01-introduce.md @@ -0,0 +1,3 @@ +# 概述 + +系统功能是Sealos自带的工作空间管理,计费管理,工单等功能,使用这些功能可以帮助您快速购买产品与组件您的团队,提高您的工作效率。并随时向我们提出问题反馈。 \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/system-function/02-workspace/02-workspace.md b/docs/5.0/docs/user-doc/system-function/02-workspace/02-workspace.md new file mode 100644 index 00000000000..6ed1566fa49 --- /dev/null +++ b/docs/5.0/docs/user-doc/system-function/02-workspace/02-workspace.md @@ -0,0 +1,48 @@ +# 工作空间 + +工作空间是一种多租户的资源隔离机制,可以将一个kubernetes集群划分为多个工作空间,每个工作空间都有自己的资源配额和权限,您可以使用工作空间实现团队协作与资源分配的功能。 + +个人空间(personal workspace)是工作空间的一种特殊形式,每个用户都有一个个人空间,个人空间的名称与用户的用户名相同,个人空间的资源配额和权限与普通工作空间相同,但是个人空间无法删除,也无法将其他用户加入到个人空间中。 + +## 快速开始 + +### 创建工作空间 + +在sealos主界面右上方,可用区下方有工作空间选项,点击可以管理和切换工作空间。 + +点击进入管理工作空间之后,点击左上方加号即可创建新的工作空间。 + +![](./images/workspace-1.png) + +### 切换工作空间 + +在主界面点击工作空间名称即可切换工作空间。 + +![](./images/workspace-2.png) + +### 邀请用户加入工作空间 + +通过用户id邀请用户加入工作空间,被邀请的用户可以选择接受或拒绝邀请,如果接受邀请,被邀请的用户将成为工作空间的成员,拥有工作空间中的资源权限。 + +在管理用户空间中,选择特定的工作空间,点击右上方邀请就可以邀请别人加入你的用户空间了。在邀请时,可以选择邀请的身份为开发者/管理者。 + +邀请后,会生成邀请链接到粘贴板,发送链接给想要邀请的用户即可。 + +![](./images/workspace-3.png) + +### 接受邀请 + +当用户点击邀请链接后,会出现一个页面邀请用户加入,点击接受邀请即可加入该工作空间。 + +![](./images/workspace-4.jpg) + +加入工作空间后,即可进入到主界面切换到加入的工作空间中。 + +## 权限说明 + +工作空间中的用户可以拥有不同的角色,不同的角色拥有不同的权限,目前 Sealos 云操作系统中的角色有以下几种: +所有者(owner)、管理员(manager)、开发者(developer)。 + ++ 所有者(owner):拥有工作空间的所有权限,包括删除工作空间、查看/创建/修改工作空间中的所有资源、邀请用户以管理员/开发者身份加入工作空间等。 ++ 管理员(manager):拥有工作空间的管理权限,包括查看/创建/修改工作空间中的所有资源、邀请用户以开发者身份加入工作空间等。 ++ 开发者(developer):拥有工作空间的开发权限,包括查看工作空间中的资源状态。 \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/system-function/02-workspace/images/workspace-1.png b/docs/5.0/docs/user-doc/system-function/02-workspace/images/workspace-1.png new file mode 100644 index 00000000000..31c7fec126d Binary files /dev/null and b/docs/5.0/docs/user-doc/system-function/02-workspace/images/workspace-1.png differ diff --git a/docs/5.0/docs/user-doc/system-function/02-workspace/images/workspace-2.png b/docs/5.0/docs/user-doc/system-function/02-workspace/images/workspace-2.png new file mode 100644 index 00000000000..f9294823507 Binary files /dev/null and b/docs/5.0/docs/user-doc/system-function/02-workspace/images/workspace-2.png differ diff --git a/docs/5.0/docs/user-doc/system-function/02-workspace/images/workspace-3.png b/docs/5.0/docs/user-doc/system-function/02-workspace/images/workspace-3.png new file mode 100644 index 00000000000..d70226e637f Binary files /dev/null and b/docs/5.0/docs/user-doc/system-function/02-workspace/images/workspace-3.png differ diff --git a/docs/5.0/docs/user-doc/system-function/02-workspace/images/workspace-4.jpg b/docs/5.0/docs/user-doc/system-function/02-workspace/images/workspace-4.jpg new file mode 100644 index 00000000000..8de6497029a Binary files /dev/null and b/docs/5.0/docs/user-doc/system-function/02-workspace/images/workspace-4.jpg differ diff --git a/docs/5.0/docs/user-doc/system-function/03-expense-center/03-expense-center.md b/docs/5.0/docs/user-doc/system-function/03-expense-center/03-expense-center.md new file mode 100644 index 00000000000..86b6336071e --- /dev/null +++ b/docs/5.0/docs/user-doc/system-function/03-expense-center/03-expense-center.md @@ -0,0 +1,18 @@ +--- +sidebar_position: 1 + +--- + +# 费用中心 + +费用中心主要帮助用户查看sealos各个产品的定价,自己账号的消费流水与充值等功能。 + +## 快速开始 + +点击桌面上的费用中心应用即可进入。 + +![](./images/expense-center-1.png) + +点击计价标准可以查看具体各项内容的费用。并且可以看到未来30天的消费情况。 + +![](./images/expense-center-2.png) \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/system-function/03-expense-center/images/expense-center-1.png b/docs/5.0/docs/user-doc/system-function/03-expense-center/images/expense-center-1.png new file mode 100644 index 00000000000..014700ac5e3 Binary files /dev/null and b/docs/5.0/docs/user-doc/system-function/03-expense-center/images/expense-center-1.png differ diff --git a/docs/5.0/docs/user-doc/system-function/03-expense-center/images/expense-center-2.png b/docs/5.0/docs/user-doc/system-function/03-expense-center/images/expense-center-2.png new file mode 100644 index 00000000000..b18ae754709 Binary files /dev/null and b/docs/5.0/docs/user-doc/system-function/03-expense-center/images/expense-center-2.png differ diff --git a/docs/5.0/docs/user-doc/system-function/04-order/04-order.md b/docs/5.0/docs/user-doc/system-function/04-order/04-order.md new file mode 100644 index 00000000000..5e28f73a381 --- /dev/null +++ b/docs/5.0/docs/user-doc/system-function/04-order/04-order.md @@ -0,0 +1,17 @@ +# 工单 + +当您在使用Sealos的过程中,遇到任何问题,都可以使用工单提出您的疑问和反馈,我们会在第一时间为您处理。 + +## 快速开始 + +工单位于主界面,工作空间部分的下方,点击即可进入工单系统。 + +主页面可以查看工单的列表,当前状态等信息。 + +点击详情可以看到工单的详细情况。 + +![](./images/order-1.png) + +点击右上角-新建工单,即可进入新建工单页面,选择工单的类型,详细描述与添加附件(不必须)之后就可以创建工单了。 + +![](./images/order-2.png) \ No newline at end of file diff --git a/docs/5.0/docs/user-doc/system-function/04-order/images/order-1.png b/docs/5.0/docs/user-doc/system-function/04-order/images/order-1.png new file mode 100644 index 00000000000..fa4248a43ed Binary files /dev/null and b/docs/5.0/docs/user-doc/system-function/04-order/images/order-1.png differ diff --git a/docs/5.0/docs/user-doc/system-function/04-order/images/order-2.png b/docs/5.0/docs/user-doc/system-function/04-order/images/order-2.png new file mode 100644 index 00000000000..298689fab3a Binary files /dev/null and b/docs/5.0/docs/user-doc/system-function/04-order/images/order-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/Community.md b/docs/5.0/i18n/zh-Hans/Community.md new file mode 100644 index 00000000000..1c7654defbd --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/Community.md @@ -0,0 +1,11 @@ +# 社区 + +Sealos 是一个由用户和贡献者参与推动的开源项目,如果您对产品使用存在疑问和建议,可尝试以下方式寻求支持。我们的团队与社区会竭尽所能为您提供帮助。 + ++ 📱 扫码加入社区微信交流群👇 + + ![](https://oss.laf.run/htr4n1-images/sealos-qr-code.jpg) + ++ 💬 加入我们的 [Discord 服务器](https://discord.gg/qzBmGGZGk7),与 Sealos 开发者和终端用户进行交流。 ++ 🐦 在 [Twitter](https://twitter.com/sealosio) 上关注我们。 ++ 🐞 请将任何 Sealos 的 Bug、问题和需求提交到 [GitHub Issue](https://github.com/labring/sealos/issues/new/choose)。 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/Intro.md b/docs/5.0/i18n/zh-Hans/Intro.md new file mode 100644 index 00000000000..c4ac398826e --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/Intro.md @@ -0,0 +1,53 @@ +import Highlight from '@site/src/components/Highlight' + +# 什么是 Sealos? + + + +云原生生态之庞大与复杂,无疑让许多企业感到手足无措,这个生态依然缺乏好用的、开箱即用的发行版。在云原生市场还急需一款云操作系统以进一步降低云原生门槛与成本。 + +Sealos 的问世为企业开启了一扇新窗。它为企业与开发者提供了一种全新的选择,无论在公有云还是私有云中,都只需安装一个云操作系统。它能让各类应用在操作系统上稳定安全地运行,一并解决了应用所需的各种依赖问题。 + +Sealos 坚守的理念是:**云可以像 Linux 一样简单**。你可以像使用 Linux 一样安装后立即投入使用,使用过程无需过多纠结。唯一的差别仅在于,Linux 是安装在单一服务器上,而 Sealos 则是安装在整个数据中心。 + +在 Sealos 的架构中,**公有云与私有云并无本质上的差异**,他们应是同一套代码的不同实例,唯一的区别仅在于配置与所安装应用的差异。在内网安装即是私有云,而在公网对外提供服务则成为公有云。 + +我们坚信,随着 Sealos 的不断发展与进步,未来的云将更加开放,更加简单。云计算的美好将属于所有算力的提供者,云的价值将由所有云计算的参与者共享。**他们将能够在多元化的市场环境中,以更经济的方式享受云计算所带来的种种便利。** + +## 概述 + +Sealos 是一款以 Kubernetes 为内核的**云操作系统发行版**。它以云原生的方式,抛弃了传统的云计算架构,转向以 Kubernetes 为云内核的新架构,使企业能够**像使用个人电脑一样**简单地使用云。 + +用户将可以像使用个人电脑一样在 Kubernetes 上一键安装任意高可用分布式应用,几乎不需要任何专业的交付和运维成本。同时,利用独特的集群镜像能力,用户可将任意分布式应用打包成 OCI 镜像,自由组合各种分布式应用,轻松订制所需的云。通过强大且灵活的应用商店功能,可满足各类用户的多样化需求。 + +![](./images/sealos-desktop-zh.webp) + +## 适用场景 & 优势 + +Sealos 是一款强大的业务运行平台,它能完美支持 Java、Go、Python、PHP 等各类应用,不受编程语言限制。该平台为应用提供稳定的运行环境,并解决后端依赖问题,例如数据库、对象存储和消息队列等。更进一步,它还能灵活处理应用配置管理、服务发现、公网暴露,以及自动伸缩等问题。 + +### 公有云 + +如果您的业务需要运行在公有云环境中,那么您可以直接使用 [Sealos 提供的公有云服务](https://cloud.sealos.io)。 + +#### Sealos 的能力 + +- 🚀 **应用管理**:在应用商店中轻松管理并快速发布可公网访问的分布式应用。 +- 🗄️ **数据库管理**:秒级创建高可用数据库,支持 MySQL、PostgreSQL、MongoDB 和 Redis。 +- 🌥️ **公私一致**:即是公有云也是私有云,支持传统应用无缝迁移到云环境。 + +#### Sealos 的优势 + +- 💰 **高效 & 经济**:仅需为容器付费,自动伸缩杜绝资源浪费,大幅度节省成本。 +- 🌐 **通用性强,无心智负担**:专注于业务本身,无需担心复杂性,几乎没有学习成本。 +- 🛡️ **灵活 & 安全**:多租户共享机制在确保安全的同时,实现资源隔离与高效协作。 + +### 私有云 + +Sealos 云操作系统 **100% 开源**,您可在 [GitHub](https://github.com/labring/sealos) 上找到所有源代码,因此 **Sealos 公有云**的全部功能也可以部署在私有云环境中,以满足您更多样化的业务需求。 + +### 强大的应用交付能力 + +- Sealos 具备优秀的 Kubernetes 生命周期管理能力,还可以自由定制 Kubernetes 环境。 +- Sealos 可以将整个集群打包,并一键交付到客户环境中。所有服务和业务都可以整体交付。 +- 不同于 Docker 主要关注单机镜像,Sealos 更进一步,可以将**整个集群**或者某个分布式应用进行打包。 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/Architecture.md b/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/Architecture.md new file mode 100644 index 00000000000..cfa4b5c9d89 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/Architecture.md @@ -0,0 +1,22 @@ +# 架构说明 + +Sealos 采用应用分离与应用互联的方式构建,不同应用可以独立部署,也可以与其他应用联合起来提供服务。 +所有服务全部通过 `kubeconfig` 作为应用身份验证,使得不管是在浏览器,还是本地使用 `sealos` 命令行,甚至是本地的第三方客户端,都能够获得一致的使用体验。 + +## 整体架构 + +![Architecture](./images/architecture_light.png#gh-light-mode-only)![Architecture](./images/architecture_dark.png#gh-dark-mode-only) + +## 应用架构 + +Sealos 上的应用采用前后端分离的架构,同时前端能够提供 `SSR` 能力,使得应用也可以单独对外提供服务,而不需要绑定在 Sealos 单体上。 + +以下图为例: + +**应用管理 App Launchpad** 是 Sealos 提供的一个单镜像部署工具, **终端 Terminal** 是 Sealos 云操作作系统的终端应用,提供和单机操作系统终端一致的命令行服务。 +对于 Sealos 上的各种应用而言,它们可以直接与 `Kubernetes` 的服务进行交互,也可以与各种 CRD Controller 比如 Terminal Controller 和 Ingress-Nginx Controller 等等进行交互。 +应用之间也可以互相调用,比如用户在**数据库**应用中新建的数据库,可以直接唤起**终端**应用并自动连接上数据库进行调试。 + +详细信息可以点击 [链接](../../guides) 文档了解更多。 + +![Application](./images/application_light.png#gh-light-mode-only)![Application](./images/application_dark.png#gh-dark-mode-only) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/images/application_dark.png b/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/images/application_dark.png new file mode 100644 index 00000000000..403e9223d16 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/images/application_dark.png differ diff --git a/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/images/application_light.png b/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/images/application_light.png new file mode 100644 index 00000000000..500f67bbe58 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/images/application_light.png differ diff --git a/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/images/architecture_dark.png b/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/images/architecture_dark.png new file mode 100644 index 00000000000..6d14555ef4d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/images/architecture_dark.png differ diff --git a/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/images/architecture_light.png b/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/images/architecture_light.png new file mode 100644 index 00000000000..17bf8cf5d6a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/advanced-guide/Architecture/images/architecture_light.png differ diff --git a/docs/5.0/i18n/zh-Hans/advanced-guide/how-to-deploy-the-application-to-desktop.md b/docs/5.0/i18n/zh-Hans/advanced-guide/how-to-deploy-the-application-to-desktop.md new file mode 100644 index 00000000000..c47e344a0b8 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/advanced-guide/how-to-deploy-the-application-to-desktop.md @@ -0,0 +1,39 @@ +# 如何部署应用到 desktop + +## 使用 Terminal 编写 app.yaml + +### 关键信息 + +- type: iframe,标识为一个 web 应用 +- spec name 为桌面显示的名称 +- url 应用地址 +- icon 是在 desktop 上显示的图标 + +```yaml +apiVersion: app.sealos.io/v1 +kind: App +metadata: + name: app-sample +spec: + name: Image Hub Demo + icon: + type: iframe + data: + url: https://hub.sealos.io/ + desc: + icon: https://cloud.sealos.io/logo.svg + menuData: + displayType: normal +``` + +![appyaml.png](./images/app-yaml.png) + +### apply yaml + +``` +kubectl apply -f app.yaml +``` + +![apply](./images/app-apply-command.png) + +### 刷新浏览器,桌面即可看到 App diff --git a/docs/5.0/i18n/zh-Hans/advanced-guide/images/app-apply-command.png b/docs/5.0/i18n/zh-Hans/advanced-guide/images/app-apply-command.png new file mode 100644 index 00000000000..f8a5fe3e636 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/advanced-guide/images/app-apply-command.png differ diff --git a/docs/5.0/i18n/zh-Hans/advanced-guide/images/app-yaml.png b/docs/5.0/i18n/zh-Hans/advanced-guide/images/app-yaml.png new file mode 100644 index 00000000000..e9ae045a513 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/advanced-guide/images/app-yaml.png differ diff --git a/docs/5.0/i18n/zh-Hans/current.json b/docs/5.0/i18n/zh-Hans/current.json new file mode 100644 index 00000000000..f13c4af2f53 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/current.json @@ -0,0 +1,106 @@ +{ + "version.label": { + "message": "Next", + "description": "The label for version current" + }, + "sidebar.docSidebar.category.Examples": { + "message": "案例", + "description": "The label for category Examples in sidebar docSidebar" + }, + "sidebar.docSidebar.category.ai-applications": { + "message": "AI 应用", + "description": "The label for category ai-applications in sidebar docSidebar" + }, + "sidebar.docSidebar.category.Quick Start": { + "message": "快速开始", + "description": "The label for category Quick Start in sidebar docSidebar" + }, + "sidebar.docSidebar.category.App Deployments": { + "message": "部署应用", + "description": "The label for category App Deployments in sidebar docSidebar" + }, + "sidebar.docSidebar.category.How-to Guides": { + "message": "使用指南", + "description": "The label for category How-to Guides in sidebar docSidebar" + }, + "sidebar.docSidebar.category.Master Services Agreement": { + "message": "服务政策", + "description": "The label for category Master Services Agreement in sidebar docSidebar" + }, + "sidebar.docSidebar.category.Self Hosting": { + "message": "私有化部署", + "description": "The label for the doc item Self Hosting in sidebar docSidebar, linking to the doc Community" + }, + "sidebar.docSidebar.category.Sealos": { + "message": "Sealos 私有云", + "description": "The label for category Sealos Self Hosting in sidebar docSidebar" + }, + "sidebar.docSidebar.category.Kubernetes Lifecycle Management": { + "message": "K8s 集群生命周期管理", + "description": "The label for category Kubernetes Lifecycle Management in sidebar docSidebar" + }, + "sidebar.docSidebar.doc.Community": { + "message": "社区", + "description": "The label for the doc item Community in sidebar docSidebar, linking to the doc Community" + }, + "sidebar.docSidebar.category.Operations": { + "message": "操作说明", + "description": "The label for category Operations in sidebar docSidebar" + }, + "sidebar.docSidebar.category.Advanced Guide": { + "message": "进阶指南", + "description": "The label for category Advanced Guide in sidebar docSidebar" + }, + "sidebar.docSidebar.category.Reference": { + "message": "参考", + "description": "The label for category Reference in sidebar docSidebar" + }, + "sidebar.docSidebar.category.Sealctl 使用指南": { + "message": "Sealctl 使用指南", + "description": "The label for category Sealctl 使用指南 in sidebar docSidebar" + }, + "sidebar.docSidebar.category.Sealos 使用指南": { + "message": "Sealos 使用指南", + "description": "The label for category Sealos 使用指南 in sidebar docSidebar" + }, + "sidebar.docSidebar.category.Sealos 集群镜像构建": { + "message": "Sealos 集群镜像构建", + "description": "The label for category Sealos 集群镜像构建 in sidebar docSidebar" + }, + "sidebar.docSidebar.category.Sealos 镜像仓库": { + "message": "Sealos 镜像仓库", + "description": "The label for category Sealos 镜像仓库 in sidebar docSidebar" + }, + "sidebar.docSidebar.category.Sealos 集群镜像运行": { + "message": "Sealos 集群镜像运行", + "description": "The label for category Sealos 集群镜像运行 in sidebar docSidebar" + }, + "sidebar.docSidebar.category.Sealos 命令说明": { + "message": "Sealos 命令说明", + "description": "The label for category Sealos 命令说明 in sidebar docSidebar" + }, + "sidebar.docSidebar.category.baas": { + "message": "后端即服务", + "description": "The label for category baas in sidebar docSidebar" + }, + "sidebar.docSidebar.category.low-code-platform": { + "message": "低代码平台", + "description": "The label for category low-code-platform in sidebar docSidebar" + }, + "sidebar.docSidebar.category.dial-testing-system": { + "message": "拨测系统", + "description": "The label for category dial-testing-system in sidebar docSidebar" + }, + "sidebar.docSidebar.category.blog-platform": { + "message": "博客平台", + "description": "The label for category blog-platform in sidebar docSidebar" + }, + "sidebar.docSidebar.category.social-communication": { + "message": " IM 应用", + "description": "The label for category social-communication in sidebar docSidebar" + }, + "sidebar.docSidebar.category.programming-languages": { + "message": "常用语言案例", + "description": "The label for category programming-languages in sidebar docSidebar" + } +} diff --git a/docs/5.0/i18n/zh-Hans/examples/ai-applications/imgs/sealos1.png b/docs/5.0/i18n/zh-Hans/examples/ai-applications/imgs/sealos1.png new file mode 100644 index 00000000000..7313d36f548 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/ai-applications/imgs/sealos1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/ai-applications/imgs/sealos2.png b/docs/5.0/i18n/zh-Hans/examples/ai-applications/imgs/sealos2.png new file mode 100644 index 00000000000..32f0fb67f31 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/ai-applications/imgs/sealos2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/ai-applications/install-fastgpt-on-desktop.md b/docs/5.0/i18n/zh-Hans/examples/ai-applications/install-fastgpt-on-desktop.md new file mode 100644 index 00000000000..011060f9c9c --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/ai-applications/install-fastgpt-on-desktop.md @@ -0,0 +1,15 @@ +# 快速安装 FastGpt AI 知识库 + +无需服务器、无需魔法、无需域名,点击即可部署 👇 + +[![](https://raw.githubusercontent.com/labring-actions/templates/main/Deploy-on-Sealos.svg)](https://cloud.sealos.io/?openapp=system-fastdeploy%3FtemplateName%3Dfastgpt) + +由于需要部署数据库,部署完后需要等待 2~4 分钟才能正常访问。默认用了最低配置,首次访问时会有些慢。 + +![](./imgs/sealos1.png) + +## 运行 + +点击 sealos 提供的【外网地址】即可使用。登录用户名为: root,密码是刚设置的环境变量,上图中设置了: 1234 + +![](./imgs/sealos2.png) diff --git a/docs/5.0/i18n/zh-Hans/examples/baas/install-fireboom.md b/docs/5.0/i18n/zh-Hans/examples/baas/install-fireboom.md new file mode 100644 index 00000000000..891248b8de3 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/baas/install-fireboom.md @@ -0,0 +1,106 @@ +# 快速安装 Fireboom + +[Fireboom](https://fireboom.io) ⾯向开发者的可视化 API 开发平台,为开发者提供**声明式开发框架**、**可视化编辑套件**和**钩子机制**。 + +![fireboom introduction](../images/fireboom/fireboom-intro.jpeg) + +官网地址: https://fireboom.io + +**功能特性** + +- 分钟级交付: 将传统模式下 2天才能完成的接⼝缩短⾄ 2分钟 + +- 前端变全栈: 可视化开发,显著降低接⼝开发⻔槛,让前端搞定前后端秒变全栈 + +- 后端不搬砖: 声明式编程,避免复制粘贴,减少bug概率,让后端专注于业务开发 + +## 步骤 1:新建应用 + +- 在 [Sealos](https://cloud.sealos.io) 桌面环境中打开 「应用管理」 应用 + +![](../images/appsmith-1.png) + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](../images/appsmith-2.png) + + +## 步骤 2:应用部署 + +- 基础配置: + + - 应用名称(自定义):fireboom + + - 镜像名(默认最新版本):fireboomapi/fireboom_server:latest + + - CPU(推荐):2 Core ( 最低1 Core) + + - 内存(推荐):4 G (最低 512 M) + +- 部署模式: + + - 实例数(自定义):1 + +![](../images/fireboom/2-1.png) + +- 网络配置: + + - 控制面板:9123 + - API端点:9991,开启外网 + +![](../images/fireboom/2-2.png) + +- 高级配置: + + - 命令设置: + - 参数设置: dev (dev表示开发模式,start表示生产模式) + + - 持久化存储: + + - 元数据:/fbserver/store + - 上传文件:/fbserver/upload + + +![](../images/fireboom/2-3.png) + +## 步骤 3:部署应用 + +1, 点击「部署应用」开始部署应用。 + +![](../images/fireboom/3-1.png) + +2, 点击「详情」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 + +![](../images/fireboom/3-2.png) + +## 步骤 4:访问应用 + +- 访问控制面板:9123对应的域名 + +![](../images/fireboom/4-1.png) + +- 访问API端点:9991对应的域名 + +``` +status ok +``` + +## 步骤 5:配置Fireboom(可选) + +设置后,可方便使用swagger文档~ + +1, 查看API外网地址: 设置-> 系统 + +![](../images/fireboom/5-1.png) + +2, 修改为:API端点地址,9991对应的公网地址 + + - 静态值:选择静态值,设置为 **API端点** 公网域名 + - 环境变量:前往 环境变量 ,找到 FB_API_PUBLIC_URL 设置为 **API端点** 公网域名 + +![](../images/fireboom/5-2.png) + + +3, 使用swagger文档测试API + +![](../images/fireboom/5-3.png) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/examples/blog-platform/install-halo.md b/docs/5.0/i18n/zh-Hans/examples/blog-platform/install-halo.md new file mode 100644 index 00000000000..120af78ff06 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/blog-platform/install-halo.md @@ -0,0 +1,143 @@ +--- +sidebar_position: 2 +--- + +# 快速安装 Halo + +在 Sealos 上快速部署 Halo 博客平台 + +![](../images/halo_img-1.png) + +[Halo](https://github.com/halo-dev/halo) 是一款强大易用的开源建站工具,本文将介绍如何在 Sealos 上部署 Halo,同时在 [Sealos 上部署 PostgreSQL](../../quick-start/install-db-with-database.md) 可以帮助你轻松地管理和维护数据库,以满足不同的业务需求。 + +## 步骤 1:准备 PostgreSQL + +### 使用 Sealos 数据库安装 PostgreSQL + +参考 [Sealos 上部署 PostgreSQL](../../quick-start/install-db-with-database.md) ,一分钟即可成功安装和使用 PostgreSQL。 + +### 查看数据库配置: + +保存这里生成的配置中包含数据库的用户名密码以及数据库连接方式,用于下文 Halo 中配置: + +![](../images/halo_img-6.png) + +> 图中可以看到 PostgreSQL 连接配置为: +> +> Username: postgres +> +> Password: rcx7f47m +> +> Connection: postgresql://postgres:rcx7f47m@dbname-postgresql.ns-sy32q9p9.svc:5432 + +## 步骤 2: 在 Sealos 中部署 Halo应用 + +### 打开 应用管理 + +![](../images/halo_img-7.png) + +![](../images/halo_img-8.png) + +### 填写配置 + +- 自定义应用名称 + +- 镜像名称设置为 `halohub/halo:2.5` + +- CPU 和存储应根据实际情况进行配置,memory 需要 `500Mi` 的内存才能启动 Halo,这里可以参考官方 prepare:https://docs.halo.run/getting-started/prepare + +- 暴露端口应为 `8090`。同时,设置为外网访问将自动为应用配置一个出口域名用于外网访问,同时需要在 Halo 中进行配置该地址 + +- 环境变量包括数据库配置和其他相关配置。需要注意的是,你需要根据你在 [步骤 1](查看数据库配置:) 中设置的用户名、密码和 DNS 来配置数据库连接信息。同时,你还需要为 Halo 配置超级管理员的用户名和密码。 + +配置 Halo 环境变量 + +```Bash +spring.sql.init.platform=postgresql +spring.r2dbc.url=r2dbc:pool:postgresql://postgres:rcx7f47m@dbname-postgresql.ns-sy32q9p9.svc:5432/halo +spring.r2dbc.username=postgres +spring.r2dbc.password=rcx7f47m +halo.external-url=tmtdvfjiyyfh.cloud.sealos.io +halo.security.initializer.superadminusername=root +halo.security.initializer.superadminpassword=sealos +``` + +环境变量配置详解: + +| 参数名 | 描述 | +| -------------------------------------------- | -------------------------------------------------------- | +| spring.r2dbc.url | 数据库连接地址,详细可查阅下方的 数据库链接格式 | +| spring.r2dbc.username | 数据库用户名 | +| spring.r2dbc.password | 数据库密码 | +| spring.sql.init.platform | 数据库平台名称,支持 postgresql、mysql、h2 | +| halo.external-url | 外部访问链接,如果需要在公网访问,需要配置为实际访问地址 | +| halo.security.initializer.superadminusername | 初始超级管理员用户名 | +| halo.security.initializer.superadminpassword | 初始超级管理员密码 | + +数据库的链接格式(这里我们使用 postgresql 的格式): + +| 链接方式 | 链接地址格式 | spring.sql.init.platform | +| ----------- | ---------------------------------------------------------------------------------- | ------------------------ | +| PostgreSQL | r2dbc:pool:postgresql://`{HOST}`:`{PORT}`/`{DATABASE}` | postgresql | +| MySQL | r2dbc:pool:mysql://`{HOST}`:`{PORT}`/`{DATABASE}` | mysql | +| MariaDB | r2dbc:pool:mariadb://`{HOST}`:`{PORT}`/`{DATABASE}` | mysql | +| H2 Database | r2dbc:h2:file:///`${halo.work-dir}`/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE | h2 | + +### 网络配置 + +![](../images/halo_img-9.png) + +### 环境变量配置 + +![](../images/halo_img-10.png) + +### 配置持久化存储卷 + +挂载 `/root/.halo2` 目录来持久化 halo 数据 : + +![](../images/halo_img-11.png) + +## 步骤 3: 使用外网访问 Halo + +成功启动应用后,即可通过外网访问地址访问 Halo 进行配置: + +![](../images/halo_img-12.png) + +![](../images/halo_img-13.png) + +### 初始化 Halo + +![](../images/halo_img-14.png) + +![](../images/halo_img-15.png) + +### First Halo + +![](../images/halo_img-16.png) + +![](../images/halo_img-17.png) + +![](../images/halo_img-18.png) + +## FAQ + +### 忘记密码 + +#### 进入 「应用管理」,点击日志查看 + +![](../images/halo_img-19.png) + +![](../images/halo_img-20.png) + +可以看到这里的日志中:用户名:`admin` 密码:`QTu2J2xgUQ3ngqUo` + +#### 或终端执行如下命令查看日志 + +![](../images/halo_img-21.png) + +``` +root@td3q8uc46:~# kubectl logs halo-0 | grep 'Generated random password:' | tail -1 +2023-05-30T13:32:16.942+08:00 INFO 7 --- [-controller-t-1] r.h.app.security.SuperAdminInitializer : === Generated random password: QTu2J2xgUQ3ngqUo for super administrator: admin === +``` + +![](../images/halo_img-22.png) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/examples/blog-platform/install-wordpress.md b/docs/5.0/i18n/zh-Hans/examples/blog-platform/install-wordpress.md new file mode 100644 index 00000000000..41f1c465897 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/blog-platform/install-wordpress.md @@ -0,0 +1,103 @@ +--- +sidebar_position: 1 +--- + +# 快速安装 WordPress + +[WordPress](https://github.com/WordPress/WordPress) 是一款功能强大、易用、开源的内容管理系统 (CMS), 可以用于在互联网上发布网站、新闻、博客等内容。它提供了便捷的内容编辑、发布和更新方法 , 同时也可以通过主题和插件进行高度自定义。WordPress 已经成为非常成功和普及的 CMS 系统 , 在全球有超过 3 千万个网站使用 WordPress 搭建。 + +> 使用 Sealos 安装 WordPress,可以大幅度减少安装时间,极速开启用户的内容输出之旅。 + +WordPress 需要搭配 MySQL 数据库一同安装使用。作为使用 Sealos 的最佳实践,建议使用**数据库**应用独立安装 MySQL 数据库,依托独立数据库,快速安装 WordPress。 + +## 新建 MySQL 实例 + +进入 [Sealos](https://cloud.sealos.io) 桌面环境,在「数据库」中,快速配置需要的数据库实例,等待数据库部署完成。 + +![](../images/wordpress_15.png) + +![](../images/wordpress_16.png) + +![](../images/wordpress_17.png) + +**注:此时的 MySQL 实例中并不存在用户自定义数据库,需要在终端中手动创建** + +## 新建数据库 + +通过**数据库**应用安装的 MySQL 实例时,并不会自动创建用户自定义数据库。在使用应用程序连接 MySQL 数据库时,您需要在 MySQL 实例中手动创建相应的数据库。 + +可以通过如下方式进入数据库的终端命令行 + +![](../images/wordpress_12.png) +![](../images/wordpress_13.png) + +也可以在终端中自行输入命令 + +`mysql -u username -p -h yourhost` + +![](../images/wordpress_14.png) + +数据库连接成功后,可以按照如下命令创建数据库 + +`CREATE DATABASE yourdb;` + +至此,您已经在 MySQL 实例中手动创建了一个用户自定义数据库。 + +## 应用管理 + +点击应用管理,进入安装界面。 + +![](../images/wordpress_1.png) + +## 基础配置 + +首先设置自定义的应用名称,选择需要安装的镜像。Sealos 既支持公有镜像源,也支持私有镜像源。本示例选用的官方镜像源,不指定镜像版本时,默认拉取 latest 版本。 + +其次,为 WordPress 配置 CPU 与内存资源,WordPress 十分的轻量级,较少的资源就可以保证程序的正常运行。 + +![](../images/wordpress_8.png) + +## 网络配置 + +网络配置方面,打开外网访问,Sealos 会为用户自动分配出口域名用作外网访问,如果用户已经注册了自己的自定义域名,那么可以将自定义域名 cname 到该出口域名,这样就可以使用该自定义域名访问用户安装的应用。 + +注:后续演示,使用的是 Sealos 随机生成的出口域名。 + +![](../images/wordpress_9.png) + +## 高级配置 + +在高级配置中,需要根据数据库的实际情况配置 WordPress 的环境变量。 + +高级配置中,需要为 WordPress 配置环境变量与本地存储。 + +WordPress 常见环境变量如下所示: + +```Plain +WORDPRESS_DB_HOST 数据库实例的ip地址 +WORDPRESS_DB_USER 连接数据库的用户 +WORDPRESS_DB_PASSWORD 连接库所需的用户密码 +WORDPRESS_DB_NAME 连接的数据库名称 +``` + +根据之前安装的 MySQL 示例,可以这样配置环境变量: + +```Plain +WORDPRESS_DB_HOST=mysql-host:3306 +WORDPRESS_DB_USER=root +WORDPRESS_DB_PASSWORD=root_passwd +WORDPRESS_DB_NAME=yourdb +``` + +WordPress 官方镜像的存储卷挂载地址为:`/var/www/html`,用户根据需求为应用分配存储空间。 + +这样,WordPress 也一并安装成功,点击详情,通过外网地址就可以成功访问。 + +![](../images/wordpress_10.png) + +点击该链接,如下页面,证明安装成功 + +![](../images/wordpress_11.png) + +**注:如部署失败 , 优先排查 WordPress 访问的用户自定义数据库是否存在于 MySQL 实例中** + diff --git a/docs/5.0/i18n/zh-Hans/examples/dial-testing-system/install-uptime-kuma.md b/docs/5.0/i18n/zh-Hans/examples/dial-testing-system/install-uptime-kuma.md new file mode 100644 index 00000000000..293547d7a0d --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/dial-testing-system/install-uptime-kuma.md @@ -0,0 +1,60 @@ +--- +sidebar_position: 1 +--- + +# 快速安装 Uptime Kuma + +![](../images/uptimekuma_img-0.png) + +[Uptime Kuma](https://github.com/louislam/uptime-kuma) 是一款开源的、易于使用的服务器监控工具。它可以帮助你实时监控服务器的运行状态、响应时间以及其他关键指标,以确保你的服务器始终保持最佳状态。如果你想快速安装 Uptime Kuma,可以按照以下步骤进行操作: + +### 步骤 1:首先进入 [Sealos](https://cloud.sealos.io) 桌面环境并打开「应用管理」 + +![](../images/uptimekuma_img-1.png) + +### 步骤 2: 新建应用 + +在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](../images/uptimekuma_img-2.png) + +### 步骤 3: 设置启动参数 + +在启动参数中,按照以下方式进行设置: + +- 容器暴露端口指定为 3001。 +- 设置为外网访问即可通过给出的域名访问。 + +![](../images/uptimekuma_img-3.png) + +![](../images/uptimekuma_img-4.png) + +### 步骤 4: 设置存储卷 + +在高级配置中,添加存储卷挂载来持久化 Uptime Kuma 数据目录 `/app/data`。这样可以确保应用数据在容器重启后不会丢失。 + +![](../images/uptimekuma_img-5.png) + +### 步骤五:部署应用 + +点击「部署应用」后即可启动应用: + +![](../images/uptimekuma_img-6.png) + +### 步骤 6: 访问应用 + +一旦应用启动成功,你就可以使用应用的外网地址进行访问了。在浏览器中输入应用的域名,即可访问应用的主界面。 + +![](../images/uptimekuma_img-7.png) + +### 步骤 7: 创建管理员账户 + +为了保护 Uptime Kuma 的安全性,首次进入你需要创建一个管理员账户,填写管理员账户的基本信息,包括用户名、密码。填写完毕后,点击创建按钮进行注册。 + +![](../images/uptimekuma_img-8.png) + +### 步骤 8: 添加自定义监控项 + +![](../images/uptimekuma_img-9.png) + +![](../images/uptimekuma_img-10.png) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/examples/gitea/install-gitea.md b/docs/5.0/i18n/zh-Hans/examples/gitea/install-gitea.md new file mode 100644 index 00000000000..28808a70568 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/gitea/install-gitea.md @@ -0,0 +1,113 @@ +# 快速安装 Gitea + +喝杯茶吧!无痛自托管多合一软件开发服务,包括 Git 托管、代码审查、团队协作、包注册和 CI/CD。 + +## 步骤 1:登陆 Sealos + +- 进入 [Sealos](https://cloud.sealos.io/) 官网 + +![](../images/gitea-0.png) + +## 步骤 2:打开 「应用管理」 应用 + +![](../images/gitea-1.png) + +## 步骤 3:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](../images/gitea-2.png) + +## 步骤 4:应用部署 + +- 基础配置: + + - 应用名称(自定义):gitea + - 镜像名(默认最新版本):gitea/gitea:latest-rootless + - CPU(推荐):1 Core + - 内存(推荐):1 G + +- 部署模式: + + - 实例数(自定义):1 + + ![](../images/gitea-3.png) + +- 网络配置: + + - 容器暴露端口:3000 + - 外网访问:开启 + + ![](../images/gitea-4.png) + +- 高级配置: + + - 自定义本地存储,持久化 Gitea 的数据(推荐 1 G)。 + +![](../images/gitea-5.png) + +## 步骤 5:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](../images/gitea-6.png) + +## 步骤6:配置数据库 + +- 通过 Sealos 为 Gitea 配置 MySQL 数据库 +- 进入 Database + +![](../images/gitea-9.png) + +- 新建数据库 + +![](../images/gitea-10.png) + +- 部署集群 + +- 基础配置: + + - 集群类型:mysql + - 数据库版本:ac-mysql-8.0.30 + - CPU(推荐):1 Core + - 内存(推荐):1 G + + +![](../images/gitea-11.png) + +- 部署成功后进入详情页面查看 MySQL 连接信息 + +![](../images/gitea-12.png) + +- 点击一键连接进入 MySQL 终端连接 + +![](../images/gitea-13.png) + +- 执行 + +```sql +CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'; +``` + +创建 Gitea 所需要的数据库 + +![](../images/gitea-14.png) + +## 步骤 7:访问应用 + +- 点击「App Launchpad」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 + +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](../images/gitea-7.png) + +- 访问外网地址后进入到配置页面,根据刚刚创建的 MySQL 的详情页面进行配 + +![](../images/gitea-15.png) + +配置好后点击安装,等待一会便可进入到登陆页面,部署成功! + +![](../images/gitea-16.png) + +![](../images/gitea-17.png) + diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2022-04-10-10-52-H2ZWUZ.png b/docs/5.0/i18n/zh-Hans/examples/images/2022-04-10-10-52-H2ZWUZ.png new file mode 100644 index 00000000000..025a0c4e45a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2022-04-10-10-52-H2ZWUZ.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2022-04-10-14-31-vrNHJU.png b/docs/5.0/i18n/zh-Hans/examples/images/2022-04-10-14-31-vrNHJU.png new file mode 100644 index 00000000000..1ca1cd0ed53 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2022-04-10-14-31-vrNHJU.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2022-04-10-14-32-1iudM0.png b/docs/5.0/i18n/zh-Hans/examples/images/2022-04-10-14-32-1iudM0.png new file mode 100644 index 00000000000..5ba9b3ad878 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2022-04-10-14-32-1iudM0.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2022-04-10-14-32-ADfk8T.png b/docs/5.0/i18n/zh-Hans/examples/images/2022-04-10-14-32-ADfk8T.png new file mode 100644 index 00000000000..ac8de099a1a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2022-04-10-14-32-ADfk8T.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-11-54-EIVahX.jpg b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-11-54-EIVahX.jpg new file mode 100644 index 00000000000..1b1fe554ea5 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-11-54-EIVahX.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-11-55-NDkuEg.jpg b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-11-55-NDkuEg.jpg new file mode 100644 index 00000000000..a773666c4ff Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-11-55-NDkuEg.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-11-59-FxJE12.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-11-59-FxJE12.png new file mode 100644 index 00000000000..fdc343a80ed Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-11-59-FxJE12.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-01-DKect7.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-01-DKect7.png new file mode 100644 index 00000000000..b4d2db4792a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-01-DKect7.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-05-CWczxm.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-05-CWczxm.png new file mode 100644 index 00000000000..d512ad14195 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-05-CWczxm.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-06-lvv6ms.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-06-lvv6ms.png new file mode 100644 index 00000000000..28a241ade20 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-06-lvv6ms.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-07-s8W7iu.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-07-s8W7iu.png new file mode 100644 index 00000000000..aa8e415fb5b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-07-s8W7iu.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-09-RslDGj.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-09-RslDGj.png new file mode 100644 index 00000000000..0935a645d99 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-09-RslDGj.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-24-QHYKZt.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-24-QHYKZt.png new file mode 100644 index 00000000000..a446015a5c5 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-24-QHYKZt.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-26-HYOaBJ.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-26-HYOaBJ.png new file mode 100644 index 00000000000..6996e718eb5 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-26-HYOaBJ.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-28-ccnUOj.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-28-ccnUOj.png new file mode 100644 index 00000000000..c76f2e0535a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-28-ccnUOj.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-29-z5E9gi.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-29-z5E9gi.png new file mode 100644 index 00000000000..ba4d166331c Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-29-z5E9gi.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-39-1jsF0t.jpeg b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-39-1jsF0t.jpeg new file mode 100644 index 00000000000..7ca839b52b2 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-12-39-1jsF0t.jpeg differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-FwsbfW.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-FwsbfW.png new file mode 100644 index 00000000000..ac7134504f8 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-FwsbfW.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-Vs9ccy.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-Vs9ccy.png new file mode 100644 index 00000000000..59460d087f2 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-Vs9ccy.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-YFHPYc.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-YFHPYc.png new file mode 100644 index 00000000000..0fc1e2d152b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-YFHPYc.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-hdHfxP.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-hdHfxP.png new file mode 100644 index 00000000000..00e7aa10391 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-hdHfxP.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-nwrxrv.png b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-nwrxrv.png new file mode 100644 index 00000000000..08ff96c0c12 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/2023-06-26-13-09-nwrxrv.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/appsmith-1.png b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-1.png new file mode 100644 index 00000000000..700c4e0d4d3 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/appsmith-2.png b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-2.png new file mode 100644 index 00000000000..bca16d41669 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/appsmith-3.png b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-3.png new file mode 100644 index 00000000000..01876eeff7a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-3.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/appsmith-4.png b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-4.png new file mode 100644 index 00000000000..fad0d90a71d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-4.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/appsmith-5.png b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-5.png new file mode 100644 index 00000000000..d6567da245a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-5.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/appsmith-6.png b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-6.png new file mode 100644 index 00000000000..78b505e7529 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-6.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/appsmith-7.png b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-7.png new file mode 100644 index 00000000000..9771645376a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-7.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/appsmith-8.png b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-8.png new file mode 100644 index 00000000000..ca7f7e62e60 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/appsmith-8.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/fireboom/2-1.png b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/2-1.png new file mode 100644 index 00000000000..5fb4c0ec51f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/2-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/fireboom/2-2.png b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/2-2.png new file mode 100644 index 00000000000..714ad389184 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/2-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/fireboom/2-3.png b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/2-3.png new file mode 100644 index 00000000000..e0d5a1a605d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/2-3.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/fireboom/3-1.png b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/3-1.png new file mode 100644 index 00000000000..10d9ef1b793 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/3-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/fireboom/3-2.png b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/3-2.png new file mode 100644 index 00000000000..eef62cdfc5f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/3-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/fireboom/4-1.png b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/4-1.png new file mode 100644 index 00000000000..880e86b32ce Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/4-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/fireboom/5-1.png b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/5-1.png new file mode 100644 index 00000000000..b8f83e07b0d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/5-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/fireboom/5-2.png b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/5-2.png new file mode 100644 index 00000000000..b9b2404dc9c Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/5-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/fireboom/5-3.png b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/5-3.png new file mode 100644 index 00000000000..5e22398cdfc Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/5-3.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/fireboom/fireboom-architecture.jpeg b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/fireboom-architecture.jpeg new file mode 100644 index 00000000000..7f9660c847f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/fireboom-architecture.jpeg differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/fireboom/fireboom-intro.jpeg b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/fireboom-intro.jpeg new file mode 100644 index 00000000000..848bd2b5d97 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/fireboom/fireboom-intro.jpeg differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-0.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-0.png new file mode 100644 index 00000000000..51d1b856472 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-0.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-1.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-1.png new file mode 100644 index 00000000000..40327086916 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-10.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-10.png new file mode 100644 index 00000000000..ebcad36657b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-10.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-11.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-11.png new file mode 100644 index 00000000000..7de1f375aa4 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-11.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-12.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-12.png new file mode 100644 index 00000000000..32fea7a571b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-12.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-13.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-13.png new file mode 100644 index 00000000000..da74e2ae6af Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-13.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-14.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-14.png new file mode 100644 index 00000000000..70d6971d990 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-14.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-15.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-15.png new file mode 100644 index 00000000000..cd370d79a7b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-15.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-16.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-16.png new file mode 100644 index 00000000000..1c2de6f7d4c Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-16.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-17.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-17.png new file mode 100644 index 00000000000..a41d1df04ff Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-17.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-2.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-2.png new file mode 100644 index 00000000000..bca16d41669 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-3.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-3.png new file mode 100644 index 00000000000..7cbc77cebe6 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-3.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-4.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-4.png new file mode 100644 index 00000000000..7011b776993 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-4.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-5.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-5.png new file mode 100644 index 00000000000..edadcc1ae00 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-5.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-6.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-6.png new file mode 100644 index 00000000000..4044b336778 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-6.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-7.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-7.png new file mode 100644 index 00000000000..e2cd50bc191 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-7.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-8.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-8.png new file mode 100644 index 00000000000..9db3b3c06cf Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-8.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/gitea-9.png b/docs/5.0/i18n/zh-Hans/examples/images/gitea-9.png new file mode 100644 index 00000000000..e8dffac2625 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/gitea-9.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-1.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-1.png new file mode 100644 index 00000000000..51d7a08dd35 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-10.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-10.png new file mode 100644 index 00000000000..47ac9bd3b6a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-10.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-11.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-11.png new file mode 100644 index 00000000000..986e50a61e6 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-11.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-12.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-12.png new file mode 100644 index 00000000000..21e55e93ae9 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-12.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-13.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-13.png new file mode 100644 index 00000000000..7911c018cf4 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-13.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-14.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-14.png new file mode 100644 index 00000000000..c3d2cc3bde0 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-14.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-15.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-15.png new file mode 100644 index 00000000000..11197b975ec Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-15.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-16.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-16.png new file mode 100644 index 00000000000..d443d3d8dfe Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-16.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-17.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-17.png new file mode 100644 index 00000000000..1e88fe4f3c5 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-17.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-18.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-18.png new file mode 100644 index 00000000000..b93a0dcfc9f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-18.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-19.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-19.png new file mode 100644 index 00000000000..17c863592f8 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-19.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-2.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-2.png new file mode 100644 index 00000000000..5a9d401f263 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-20.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-20.png new file mode 100644 index 00000000000..9ed9ed3435f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-20.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-21.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-21.png new file mode 100644 index 00000000000..6a1c4a896f5 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-21.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-22.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-22.png new file mode 100644 index 00000000000..d5e70681e57 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-22.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-3.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-3.png new file mode 100644 index 00000000000..29ba87c9cc5 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-3.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-4.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-4.png new file mode 100644 index 00000000000..0790b5ce2e4 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-4.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-5.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-5.png new file mode 100644 index 00000000000..f35eebc16cd Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-5.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-6.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-6.png new file mode 100644 index 00000000000..933d0efde05 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-6.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-7.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-7.png new file mode 100644 index 00000000000..93a5e88a6e8 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-7.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-8.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-8.png new file mode 100644 index 00000000000..9b41cf4dee0 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-8.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/halo_img-9.png b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-9.png new file mode 100644 index 00000000000..609c7c0959c Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/halo_img-9.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/illa0.png b/docs/5.0/i18n/zh-Hans/examples/images/illa0.png new file mode 100644 index 00000000000..bca16d41669 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/illa0.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/illa1.jpg b/docs/5.0/i18n/zh-Hans/examples/images/illa1.jpg new file mode 100644 index 00000000000..908af82a6ed Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/illa1.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/illa2.jpg b/docs/5.0/i18n/zh-Hans/examples/images/illa2.jpg new file mode 100644 index 00000000000..b7ddd076b3a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/illa2.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/illa3.jpg b/docs/5.0/i18n/zh-Hans/examples/images/illa3.jpg new file mode 100644 index 00000000000..4a897b409c6 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/illa3.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/illa4.jpg b/docs/5.0/i18n/zh-Hans/examples/images/illa4.jpg new file mode 100644 index 00000000000..ed4f9c4e40b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/illa4.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/illa5.jpg b/docs/5.0/i18n/zh-Hans/examples/images/illa5.jpg new file mode 100644 index 00000000000..f233bedc7a0 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/illa5.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/illa6.jpg b/docs/5.0/i18n/zh-Hans/examples/images/illa6.jpg new file mode 100644 index 00000000000..f5691f979ba Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/illa6.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/illa_home.jpg b/docs/5.0/i18n/zh-Hans/examples/images/illa_home.jpg new file mode 100644 index 00000000000..a7cd310760b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/illa_home.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/pageplug-1.png b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-1.png new file mode 100644 index 00000000000..700c4e0d4d3 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/pageplug-10.png b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-10.png new file mode 100644 index 00000000000..0aa0f2546ce Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-10.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/pageplug-11.png b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-11.png new file mode 100644 index 00000000000..ef702aadb7e Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-11.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/pageplug-2.png b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-2.png new file mode 100644 index 00000000000..bca16d41669 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/pageplug-3.png b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-3.png new file mode 100644 index 00000000000..00edfb9382b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-3.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/pageplug-4.png b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-4.png new file mode 100644 index 00000000000..c947ad852ca Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-4.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/pageplug-5.png b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-5.png new file mode 100644 index 00000000000..289789fd639 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-5.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/pageplug-6.png b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-6.png new file mode 100644 index 00000000000..a58fbc16537 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-6.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/pageplug-7.png b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-7.png new file mode 100644 index 00000000000..414ff44e067 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-7.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/pageplug-8.png b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-8.png new file mode 100644 index 00000000000..dc7bb21bd4e Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-8.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/pageplug-9.png b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-9.png new file mode 100644 index 00000000000..0011841a7d1 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/pageplug-9.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/0.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/0.png new file mode 100644 index 00000000000..3b876679928 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/0.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/1.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/1.png new file mode 100644 index 00000000000..8594460ab60 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/10.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/10.png new file mode 100644 index 00000000000..a8785255d65 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/10.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/11.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/11.png new file mode 100644 index 00000000000..4582e3ffe3f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/11.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/12.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/12.png new file mode 100644 index 00000000000..1eca4f3c1ab Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/12.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/13.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/13.png new file mode 100644 index 00000000000..1c592128b98 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/13.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/14.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/14.png new file mode 100644 index 00000000000..d5ab998613d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/14.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/15.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/15.png new file mode 100644 index 00000000000..d8ae3e93589 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/15.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/16.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/16.png new file mode 100644 index 00000000000..ab8def218f7 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/16.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/17.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/17.png new file mode 100644 index 00000000000..6dedc0883d3 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/17.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/2.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/2.png new file mode 100644 index 00000000000..0cbffe89e7b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/3.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/3.png new file mode 100644 index 00000000000..d08b062b0a4 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/3.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/4.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/4.png new file mode 100644 index 00000000000..97b8d6a7c99 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/4.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/5.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/5.png new file mode 100644 index 00000000000..3568a104c8c Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/5.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/6.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/6.png new file mode 100644 index 00000000000..6a25d0523ce Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/6.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/7.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/7.png new file mode 100644 index 00000000000..05553d34735 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/7.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/8.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/8.png new file mode 100644 index 00000000000..50dbf2e31bc Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/8.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/tailchat/9.png b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/9.png new file mode 100644 index 00000000000..5b117a1c33f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/tailchat/9.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-0.png b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-0.png new file mode 100644 index 00000000000..2281aaa4123 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-0.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-1.png b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-1.png new file mode 100644 index 00000000000..a19a6b255b3 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-10.png b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-10.png new file mode 100644 index 00000000000..6a7fb98ddb4 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-10.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-2.png b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-2.png new file mode 100644 index 00000000000..0cbffe89e7b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-3.png b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-3.png new file mode 100644 index 00000000000..56f6c056be6 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-3.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-4.png b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-4.png new file mode 100644 index 00000000000..abda6fa2d15 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-4.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-5.png b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-5.png new file mode 100644 index 00000000000..8c9b87c88d9 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-5.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-6.png b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-6.png new file mode 100644 index 00000000000..8aa71909987 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-6.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-7.png b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-7.png new file mode 100644 index 00000000000..810d8e793df Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-7.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-8.png b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-8.png new file mode 100644 index 00000000000..1a657270d13 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-8.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-9.png b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-9.png new file mode 100644 index 00000000000..6aeebd4b6de Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/uptimekuma_img-9.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_1.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_1.png new file mode 100644 index 00000000000..d641378d420 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_10.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_10.png new file mode 100644 index 00000000000..d1cd7993028 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_10.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_11.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_11.png new file mode 100644 index 00000000000..103bf474654 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_11.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_12.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_12.png new file mode 100644 index 00000000000..80c69d18580 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_12.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_13.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_13.png new file mode 100644 index 00000000000..250114b79ef Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_13.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_14.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_14.png new file mode 100644 index 00000000000..d180432b02c Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_14.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_15.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_15.png new file mode 100644 index 00000000000..87711203809 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_15.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_16.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_16.png new file mode 100644 index 00000000000..b490fade878 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_16.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_17.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_17.png new file mode 100644 index 00000000000..9d0bc039160 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_17.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_2.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_2.png new file mode 100644 index 00000000000..83254bdb6cd Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_3.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_3.png new file mode 100644 index 00000000000..1b0a1f926bb Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_3.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_4.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_4.png new file mode 100644 index 00000000000..86ad0a605c7 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_4.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_5.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_5.png new file mode 100644 index 00000000000..1a9a1566ae1 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_5.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_6.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_6.png new file mode 100644 index 00000000000..52b0dc908d4 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_6.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_7.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_7.png new file mode 100644 index 00000000000..a18bfa6d170 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_7.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_8.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_8.png new file mode 100644 index 00000000000..484684f79ae Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_8.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/images/wordpress_9.png b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_9.png new file mode 100644 index 00000000000..24db5cadb90 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/images/wordpress_9.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/low-code-platform/install-appsmith.md b/docs/5.0/i18n/zh-Hans/examples/low-code-platform/install-appsmith.md new file mode 100644 index 00000000000..ff4f000b6d7 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/low-code-platform/install-appsmith.md @@ -0,0 +1,65 @@ +# 快速安装 Appsmith + +[Appsmith](https://github.com/appsmithorg/appsmith) 是一个用于构建、部署和维护内部应用程序的开源平台。您可以构建任何东西,从简单的 CRUD 应用程序、管理面板、仪表板到自定义业务应用程序和复杂的多步骤工作流。 + +## 步骤 1:在 [Sealos](https://cloud.sealos.io) 桌面环境中打开 「应用管理」 应用 + +![](../images/appsmith-1.png) + +## 步骤 2:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](../images/appsmith-2.png) + +## 步骤 3:应用部署 + +- 基础配置: + + - 应用名称(自定义):appsmith + + - 镜像名(默认最新版本):appsmith/appsmith-ce + + - CPU(推荐):2 Core + + - 内存(推荐):4 G + +- 部署模式: + + - 实例数(自定义):1 + +![](../images/appsmith-3.png) + +- 网络配置: + + - 容器暴露端口:80 + + - 外网访问:开启 + +![](../images/appsmith-4.png) + +- 高级配置: + + - 自定义本地存储,持久化 Appsmith 的数据(推荐 15 G)。 + +![](../images/appsmith-5.png) + +## 步骤 4:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](../images/appsmith-6.png) + +## 步骤 5:访问应用 + +- 点击「详情」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 + +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](../images/appsmith-7.png) + +- 访问成功! + +![](../images/appsmith-8.png) + + diff --git a/docs/5.0/i18n/zh-Hans/examples/low-code-platform/install-illacloud.md b/docs/5.0/i18n/zh-Hans/examples/low-code-platform/install-illacloud.md new file mode 100644 index 00000000000..ef254bfca4a --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/low-code-platform/install-illacloud.md @@ -0,0 +1,67 @@ +# 快速安装 ILLA Cloud + +[ILLA Cloud](https://www.illacloud.com/zh) 是一个开源的低代码平台,使用户能够创建、部署和管理内部应用程序。通过 ILLA Cloud,您可以使用直观的拖放组件来灵活地构建各种应用程序,从基本的 CRUD 应用程序到更复杂的多步骤工作流程。 + +## 步骤 1:在 [Sealos](https://cloud.sealos.io) 桌面环境中打开 「应用管理」 应用 + +![illa_home](../images/illa_home.jpg) + +## 步骤 2:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![illa0](../images/illa0.png) + +## 步骤 3:应用部署 + +- 基础配置: + + - 应用名称(自定义):illa-builder + + - 镜像名(默认最新版本):illasoft/illa-builder + + - CPU(推荐):0.5 Core + + - 内存(推荐):512 MB + +- 部署模式: + + - 实例数(自定义):1 + +- 注意:我们这里使用的是最低配置,您可以根据自己的需求加大配置。 + +![illa1](../images/illa1.jpg) + +- 网络配置: + + - 容器暴露端口:2022 + + - 外网访问:开启 + +- 注意:空白的域名可以运行 ILLA Cloud,但您也可以使用自己的域名。 + +![illa2](../images/illa2.jpg) + +- 高级配置: + + - 自定义本地数据库和磁盘(最低 1G)。 + +![illa3](../images/illa3.jpg) + +## 步骤 4:部署应用 + +- 点击「部署应用」开始部署应用。 + +![illa4](../images/illa4.jpg) + +## 步骤 5:访问应用 + +- 点击「详情」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 + +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![illa5](../images/illa5.jpg) + +- 访问成功! + +![illa6](../images/illa6.jpg) diff --git a/docs/5.0/i18n/zh-Hans/examples/low-code-platform/install-pageplug.md b/docs/5.0/i18n/zh-Hans/examples/low-code-platform/install-pageplug.md new file mode 100644 index 00000000000..2e80833180b --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/low-code-platform/install-pageplug.md @@ -0,0 +1,71 @@ +# 快速安装 PagePlug + +[PagePlug](https://github.com/cloudtogo/pageplug) 是 [Appsmith](https://github.com/appsmithorg/appsmith) 的中国化项目,基于 Appsmith 做了整体性能优化及汉化,也集合了特色表单解决方案 Formily 组件、图表解决方案 Echarts 组件、低代码小程序开发等,是面向研发使用的一个开源的、声明式的、可视化的、符合开发者直觉的前端低代码框架。 + +## 步骤 1:在 [Sealos](https://cloud.sealos.io) 桌面环境中打开 「应用管理」 应用 + +![](../images/pageplug-1.png) + +## 步骤 2:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](../images/pageplug-2.png) + +## 步骤 3:应用部署 + +- 基础配置: + + - 应用名称(自定义):pageplug + + - 镜像名(默认最新版本):cloudtogouser/pageplug-ce + + - CPU(推荐):2 Core + + - 内存(推荐):4 G + +- 部署模式: + + - 实例数(自定义):1 + +![](../images/pageplug-3.png) + +- 网络配置: + + - 容器暴露端口:80 + + - 外网访问:开启 + +![](../images/pageplug-4.png) + +- 高级配置: + + - 自定义本地存储,持久化 PagePlug 的数据。 + +![](../images/pageplug-5.png) + +## 步骤 4:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](../images/pageplug-6.png) + +## 步骤 5:访问应用 + +- 点击「详情」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 + +![](../images/pageplug-7.png) + +![](../images/pageplug-8.png) + +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](../images/pageplug-9.png) + +- 若访问出现 503 异常,等待一会重试即可。 + +![](../images/pageplug-10.png) + +- 访问成功! + +![](../images/pageplug-11.png) diff --git a/docs/5.0/i18n/zh-Hans/examples/others/install-anki.md b/docs/5.0/i18n/zh-Hans/examples/others/install-anki.md new file mode 100644 index 00000000000..2c5a619a440 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/others/install-anki.md @@ -0,0 +1,142 @@ +# 快速安装 Anki 自定义同步服务器 + +Anki 是一个辅助记忆软件,其本质是一个卡片排序工具--**即依据使用者对卡片上的自定义内容进行主动测试、自我评判后,其内部算法根据评判结果更改每张卡片下次测试时间的排序工具。** + +所谓的卡片,专业说法叫 Flash Card(抽认卡或闪卡),是一小块纸片,分为正反两面,将问题和提示写在一面,将答案写在另一面。使用方法就是先看正面的问题与提示,在脑中回想答案,然后翻出反面进行对照验证。 + +闪卡的核心制作原则就是:**一个知识点一张卡**。因此非常适合用来学习英文,也可以用来记忆历史事件时间、公式等等。 + +Anki 的同步服务器在国外,还是一个个人项目,带宽很小,同步速度很慢,如果我们想在多个客户端之间同步学习进度和新增的知识点,那将非常痛苦。 + +为了解决这个问题,我们需要部署一个自定义的同步服务器,然后让客户端去使用这个同步服务器。 + +## Anki 同步服务器部署 + +自从 2023 年 2 月份,Anki 发布了 PC 端 2.1.57 版本以后,Anki 的 PC 端,安卓端,iOS 端用户都可以自定义同步服务器了,并且不再需要安装插件。从此 Anki 小伙伴再也不用担心 Anki 同步的问题了,困扰 Anki 用户多年的同步问题终于得到彻底解决。 + +社区目前只有 [anki-sync-server-rs](https://github.com/ankicommunity/anki-sync-server-rs) 这个项目支持最新的 Anki 版本,其他的同步服务器项目基本上都失效了。这个项目是用 Rust 写的,追踪 [Anki 官方](https://github.com/ankitects/anki) 同步服务端的进度,它们都是基于sqlite c 作为数据存储后端。 + +下面我们将在 Sealos 中部署并配置 anki-sync-server-rs。 + +首先在浏览器地址栏输入网址 [https://cloud.sealos.io/](https://cloud.sealos.io/) 进入 Sealos 桌面。然后打开「应用管理」: + +![](../images/2023-06-26-11-54-EIVahX.jpg) + +点击「新建应用」: + +![](../images/2023-06-26-11-55-NDkuEg.jpg) + +依次输入应用名和镜像名,容器暴露端口是 `27701`,并开启外网访问: + +![](../images/2023-06-26-11-59-FxJE12.png) + +继续向下,展开「高级配置」,点击「编辑环境变量」: + +![](../images/2023-06-26-12-01-DKect7.png) + +将以下内容粘贴到环境变量输入框中: + +```bash +ANKISYNCD_USERNAME= +ANKISYNCD_PASSWORD= +``` + +请将 `` 替换为你自己的用户名,将 `` 替换为你自己的密码。 + +![](../images/2023-06-26-12-05-CWczxm.png) + +点击「新增存储卷」: + +![](../images/2023-06-26-12-06-lvv6ms.png) + +挂载路径填入 `/app`,然后点击确认: + +![](../images/2023-06-26-12-07-s8W7iu.png) + +最后点击右上角的部署应用即可。 + +部署完成后点击「详情」进入应用详情界面。 + +![](../images/2023-06-26-12-09-RslDGj.png) + +这里可以看到实例的运行状态,一定要等到状态是 running 才算是部署成功。如果一段时间以后状态还不是 running,可以点击「详情」查看故障原因: + +![](../images/2023-06-26-13-09-Vs9ccy.png) + +部署成功后,可以看到应用的运行情况,包括 CPU 占用、内存占用等。点击外网地址即可通过外网域名直接打开同步服务器的 Web 界面。 + +![](../images/2023-06-26-13-09-YFHPYc.png) + +如果出现以下的界面,则表示部署成功: + +![](../images/2023-06-26-13-09-FwsbfW.png) + +查看日志的方法也很简单,直接点击实例右侧的「三个点」,然后点击「日志」即可查看日志: + +![](../images/2023-06-26-13-09-hdHfxP.png) + +![](../images/2023-06-26-13-09-nwrxrv.png) + +## 客户端设置 + +### 桌面端 + +桌面客户端(macOS/Windows/Linux)配置方法如下: + +1. 先打开「首选项」 + + ![](../images/2023-06-26-12-24-QHYKZt.png) + +2. 点击「**网络**」,往下看,可以看到标有 `self-hosted sync server(自定义同步服务器)` 的方框,在里面填写您的服务端的地址: + + ![](../images/2023-06-26-12-26-HYOaBJ.png) + +3. 重启 Anki,然后点击「**同步**」: + + ![](../images/2023-06-26-12-28-ccnUOj.png) + +4. 这时候会弹出一个输入框让你输入用户名和密码,你需要将你之前设置的用户名和密码输入进去: + + ![](../images/2023-06-26-12-29-z5E9gi.png) + +5. 点击确认后,就会开始同步了。 + + +### 安卓端 + +安卓端也是直接配置即可,我的 AnkiDroid 版本是 `2.15.6`。你可以通过「设置 -> 高级设置 -> 自定义同步服务器」找到配置页面。 + +![](../images/2022-04-10-14-31-vrNHJU.png) + +再填写用户名和密码: + +> 设置 -> 常用设置 -> AnkiWeb账户 + +这样就算配置完成了,所有的牌组都同步过来了。 + +![](../images/2022-04-10-14-32-ADfk8T.png) +![](../images/2022-04-10-14-32-1iudM0.png) + +官方的版本比较旧,如果你想使用更激进的社区版本,可以到这个页面下载最新的 Beta 版: + ++ [https://github.com/ankidroid/Anki-Android/releases](https://github.com/ankidroid/Anki-Android/releases) + +建议下载 **arm64-v8a** 版本。 + +安装完成后,可以通过「设置 -> 同步 -> 自定义同步服务器」找到配置页面: + +![](../images/2023-06-26-12-39-1jsF0t.jpeg) + +再填写用户名和密码: + +> 设置 -> 同步 -> AnkiWeb账户 + +### iOS 端 + +AnkiMobile 也已经支持和自建的同步服务器同步了。至少对于版本 Ankimobile 2.0.90(20090.2) 来说,似乎是可行的,这是一位 iOS 系统用户[在 Anki 论坛报告的](https://forums.ankiweb.net/t/ankimobile-self-sync-server-failure-the-one-bundled-in-version-2-1-60-qt6/27862)。 + +如果设置完成后发现不能同步可以参考下面的内容再试一次: + +> If you're using AnkiMobile and are unable to connect to a server on your local network, please go into the iOS settings, locate Anki near the bottom, and toggle "Allow Anki to access local network" off and then on again. + +上面的内容摘自 [ANki tutorial](https://docs.ankiweb.net/sync-server.html#client-setup) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Go Apps.md b/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Go Apps.md new file mode 100644 index 00000000000..6d6a4f1adb0 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Go Apps.md @@ -0,0 +1,151 @@ +# 快速安装 Go 程序 + +首先,确保你已经安装了以下工具: + +- Docker + +## 步骤1:编写你的 Go 程序 + +```go +package main + +import ( + "fmt" + "net/http" +) + +func main() { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello,Wolrd!") + }) + + http.ListenAndServe(":8080", nil) +} +``` + +## 步骤2:创建Docker镜像 + +- 在与`main.go`相同的目录中,创建一个名为`Dockerfile`的文件,包含以下内容: + +``` +FROM golang:1.17 as builder + +WORKDIR /app +COPY . . + +RUN go mod init myapp +RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . + +FROM alpine:latest +RUN apk --no-cache add ca-certificates +WORKDIR /app +COPY --from=builder /app/main /app/ + +EXPOSE 8080 +ENTRYPOINT ["/app/main"] +``` + +这个`Dockerfile`定义了一个多阶段构建过程。在第一阶段,我们使用官方的`golang`镜像作为基础镜像,然后编译Go应用程序。在第二阶段,我们使用轻量级的`alpine`镜像,将编译好的二进制文件复制到`/app`目录,并将8080端口暴露。 + +- 在`Dockerfile`所在的目录运行以下命令,为Go应用程序构建Docker镜像: + +``` +docker build -t your_image_name . +``` + +将`your_image_name`替换为您的镜像名称和标签。 + + + +## 步骤3:推送Docker镜像 + +- 将创建的Docker镜像推送到Docker仓库,如Docker Hub或者私有仓库。**假设您已经登录到Docker仓库**,使用以下命令推送镜像 + + - 首先标记Docker镜像,在推送镜像之前,需要为其添加一个标签,以便 Docker 知道将其推送到哪个仓库。运行以下命令为镜像添加标签: + + ``` + docker tag your-image-name your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-image-name` 替换为你的本地镜像名称,`your-dockerhub-username` 替换为你的 Docker Hub 用户名,`your-repo-name` 替换为你在 Docker Hub 上要创建的仓库名称,`your-tag` 替换为你为镜像设置的标签(例如:latest)。 + + 例如: + + ``` + docker tag demo damager6666/demo:latest + ``` + + - 接下来推送Docker镜像,使用以下命令将镜像推送到 Docker Hub: + + ``` + docker push your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-dockerhub-username`、`your-repo-name` 和 `your-tag` 替换为实际的值。例如: + + ``` + docker push damager6666/demo:latest + ``` + +## 步骤4:登陆 Sealos + +- 进入 [Sealos](https://cloud.sealos.io/) 官网 + +![](images/java-example-0.png) + +## 步骤5:打开 「应用管理」 应用 + +![](images/java-example-3.png) + +## 步骤 6:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](images/java-example-4.png) + +## 步骤7:应用部署 + +- 基础配置: + + - 应用名称(自定义):go-demo + - 镜像名(**步骤5**中推送的镜像):damager6666/demo:latest + - CPU(推荐):1 Core + - 内存(推荐):1 G + +- 部署模式: + + - 实例数(自定义):1 + +![](images/java-example-5.png) + +- 网络配置: + + - 容器暴露端口:8080 + + - 外网访问:开启 + +![](images/java-example-6.png) + +## 步骤8:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](images/java-example-7.png) + +## 步骤9:访问应用 + +- 点击「应用管理」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](images/java-example-8.png) + +- 在浏览器上输入 + +``` +https://tmgkflgdlstl.cloud.sealos.io/hello +``` + +![](images/java-example-9.png) + +- 页面上显示 ”Hello,World! “ ,表示你的 Go 应用程序已经在 Sealos 上运行 + diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Java Apps.md b/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Java Apps.md new file mode 100644 index 00000000000..9a036f53487 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Java Apps.md @@ -0,0 +1,272 @@ +# 快速安装 Java 程序 + +首先,确保你已经安装了以下工具: + +- Docker +- Maven + +## 步骤1:编写你的 Java 程序 + +- 这里直接通过 [Spring Initializr](https://start.spring.io/) 生成生成一个基本的 Spring Boot 项目。 + +![](images/java-example-1.png) + +- 打开项目的 `pom.xml` 文件,在 `` 部分添加以下内容,以包含MySQL JDBC驱动: + + ``` + + mysql + mysql-connector-java + + ``` + +- 接下来,在 `src/main/resources` 目录下的 `application.properties` 文件中添加以下内容,以配置数据库连接: + + ``` + spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8 + spring.datasource.username=root + spring.datasource.password=your_password + spring.jpa.hibernate.ddl-auto=update + ``` + +## 步骤2:创建实体类和存储类 + +在项目中创建一个新的Java类,如 `Person.java`,用于表示数据库中的实体。添加以下内容: + +```java +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class Person { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String name; + + // Getters and setters + // ... +} +``` +- 然后创建一个存储库接口,如 `PersonRepository.java`: + + ```java + import org.springframework.data.jpa.repository.JpaRepository; + import org.springframework.stereotype.Repository; + + @Repository + public interface PersonRepository extends JpaRepository { + } + ``` + +## 步骤3:创建 Web 控制器 + +- 在项目的 `src/main/java` 目录下,创建一个简单的 Web 控制器。例如,创建一个名为 `PersonController.java` 的文件,并添加以下内容: + +```java +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +public class PersonController { + @Autowired + private PersonRepository personRepository; + + @GetMapping("/getPersons") + public String getAllPersons() { + List persons = personRepository.findAll(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < persons.size(); i++) { + sb.append("id: " + persons.get(i).getId() + " name: " + persons.get(i).getName() + "/n"); + } + System.out.println(sb.toString()); + return sb.toString(); + } + + @PostMapping(value = "/addPerson") + public Person addPerson(@RequestBody Person person) { + return personRepository.save(person); + } + +} +``` + +## 步骤4:构建应用程序 + +- 使用maven构建项目,运行以下命令 + + ``` + mvn clean install + ``` + + ​ ![](images/java-example-2.png) + +## 步骤5:创建Docker镜像 + +- 在 Java 项目的根目录下,创建一个名为 `Dockerfile` 的文件。这个文件将包含构建 Docker 镜像所需的指令。以下是一个简单的示例 Dockerfile: + + ``` + # 使用官方的 OpenJDK 镜像作为基础镜像 + FROM openjdk:8-jre-slim + + # 设置工作目录 + WORKDIR /app + + # 复制构建好的 JAR 文件到镜像中 + COPY target/demo-0.0.1-SNAPSHOT.jar /app/demo-0.0.1-SNAPSHOT.jar + + # 暴露应用程序的端口 + EXPOSE 8080 + + # 设置启动命令 + CMD ["java", "-jar", demo-0.0.1-SNAPSHOT.jar"] + ``` + +- 在项目根目录下,运行以下命令构建 Docker 镜像: + +``` +docker build -t java-demo . +``` + +## 步骤6:推送Docker镜像 + +- 将创建的Docker镜像推送到Docker仓库,如Docker Hub或者私有仓库。**假设您已经登录到Docker仓库**,使用以下命令推送镜像 + + - 首先标记Docker镜像,在推送镜像之前,需要为其添加一个标签,以便 Docker 知道将其推送到哪个仓库。运行以下命令为镜像添加标签: + + ``` + docker tag your-image-name your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-image-name` 替换为你的本地镜像名称,`your-dockerhub-username` 替换为你的 Docker Hub 用户名,`your-repo-name` 替换为你在 Docker Hub 上要创建的仓库名称,`your-tag` 替换为你为镜像设置的标签(例如:latest)。 + + 例如: + + ``` + docker tag java-demo damager6666/demo:v2 + ``` + + - 接下来推送Docker镜像,使用以下命令将镜像推送到 Docker Hub: + + ``` + docker push your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-dockerhub-username`、`your-repo-name` 和 `your-tag` 替换为实际的值。例如: + + ``` + docker push damager6666/java-demo:v2 + ``` + +## 步骤7:登陆 Sealos + +- 进入 [Sealos](https://cloud.sealos.io/) 官网 + +![](images/java-example-0.png) + +## 步骤8:打开 「数据库」 应用 + +![](images/java-example-10.png) + +## 步骤9:创建数据库 + +- 点击新建数据库 + +![](images/java-example-11.png) + +- 基础配置: + - 集群类型:mysql + - 集群名称 : demo-db + - CPU(推荐):1 Core + - 内存(推荐):1 G + - 实例数:1 + - 存储容量: 1 Gi +- 点击 部署集群 + +## 步骤10:配置数据库 + +![](images/java-example-12.png) + +- 点击一键连接到数据库执行以下语句: + + - 创建 test_db 数据库 + + ```sql + create database test_db; + ``` + + - 创建 test 表 + + ```sql + CREATE TABLE `name_info` ( + `id` int(11) NOT NULL, + `name` varchar(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) + ); + ``` + + - 插入数据 + + ```sql + insert into test values (1,'Sealos'); + ``` + +## 步骤11:打开 「应用管理」 应用 + +![](images/java-example-3.png) + +## 步骤 12:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](images/java-example-4.png) + +## 步骤13:应用部署 + +- 基础配置: + + - 应用名称(自定义):java-demo + - 镜像名:damager6666/java-demo:v2 + - CPU(推荐):1 Core + - 内存(推荐):1 G + +- 部署模式: + + - 实例数(自定义):1 + +![](images/java-example-5.png) + +- 网络配置: + + - 容器暴露端口:8080 + + - 外网访问:开启 + +![](images/java-example-6.png) + +## 步骤14:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](images/java-example-7.png) + +## 步骤15:访问应用 + +- 点击「应用管理」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](images/java-example-8.png) + +- 在浏览器上输入 + +``` +https://tmgkflgdlstl.cloud.sealos.io/getPersons +``` + +![](images/java-example-13.png) + +- 页面上显示之间插入到数据库的数据 ,表示你的 Java 应用程序已经在 Sealos 上运行 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Node.js Apps.md b/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Node.js Apps.md new file mode 100644 index 00000000000..410c2a5ba93 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Node.js Apps.md @@ -0,0 +1,227 @@ +# 快速安装 Node.js 程序 + +首先,确保你已经安装了以下工具: + +- Docker + +## 步骤1:编写你的 Node.js 程序 + +- 在目录下创建一个名为 `app.js` 的文件,并添加以下代码: + + ```js + const express = require('express'); + const mysql = require('mysql'); + const app = express(); + + const db = mysql.createConnection({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, + }); + + db.connect((err) => { + if (err) throw err; + console.log('Connected to the database.'); + }); + + app.get('/', (req, res) => { + db.query('SELECT id, name FROM users', (err, results) => { + if (err) throw err; + res.send(JSON.stringify(results)); + }); + }); + + app.listen(8080, () => { + console.log('Server is running on port 8080'); + }); + + ``` + +- 在项目根目录下创建一个名为 `package.json` 的文件,并包含以下内容: + + ```json + { + "name": "nodejs-web-app-mysql", + "version": "1.0.0", + "main": "app.js", + "scripts": { + "start": "node app.js" + }, + "dependencies": { + "express": "^4.17.1", + "mysql": "^2.18.1" + } + } + ``` + +## 步骤2:创建 Docker 镜像 + +- 在项目的根目录下,创建一个名为 `Dockerfile` 的文件。这个文件将包含构建 Docker 镜像所需的指令。以下是一个简单的示例 Dockerfile: + +```dockerfile +FROM node:16 + +WORKDIR /app + +COPY package*.json ./ + +RUN npm install + +COPY . . + +EXPOSE 8080 + +CMD ["npm", "start"] +``` + +## 步骤3:构建 Docker 镜像 + +- 在包含 `Dockerfile` 的目录中运行以下命令来构建 Docker 镜像: + + ``` + docker build -t nodejs-demo . + ``` + +## 步骤4:推送Docker镜像 + +- 将创建的Docker镜像推送到Docker仓库,如Docker Hub或者私有仓库。**假设您已经登录到Docker仓库**,使用以下命令推送镜像 + + - 首先标记Docker镜像,在推送镜像之前,需要为其添加一个标签,以便 Docker 知道将其推送到哪个仓库。运行以下命令为镜像添加标签: + + ``` + docker tag your-image-name your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-image-name` 替换为你的本地镜像名称,`your-dockerhub-username` 替换为你的 Docker Hub 用户名,`your-repo-name` 替换为你在 Docker Hub 上要创建的仓库名称,`your-tag` 替换为你为镜像设置的标签(例如:latest)。 + + 例如: + + ``` + docker tag nodejs-demo damager6666/nodejs-demo:v1 + ``` + + - 接下来推送Docker镜像,使用以下命令将镜像推送到 Docker Hub: + + ``` + docker push your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-dockerhub-username`、`your-repo-name` 和 `your-tag` 替换为实际的值。例如: + + ``` + docker push damager6666/nodejs-demo:v1 + ``` + + + +## 步骤5:登陆 Sealos + +- 进入 [Sealos](https://cloud.sealos.io/) 官网 + +![](images/java-example-0.png) + +## 步骤6:打开 「数据库」 应用 + +![](images/java-example-10.png) + +## 步骤7:创建数据库 + +- 点击新建数据库 + +![](images/java-example-11.png) + +- 基础配置: + - 集群类型:mysql + - 集群名称 : demo-db + - CPU(推荐):1 Core + - 内存(推荐):1 G + - 实例数:1 + - 存储容量: 1 Gi +- 点击 部署集群 + +## 步骤8:配置数据库 + +![](images/java-example-12.png) + +- 点击一键连接到数据库执行以下语句: + + - 创建 test_db 数据库 + + ```sql + create database test_db; + ``` + + - 创建 test 表 + + ```sql + CREATE TABLE `name_info` ( + `id` int(11) NOT NULL, + `name` varchar(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) + ); + ``` + + - 插入数据 + + ```sql + insert into test values (1,'Sealos'); + ``` + + + +## 步骤9:打开 「应用管理」 应用 + +![](images/java-example-3.png) + +## 步骤 10:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](images/java-example-4.png) + +## 步骤11:应用部署 + +- 基础配置: + + - 应用名称(自定义):nodejs-demo + - 镜像名:damager6666/nodejs-demo:v1 + - CPU(推荐):1 Core + - 内存(推荐):1 G + +- 部署模式: + + - 实例数(自定义):1 + +![](images/nodejs-example-0.png) + +- 网络配置: + + - 容器暴露端口:8080 + + - 外网访问:开启 + +![](images/java-example-6.png) + +## 步骤12:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](images/java-example-7.png) + +## 步骤13:访问应用 + +- 点击「应用管理」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](images/java-example-8.png) + +- 在浏览器上输入 + +``` +https://tmgkflgdlstl.cloud.sealos.io/getPersons +``` + +![](images/nodejs-example-1.png) + +- 页面上显示之间插入到数据库的数据 ,表示你的 Node.js应用程序已经在 Sealos 上运行 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Python Apps.md b/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Python Apps.md new file mode 100644 index 00000000000..dcaae39c6e3 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Python Apps.md @@ -0,0 +1,247 @@ +# 快速安装 Python 程序 + +首先,确保你已经安装了以下工具: + +- Docker + +## 步骤1:编写你的 Python 程序 + +- 在目录下创建一个名为 `app.py` 的文件,并添加以下代码: + + ```python + from flask import Flask, render_template + import mysql.connector + + app = Flask(__name__) + + def get_data_from_database(): + cnx = mysql.connector.connect( + host="java-demo-db-mysql.ns-7otl3mb2.svc", + user="root", + password="l9h8f24b", + database="test_db" + ) + + cursor = cnx.cursor() + cursor.execute("SELECT * FROM test") + data = cursor.fetchall() + cursor.close() + cnx.close() + + return data + + @app.route('/') + def index(): + data = get_data_from_database() + return render_template('index.html', data=data) + + if __name__ == '__main__': + app.run(host='0.0.0.0', debug=True) + ``` + +- 在项目目录下创建一个名为 `requirements.txt` 的文件,以列出应用程序所需的依赖。 + +``` +Flask +mysql-connector-python +``` + +- 在项目目录中创建一个名为 `templates` 的文件夹,并在其中创建一个名为 `index.html` 的文件。将以下内容添加到 `index.html`: + + ~~~html + + + + + Data from MySQL + + +

Data from MySQL

+ + + + + + + {% for row in data %} + + + + + + {% endfor %} +
Column1Column2Column3
{{ row[0] }}{{ row[1] }}{{ row[2] }}
+ + + ``` + + 请将 `Column1`、`Column2` 和 `Column3` 替换为您要显示的实际列名。 + ~~~ + +## 步骤2:创建 Docker 镜像 + +- 在项目的根目录下,创建一个名为 `Dockerfile` 的文件。这个文件将包含构建 Docker 镜像所需的指令。以下是一个简单的示例 Dockerfile: + + ```dockerfile + FROM python:3.8 + + WORKDIR /app + + COPY requirements.txt . + + RUN pip install --no-cache-dir -r requirements.txt + + COPY . . + + EXPOSE 5000 + + CMD ["python", "app.py"] + ``` + +## 步骤3:构建 Docker 镜像 + +- 在包含 `Dockerfile` 的目录中运行以下命令来构建 Docker 镜像: + + ``` + docker build -t python-demo . + ``` + +## 步骤4:推送Docker镜像 + +- 将创建的Docker镜像推送到Docker仓库,如Docker Hub或者私有仓库。**假设您已经登录到Docker仓库**,使用以下命令推送镜像 + + - 首先标记Docker镜像,在推送镜像之前,需要为其添加一个标签,以便 Docker 知道将其推送到哪个仓库。运行以下命令为镜像添加标签: + + ``` + docker tag your-image-name your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-image-name` 替换为你的本地镜像名称,`your-dockerhub-username` 替换为你的 Docker Hub 用户名,`your-repo-name` 替换为你在 Docker Hub 上要创建的仓库名称,`your-tag` 替换为你为镜像设置的标签(例如:latest)。 + + 例如: + + ``` + docker tag python-demo damager6666/python-demo:v1 + ``` + + - 接下来推送Docker镜像,使用以下命令将镜像推送到 Docker Hub: + + ``` + docker push your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-dockerhub-username`、`your-repo-name` 和 `your-tag` 替换为实际的值。例如: + + ``` + docker push damager6666/python-demo:v1 + ``` + + + +## 步骤5:登陆 Sealos + +- 进入 [Sealos](https://cloud.sealos.io/) 官网 + +![](images/java-example-0.png) + +## 步骤6:打开 「数据库」 应用 + +![](images/java-example-10.png) + +## 步骤7:创建数据库 + +- 点击新建数据库 + +![](images/java-example-11.png) + +- 基础配置: + - 集群类型:mysql + - 集群名称 : demo-db + - CPU(推荐):1 Core + - 内存(推荐):1 G + - 实例数:1 + - 存储容量: 1 Gi +- 点击 部署集群 + +## 步骤8:配置数据库 + +![](images/java-example-12.png) + +- 点击一键连接到数据库执行以下语句: + + - 创建 test_db 数据库 + + ```sql + create database test_db; + ``` + + - 创建 test 表 + + ```sql + CREATE TABLE `name_info` ( + `id` int(11) NOT NULL, + `name` varchar(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) + ); + ``` + + - 插入数据 + + ```sql + insert into test values (1,'Sealos'); + ``` + + + +## 步骤9:打开 「应用管理」 应用 + +![](images/java-example-3.png) + +## 步骤 10:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](images/java-example-4.png) + +## 步骤11:应用部署 + +- 基础配置: + + - 应用名称(自定义):python-demo + - 镜像名:damager6666/python-demo:v1 + - CPU(推荐):1 Core + - 内存(推荐):1 G + +- 部署模式: + + - 实例数(自定义):1 + +![](images/python-example-0.png) + +- 网络配置: + + - 容器暴露端口:5000 + + + - 外网访问:开启 + +![](images/python-example-1.png) + +## 步骤12:部署应用 + +![](images/python-example-2.png) + +## 步骤13:访问应用 + +- 点击「应用管理」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](images/python-example-3.png) + +- 在浏览器上输入外网地址,可以访问到刚刚存入到 MySQL 中的数据,表示程序已经成功 Sealos 上 + + ```http + https://mkqreaqfgwac.cloud.sealos.io/ + ``` + +![](images/python-example-4.png) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Vue Apps.md b/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Vue Apps.md new file mode 100644 index 00000000000..1b9873b42e0 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/programming-languages/Quick installation of Vue Apps.md @@ -0,0 +1,144 @@ +# 快速安装 Vue 程序 + +首先,确保你已经安装了以下工具: + +- Docker +- Node.js +- npm + +## 步骤1:安装 Vue CLI + +```bash +npm install -g @vue/cli +``` + +## 步骤2:使用 Vue CLI 创建一个新项目 + +```bash +vue create my-vue-app +``` + +## 步骤3:使用 Vue CLI 构建项目的生产版本 + +```bash +cd my-vue-app +npm run build +``` + +## 步骤4:创建Docker镜像 + +- 在与my-vue-app目录中,创建一个名为`Dockerfile`的文件,包含以下内容: + +```dockerfile +# 使用 nginx 镜像作为基础镜像 +FROM nginx:1.21-alpine + +# 复制构建的前端文件到 nginx 容器中 +COPY dist/ /usr/share/nginx/html + +# 暴露端口 +EXPOSE 80 + +# 启动 nginx +CMD ["nginx", "-g", "daemon off;"] +``` + +- 在`Dockerfile`所在的目录运行以下命令,为 Vue 应用程序构建 Docker 镜像: + +```bash +docker build -t my-vue-app . +``` + +## 步骤5:推送Docker镜像 + +将创建的Docker镜像推送到Docker仓库,如Docker Hub或者私有仓库。**假设您已经登录到Docker仓库**,使用以下命令推送镜像 + +- 首先标记Docker镜像,在推送镜像之前,需要为其添加一个标签,以便 Docker 知道将其推送到哪个仓库。运行以下命令为镜像添加标签: + + ``` + docker tag your-image-name your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-image-name` 替换为你的本地镜像名称,`your-dockerhub-username` 替换为你的 Docker Hub 用户名,`your-repo-name` 替换为你在 Docker Hub 上要创建的仓库名称,`your-tag` 替换为你为镜像设置的标签(例如:latest)。 + + 例如: + + ``` + docker tag my-vue-app damager6666/my-vue-app:v1 + ``` + +- 接下来推送Docker镜像,使用以下命令将镜像推送到 Docker Hub: + + ``` + docker push your-dockerhub-username/your-repo-name:your-tag + ``` + + 将 `your-dockerhub-username`、`your-repo-name` 和 `your-tag` 替换为实际的值。例如: + + ``` + docker push damager6666/my-vue-app:v1 + ``` + + +## 步骤6:登录 Sealos + +- 进入 [Sealos](https://cloud.sealos.io/) 官网 + +![](images/java-example-0.png) + +## 步骤7:打开 「应用管理」 应用 + +![](images/java-example-3.png) + +## 步骤 8:新建应用 + +- 在 「应用管理」 中,点击「新建应用」来创建一个新的应用。 + +![](images/java-example-4.png) + +## 步骤9:应用部署 + +- 基础配置: + + - 应用名称(自定义):my-vue-app + - 镜像名(**步骤5**中推送的镜像):damager6666/my-vue-app:v1 + - CPU(推荐):1 Core + - 内存(推荐):1 G + +- 部署模式: + + - 实例数(自定义):1 + +![](images/vue-example-0.png) + +- 网络配置: + + - 容器暴露端口:80 + + - 外网访问:开启 + +![](images/vue-example-1.png) + +## 步骤10:部署应用 + +- 点击「部署应用」开始部署应用。 + +![](images/vue-example-2.png) + +## 步骤11:访问应用 + +- 点击「应用管理」查看,当应用的 STATUS 由 Pending 变为 Running,则表明该应用已成功启动。 +- 当 STATUS 为 Running,即可直接访问外网地址。 + +![](images/vue-example-3.png) + +- 在浏览器上输入 + +``` +https://mvpztqzczudy.cloud.sealos.io +``` + +![](images/vue-example-4.png) + +- 页面上显示 ”Hello,Vue.js! “ ,表示你的 Vue 应用程序已经在 Sealos 上运行 + diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-0.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-0.png new file mode 100644 index 00000000000..f856ec873a6 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-0.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-1.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-1.png new file mode 100644 index 00000000000..83b3f85e444 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-10.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-10.png new file mode 100644 index 00000000000..7164ba6a31f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-10.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-11.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-11.png new file mode 100644 index 00000000000..b1cf562ca8c Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-11.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-12.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-12.png new file mode 100644 index 00000000000..6eedee90f87 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-12.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-13.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-13.png new file mode 100644 index 00000000000..3548b505e15 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-13.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-2.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-2.png new file mode 100644 index 00000000000..179f4b85a5f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-3.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-3.png new file mode 100644 index 00000000000..07db46ce9e6 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-3.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-4.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-4.png new file mode 100644 index 00000000000..670338bb9b0 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-4.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-5.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-5.png new file mode 100644 index 00000000000..a79b84e285a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-5.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-6.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-6.png new file mode 100644 index 00000000000..d5f28559a33 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-6.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-7.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-7.png new file mode 100644 index 00000000000..4a14b632edd Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-7.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-8.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-8.png new file mode 100644 index 00000000000..19a4f0f3276 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-8.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-9.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-9.png new file mode 100644 index 00000000000..b5582f255cd Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/java-example-9.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/nodejs-example-0.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/nodejs-example-0.png new file mode 100644 index 00000000000..629be8f5f14 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/nodejs-example-0.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/nodejs-example-1.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/nodejs-example-1.png new file mode 100644 index 00000000000..83d4acd117f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/nodejs-example-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-0.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-0.png new file mode 100644 index 00000000000..86d53a8b85c Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-0.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-1.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-1.png new file mode 100644 index 00000000000..2f03cf92b39 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-2.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-2.png new file mode 100644 index 00000000000..19dcda99374 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-3.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-3.png new file mode 100644 index 00000000000..54ceb5547f3 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-3.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-4.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-4.png new file mode 100644 index 00000000000..3ffbe07560b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/python-example-4.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-0.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-0.png new file mode 100644 index 00000000000..648276d1412 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-0.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-1.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-1.png new file mode 100644 index 00000000000..e47a1b27115 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-2.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-2.png new file mode 100644 index 00000000000..dab8d56621b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-3.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-3.png new file mode 100644 index 00000000000..9ac654f2439 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-3.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-4.png b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-4.png new file mode 100644 index 00000000000..b0020952109 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/examples/programming-languages/images/vue-example-4.png differ diff --git a/docs/5.0/i18n/zh-Hans/examples/social-communication/install-tailchat.md b/docs/5.0/i18n/zh-Hans/examples/social-communication/install-tailchat.md new file mode 100644 index 00000000000..b2c53ab1004 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/examples/social-communication/install-tailchat.md @@ -0,0 +1,177 @@ +# 快速安装 Tailchat + +[Tailchat](https://tailchat.msgbyte.com/) 是一款插件化易拓展的开源 IM 应用。可拓展架构赋予 Tailchat 无限可能性。 + +前端微内核架构 + 后端微服务架构 使得 Tailchat 能够驾驭任何定制化/私有化的场景 + +面向企业与私域用户打造,高度自由的群组管理与定制化的面板展示可以让私域主能够更好的展示自己的作品,管理用户,打造自己的品牌与圈子。 + +![](../images/tailchat/0.png) + + +## 首先在 [Sealos](https://cloud.sealos.io) 桌面环境中打开「应用管理」 + +![](../images/tailchat/1.png) + +## 新建应用 + +![](../images/tailchat/2.png) + +### 创建依赖 + +`tailchat` 作为企业级的应用,最小依赖: `mongodb`, `redis`, `minio`. + +接下来让我们来一一创建。 + +#### mongodb + +为了方便起见我们固定一个实例,并且为数据库绑定本地存储。 + +使用的镜像是 `mongo:4` + +需要注意的是因为我没有给数据库设置密码,因此不要对外网提供网络服务。容器暴露端口填数据库默认服务端口 `27017` 即可 + +内容如下: + +![](../images/tailchat/3.png) + +点击部署应用提交部署 + +耐心等待一会,就可以看到应用已经启动起来了 + +![](../images/tailchat/4.png) + +> 需要注意的是初始分配的64m对于mongodb来说实在太小了,所以通过变更应用改为了128m。可以随时分配资源大小这也是sealos/k8s很方便的一点 + +#### minio + +接下来我们创建minio, minio是一个开源的对象存储服务。我们同样可以通过`sealos`的点点点来快速创建 + +使用的镜像是: `minio/minio` + +需要注意的是我们要进行一些调整: + +- 暴露端口: 9000 +- 运行命令改为: `minio` +- 命令参数改为: `server /data` +- 设置环境变量: + - MINIO_ROOT_USER: tailchat + - MINIO_ROOT_PASSWORD: com.msgbyte.tailchat +- 本地存储: `/data` + +最终结果如下: + +![](../images/tailchat/5.png) + +点击部署按钮同样看到服务已经正常启动起来了。 + +#### redis + +最后我们需要部署redis作为内容缓存与信息转发。 + +使用镜像: `redis:alpine` + +暴露端口: `6379` + +最终结果如下: + +![](../images/tailchat/6.png) + + +### 创建 Tailchat 本体 + +此时Tailchat所需要的依赖均已部署完毕,如下: + +![](../images/tailchat/7.png) + +现在我们来部署 `Tailchat` 本体。 + +`Tailchat` 的本体会相对复杂一点,不过因为`sealos`纯UI操作也不会太过复杂。 + +- 使用镜像: `moonrailgun/tailchat` +- 暴露端口: `11000`(记得要打开外网访问) +- 配置环境变量如下: + ``` + SERVICEDIR=services,plugins + TRANSPORTER=redis://redis:6379 + REDIS_URL=redis://redis:6379 + MONGO_URL=mongodb://mongo/tailchat + MINIO_URL=minio:9000 + MINIO_USER=tailchat + MINIO_PASS=com.msgbyte.tailchat + ``` + +最终效果如下: + +![](../images/tailchat/8.png) + +耐心等待一段时间后可以看到`Tailchat` 服务已经启动起来了 + +![](../images/tailchat/9.png) + +## 预览服务 + +首先我们可以先检查一下`Tailchat`服务的可用性,可以通过外网地址提供的服务后面加上 `/health` 来检查服务可用性, 如: `https://.cloud.sealos.io/health` + +当启动完毕后,Tailchat服务会返回如下内容: + +![](../images/tailchat/10.png) + +这段json字符串中包含了使用的镜像版本,节点名称,系统占用,微服务加载情况。 + +这里我们可以看到我的常见的服务, 如`user`/`chat.message`以及一些带有插件前缀的服务如`plugin.registry`都已经正常启动起来了,说明我们的服务端是正常运行的。 + +现在我们可以直接访问我们的外网地址,可以看到经过短暂的加载后,页面正常打开自动跳转到了登录界面。 + +![](../images/tailchat/11.png) + +随便注册一个账号,可以看到我们可以正常进入Tailchat的主界面, 如下图: + +![](../images/tailchat/12.png) + +至此我们的服务已经成功在 sealos 中落地了。 + +## 扩容服务 + +当然,作为一个分布式架构的系统,`Tailchat` 天然是支持水平扩容的。而在 `sealos` 想要实现扩容也非常简单, 只需要通过变更操作修改实例数即可: + +![](../images/tailchat/13.png) + +![](../images/tailchat/14.png) + +![](../images/tailchat/15.png) + +此时当我们访问 `https://.cloud.sealos.io/health` 可以看到我们可以访问到不同的节点 + +![](../images/tailchat/16.png) + +## 添加 Tailchat 入口到桌面 + +打开 Terminal, 输入`vim app.yml`创建并编辑一个配置文件 + +输入以下内容,注意url要换成自己部署的网址 + +```yml +apiVersion: app.sealos.io/v1 +kind: App +metadata: + name: tailchat-app-entry +spec: + name: Tailchat + icon: + type: iframe + data: + url: + desc: + icon: https://tailchat.msgbyte.com/img/logo.svg + menuData: + displayType: normal +``` + +按`esc`退出编辑模式, 按`:wq`保存并退出vim + +输入`kubectl apply -f app.yml`启动配置。 + +完毕后刷新页面,此时我们可以看到我们的入口就出现在`sealos`的桌面上了 + +![](../images/tailchat/17.png) diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/add-domain.md b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/add-domain.md new file mode 100644 index 00000000000..564035e5774 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/add-domain.md @@ -0,0 +1,31 @@ +--- +sidebar_position: 2 +--- + +# 自定义域名 + +想让您的用户能够享受与您的品牌一致的专属体验?只需要在 [Sealos](https://cloud.sealos.io) 中为你的项目指定一个自定义域名。 + +## 部署时接入 + +如果您在部署应用时接入自定义域名,只需要在部署应用时打开「外网访问」,Sealos 会给您的应用自动分配一个外网域名。 + +![](./images/app-launchpad-domain.png) + +然后需要到您的域名服务商处,添加该域名的 `CNAME` 解析到上面分配的外网域名。以阿里云为例: + +![](./images/aliyun-cname.png) + +等待解析生效后即可回到 Sealos 中绑定自定义域名,直接点击右侧的「自定义域名」: + +![](./images/app-launchpad-domain2.png) + +在弹出的界面中输入您的自定义域名,然后点击确认即可。 + +![](./images/app-launchpad-domain3.png) + +最终点击右上角的「部署」开始部署应用,部署完成后点击外网地址即可通过自定义域名访问应用。 + +## 部署完成后接入 + +已经部署完成的应用可以在应用详情页面的右上角点击「变更」,然后参考之前的步骤接入自定义域名即可。 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/applaunchpad.md b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/applaunchpad.md new file mode 100644 index 00000000000..558d9e3c362 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/applaunchpad.md @@ -0,0 +1,55 @@ +--- +sidebar_position: 1 +--- + +# 应用管理 + +**应用管理** 是 Sealos 内置的单镜像部署工具,主要用于简化和加速应用程序的部署过程,可以帮助您在 5 分钟内完成应用的部署和上线。 + +目前「应用管理」具备以下功能: + +- 支持使用私有镜像部署应用; +- 支持根据应用需求,自定义所需的 CPU 和内存资源; +- 支持多副本; +- 弹性伸缩 (HPA); +- 提供外网访问地址,便于公网访问; +- 允许用户为应用配置自定义域名,提高品牌识别度和用户体验; +- ConfigMap 配置文件; +- 应用数据的持久化存储,保障数据的安全性和持续性; +- 提供应用和 Pod 的实时监控,帮助用户及时发现并解决问题; +- 记录和管理应用日志,便于问题追踪和性能分析; +- 分析系统事件(Events),提供关键信息帮助优化应用性能; +- 一键进入容器终端,方便管理和调试; +- 支持将应用的多个端口暴露到外网。 + +## [快速开始](/quick-start/use-app-launchpad.md) + +快速安装一些比较常见的应用。 + +## [更新应用](/guides/applaunchpad/update-app.md) + +应用部署完成后修改应用配置。 + +## [自定义域名](/guides/applaunchpad/add-domain.md) + +为应用接入自定义域名。 + +## [暴露多端口](/guides/applaunchpad/expose-multi-ports.md) + +将应用的多个端口暴露到外网中。 + +## [环境变量](/guides/applaunchpad/environment.md) + +通过环境变量为应用提供配置信息。 + +## [配置文件](/guides/applaunchpad/configmap.md) + +通过配置文件为应用提供配置信息。 + +## [弹性伸缩](/guides/applaunchpad/autoscale.md) + +通过弹性伸缩来根据负载自动调整应用的实例数量。 + +## [持久化存储](/guides/applaunchpad/persistent-volume.md) + +使用持久化存储来保障数据的持久化。 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/autoscale.md b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/autoscale.md new file mode 100644 index 00000000000..8675aa2553a --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/autoscale.md @@ -0,0 +1,24 @@ +--- +sidebar_position: 6 +--- + +# 弹性伸缩 + +「[应用管理](/guides/applaunchpad/applaunchpad.md)」可以在 Sealos 集群中自动调整应用的实例数量,以适应不同的负载条件。这个功能叫「**弹性伸缩**(Horizontal Pod Autoscaler,简称 HPA)」。 + +「弹性伸缩」通过监测特定的度量指标(如 CPU 使用率或内存使用率)来动态增加或减少应用的实例数量,以确保应用程序运行效率和资源利用的最优化。 + +> 注意:在弹性伸缩的上下文中,提到的“使用率”通常是指应用实例的平均使用率。例如,如果一个应用有两个实例,那么其 CPU 平均使用率将是这两个实例的 CPU 使用率的平均值。 + +弹性伸缩的工作原理: + +1. **监控**:持续监控应用的关键性能指标,如 CPU 使用率或内存使用量。 +2. **决策**:根据设定的目标(例如 CPU 使用率不超过 50%),系统会计算出为了达到这一目标所需增加或减少的应用实例数量。 +3. **调整**:基于计算结果,弹性伸缩会自动指示 Sealos 的控制器增加或减少应用实例的数量,以保持资源使用率在预定目标范围内。 + +假设我们为一个应用设置了如下规则:CPU 使用率不得超过 50%,实例数量可在 1 至 5 之间变动。在这种设定下,弹性伸缩将会: + +- 当应用的平均 CPU 使用率超过 50% 时,系统会增加实例数量,最多增至 5 个。 +- 当应用的平均 CPU 使用率低于 50% 时,系统会减少实例数量,但至少保持 1 个实例运行。 + +![](./images/autoscale.png) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/configmap.md b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/configmap.md new file mode 100644 index 00000000000..df100c51741 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/configmap.md @@ -0,0 +1,17 @@ +--- +sidebar_position: 5 +--- + +# 配置文件 + +在 [Sealos](https://cloud.sealos.io) 应用程序中,配置文件的使用非常重要,尤其是当应用程序需要处理大量或复杂的配置信息时。与环境变量相比,配置文件可以提供一种更灵活、更可靠的配置管理方式。环境变量更适合用于传递少量、简单的配置数据。 + +配置文件的主要优势在于其能够存储和管理复杂的配置数据,这些配置数据可以包含配置文件、命令行参数、环境变量等信息。这些数据可以在应用容器启动时注入到容器中,从而允许你对应用程序的行为进行调整,而无需重新构建镜像。 + +下面以 Nginx 容器为例,说明如何使用配置文件来调整应用的行为: + +- **文件名**: 对应 Nginx 容器里的文件,可以参考镜像提供者给出的说明。 +- **文件值**: 文件对应的内容。如果内容过于复杂,建议在本地编辑完成后,再复制粘贴到相应位置。 +- **注意事项**:配置文件是挂载单个文件,而不是挂载目录。你需要明确指定要挂载的具体文件,而非仅仅指定一个目录路径。 + +![](./images/applaunchpad13.png) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/environment.md b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/environment.md new file mode 100644 index 00000000000..3c9c97ba0d1 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/environment.md @@ -0,0 +1,28 @@ +--- +sidebar_position: 4 +--- + +# 环境变量 + +在 [Sealos](https://cloud.sealos.io) 中,环境变量扮演着至关重要的角色,它们是管理容器应用配置数据的关键工具。通过使用环境变量,可以为应用提供必要的配置信息,而无需直接修改应用的代码或其镜像,从而提高应用的可维护性和可扩展性。 + +在「[应用管理](/guides/applaunchpad/applaunchpad.md)」界面,环境变量是通过批量输入的方式来定义的。用户可以通过按行输入的方式来定义多个环境变量,其中每个环境变量由键(key)和值(value)组成,两者之间可以使用等号(=)或冒号(:)作为分隔符,「[应用管理](/guides/applaunchpad/applaunchpad.md)」会自动清除键(key)中的无效字符,以确保环境变量的正确性和有效性。 + +![](./images/applaunchpad12.png) + +**可正常解析的环境变量格式:** + +```bash +host=127.0.0.1 +port:3000 +name: sealos +- username=123 +- password:123 +# 这一行的注释会被忽略。因为不包含等号(=)或冒号(:)这两种标记字符。 +``` + +**不可解析的环境变量格式:** + +```bash +host=127.0.0.1 # 这一行会被解析,因为包含了等号(=)或冒号(:)这两种标记字符。这里的注释也会被解析,因为前面已经有等号(=)了。 +``` \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/expose-multi-ports.md b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/expose-multi-ports.md new file mode 100644 index 00000000000..7983429dcbb --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/expose-multi-ports.md @@ -0,0 +1,19 @@ +--- +sidebar_position: 3 +--- + +# 暴露多端口 + +在复杂的应用环境中,经常需要应用服务同时暴露多个端口以满足不同的需求。这种需求可能出现在多种场景下: + ++ **多协议支持**:例如,一个应用可能同时支持 HTTP 和 HTTPS 协议,需要暴露 80 和 443 端口。 ++ **应用的多功能**:例如,一个应用可能有一个 Web 服务和一个 Admin 服务,它们分别监听不同的端口。 ++ **兼容性考虑**:为了与旧版本或其他服务兼容,可能需要同时暴露新旧两种接口的端口。 ++ **Prometheus 监控和应用服务**:如果你的应用既有业务端口,又有一个用于 Prometheus 监控的 `/metrics` 端口,你可能需要同时暴露两者。 ++ **GRPC 和 RESTful 服务并存**:如果你的应用同时提供 GRPC 和 RESTful 服务,你可能需要为每种服务类型暴露不同的端口。 + +[Sealos](https://cloud.sealos.io) 在使用「[应用管理](/guides/applaunchpad/applaunchpad.md)」部署应用时,可以轻松地选择暴露多个端口。在部署应用的过程中,用户只需要点击「网络配置」选项,然后选择「添加端口」,即可实现多端口的配置。 + +![](./images/multi-ports1.png) + +此外,Sealos 平台还提供了端口的外网访问功能。一旦暴露到公网,每一个暴露的端口都会被分配一个独立的二级域名,使得用户可以更方便地进行远程访问和管理。 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/11.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/11.png new file mode 100644 index 00000000000..a4ba0152400 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/11.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/aliyun-cname.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/aliyun-cname.png new file mode 100644 index 00000000000..54651df5931 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/aliyun-cname.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/app-launchpad-domain.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/app-launchpad-domain.png new file mode 100644 index 00000000000..9e88bb76dc3 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/app-launchpad-domain.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/app-launchpad-domain2.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/app-launchpad-domain2.png new file mode 100644 index 00000000000..b5a9dd12dc4 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/app-launchpad-domain2.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/app-launchpad-domain3.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/app-launchpad-domain3.png new file mode 100644 index 00000000000..5eb0377da0e Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/app-launchpad-domain3.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad1.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad1.png new file mode 100644 index 00000000000..0e2d87f9612 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad1.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad10.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad10.png new file mode 100644 index 00000000000..37bbf7ab57d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad10.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad11.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad11.png new file mode 100644 index 00000000000..ceeb631f312 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad11.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad12.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad12.png new file mode 100644 index 00000000000..a0189b569ab Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad12.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad13.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad13.png new file mode 100644 index 00000000000..9317aa9f5c5 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad13.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad14.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad14.png new file mode 100644 index 00000000000..a7551be2882 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad14.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad2.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad2.png new file mode 100644 index 00000000000..01639505990 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad2.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad3.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad3.png new file mode 100644 index 00000000000..fd28e1f9fb6 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad3.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad4.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad4.png new file mode 100644 index 00000000000..82b4603f4ca Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad4.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad5.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad5.png new file mode 100644 index 00000000000..c4f8f7c33d9 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad5.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad6.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad6.png new file mode 100644 index 00000000000..6019b61ca10 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad6.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad7.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad7.png new file mode 100644 index 00000000000..73fcdcc39cf Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad7.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad8.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad8.png new file mode 100644 index 00000000000..227d5f1b8cf Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad8.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad9.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad9.png new file mode 100644 index 00000000000..77eb0919f86 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/applaunchpad9.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/autoscale.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/autoscale.png new file mode 100644 index 00000000000..e8b4907448f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/autoscale.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/multi-ports1.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/multi-ports1.png new file mode 100644 index 00000000000..ab08b16299b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/multi-ports1.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/persistent-volume.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/persistent-volume.png new file mode 100644 index 00000000000..b904addd338 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/persistent-volume.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/set-cert1.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/set-cert1.png new file mode 100644 index 00000000000..373e56b2bee Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/set-cert1.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/set-cert2.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/set-cert2.png new file mode 100644 index 00000000000..b7ea59eed18 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/set-cert2.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/set-cert3.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/set-cert3.png new file mode 100644 index 00000000000..0fddf457489 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/set-cert3.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/set-cert4.png b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/set-cert4.png new file mode 100644 index 00000000000..aa4fc627bc1 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/images/set-cert4.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/persistent-volume.md b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/persistent-volume.md new file mode 100644 index 00000000000..6c937764812 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/persistent-volume.md @@ -0,0 +1,13 @@ +--- +sidebar_position: 7 +--- + +# 持久化存储 + +在 [Sealos](https://cloud.sealos.io) 中,容器可以轻松地被创建和销毁。虽然这为部署和管理应用带来了灵活性,但它也带来了数据持久性的挑战。如果应用在容器内部存储数据,那么当容器被销毁时,所有存储在容器内的数据也会丢失。 + +持久化存储可以确保数据存储在容器外部,即使在容器重启或重新部署的情况下也能保证数据不会丢失。**如果你的应用需要保留数据(例如数据库、文件存储系统或任何存储用户数据的服务),一定要使用持久化存储!** + +假设你要部署一个 Nextcloud,Nextcloud 容器的所有数据都存储在 `/var/www/html` 这个目录下,因此我们需要将该目录下的数据通过外挂存储进行持久化。 + +![](./images/persistent-volume.png) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/guides/applaunchpad/set-cert.md b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/set-cert.md new file mode 100644 index 00000000000..f865fd7aa47 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/applaunchpad/set-cert.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 8 +--- + +# 设置自定义域名证书 + +在「应用管理」中成功设置自定义域名,但是无法访问域名并显示证书不安全。 这是因为 cert-manager 没有成功签发证书。为了解决这个问题,我们可以手动设置证书。 + +首先,确认在云厂商中成功设置 CNAME,并且下载域名对应的证书。 + +打开「应用管理」,设置自定义域名。 + +![](./images/set-cert1.png) + +打开「终端」,依次执行以下命令。 + +```bash +# 用证书文件信息创建 tls.crt(使用证书文件信息替换掉 xxxx) +cat > tls.crt < tls.key <的最大连接数 | +| max_wal_size | 设置WAL文件的最大大小 | +| min_wal_size | 设置WAL文件的最小大小 | +| max_worker_processes | 设置PostgreSQL可以启动
的最大后台进程数 | +| shared_buffers | 设置PostgreSQL可以启动
的最大后台进程数 | + +**常见的mysql参数**: + +| 参数名 | 描述 | +|-------------------------|-----------------------------------| +| innodb_buffer_pool_size | 设置InnoDB缓冲池的大小 | +| max_connections | 允许的最大并发连接数 | +| query_cache_size | 查询缓存的大小 | +| thread_cache_size | 线程缓存的大小 | +| max_allowed_packet | 最大数据包大小 | +| innodb_log_file_size | InnoDB日志文件的大小 | + +**常见的mongo参数**: + +| 参数名 | 描述 | +|-------------------------|------------------------------------| +| storage.dbPath | 数据文件存放路径 | +| storage.journal.enabled | 启用日志 | +| net.port | 服务器端口 | +| net.bindIp | 绑定的IP地址 | + +**常见的redis参数**: + +| 参数名 | 描述 | +|------------------------|-------------------------------------| +| maxclients | 最大客户端连接数 | +| maxmemory | 最大内存使用量 | +| maxmemory-policy | 内存淘汰策略 | +| appendonly | AOF持久化开关 | +| appendfsync | AOF文件刷新频率 | + + +4. **应用pg-config.yaml**: + +```bash +$ kubectl apply -f pg-config.yaml +``` +![config_4](./imgs/config_4.png) + +5. **检查pg-config.yaml是否应用成功**: +```bash +# OpsRequest中对应的状态为Succeed且pod对应的状态为Running则说明配置应用成功 +$ kubectl get OpsRequest +$ kubectl get pod +``` +![config_5](./imgs/config_5.png) + +6. **进入数据库查看配置是否生效**: +```bash +$ show max_connections; +``` +![config_6](./imgs/config_6.png) +![config_7](./imgs/config_7.png) + diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_1.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_1.png new file mode 100644 index 00000000000..d8c8c62be3a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_1.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_2.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_2.png new file mode 100644 index 00000000000..4bd234485bf Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_2.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_3.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_3.png new file mode 100644 index 00000000000..1f6d2ff3383 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_3.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_4.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_4.png new file mode 100644 index 00000000000..02f9a61eddd Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_4.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_5.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_5.png new file mode 100644 index 00000000000..412e0bbe7fc Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_5.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_6.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_6.png new file mode 100644 index 00000000000..5f49dd84f12 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_6.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_7.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_7.png new file mode 100644 index 00000000000..88f930a876f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/config-docs/imgs/config_7.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/dbprovider.md b/docs/5.0/i18n/zh-Hans/guides/dbprovider/dbprovider.md new file mode 100644 index 00000000000..16de7edf2d5 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/dbprovider/dbprovider.md @@ -0,0 +1,208 @@ +--- +sidebar_position: 2 +--- + +# 数据库 + +**数据库** 是一个应用的核心组成,Sealos 提供了一个数据库集群部署管理工具,可以帮助你快速部署数据库集群。目前支持 MySQL、PostgreSQL、MongoDB、Redis、Kafka等。目前**数据库** 支持如下特性。 + ++ 弹性伸缩 ++ 支持多版本、多类型 数据库 ++ 数据库 连接:一键连接、外网访问 ++ 数据库 连接:手动备份、自动备份 ++ 数据库 监控:资源、状态、性能监控 ++ 数据库 迁移:公网迁移、文件迁移 ++ 数据库 高可用:支持多个 数据库 实例 ++ 可视化 数据库 管理:新建、删除、更新 、暂停、重启 数据库 + + +## 快速开始 + +以部署一个 PostgreSQL 数据库为例,体验 **数据库** 的便捷性。 + +只需 6 步即可完成部署和访问: + +1. 在 [Sealos](https://cloud.sealos.io) 桌面进入 **数据库** 应用: + +![start_1](./imgs/start_1.png) + +2. 点击新建集群: + +![start_2](./imgs/start_2.png) + +3. 填写数据库名并选择对应的数据库和参数: + +![start_3](./imgs/start_3.png) + +4. 点击部署: + +![start_4](./imgs/start_4.png) + +5. 查看数据库详情信息: + +![start_5](./imgs/start_5.png) + +6. 数据库详情界面: + +![start_6](./imgs/start_6.png) + +![start_7](./imgs/start_7.png) + +![start_8](./imgs/start_8.png) + +![start_9](./imgs/start_9.png) + +![start_10](./imgs/start_10.png) + +![start_11](./imgs/start_11.png) + +![start_12](./imgs/start_12.png) + + +## 数据库连接 + +### 一键连接 + +1. 进入 **数据库** ,点击连接: + +![connect_1](./imgs/connect_1.png) + +2. 在终端操作数据库: + +![connect_2](./imgs/connect_2.png) + + +### 外网访问 + +1. 进入 **数据库** ,开启外网访问: + +![connect_3](./imgs/connect_3.png) + +2. 确认开启: + +![connect_4](./imgs/connect_4.png) + +3. 复制数据库连接信息: + +![connect_5](./imgs/connect_5.png) + +4. 在数据库连接工具中连接数据库: + +![connect_6](./imgs/connect_6.png) + +![connect_7](./imgs/connect_7.png) + + +## 数据库备份 + +### 手动备份 +1. 进入数据库备份界面,点击备份: + +![backup_1](./imgs/backup_1.png) + +2. 填写备份信息,开始备份: + +![backup_2](./imgs/backup_2.png) + +3. 查看备份状态: + +![backup_3](./imgs/backup_3.png) + +![backup_4](./imgs/backup_4.png) + + +### 自动备份 +1. 进入数据库备份界面,点击备份: + +![backup_5](./imgs/backup_5.png) + +2. 开启自动备份,填写备份信息: + +![backup_6](./imgs/backup_6.png) + + +## 数据库迁移 + +以 MySQL 数据库为例,介绍 数据库迁移 的过程。 + +### 公网迁移 + +公网迁移涉及两个数据库:源数据库、目标数据库。源数据库是迁移的数据来源,目标数据库是迁移的数据目的地。以下介绍中以本地数据库做为源数据库进行演示。 + +1. 进入目标数据库,连接目标数据库: + +![migration_1](./imgs/migration_1.png) + +2. 在终端界面中创建对应的database(如果已经存在对应的database,则跳过这一步): + +![migration_2](./imgs/migration_2.png) +```bash +# 创建数据库sql语句,示例: +$ create database testmysql; +``` + +3. 进入目标数据库公网迁移界面,点击迁移按钮: + +![migration_3](./imgs/migration_3.png) + +4. 查看迁移配置信息: + +![migration_4](./imgs/migration_4.png) + +复制迁移配置信息,如下: +```bash +# 设置配置信息sql语句,示例: +$ set global binlog_format=ROW; +$ set binlog_row_image ='FULL'; +``` + +5. 在源数据库中执行设置配置信息(MySQL、Postgres需要手动配置信息,Mongo不需要进行配置): +```bash +# 设置配置信息sql语句,示例: +$ set global binlog_format=ROW; +$ set binlog_row_image ='FULL'; +``` +![migration_5](./imgs/migration_5.png) + +6. 进入目标数据库,填写源数据库的迁移信息,要迁移哪些表,并填写要迁移到目标数据库中哪个database: + +![migration_6](./imgs/migration_6.png) + +如果需要持续从源数据库迁移数据,可开启高级配置中的持续迁移,如下: + +![migration_7](./imgs/migration_7.png) + +7. 查看迁移任务信息: + +![migration_8](./imgs/migration_8.png) + +8. 进入目标数据库,连接目标数据库,检查迁移数据是否完整: + +![migration_9](./imgs/migration_9.png) + +### 文件迁移 + +1. 进入目标数据库,连接目标数据库: + +![migration_10](./imgs/migration_10.png) + +2. 在终端界面中创建对应的database(如果已经存在对应的database,则跳过这一步): +```bash +# 创建数据库sql语句,示例: +$ create database testmysql; +``` +![migration_11](./imgs/migration_11.png) + +3. 上传迁移文件、填写数据库名,开始迁移: + +![migration_12](./imgs/migration_12.png) + +4. 文件迁移中,等待迁移结果: + +![migration_13](./imgs/migration_13.png) + +![migration_14](./imgs/migration_14.png) + +5. 连接数据库,检查迁移数据是否完整: + +![migration_15](./imgs/migration_15.png) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_1.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_1.png new file mode 100644 index 00000000000..8c9e8c50867 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_1.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_2.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_2.png new file mode 100644 index 00000000000..02f239da516 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_2.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_3.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_3.png new file mode 100644 index 00000000000..e0d5dca8c2e Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_3.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_4.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_4.png new file mode 100644 index 00000000000..58c37d7c5d2 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_4.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_5.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_5.png new file mode 100644 index 00000000000..8c9e8c50867 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_5.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_6.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_6.png new file mode 100644 index 00000000000..48b20cf2b8c Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/backup_6.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_1.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_1.png new file mode 100644 index 00000000000..52c6879b4d2 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_1.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_2.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_2.png new file mode 100644 index 00000000000..76215ce1c9a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_2.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_3.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_3.png new file mode 100644 index 00000000000..0a205d4a362 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_3.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_4.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_4.png new file mode 100644 index 00000000000..a1a4366d15c Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_4.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_5.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_5.png new file mode 100644 index 00000000000..0b4a3b398f7 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_5.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_6.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_6.png new file mode 100644 index 00000000000..3125cbb7bf1 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_6.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_7.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_7.png new file mode 100644 index 00000000000..e8bce07c9cd Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/connect_7.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_1.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_1.png new file mode 100644 index 00000000000..d5527ccf511 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_1.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_10.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_10.png new file mode 100644 index 00000000000..d5527ccf511 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_10.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_11.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_11.png new file mode 100644 index 00000000000..89525529685 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_11.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_12.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_12.png new file mode 100644 index 00000000000..12561fb4eba Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_12.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_13.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_13.png new file mode 100644 index 00000000000..074b4882b95 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_13.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_14.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_14.png new file mode 100644 index 00000000000..409e77e907a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_14.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_15.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_15.png new file mode 100644 index 00000000000..54589726b67 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_15.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_2.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_2.png new file mode 100644 index 00000000000..89525529685 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_2.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_3.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_3.png new file mode 100644 index 00000000000..2bc1d55549e Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_3.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_4.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_4.png new file mode 100644 index 00000000000..9a49e93f1b6 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_4.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_5.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_5.png new file mode 100644 index 00000000000..e9b0d128758 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_5.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_6.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_6.png new file mode 100644 index 00000000000..271c5bafd8b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_6.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_7.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_7.png new file mode 100644 index 00000000000..77841165996 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_7.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_8.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_8.png new file mode 100644 index 00000000000..3202d5031fb Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_8.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_9.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_9.png new file mode 100644 index 00000000000..54589726b67 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/migration_9.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_1.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_1.png new file mode 100644 index 00000000000..2b87eb60a94 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_1.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_10.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_10.png new file mode 100644 index 00000000000..6e10d9cedd0 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_10.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_11.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_11.png new file mode 100644 index 00000000000..633705ae905 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_11.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_12.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_12.png new file mode 100644 index 00000000000..f08ae8c081d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_12.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_2.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_2.png new file mode 100644 index 00000000000..016fe962470 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_2.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_3.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_3.png new file mode 100644 index 00000000000..f687bb3cda4 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_3.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_4.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_4.png new file mode 100644 index 00000000000..175419decad Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_4.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_5.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_5.png new file mode 100644 index 00000000000..da9edd9ca8c Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_5.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_6.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_6.png new file mode 100644 index 00000000000..e61a8d5befb Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_6.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_7.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_7.png new file mode 100644 index 00000000000..63aeada4ce9 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_7.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_8.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_8.png new file mode 100644 index 00000000000..8e2d489183a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_8.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_9.png b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_9.png new file mode 100644 index 00000000000..cbb8d4a36ce Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/dbprovider/imgs/start_9.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/1.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/1.png new file mode 100644 index 00000000000..3ff6dfa9b02 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/1.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/10.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/10.png new file mode 100644 index 00000000000..e636144a8ee Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/10.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/11.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/11.png new file mode 100644 index 00000000000..12624610f67 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/11.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/12.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/12.png new file mode 100644 index 00000000000..4ae45dedc78 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/12.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/13.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/13.png new file mode 100644 index 00000000000..e3cc905cd04 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/13.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/14.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/14.png new file mode 100644 index 00000000000..66dff9b0eec Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/14.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/15.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/15.png new file mode 100644 index 00000000000..0022dce6edd Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/15.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/16.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/16.png new file mode 100644 index 00000000000..442bdb7e067 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/16.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/17.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/17.png new file mode 100644 index 00000000000..0e768c7adef Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/17.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/2.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/2.png new file mode 100644 index 00000000000..386fb07680d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/2.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/3.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/3.png new file mode 100644 index 00000000000..3e17d0f6863 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/3.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/4.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/4.png new file mode 100644 index 00000000000..17ffbdd8d58 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/4.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/5.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/5.png new file mode 100644 index 00000000000..61c1098e18a Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/5.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/6.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/6.png new file mode 100644 index 00000000000..4f8e59ec725 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/6.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/7.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/7.png new file mode 100644 index 00000000000..65a4e96dbca Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/7.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/8.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/8.png new file mode 100644 index 00000000000..827eb00383d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/8.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/9.png b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/9.png new file mode 100644 index 00000000000..6ba91e30a63 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/objectstorage/images/9.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/objectstorage/objectstorage.md b/docs/5.0/i18n/zh-Hans/guides/objectstorage/objectstorage.md new file mode 100644 index 00000000000..7409d90e89d --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/objectstorage/objectstorage.md @@ -0,0 +1,188 @@ +--- +sidebar_position: 0 +--- + +# 对象存储 + +「对象存储」是 Sealos 内置的对象存储服务,主要用于存储和管理非结构化数据。 + +目前「对象存储」具备以下功能: + +- 上传文件到「存储桶」 +- 从「存储桶」下载文件 +- 公开「存储桶」的访问权限 +- 使用 SDK 访问「存储桶」 +- 监控「存储桶」资源指标 +- 静态托管 + +## 快速开始 + +### 上传文件 + +进入「对象存储」 +![](./images/1.png) + +创建「存储桶」 +![](./images/2.png) + +设置「存储桶」名字为 test,权限为 private +![](./images/3.png) + +「存储桶」创建成功 +![](./images/4.png) + +上传文件 +![](./images/5.png) + +上传文件成功 +![](./images/6.png) + +### 公开「存储桶」的访问权限 + +点击「编辑」 +![](./images/7.png) + +设置「存储桶权限」为 publicRead,点击「应用」 +![](./images/8.png) + +复制文件链接 +![](./images/9.png) + +粘贴到浏览器地址栏访问文件 +![](./images/10.png) + +### 查看访问密钥配置 + +对象存储用户由唯一的 Access Key(用户名)和对应的 Secret Key(密码)组成。Internal 为对象存储的内部访问地址,External +为对象存储的外部访问地址。 +![](./images/11.png) + +### 使用 SDK 访问「存储桶」 + +SDK 访问「存储桶」需要三个参数:AccessKey、SecretKey、Endpoint。参数都在访问密钥中,Internal 是内网地址 Endpoint,External 是外网地址 +Endpoint。如果需要使用 Region 参数,默认使用 us-east-1。 + +#### Go Client SDK + +详细文档参考:https://min.io/docs/minio/linux/developers/go/API.html + +例子:使用 Go Client SDK 上传 style.css 文件到 sv3dd7u4-test 存储桶,将 Endpoint 设置为外网地址 External。如果服务部署在当前 +K8s 集群内,可以将 Endpoint 改为内网地址 Internal。 + +```go +package main + +import ( + "context" + "fmt" + "log" + "os" +) +import "github.com/minio/minio-go/v7" +import "github.com/minio/minio-go/v7/pkg/credentials" + +func main() { + endpoint := "objectstorageapi.xxx.xxx.xxx" + accessKey := "xxxxxxxx" + secretKey := "xxxxxxxxxxxxxxxx" + // init minio client + minioClient, err := minio.New(endpoint, &minio.Options{ + Creds: credentials.NewStaticV4(accessKey, secretKey, ""), + }) + if err != nil { + log.Fatalln(err) + } + // get local file + file, err := os.Open("./style.css") + if err != nil { + fmt.Println(err) + return + } + defer file.Close() + + fileStat, err := file.Stat() + if err != nil { + fmt.Println(err) + return + } + // put object + uploadInfo, err := minioClient.PutObject(context.Background(), "sv3dd7u4-test", "style.css", file, fileStat.Size(), minio.PutObjectOptions{ContentType: "text/css"}) + if err != nil { + fmt.Println(err) + return + } + fmt.Println("Successfully uploaded bytes: ", uploadInfo) +} +``` + +文件上传成功 +![](./images/12.png) + +#### Java Client SDK + +详细文档参考:https://min.io/docs/minio/linux/developers/java/API.html + +例子:使用 Java Client SDK 上传 style1.css 文件到 sv3dd7u4-test 存储桶,将 Endpoint 设置为外网地址 External。如果服务部署在当前 +K8s 集群内,可以将 Endpoint 改为内网地址 Internal。 + +```xml + + + io.minio + minio + 8.5.9 + +``` + +```javascript +package org.example; + +import io.minio.MinioClient; +import io.minio.UploadObjectArgs; + +public class FileUploader { + public static void main(String[] args) throws Exception { + + MinioClient minioClient = + MinioClient.builder() + .endpoint("https://objectstorageapi.xxx.xxx.xxx") + .credentials("xxxxxxxx", "xxxxxxxxxxxxxxxx") + .build(); + + + minioClient.uploadObject( + UploadObjectArgs.builder() + .bucket("sv3dd7u4-test") + .object("style1.css") + .filename("src/main/java/org/example/style1.css") + .build()); + + System.out.println("Successfully uploaded bytes."); + } +} +``` + +文件上传成功 +![](./images/13.png) + +#### 其他语言 SDK 略 + +详细文档参考:https://min.io/docs/minio/linux/developers/minio-drivers.html + +### 静态托管 + +创建一个权限为 publicRead/publicReadwrite 的「存储桶」,点击「打开托管」 +![](./images/14.png) + +点击地址跳转访问 +![](./images/15.png) + +点击「自定义域名」 +![](./images/16.png) + +跳转到「应用管理」的「变更」中,可以自定义域名 +![](./images/17.png) + + + + diff --git a/docs/5.0/i18n/zh-Hans/guides/templates/images/templates.png b/docs/5.0/i18n/zh-Hans/guides/templates/images/templates.png new file mode 100644 index 00000000000..4e7734a645f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/templates/images/templates.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/templates/images/wechat-qr-code.jpg b/docs/5.0/i18n/zh-Hans/guides/templates/images/wechat-qr-code.jpg new file mode 100644 index 00000000000..c842edc94e1 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/templates/images/wechat-qr-code.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/guides/templates/submit-template.md b/docs/5.0/i18n/zh-Hans/guides/templates/submit-template.md new file mode 100644 index 00000000000..cbf9222823f --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/templates/submit-template.md @@ -0,0 +1,37 @@ +--- +sidebar_position: 2 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +import wechat from './images/wechat-qr-code.jpg'; + +# 提交模板 + +:::tip + +提交模板是可以拿奖金💰的!奖励规则如下: + +| 类型 | 奖金 | +| ------------------------------------------------------------ | ---- | +| 提交模板到 Sealos 模板市场 | 50¥ | +| 同时将模板的一键部署 PR 提交到模板应用的官方文档或者 README 中 | 150¥ | + +::: + +## 模板提交流程 + +Sealos 模板市场的所有模板都是实时从 [Sealos 模板仓库](https://github.com/labring-actions/templates) 同步过来的。如果您想要为这个仓库贡献新的模板,可以通过提交 PR(Pull Request)的方式来实现。 + +要创建一个新模板,您可以参考这里的 [template.yaml](https://github.com/labring-actions/templates/blob/main/template.yaml) 文件。系统已经内置了许多通用的环境变量和函数,这些都可以在编写模板时使用。这些内置的功能允许您使用类似于 `GitHub Actions` 的语法来编写模板,例如,您可以使用 `${{ SEALOS_NAMESPACE }}` 这样的环境变量来设置模板参数。关于这些内置环境变量的具体信息,可以参阅[模板说明文档](https://github.com/labring-actions/templates/blob/main/example_zh.md)。 + +## 领取奖金 + +首先填写并提交以下表单: + + + +然后扫码添加 Sealos 小助理微信领取奖金: + + \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/guides/templates/templates.md b/docs/5.0/i18n/zh-Hans/guides/templates/templates.md new file mode 100644 index 00000000000..f5dff84a1cc --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/templates/templates.md @@ -0,0 +1,17 @@ +--- +sidebar_position: 0 +--- + +# 模板市场 + +import Highlight from '@site/src/components/Highlight' + + + +Sealos 的[模板市场](https://template.cloud.sealos.io/)提供了一系列预制的模板,这些模板可用于快速创建和部署网站和各种应用程序。你可以在模板市场中找到各种类型的模板,比如博客、AI 应用、低代码应用、网盘、IM 应用、中间件等等。这些模板旨在简化开发过程,使开发者能够快速启动和部署项目,而无需从零开始构建整个网站,也无需关心应用之间的各种依赖关系。 + +与 Vercel 的模板市场相比,Sealos 的模板市场在应用范围和功能上有所不同。Vercel 主要专注于前端项目的部署,它的模板主要是为了支持网站的界面和用户交互部分,但它不支持数据的持久化存储,所有的数据都是临时的,一旦应用重启,数据就会丢失。 + +Sealos 应用模板不仅支持前端项目,还支持后端和其他各类应用的部署。更重要的是,Sealos 支持挂载持久化存储,这对于需要存储大量数据或者保持数据持久化的应用来说至关重要。例如,对于电商网站、大型社交媒体应用或企业级应用来说,数据的持久化是必不可少的功能。 + +![](./images/templates.png) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/guides/terminal/images/database-terminal-1.png b/docs/5.0/i18n/zh-Hans/guides/terminal/images/database-terminal-1.png new file mode 100644 index 00000000000..f1fcc577c7f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/terminal/images/database-terminal-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/terminal/images/database-terminal.png b/docs/5.0/i18n/zh-Hans/guides/terminal/images/database-terminal.png new file mode 100644 index 00000000000..01dba426f6b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/terminal/images/database-terminal.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/terminal/images/nginx-terminal-1.png b/docs/5.0/i18n/zh-Hans/guides/terminal/images/nginx-terminal-1.png new file mode 100644 index 00000000000..ecb9443c962 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/terminal/images/nginx-terminal-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/terminal/images/nginx-terminal.png b/docs/5.0/i18n/zh-Hans/guides/terminal/images/nginx-terminal.png new file mode 100644 index 00000000000..c8fa6b4ae9f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/terminal/images/nginx-terminal.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/terminal/images/terminal-pod.png b/docs/5.0/i18n/zh-Hans/guides/terminal/images/terminal-pod.png new file mode 100644 index 00000000000..9e649dac3a1 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/terminal/images/terminal-pod.png differ diff --git a/docs/5.0/i18n/zh-Hans/guides/terminal/images/terminal.webp b/docs/5.0/i18n/zh-Hans/guides/terminal/images/terminal.webp new file mode 100644 index 00000000000..d1daf72539d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/terminal/images/terminal.webp differ diff --git a/docs/5.0/i18n/zh-Hans/guides/terminal/terminal.md b/docs/5.0/i18n/zh-Hans/guides/terminal/terminal.md new file mode 100644 index 00000000000..7a622ffe046 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/terminal/terminal.md @@ -0,0 +1,86 @@ +--- +sidebar_position: 4 +--- + +# 终端 + +终端是 [Sealos](https://cloud.sealos.io) 云操作系统内置的应用,它是一款非常强大的应用,与单机操作系统的终端一样,允许用户与操作系统进行直接交互,用户可以通过键入命令来执行各种操作。 + +![](./images/terminal.webp) + +终端的价值在于其高效,灵活和强大的特性。对于许多任务来说,使用终端比使用图形用户界面(GUI)更快更简洁。对于开发者而言,终端是必不可少的工具。使用终端,可以让用户深入理解和控制 Sealos 云操作系统。 + +**每一个用户的终端实际上都运行在 Kubernetes 的一个 Pod 中**,可以在终端中通过以下命令查看: + +![](./images/terminal-pod.png) + +## 进入应用容器的终端 + +也可以直接通过终端 App 进入每个应用所在容器的终端。假设你在应用管理中部署了一个应用 Nginx,可以直接进入 Nginx 应用的详情页面,依次点击详情右侧的三个点,再点击「终端」,便进入了 Nginx 应用的终端。 + +![](./images/nginx-terminal.png) + +![](./images/nginx-terminal-1.png) + +## 终端一键直连数据库 + +还可以在终端中一键直连[数据库 App](../dbprovider/dbprovider.md) 中创建的数据库。 + +进入数据库详情页面,点击左侧的「一键连接」: + +![](./images/database-terminal.png) + +就会直接跳转到终端 App 并连接数据库: + +![](./images/database-terminal-1.png) + +## 终端直接操作 Kubernetes 资源 + +:::danger + +以下操作需要一定的 Kubernetes 和容器相关知识基础,否则不要轻易操作。 + +::: + +资深 Kubernetes 用户可以直接使用终端来操作 Kubernetes 资源,对于资深用户而言,终端的优势有很多: + ++ 可以批量操作和自动化 ++ 高度灵活性 ++ 可以进行深入的故障排查 + +以下是一些常见的终端中操作 Kubernetes 资源的示例: + +### 查看用户的 Pod 列表 + +```bash +kubectl get pods +``` + +### 创建和管理资源对象 + +```bash +# 使用YAML或JSON文件创建资源 +$ kubectl create -f + +# 使用YAML或JSON文件创建或更新资源 +$ kubectl apply -f + +# 删除指定类型和名称的资源 +$ kubectl delete + +# 查看指定 Deployment 的滚动更新状态 +$ kubectl rollout status deployment/ +``` + +### 故障排查 + +```bash +# 获取指定资源的详细信息,包括事件和状态 +$ kubectl describe + +# 获取指定 Pod 中指定容器的日志 +$ kubectl logs -c + +# 在指定 Pod 中打开一个终端,以便进行调试 +$ kubectl exec -it +``` \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/guides/workspace/images/accept-invite.gif b/docs/5.0/i18n/zh-Hans/guides/workspace/images/accept-invite.gif new file mode 100644 index 00000000000..571b21e9363 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/workspace/images/accept-invite.gif differ diff --git a/docs/5.0/i18n/zh-Hans/guides/workspace/images/create-workspace.gif b/docs/5.0/i18n/zh-Hans/guides/workspace/images/create-workspace.gif new file mode 100644 index 00000000000..87e2684db91 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/workspace/images/create-workspace.gif differ diff --git a/docs/5.0/i18n/zh-Hans/guides/workspace/images/invite-user.gif b/docs/5.0/i18n/zh-Hans/guides/workspace/images/invite-user.gif new file mode 100644 index 00000000000..3da87246832 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/workspace/images/invite-user.gif differ diff --git a/docs/5.0/i18n/zh-Hans/guides/workspace/images/switch-workspace.gif b/docs/5.0/i18n/zh-Hans/guides/workspace/images/switch-workspace.gif new file mode 100644 index 00000000000..ae1df35f335 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/guides/workspace/images/switch-workspace.gif differ diff --git a/docs/5.0/i18n/zh-Hans/guides/workspace/worksapce.md b/docs/5.0/i18n/zh-Hans/guides/workspace/worksapce.md new file mode 100644 index 00000000000..d8cbe67692c --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/guides/workspace/worksapce.md @@ -0,0 +1,46 @@ +--- +sidebar_position: 5 +--- + +# 团队协作与工作空间 + +## 名词解释 + +### 工作空间 + +工作空间(workspace)是 Sealos 云操作系统的核心功能,基于kubernetes +namespace实现,是一种多租户的资源隔离机制,可以将一个kubernetes集群划分为多个工作空间,每个工作空间都有自己的资源配额和权限,可以将不同的用户划分到不同的工作空间中,实现资源隔离和权限控制。 + +个人空间(personal +workspace)是工作空间的一种特殊形式,每个用户都有一个个人空间,个人空间的名称与用户的用户名相同,个人空间的资源配额和权限与普通工作空间相同,但是个人空间无法删除,也无法将其他用户加入到个人空间中。 + +### 角色与权限 + +工作空间中的用户可以拥有不同的角色,不同的角色拥有不同的权限,目前 Sealos 云操作系统中的角色有以下几种: +所有者(owner)、管理员(manager)、开发者(developer)。 + ++ 所有者(owner):拥有工作空间的所有权限,包括删除工作空间、查看/创建/修改工作空间中的所有资源、邀请用户以管理员/开发者身份加入工作空间等。 ++ 管理员(manager):拥有工作空间的管理权限,包括查看/创建/修改工作空间中的所有资源、邀请用户以开发者身份加入工作空间等。 ++ 开发者(developer):拥有工作空间的开发权限,包括查看工作空间中的资源状态。 + +## 快速开始 + +### 创建工作空间 + +![create-workspace.gif](images%2Fcreate-workspace.gif) + +### 切换工作空间 + +![switch-workspace.gif](images%2Fswitch-workspace.gif) + +### 邀请用户加入工作空间 + +通过用户id邀请用户加入工作空间,被邀请的用户可以选择接受或拒绝邀请,如果接受邀请,被邀请的用户将成为工作空间的成员,拥有工作空间中的资源权限。 + +![invite-user.gif](images%2Finvite-user.gif) + +### 接受邀请 + +当用户被邀请加入工作空间时,可以在管理面板查看到邀请消息,点击邀请消息可以查看邀请详情,点击接受邀请按钮可以接受邀请,接受邀请后,用户将成为工作空间的成员,拥有工作空间中的资源权限。 + +![accept-invite.gif](images%2Faccept-invite.gif) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/images/sealos-desktop-zh.webp b/docs/5.0/i18n/zh-Hans/images/sealos-desktop-zh.webp new file mode 100644 index 00000000000..b82a41f1c54 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/images/sealos-desktop-zh.webp differ diff --git a/docs/5.0/i18n/zh-Hans/images/sealos-qr-code.jpg b/docs/5.0/i18n/zh-Hans/images/sealos-qr-code.jpg new file mode 100644 index 00000000000..506286e82d7 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/images/sealos-qr-code.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/msa/privacy-policy.md b/docs/5.0/i18n/zh-Hans/msa/privacy-policy.md new file mode 100644 index 00000000000..95e40288140 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/msa/privacy-policy.md @@ -0,0 +1,62 @@ +--- +sidebar_position: 2 +--- + +# Sealos 云服务隐私政策 + +我们非常重视您的隐私保护,在您使用本服务时,我们将按照以下政策收集、使用、披露和保护您的个人信息。请您仔细阅读并充分理解本隐私政策。 + +**信息收集** + +1. 在您注册或使用本服务时,我们可能收集您的姓名、电话号码、电子邮件地址、地址等个人信息。 +2. 在您使用本服务过程中产生的信息,如操作日志、访问IP地址、设备型号等。 +3. 我们可能会通过 Cookies 或其他技术收集和存储您访问本服务的相关信息,以便为您提供更好的用户体验。 + +**信息使用** + +1. 我们会根据法律法规规定以及与用户之间的约定来处理用户的个人信息。 +2. 我们可能会将收集到的信息用于改进服务质量、开发新产品或功能等目的。 +3. 我们可能会将收集到的信息用于向您推送与本服务相关的通知或广告。 + +**信息披露** + +1. 我们不会向任何第三方披露您的个人信息,除非: + + 1. 您事先同意; + + 2. 法律法规要求; + + 3. 为维护我们或其他用户的合法权益。 + +2. 我们可能与关联公司、合作伙伴分享您的个人信息,但我们会采取相应的保密措施,确保信息安全。 + +**信息保护** + +1. 我们采取各种安全措施,包括加密、访问控制等技术手段,以保护您的个人信息免受未经授权的访问、使用或泄露。 +2. 我们会定期对收集、存储和处理的个人信息进行安全评估,以确保个人信息安全。 +3. 在发生个人信息泄露等安全事件时,我们会立即启动应急预案,并在法律法规规定的范围内向您及时告知。 + +**用户权利** + +1. 您有权随时查阅、更正或删除您的个人信息。 +2. 您有权拒绝我们收集您的个人信息,但这可能导致您无法使用本服务的部分功能。 +3. 您有权要求我们停止处理您的个人信息,但这可能导致您无法继续使用本服务。 + +**隐私政策更新** + +1. 我们可能会对本隐私政策进行修改。如本隐私政策发生变更,我们将在本服务页面上发布修改后的隐私政策。如您继续使用本服务,则视为同意修改后的隐私政策。 +2. 我们鼓励您定期查阅本隐私政策,以了解我们如何保护您的个人信息。 + +**未成年人保护** + +我们非常重视对未成年人个人信息的保护,如您为未成年人,请在监护人指导下使用本服务,并请监护人帮助您在使用本服务过程中正确处理个人信息。 + +**跨境数据传输** + +由于我们的服务器可能位于不同国家或地区,您同意我们可能需要将您的个人信息传输至其他国家或地区,并在该等国家或地区存储和处理以向您提供服务。我们会采取适当措施确保跨境传输的数据仍然受到适当保护。 + +**联系我们** + +1. 如您对本隐私政策有任何疑问、建议或投诉,请通过以下方式与我们联系(微信): + [fangnux] +2. 我们将尽快回复并解决您提出的问题。 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/msa/terms-of-service.md b/docs/5.0/i18n/zh-Hans/msa/terms-of-service.md new file mode 100644 index 00000000000..3d30bde57f3 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/msa/terms-of-service.md @@ -0,0 +1,68 @@ +--- +sidebar_position: 1 +--- + +# Sealos 云服务服务协议 + +Sealos 云服务服务协议是您与珠海环界云计算有限公司(以下简称“我们”或“本公司”)之间就云服务(以下简称“本服务”)的使用等相关事项所订立的协议。请您仔细阅读并充分理解本协议各条款,特别是免除或者限制我们责任的条款、对您权益的限制条款、争议解决和法律适用条款等。如您不同意本协议任一内容,请勿注册或使用本服务。 + +**第1条 服务内容** + +1. 我们将向您提供存储、计算、网络传输等基于互联网的信息技术服务。 +2. 我们将为您提供相关技术支持和客户服务,帮助您更好地使用本服务。 +3. 您同意我们有权自行决定变更、中断、终止或暂停本服务的全部或部分功能,且无需对您承担任何责任。 + +**第2条 用户注册与账户管理** + +1. 您在使用本服务前需要注册一个账户。您保证在注册时提供的信息真实、准确、完整,并及时更新。 +2. 您应妥善保管账户名和密码,对由此产生的全部行为负责。如发现他人使用您的账户,应立即通知我们。 +3. 我们有权对您的账户进行审查,如发现您的账户存在异常情况,我们有权暂停或终止向您提供服务。 + +**第3条 使用规则** + +1. 您不得利用本服务从事任何违法活动或侵犯他人合法权益的行为,包括但不限于侵犯知识产权、泄露他人商业机密等。 +2. 您不得通过任何手段恶意注册账户,包括但不限于以牟利、炒作、套现等目的。 +3. 您不得利用本服务传播任何违法、有害、恶意软件等信息。 +4. 您应遵守相关法律法规及本协议的规定,对在本服务中发布的信息及使用本服务所产生的结果承担全部责任。 + +**第4条 费用及支付** + +1. 您同意支付与本服务相关的费用,具体费用标准以我们公布的价格为准。 +2. 我们可能会根据市场情况调整费用标准,并提前通知您。您如继续使用本服务,则视为同意调整后的费用标准。 +3. 如您未按时支付费用,我们有权暂停或终止向您提供本服务,并保留追讨欠款及要求赔偿的权利。 + +**第5条 服务免责与责任限制** + +1. 本服务按照现有技术和条件所能达到的水平提供。我们不能保证本服务无故障、安全完全可靠或满足您的所有需求。 +2. 如因不可抗力导致本服务发生故障或无法正常使用,我们不承担责任。 +3. 对于因您自身原因导致的数据丢失、损坏等情况,我们不承担责任。 + +**第6条 隐私政策** + +您同意接受并遵守我们制定的隐私政策。隐私政策为本协议的一部分,具体内容请参见下文“隐私政策”。 + +**第7条 知识产权** + +1. 我们对本服务及相关软件、技术、文档等拥有全部知识产权,除非经我们明确许可,您不得进行复制、分发、出租、反向工程等行为。 +2. 您在使用本服务过程中产生的数据和内容(包括但不限于文件、图片等)之知识产权归您所有,但为了向您提供服务,您同意授权我们在必要范围内对其进行存储、备份等操作。 + +**第8条 协议终止** + +1. 如您违反本协议规定,我们有权立即终止向您提供服务,并保留追究法律责任的权利。 +2. 如您决定停止使用本服务,可以申请注销账户,本协议自账户注销之日起终止。 + +**第9条 争议解决和法律适用** + +1. 本协议的签订、履行、解释和争议解决均适用中华人民共和国法律。 +2. 若您与我们发生争议,应先友好协商解决;协商不成的,任何一方均有权将争议提交至有管辖权的人民法院诉讼解决。 + +**第10条 网络安全** + +1. 如果利用平台服务提供违反国家法律的服务,您需要自行承担后果。 +2. 您对外提供的服务需要做好监管职责,如有用户在您的服务上从事违反国家法律的行为,您需自行承担后果。 +3. 我们如果发现您存在违法行为,将会对相关部门发起诉讼,并为有关部门提供证据。 + +**第11条 其他条款** + +1. 如本协议中部分条款因违反法律法规而被视为无效,不影响其他条款的效力。 +2. 本公司保留对本协议及隐私政策的最终解释权。如您对本协议或隐私政策有任何疑问,请联系我们。 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-sokx.png b/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-sokx.png new file mode 100644 index 00000000000..834cb08f40d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-sokx.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-tlpi.png b/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-tlpi.png new file mode 100644 index 00000000000..b904addd338 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-tlpi.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-tpsc.jpg b/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-tpsc.jpg new file mode 100644 index 00000000000..8e477e550a4 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-tpsc.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-ualx.jpg b/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-ualx.jpg new file mode 100644 index 00000000000..49ab8b95ae3 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-ualx.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-ubqj.jpg b/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-ubqj.jpg new file mode 100644 index 00000000000..5f1da8a47b4 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/SCR-20230529-ubqj.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/aliyun-cname.png b/docs/5.0/i18n/zh-Hans/quick-start/images/aliyun-cname.png new file mode 100644 index 00000000000..54651df5931 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/aliyun-cname.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-deployment-2.png b/docs/5.0/i18n/zh-Hans/quick-start/images/app-deployment-2.png new file mode 100644 index 00000000000..7154f775b5d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-deployment-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-deployment-3.png b/docs/5.0/i18n/zh-Hans/quick-start/images/app-deployment-3.png new file mode 100644 index 00000000000..2c57fd60b2e Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-deployment-3.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-deployment.png b/docs/5.0/i18n/zh-Hans/quick-start/images/app-deployment.png new file mode 100644 index 00000000000..2f2429e965d Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-deployment.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-1.jpg b/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-1.jpg new file mode 100644 index 00000000000..1b6652464f9 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-1.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-domain.png b/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-domain.png new file mode 100644 index 00000000000..9e88bb76dc3 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-domain.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-domain2.png b/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-domain2.png new file mode 100644 index 00000000000..b5a9dd12dc4 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-domain2.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-domain3.png b/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-domain3.png new file mode 100644 index 00000000000..5eb0377da0e Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-domain3.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-zh.webp b/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-zh.webp new file mode 100644 index 00000000000..e9651614238 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad-zh.webp differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad.jpg b/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad.jpg new file mode 100644 index 00000000000..1a64b79192e Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-launchpad.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-list-2.png b/docs/5.0/i18n/zh-Hans/quick-start/images/app-list-2.png new file mode 100644 index 00000000000..355cd126eec Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-list-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-list.png b/docs/5.0/i18n/zh-Hans/quick-start/images/app-list.png new file mode 100644 index 00000000000..a9461aae6b7 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-list.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-nginx.png b/docs/5.0/i18n/zh-Hans/quick-start/images/app-nginx.png new file mode 100644 index 00000000000..8948883dd40 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-nginx.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/app-url.png b/docs/5.0/i18n/zh-Hans/quick-start/images/app-url.png new file mode 100644 index 00000000000..7e36ad3b964 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/app-url.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/database-configure.png b/docs/5.0/i18n/zh-Hans/quick-start/images/database-configure.png new file mode 100644 index 00000000000..2e3953ab44e Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/database-configure.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/database-connect.png b/docs/5.0/i18n/zh-Hans/quick-start/images/database-connect.png new file mode 100644 index 00000000000..c7d6e3a3b01 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/database-connect.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/database-creating.png b/docs/5.0/i18n/zh-Hans/quick-start/images/database-creating.png new file mode 100644 index 00000000000..d4c091e355e Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/database-creating.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/database-launch.jpg b/docs/5.0/i18n/zh-Hans/quick-start/images/database-launch.jpg new file mode 100644 index 00000000000..ecbf33885d3 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/database-launch.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/database-more.png b/docs/5.0/i18n/zh-Hans/quick-start/images/database-more.png new file mode 100644 index 00000000000..2e38550cc54 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/database-more.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/database-select.png b/docs/5.0/i18n/zh-Hans/quick-start/images/database-select.png new file mode 100644 index 00000000000..12c77075f41 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/database-select.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/deploy-template.png b/docs/5.0/i18n/zh-Hans/quick-start/images/deploy-template.png new file mode 100644 index 00000000000..8dbd671ca11 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/deploy-template.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/multi-ports1.png b/docs/5.0/i18n/zh-Hans/quick-start/images/multi-ports1.png new file mode 100644 index 00000000000..ab08b16299b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/multi-ports1.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/nginx.png b/docs/5.0/i18n/zh-Hans/quick-start/images/nginx.png new file mode 100644 index 00000000000..14adf1fcc77 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/nginx.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/template-detail.png b/docs/5.0/i18n/zh-Hans/quick-start/images/template-detail.png new file mode 100644 index 00000000000..d17b41b7094 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/template-detail.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/templates-2.png b/docs/5.0/i18n/zh-Hans/quick-start/images/templates-2.png new file mode 100644 index 00000000000..f2df81fe93e Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/templates-2.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/templates.jpg b/docs/5.0/i18n/zh-Hans/quick-start/images/templates.jpg new file mode 100644 index 00000000000..4bb9dc03c3e Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/templates.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/images/terminal.png b/docs/5.0/i18n/zh-Hans/quick-start/images/terminal.png new file mode 100644 index 00000000000..b0f260da997 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/quick-start/images/terminal.png differ diff --git a/docs/5.0/i18n/zh-Hans/quick-start/next-steps.md b/docs/5.0/i18n/zh-Hans/quick-start/next-steps.md new file mode 100644 index 00000000000..c8e1833bb2b --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/quick-start/next-steps.md @@ -0,0 +1,7 @@ +--- +sidebar_position: 5 +--- + +# 下一步 + +恭喜您成功进入了 Sealos 的世界,现在您可以选择深入了解 Sealos 的更多功能: \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/quick-start/use-app-launchpad.md b/docs/5.0/i18n/zh-Hans/quick-start/use-app-launchpad.md new file mode 100644 index 00000000000..858b6653230 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/quick-start/use-app-launchpad.md @@ -0,0 +1,67 @@ +--- +sidebar_position: 2 +--- + +# 使用应用管理 + +Sealos 的桌面环境类似于单机操作系统 macOS 或 Windows 的桌面环境,桌面上的每个图标都是一个 App,类似于 Windows 的快捷方式。与单机操作系统一样,Sealos 也有系统自带的 App,要想在这个云操作系统中快速安装应用,就需要用到系统自带的 App:**应用管理**。 + +> 关于应用管理的详细信息请参阅 [应用管理介绍](/guides/applaunchpad/applaunchpad.md) + +下面将演示如何在 Sealos 云操作系统中快速安装一些比较常见的应用。 + +## 快速安装 Nginx + +首先在 [Sealos](https://cloud.sealos.run) 桌面环境中打开**应用管理**。 + +![](./images/app-launchpad-zh.webp) + +点击「新建应用」。 + +![](./images/app-list.png) + +依次输入应用名和镜像名,并开启外网访问,最后点击「部署应用」即可。 + +![](./images/app-deployment.png) + +部署完成后点击「详情」进入应用详情界面。 + +![](./images/app-list-2.png) + +可以看到 Nginx 应用的运行情况,包括 CPU 占用、内存占用等。点击外网地址即可通过外网域名直接打开 Nginx 界面。 + +![](./images/app-nginx.png) + +![](./images/SCR-20230529-sokx.png) + +## 快速安装 Nextcloud + +再来看一个例子,在**应用管理**中快速安装开源的私人网盘应用 Nextcloud。 + +与之前的例子一样,在**应用管理**中点击「新建应用」。依次输入应用名和镜像名,选择合适的 CPU 和内存,并开启外网访问。 + +![](./images/app-deployment-2.png) + +Nextcloud 容器的所有数据都存储在 `/var/www/html` 这个目录下,因此我们需要将该目录下的数据通过外挂存储进行持久化。 + +继续往下,展开「高级配置」,在「本地存储」中点击「新增存储卷」。 + +![](./images/app-deployment-3.png) + +选择外挂存储的容量,并填入存储挂载到应用中的路径,然后点击「确认」。 + +![](./images/SCR-20230529-tlpi.png) + +最后再点击右上角的「部署应用」,应用就安装完成了。 + +点击「应用详情」进入 Nextcloud 应用的详情页面,确认应用处于 Running 状态,然后点击外网地址直接打开 Nextcloud 的 Web 界面。 + +![](./images/SCR-20230529-tpsc.jpg) + +设置用户名和密码之后点击「Install」开始安装。稍等片刻安装完成后直接刷新页面。 + +![](./images/SCR-20230529-ualx.jpg) + +输入用户名密码即可登录成功。 + +![](./images/SCR-20230529-ubqj.jpg) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/quick-start/use-database.md b/docs/5.0/i18n/zh-Hans/quick-start/use-database.md new file mode 100644 index 00000000000..133a02e1be3 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/quick-start/use-database.md @@ -0,0 +1,33 @@ +--- +sidebar_position: 4 +--- + +# 使用数据库 + +数据库是数据管理的重要手段 , 可用于高效地存储和访问数据。Sealos 提供了一个简单易用的数据库前端应用,屏蔽了繁琐的命令行操作,帮助你管理关系数据库、NoSQL、向量数据库和流数据库等各种类型的数据库。你只需通过「[数据库](/guides/dbprovider/dbprovider.md)」应用就能轻松创建各种数据库,包括 MySQL、PostgreSQL、MongoDB、Redis 等多种类型的数据库。 + +下面将通过示例来演示 Sealos 如何快速安装 MySQL。 + +## 快速安装 MySQL + +1. 在 [Sealos](https://cloud.sealos.run) 桌面环境中打开数据库。 + +![](./images/database-launch.jpg) + +2. 点击新建数据库,完成基础配置设置。 + +![](./images/database-configure.png) + +3. 点击「部署」,然后点击「确认」等待数据库创建成功。 + +![](./images/database-more.png) + +4. 点击一键连接,就可以直接打开「[终端](../../guides/terminal/terminal.md)」应用进入数据库的命令行终端。 + +![](./images/database-connect.png) + +## 快速安装 PostgreSQL 和 MongoDB + +PostgreSQL 和 MongoDB 数据库的安装和 MySQL 类似,需要在基础配置界面选择相应的数据库类型。 + +![](./images/database-select.png) diff --git a/docs/5.0/i18n/zh-Hans/quick-start/use-template.md b/docs/5.0/i18n/zh-Hans/quick-start/use-template.md new file mode 100644 index 00000000000..aa8ce69c84b --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/quick-start/use-template.md @@ -0,0 +1,34 @@ +--- +sidebar_position: 1 +--- + +# 使用模板 + +这篇文档将会向您展示如何使用应用模板来快速安装各种分布式应用,并最大限度地发挥 Sealos 的功能。 + +## 1. 选择模板 + +首先在 [Sealos](https://cloud.sealos.run) 桌面环境中打开「模板市场」。 + +![](./images/templates.jpg) + +选择自己想要部署的应用模板。 + +![查看模板市场](./images/templates-2.png) + +不知道部署哪个应用?可以试试 [FastGPT AI 知识库](/examples/ai-applications/install-fastgpt-on-desktop.md) + +## 2. 将模板应用部署到 Sealos + +选择模板之后,设置好相应的参数值,点击「部署应用」按钮开始部署。 + +![将模板部署到 Sealos](./images/deploy-template.png) + +部署完成后,点击「确认」跳转到应用详情。 + +![](./images/template-detail.png) + +等待应用的状态变成 `running` 之后,点击外网地址即可通过外网域名直接打开应用的 Web 界面。 + +![](./images/app-url.png) + diff --git a/docs/5.0/i18n/zh-Hans/quick-start/use-terminal.md b/docs/5.0/i18n/zh-Hans/quick-start/use-terminal.md new file mode 100644 index 00000000000..8600624654b --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/quick-start/use-terminal.md @@ -0,0 +1,161 @@ +--- +sidebar_position: 3 +--- + +# 使用终端 + +熟悉 Kubernetes 和容器基础知识的用户可以选择使用「[终端](/guides/terminal/terminal.md)」命令行来部署应用。本文以 Nginx 为例,介绍如何使用终端来部署应用。 + +首先在 [Sealos](https://cloud.sealos.run) 桌面环境中打开终端 App。 + +![](./images/app-launchpad-1.jpg) + +打开终端 App 之后,会默认给您分配一个终端窗口,您可以在终端窗口中进行各种命令行操作。 + +![](./images/terminal.png) + +① 先创建一个 Nginx Deployment 的部署清单: + +```yaml +# deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx + labels: + app: nginx +spec: + replicas: 1 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.14.2 + ports: + - containerPort: 80 + resources: + requests: + cpu: 0.2 + memory: 32Mi + limits: + cpu: 0.2 + memory: 32Mi +``` + +② 再创建一个 Nginx Service 的部署清单: + +```yaml +# service.yaml +apiVersion: v1 +kind: Service +metadata: + name: nginx + labels: + app: nginx +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: 80 + + selector: + app: nginx +``` + +③ 执行以下命令通过部署清单创建 Deployment 和 Service: + +```bash +kubectl apply -f deployment.yaml +kubectl apply -f service.yaml +``` + +测试是否能正常访问 Nginx: + +```bash +$ kubectl get pod -l app=nginx +NAME READY STATUS RESTARTS AGE +nginx-7546c75fb4-572x9 1/1 Running 0 5m37s + +$ kubectl get svc -l app=nginx +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +nginx ClusterIP 10.64.204.173 80/TCP 5m36s + +$ curl 10.64.204.173 + + + +Welcome to nginx! + + + +

Welcome to nginx!

+

If you see this page, the nginx web server is successfully installed and +working. Further configuration is required.

+ +

For online documentation and support please refer to +nginx.org.
+Commercial support is available at +nginx.com.

+ +

Thank you for using nginx.

+ + +``` + +④ 如果你想把 Nginx 暴露到外网,并通过外网域名进行访问,还需要创建一个 Ingress 资源。先创建一个部署清单: + +```yaml +# ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + kubernetes.io/ingress.class: nginx + nginx.ingress.kubernetes.io/backend-protocol: HTTP + nginx.ingress.kubernetes.io/client-body-buffer-size: 64k + nginx.ingress.kubernetes.io/proxy-body-size: 32m + nginx.ingress.kubernetes.io/proxy-buffer-size: 64k + nginx.ingress.kubernetes.io/server-snippet: | + client_header_buffer_size 64k; + large_client_header_buffers 4 128k; + nginx.ingress.kubernetes.io/ssl-redirect: "false" + name: nginx +spec: + rules: + - host: nginx.cloud.sealos.run + http: + paths: + - backend: + service: + name: nginx + port: + number: 80 + path: / + pathType: Prefix + tls: + - hosts: + - nginx.cloud.sealos.run + secretName: wildcard-cloud-sealos-io-cert +``` + +⑤ 再执行以下命令通过部署清单创建 Ingress 资源: + +```bash +$ kubectl apply -f ingress.yaml +``` + +⑥ 测试是否能通过外网域名正常访问 Nginx: + +![](./images/nginx.png) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/QA.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/QA.md new file mode 100644 index 00000000000..97aab794c1b --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/QA.md @@ -0,0 +1,224 @@ +--- +sidebar_position: 1 +--- + +# 常见问题 + +使用Sealos时,您可能会遇到一些问题。以下是一些常见问题的答案和解决方法。 + +## 镜像构建问题 + +### Q1: 在构建阶段如何设置代理服务? + +在执行构建命令时,可以通过设置HTTP_PROXY环境变量来配置代理服务。 + +```shell +HTTP_PROXY=socket5://127.0.0.1:7890 sealos build xxxxx +``` + +### Q2:如何启用buildah的调试日志? + +若需要查看buildah的调试日志,可以通过设定`BUILDAH_LOG_LEVEL`环境变量实现。 + +```shell +BUILDAH_LOG_LEVEL=debug sealos images +``` + +### Q3:如何在Pod中执行Sealos构建? + +若在Pod中执行Sealos构建,请按以下步骤操作: + +1. 在Pod中构建镜像,可用以下YAML配置创建Deployment。 + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: sealoscli + name: sealoscli +spec: + replicas: 1 + selector: + matchLabels: + app: sealoscli + strategy: {} + template: + metadata: + labels: + app: sealoscli + spec: + containers: + - image: #用你的sealos镜像替换 + name: sealoscli + stdin: true + stdinOnce: true + securityContext: + privileged: true +``` + +2. 创建Dockerfile。以下是一个例子,根据需要进行修改。 + +```dockerfile +FROM bitnami/minideb:buster + +ARG TARGETOS +ARG TARGETARCH + +LABEL from=bitnami/minideb:buster platform=rootcloud team=oam tag=buster name=base + +RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list && sed -i "s@http://security.debian.org@http://mirrors.aliyun.com/debian-security@g" /etc/apt/sources.list +RUN install_packages curl iputils-ping net-tools telnet procps vim wget jq + +ENV LANG=C.UTF-8 +ENV LANGUAGE=C.UTF-8 +ENV LC_ALL=C.UTF-8 +ENV TZ=Asia/Shanghai +``` + +3. 在Pod中执行构建命令。 + +```shell +sealos build --arch arm64 --build-arg TARGETOS=linux --build-arg TARGETARCH=arm64 -t test -f Dockerfile . +``` + +### Q4:如何使用其他构建工具构建集群镜像? + +如果您想使用 Docker 或 Podman 等其他容器工具来构建集群镜像,您可以借助 [sreg](https://github.com/labring/sreg) 来缓存镜像。 + +以下是操作步骤: + +1. 安装 sreg: + ```shell + wget https://github.com/labring/sreg/releases/download/v0.1.1/sreg_0.1.1_linux_amd64.tar.gz + tar -xzf sreg_0.1.1_linux_amd64.tar.gz sreg + mv sreg /usr/bin/ + ``` +2. 缓存镜像: + ```shell + sreg save --registry-dir=registry . + ``` +3. 构建集群镜像: + ```shell + docker build -t xxxx -f Sealfile . + ``` + +### Q5:执行Sealos构建时遇到“lgetxattr /var/lib/containers/storage/overlay/0c2afe770ec7870ad4639f18a1b50b3a84718f95c8907f3d54e14dbf0a01d50d/merged/dev/ptmx: no such device”错误? + +这个问题可能与`fuse-overlayfs`的版本有关。建议您从[这里](https://github.com/containers/fuse-overlayfs/releases)下载最新版本下载并替换`/bin/fuse-overlayfs`。 + +## 运行时选择问题 + +### Q1:如何选择Kubernetes运行时? + +Sealos会根据您选择的镜像决定使用哪种运行时。如果选择了kubernetes-docker镜像,Sealos将使用Docker作为运行时;如果选择了kubernetes-crio镜像,Sealos将使用CRI-O作为运行时。 + +## 版本兼容性问题 + +### Q1:报错:"Applied to cluster error: failed to init exec auth.sh failed exit status 127"? + +此问题常因您使用的sealos版本和镜像版本不匹配造成。请确认您的镜像版本和sealos的版本是匹配的。 +例如,若您正使用形如kubernetes:v1.xx.x的版本,可能需要升级sealos,特别是在使用较老版本的sealos,而sealos集群镜像则使用了最新版时。 +另一种解决方法是选择对应版本的sealos镜像。比如,如果您的sealos版本是4.1.3,那么集群镜像应选择形如kuberntes:v1.24.0-4.1.3的版本。 +确保镜像版本和sealos版本的匹配,可以帮助避免此类问题。 + +### Q2: 如果您在集群中新增了其他域名,或者修改了 service 的 CIDR,并且在添加 master 时出现了错误 + +为了解决这个问题,Sealos 团队在 4.2.0 版本进行了相应的修复。具体的修复内容和讨论可以在这个 pull request 中查看:https://github.com/labring/sealos/pull/2943 。 + +所以,如果您遇到了这个问题,我们建议您升级到 Sealos 4.2.0 版本。更新后的版本应该能够正确处理这些变更,并且在添加 master 时不会出现错误。 + +## 文件和目录位置问题 + +### Q1:如何修改`/root/.sealos`默认目录的存储位置? + +若需修改默认的存储位置,可以设置SEALOS_RUNTIME_ROOT环境变量,然后运行sealos命令。建议您将这个环境变量设置为全局的,这样在其他命令或场景中也可以方便使用。 + +```shell +export SEALOS_RUNTIME_ROOT=/data/.sealos +sealos run labring/kubernetes:v1.24.0 +``` + +### Q2:如何修改`/var/lib/sealos`默认目录的存储位置? + +若需修改默认的存储位置,可以设置SEALOS_DATA_ROOT环境变量,然后运行sealos命令。同样,建议您将这个环境变量设置为全局的。 + +```shell +export SEALOS_DATA_ROOT=/data/sealos +sealos run labring/kubernetes:v1.24.0 +``` + +### Q3: 如何修改 Sealos 镜像数据和状态的存储路径? + +> 在使用 Sealos 集群时,可能需要改变默认的镜像数据存储路径和状态数据的存储路径。默认情况下,这些数据被存储在 `/etc/containers/storage.conf` 文件定义的位置。 + +1. **查看当前存储配置** + 首先,我们可以使用下面的命令来查看当前的镜像存储配置: + ``` + sealos images --debug + ``` + 这个命令会打印出包含当前存储配置的文件,例如: + ``` + 2023-06-07T16:27:02 debug using file /etc/containers/storage.conf as container storage config + REPOSITORY TAG IMAGE ID CREATED SIZE + ``` +2. **修改镜像数据存储路径** + 如果你希望更改镜像数据的存储路径,你可以编辑 `/etc/containers/storage.conf` 文件。在这个文件中,找到并修改 `graphroot` 字段设置为新的路径。例如: + ``` + vim /etc/containers/storage.conf + ``` + 在编辑器中,将 `graphroot` 字段的值修改为你希望的新路径。 +3. **修改状态数据存储路径** + 参考 Buildah 的设计,Sealos 同样提供了状态数据存储路径的设置。在同样的配置文件 `/etc/containers/storage.conf` 中,找到并修改 `runroot` 字段为新的路径。 + +通过以上步骤,你可以将 Sealos 集群的镜像数据和状态数据保存到新的地址。每次运行 Sealos 命令时,它都将使用你在 `graphroot` 和 `runroot` 中设置的新路径来分别存储镜像数据和状态数据。 + +### Q4:ssh传输文件时,如何禁止检查文件的md5? + +在网络环境良好时,禁用md5检查可以极大提升传输速度。若不想在ssh传输文件时检查文件的md5,可将SEALOS_SCP_CHECKSUM环境变量设置为false以禁用此功能。建议将此环境变量设为全局,以便在多场景下使用。 + +```shell +export SEALOS_SCP_CHECKSUM=false +sealos run labring/kubernetes:v1.24.0 +``` + + +## 其他问题 + +### Q1:image-cri-shim导致端口大量占用,耗尽服务器socket资源? + +出现此问题时,可通过以下命令解决: + +```shell +wget https://github.com/labring/sealos/releases/download/v4.2.0/sealos_4.2.0_linux_amd64.tar.gz && tar xvf sealos_4.2.0_linux_amd64.tar.gz image-cri-shim +sealos exec -r master,node "systemctl stop image-cri-shim" +sealos scp "./image-cri-shim" "/usr/bin/image-cri-shim" +sealos exec -r master,node "systemctl start image-cri-shim" +sealos exec -r master,node "image-cri-shim -v" +``` + +### Q2:报错"[ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists" + +此问题可通过升级至Sealos 4.1.7+来解决。 + +### Q3:报错:"function "semverCompare" not defined" + +此问题可通过升级至Sealos 4.1.4+来解决。 + +我们希望这些解答能帮助您解决在使用Sealos过程中遇到的问题。如果还有其他问题,欢迎随时提问。 + +## 使用技巧 + +### Q1: 如何清理 Sealos 集群的缓存文件 + +> 在使用 Sealos 集群时,安装过程中可能会在本地存储一些缓存文件,这些文件会重复占用磁盘空间。那么,如何清理这些缓存文件以释放磁盘空间呢? + +我们提供了一个非常简单的解决方案,只需要执行以下命令: + +```shell +sealos unmount --all && sealos rm --all +``` +这个命令的作用是移除所有缓存的 Sealos 集群镜像文件,以及所有的相关挂载点。--all 选项表示处理所有相关文件和挂载点。 +执行这个命令后,所有 Sealos 集群的缓存文件就会被清理掉,从而释放出被它们占用的磁盘空间。 +这是一个非常有用的技巧,特别是对于在磁盘空间有限的环境中运行 Sealos 集群的用户来说。在你感觉磁盘空间被占用过多时,不妨尝试执行这个命令来释放一些空间。 +请注意,这个命令只会删除缓存文件,不会影响已经运行的集群。也就是说,执行这个命令后,你的集群仍然可以正常运行。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/build-image-using-registry-sync.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/build-image-using-registry-sync.md new file mode 100644 index 00000000000..12d630e1834 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/build-image-using-registry-sync.md @@ -0,0 +1,85 @@ +--- +sidebar_position: 2 +--- + +# 镜像构建改进指南 + +## 深入理解Sealos镜像构建 + +为了了解Sealos镜像构建的背后所做的工作,我们将首先揭示它在底层究竟进行了哪些操作。以下是一个直观的架构图: + +![](images/build.png) + +Sealos在构建镜像过程中涵盖了以下几个核心步骤: + +- **缓存镜像**:解析构建执行时的工作目录(在这里我们称之为"context"目录),将缓存镜像保存到registry结构并存储在./registry目录下。 +- **构建镜像**:在context目录中进行镜像构建,生成新的镜像。(请注意,构建镜像时需要将./registry目录进行复制。) + +## 提升镜像构建效率 + +当前项目中,我们借用了`github.com/distribution/distribution`的源代码,在执行缓存镜像的过程中直接调用了registry的sdk并启动了registry-proxy功能。借助于镜像仓库的缓存能力,我们将镜像缓存并存入context/registry目录。 + +这个过程的关键就在于调用了distribution仓库的方法进行保存镜像: + +- 启动 registry-proxy 功能。 +- 保存镜像摘要及索引相关数据(通过调用saveManifestAndGetDigest方法)。 +- 保存镜像文件数据(通过调用saveBlobs方法)。 + +这种方法确实具有一些显著的优点: + +- 轻量化:无需依赖其他组件即可保存镜像。 +- 自由控制:可以自由控制保存逻辑,无需依赖第三方组件。 + +然而,我们也注意到了一些潜在的问题: + +- 对新手来说,代码理解难度较高,不易清晰了解这里的逻辑。 +- 无法缓存使用token认证的方式。 +- 需要依赖一些临时存储空间,对空间有要求。 + +考虑到这些问题,我们决定尝试一种新的模式:在本地启动一个轻量的registry,使用`skopeo copy`的sdk进行代码复用。这一改变直接解决了之前所有的问题。 + +![](images/registry-build.png) + +**所以,新的构建方式 ✨镜像仓库同步✨ 优雅登场 🎉🎉** + +官方仓库中的[#3154](https://github.com/labring/sealos/pull/3154)这个PR已经完成了这个功能的实现。目前,Sealos支持这两种方式进行镜像构建。接下来,我会介绍如何启动新功能(如果新功能表现稳定,我们可能会废弃旧的构建方式)。 + +## 如何启动新功能 + +> Sealos v4.3.0 以上版本默认支持此功能。 + +启动新功能非常简单,只需在你构建镜像之前添加一个环境变量即可。这个功能同时支持build和merge两个命令。 + +```shell +SEALOS_REGISTRY_SYNC_EXPERIMENTAL=true sealos build -t test . +``` + +以下是执行上述命令后的预期输出: + +```tex +SEALOS_REGISTRY_SYNC_EXPERIMENTAL=true sealos build -t test . +Getting image source signatures +Copying blob fee740108510 done +Copying config f92f3ea6e4 done +Writing manifest to image destination +Storing signatures +Getting image source signatures +Copying blob 08409d417260 done +Copying config 44dd6f2230 done +Writing manifest to image destination +Storing signatures +2023-06-01T13:16:07 info saving images busybox, alpine +STEP 1/2: FROM scratch +STEP 2/2: COPY registry ./registry +COMMIT test +Getting image source signatures +Copying blob 13ab73c881c8 done +Copying config 4e22d16b36 done +Writing manifest to image destination +Storing signatures +--> 4e22d16b366 +Successfully tagged localhost/test:latest +4e22d16b366e9fec25641522a74cbd73a7db67dc0516b8f8e00200c4d0551592 +``` + +希望以上内容可以帮助您更好地理解并使用Sealos的新镜像构建方式。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/dual-stack-cluster.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/dual-stack-cluster.md new file mode 100644 index 00000000000..1b4f1b3d016 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/dual-stack-cluster.md @@ -0,0 +1,792 @@ +--- +sidebar_position: 5 + +--- + +# 使用calico安装双栈集群 + +1. 前置条件 + - sealos 版本 >=4.3.0 + - 每个主机都有一个IPv4主机和IPv6地址,并且可以互通通过IPv4和IPv6地址 + - calico采用vxlan模式, 内核版本必须大于 3.12。 可以参考[官方文档](https://github.com/cyclinder/kubespray/blob/042c960c6617f8a360a8281464ff63f99ee2471c/docs/calico.md) +2. 运行 `sealos gen` 生成一个 Clusterfile,例如: + +```shell +$ sealos gen labring/kubernetes:v1.26.1 labring/helm:v3.10.3 labring/calico:v3.25.0 --masters 192.168.0.10 --nodes 192.168.0.11 --passwd "xxx" >Clusterfile +``` + +注意:labring/helm 应当在 labring/calico 之前。 + +生成的 Clusterfile 如下: + +
+Clusterfile + + +```yaml +apiVersion: apps.sealos.io/v1beta1 +kind: Cluster +metadata: + creationTimestamp: null + name: default +spec: + hosts: + - ips: + - 192.168.0.10:22 + roles: + - master + - amd64 + - ips: + - 192.168.0.11:22 + roles: + - node + - amd64 + image: + - labring/kubernetes:v1.26.1 + - labring/helm:v3.10.3 + - labring/calico:v3.25.0 + ssh: + passwd: xxx + pk: /root/.ssh/id_rsa + port: 22 +status: {} + +--- +BootstrapTokens: null +CertificateKey: "" +LocalAPIEndpoint: + AdvertiseAddress: 192.168.0.10 + BindPort: 6443 +NodeRegistration: + CRISocket: /run/containerd/containerd.sock + IgnorePreflightErrors: null + KubeletExtraArgs: null + Name: "" + Taints: null +Patches: null +SkipPhases: null +apiVersion: kubeadm.k8s.io/v1beta3 +kind: InitConfiguration + +--- +APIServer: + CertSANs: + - 127.0.0.1 + - apiserver.cluster.local + - 10.103.97.2 + - 192.168.0.10 + ExtraArgs: + audit-log-format: json + audit-log-maxage: "7" + audit-log-maxbackup: "10" + audit-log-maxsize: "100" + audit-log-path: /var/log/kubernetes/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yml + enable-aggregator-routing: "true" + feature-gates: "" + ExtraVolumes: + - HostPath: /etc/kubernetes + MountPath: /etc/kubernetes + Name: audit + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /var/log/kubernetes + MountPath: /var/log/kubernetes + Name: audit-log + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + - HostPath: /etc/kubernetes + MountPath: /etc/kubernetes + Name: audit + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /var/log/kubernetes + MountPath: /var/log/kubernetes + Name: audit-log + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + TimeoutForControlPlane: null +CIImageRepository: "" +CIKubernetesVersion: "" +CertificatesDir: "" +ClusterName: "" +ComponentConfigs: null +ControlPlaneEndpoint: apiserver.cluster.local:6443 +ControllerManager: + ExtraArgs: + bind-address: 0.0.0.0 + cluster-signing-duration: 876000h + feature-gates: "" + ExtraVolumes: + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true +DNS: + ImageRepository: "" + ImageTag: "" + Type: "" +Etcd: + External: null + Local: + DataDir: "" + ExtraArgs: + listen-metrics-urls: http://0.0.0.0:2381 + ImageRepository: "" + ImageTag: "" + PeerCertSANs: null + ServerCertSANs: null +FeatureGates: null +ImageRepository: "" +KubernetesVersion: v1.26.1 +Networking: + DNSDomain: "" + PodSubnet: 100.64.0.0/10 + ServiceSubnet: 10.96.0.0/22 +Scheduler: + ExtraArgs: + bind-address: 0.0.0.0 + feature-gates: "" + ExtraVolumes: + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true +apiVersion: kubeadm.k8s.io/v1beta3 +kind: ClusterConfiguration + +--- +CACertPath: /etc/kubernetes/pki/ca.crt +ControlPlane: + CertificateKey: "" + LocalAPIEndpoint: + AdvertiseAddress: "" + BindPort: 6443 +Discovery: + BootstrapToken: null + File: null + TLSBootstrapToken: "" + Timeout: 5m0s +NodeRegistration: + CRISocket: /run/containerd/containerd.sock + IgnorePreflightErrors: null + KubeletExtraArgs: null + Name: "" + Taints: null +Patches: null +SkipPhases: null +apiVersion: kubeadm.k8s.io/v1beta3 +kind: JoinConfiguration + +--- +apiVersion: kubeproxy.config.k8s.io/v1alpha1 +bindAddress: 0.0.0.0 +bindAddressHardFail: false +clientConnection: + acceptContentTypes: "" + burst: 10 + contentType: application/vnd.kubernetes.protobuf + kubeconfig: "" + qps: 5 +clusterCIDR: "" +configSyncPeriod: 15m0s +conntrack: + maxPerCore: 32768 + min: 131072 + tcpCloseWaitTimeout: 1h0m0s + tcpEstablishedTimeout: 24h0m0s +detectLocal: + bridgeInterface: "" + interfaceNamePrefix: "" +detectLocalMode: "" +enableProfiling: false +healthzBindAddress: 0.0.0.0:10256 +hostnameOverride: "" +iptables: + masqueradeAll: false + masqueradeBit: 14 + minSyncPeriod: 1s + syncPeriod: 30s +ipvs: + excludeCIDRs: + - 10.103.97.2/32 + minSyncPeriod: 0s + scheduler: "" + strictARP: false + syncPeriod: 30s + tcpFinTimeout: 0s + tcpTimeout: 0s + udpTimeout: 0s +kind: KubeProxyConfiguration +metricsBindAddress: 0.0.0.0:10249 +mode: ipvs +nodePortAddresses: null +oomScoreAdj: -999 +portRange: "" +showHiddenMetricsForVersion: "" +udpIdleTimeout: 250ms +winkernel: + enableDSR: false + forwardHealthCheckVip: false + networkName: "" + rootHnsEndpointName: "" + sourceVip: "" + +--- +address: 0.0.0.0 +apiVersion: kubelet.config.k8s.io/v1beta1 +authentication: + anonymous: + enabled: false + webhook: + cacheTTL: 2m0s + enabled: true + x509: + clientCAFile: /etc/kubernetes/pki/ca.crt +authorization: + mode: Webhook + webhook: + cacheAuthorizedTTL: 5m0s + cacheUnauthorizedTTL: 30s +cgroupDriver: cgroupfs +cgroupsPerQOS: true +clusterDomain: cluster.local +configMapAndSecretChangeDetectionStrategy: Watch +containerLogMaxFiles: 5 +containerLogMaxSize: 10Mi +contentType: application/vnd.kubernetes.protobuf +cpuCFSQuota: true +cpuCFSQuotaPeriod: 100ms +cpuManagerPolicy: none +cpuManagerReconcilePeriod: 10s +enableControllerAttachDetach: true +enableDebugFlagsHandler: true +enableDebuggingHandlers: true +enableProfilingHandler: true +enableServer: true +enableSystemLogHandler: true +enforceNodeAllocatable: +- pods +- pods +eventBurst: 10 +eventRecordQPS: 5 +evictionHard: + imagefs.available: 15% + memory.available: 100Mi + nodefs.available: 10% + nodefs.inodesFree: 5% +evictionPressureTransitionPeriod: 5m0s +failSwapOn: true +fileCheckFrequency: 20s +hairpinMode: promiscuous-bridge +healthzBindAddress: 0.0.0.0 +healthzPort: 10248 +httpCheckFrequency: 20s +imageGCHighThresholdPercent: 85 +imageGCLowThresholdPercent: 80 +imageMinimumGCAge: 2m0s +iptablesDropBit: 15 +iptablesMasqueradeBit: 14 +kind: KubeletConfiguration +kubeAPIBurst: 10 +kubeAPIQPS: 5 +localStorageCapacityIsolation: true +logging: + flushFrequency: 5000000000 + format: text + options: + json: + infoBufferSize: "0" + verbosity: 0 +makeIPTablesUtilChains: true +maxOpenFiles: 1000000 +maxPods: 110 +memoryManagerPolicy: None +memorySwap: {} +memoryThrottlingFactor: 0.8 +nodeLeaseDurationSeconds: 40 +nodeStatusMaxImages: 50 +nodeStatusReportFrequency: 10s +nodeStatusUpdateFrequency: 10s +oomScoreAdj: -999 +podPidsLimit: -1 +port: 10250 +registerNode: true +registryBurst: 10 +registryPullQPS: 5 +rotateCertificates: true +runtimeRequestTimeout: 2m0s +seccompDefault: false +serializeImagePulls: true +shutdownGracePeriod: 0s +shutdownGracePeriodCriticalPods: 0s +staticPodPath: /etc/kubernetes/manifests +streamingConnectionIdleTimeout: 4h0m0s +syncFrequency: 1m0s +topologyManagerPolicy: none +topologyManagerScope: container +volumePluginDir: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/ +volumeStatsAggPeriod: 1m0s +``` + +
+ +3. 生成 Clusterfile 后,编辑Clusterfile,然后添加IPv6 的 pod 和svc 的 CIDR 范围。这里使用fd85:ee78:d8a6:8607::1:0000/112、fd85:ee78:d8a6:8607::1000/116作为参考示例。主要修改以下信息。 + +
+Clusterfile + + +```yaml +apiVersion: kubeadm.k8s.io/v1beta3 +kind: ClusterConfiguration +Networking: + DNSDomain: "" + PodSubnet: 100.64.0.0/10,fd85:ee78:d8a6:8607::1:0000/112 #增加pod IPv6地址段 + ServiceSubnet: 10.96.0.0/22,fd85:ee78:d8a6:8607::1000/116 #增加svc IPv6地址段 +APIServer: + CertSANs: + - 127.0.0.1 + - apiserver.cluster.local + - 10.103.97.2 + - 192.168.0.10 + - 2001:db8::f816:3eff:fe8c:910a #增加控制节点的ipv6地址,如果你需要使用此IP访问apiserver + ExtraArgs: + service-cluster-ip-range: 10.96.0.0/22,fd85:ee78:d8a6:8607::1000/116 #增加svc IPv6地址段 +ControllerManager: + ExtraArgs: + node-cidr-mask-size-ipv6: 120 #默认为64 + node-cidr-mask-size-ipv4: 24 #默认为24 +--- +apiVersion: kubeproxy.config.k8s.io/v1alpha1 +kind: KubeProxyConfiguration +clusterCIDR: "100.64.0.0/10,fd85:ee78:d8a6:8607::1:0000/112" #增加pod IPv6地址段 +--- +# 添加Calico双栈配置 +apiVersion: apps.sealos.io/v1beta1 +kind: Config +metadata: + name: calico +spec: + path: charts/calico/values.yaml + strategy: merge + data: | + installation: + enabled: true + kubernetesProvider: "" + calicoNetwork: + bgp: Disabled + ipPools: + - blockSize: 22 + cidr: 100.64.0.0/10 + encapsulation: VXLAN + natOutgoing: Enabled + nodeSelector: all() + - blockSize: 122 + cidr: fd85:ee78:d8a6:8607::1:0000/112 #增加pod IPv6地址段 + encapsulation: VXLAN + natOutgoing: Enabled + nodeSelector: all() + nodeAddressAutodetectionV4: + interface: "eth.*|en.*|em.*" + nodeAddressAutodetectionV6: + interface: "eth.*|en.*|em.*" +``` + +
+ +最终的Clusterfile会是这样。 + +
+Clusterfile + + +```yaml +apiVersion: apps.sealos.io/v1beta1 +kind: Cluster +metadata: + creationTimestamp: null + name: default +spec: + hosts: + - ips: + - 192.168.0.10:22 + roles: + - master + - amd64 + - ips: + - 192.168.0.11:22 + roles: + - node + - amd64 + image: + - labring/kubernetes:v1.26.1 + - labring/helm:v3.10.3 + - labring/calico:v3.25.0 + ssh: + passwd: xxx + pk: /root/.ssh/id_rsa + port: 22 +status: {} + +--- +BootstrapTokens: null +CertificateKey: "" +LocalAPIEndpoint: + AdvertiseAddress: 192.168.0.10 + BindPort: 6443 +NodeRegistration: + CRISocket: /run/containerd/containerd.sock + IgnorePreflightErrors: null + KubeletExtraArgs: null + Name: "" + Taints: null +Patches: null +SkipPhases: null +apiVersion: kubeadm.k8s.io/v1beta3 +kind: InitConfiguration + +--- +APIServer: + CertSANs: + - 127.0.0.1 + - apiserver.cluster.local + - 10.103.97.2 + - 192.168.0.10 + - 2001:db8::f816:3eff:fe8c:910a + ExtraArgs: + service-cluster-ip-range: 10.96.0.0/22,fd85:ee78:d8a6:8607::1000/116 + audit-log-format: json + audit-log-maxage: "7" + audit-log-maxbackup: "10" + audit-log-maxsize: "100" + audit-log-path: /var/log/kubernetes/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yml + enable-aggregator-routing: "true" + feature-gates: "" + ExtraVolumes: + - HostPath: /etc/kubernetes + MountPath: /etc/kubernetes + Name: audit + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /var/log/kubernetes + MountPath: /var/log/kubernetes + Name: audit-log + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + - HostPath: /etc/kubernetes + MountPath: /etc/kubernetes + Name: audit + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /var/log/kubernetes + MountPath: /var/log/kubernetes + Name: audit-log + PathType: DirectoryOrCreate + ReadOnly: false + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + TimeoutForControlPlane: null +CIImageRepository: "" +CIKubernetesVersion: "" +CertificatesDir: "" +ClusterName: "" +ComponentConfigs: null +ControlPlaneEndpoint: apiserver.cluster.local:6443 +ControllerManager: + ExtraArgs: + node-cidr-mask-size-ipv6: 120 + node-cidr-mask-size-ipv4: 24 + bind-address: 0.0.0.0 + cluster-signing-duration: 876000h + feature-gates: "" + ExtraVolumes: + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true +DNS: + ImageRepository: "" + ImageTag: "" + Type: "" +Etcd: + External: null + Local: + DataDir: "" + ExtraArgs: + listen-metrics-urls: http://0.0.0.0:2381 + ImageRepository: "" + ImageTag: "" + PeerCertSANs: null + ServerCertSANs: null +FeatureGates: null +ImageRepository: "" +KubernetesVersion: v1.26.1 +Networking: + DNSDomain: "" + PodSubnet: 100.64.0.0/10,fd85:ee78:d8a6:8607::1:0000/112 + ServiceSubnet: 10.96.0.0/22,fd85:ee78:d8a6:8607::1000/116 +Scheduler: + ExtraArgs: + bind-address: 0.0.0.0 + feature-gates: "" + ExtraVolumes: + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true + - HostPath: /etc/localtime + MountPath: /etc/localtime + Name: localtime + PathType: File + ReadOnly: true +apiVersion: kubeadm.k8s.io/v1beta3 +kind: ClusterConfiguration + +--- +CACertPath: /etc/kubernetes/pki/ca.crt +ControlPlane: + CertificateKey: "" + LocalAPIEndpoint: + AdvertiseAddress: "" + BindPort: 6443 +Discovery: + BootstrapToken: null + File: null + TLSBootstrapToken: "" + Timeout: 5m0s +NodeRegistration: + CRISocket: /run/containerd/containerd.sock + IgnorePreflightErrors: null + KubeletExtraArgs: null + Name: "" + Taints: null +Patches: null +SkipPhases: null +apiVersion: kubeadm.k8s.io/v1beta3 +kind: JoinConfiguration + +--- +apiVersion: kubeproxy.config.k8s.io/v1alpha1 +bindAddress: 0.0.0.0 +bindAddressHardFail: false +clientConnection: + acceptContentTypes: "" + burst: 10 + contentType: application/vnd.kubernetes.protobuf + kubeconfig: "" + qps: 5 +clusterCIDR: "" +configSyncPeriod: 15m0s +conntrack: + maxPerCore: 32768 + min: 131072 + tcpCloseWaitTimeout: 1h0m0s + tcpEstablishedTimeout: 24h0m0s +detectLocal: + bridgeInterface: "" + interfaceNamePrefix: "" +detectLocalMode: "" +enableProfiling: false +healthzBindAddress: 0.0.0.0:10256 +hostnameOverride: "" +iptables: + masqueradeAll: false + masqueradeBit: 14 + minSyncPeriod: 1s + syncPeriod: 30s +ipvs: + excludeCIDRs: + - 10.103.97.2/32 + minSyncPeriod: 0s + scheduler: "" + strictARP: false + syncPeriod: 30s + tcpFinTimeout: 0s + tcpTimeout: 0s + udpTimeout: 0s +kind: KubeProxyConfiguration +clusterCIDR: "100.64.0.0/10,fd85:ee78:d8a6:8607::1:0000/112" +metricsBindAddress: 0.0.0.0:10249 +mode: ipvs +nodePortAddresses: null +oomScoreAdj: -999 +portRange: "" +showHiddenMetricsForVersion: "" +udpIdleTimeout: 250ms +winkernel: + enableDSR: false + forwardHealthCheckVip: false + networkName: "" + rootHnsEndpointName: "" + sourceVip: "" + +--- +address: 0.0.0.0 +apiVersion: kubelet.config.k8s.io/v1beta1 +authentication: + anonymous: + enabled: false + webhook: + cacheTTL: 2m0s + enabled: true + x509: + clientCAFile: /etc/kubernetes/pki/ca.crt +authorization: + mode: Webhook + webhook: + cacheAuthorizedTTL: 5m0s + cacheUnauthorizedTTL: 30s +cgroupDriver: cgroupfs +cgroupsPerQOS: true +clusterDomain: cluster.local +configMapAndSecretChangeDetectionStrategy: Watch +containerLogMaxFiles: 5 +containerLogMaxSize: 10Mi +contentType: application/vnd.kubernetes.protobuf +cpuCFSQuota: true +cpuCFSQuotaPeriod: 100ms +cpuManagerPolicy: none +cpuManagerReconcilePeriod: 10s +enableControllerAttachDetach: true +enableDebugFlagsHandler: true +enableDebuggingHandlers: true +enableProfilingHandler: true +enableServer: true +enableSystemLogHandler: true +enforceNodeAllocatable: +- pods +- pods +eventBurst: 10 +eventRecordQPS: 5 +evictionHard: + imagefs.available: 15% + memory.available: 100Mi + nodefs.available: 10% + nodefs.inodesFree: 5% +evictionPressureTransitionPeriod: 5m0s +failSwapOn: true +fileCheckFrequency: 20s +hairpinMode: promiscuous-bridge +healthzBindAddress: 0.0.0.0 +healthzPort: 10248 +httpCheckFrequency: 20s +imageGCHighThresholdPercent: 85 +imageGCLowThresholdPercent: 80 +imageMinimumGCAge: 2m0s +iptablesDropBit: 15 +iptablesMasqueradeBit: 14 +kind: KubeletConfiguration +kubeAPIBurst: 10 +kubeAPIQPS: 5 +localStorageCapacityIsolation: true +logging: + flushFrequency: 5000000000 + format: text + options: + json: + infoBufferSize: "0" + verbosity: 0 +makeIPTablesUtilChains: true +maxOpenFiles: 1000000 +maxPods: 110 +memoryManagerPolicy: None +memorySwap: {} +memoryThrottlingFactor: 0.8 +nodeLeaseDurationSeconds: 40 +nodeStatusMaxImages: 50 +nodeStatusReportFrequency: 10s +nodeStatusUpdateFrequency: 10s +oomScoreAdj: -999 +podPidsLimit: -1 +port: 10250 +registerNode: true +registryBurst: 10 +registryPullQPS: 5 +rotateCertificates: true +runtimeRequestTimeout: 2m0s +seccompDefault: false +serializeImagePulls: true +shutdownGracePeriod: 0s +shutdownGracePeriodCriticalPods: 0s +staticPodPath: /etc/kubernetes/manifests +streamingConnectionIdleTimeout: 4h0m0s +syncFrequency: 1m0s +topologyManagerPolicy: none +topologyManagerScope: container +volumePluginDir: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/ +volumeStatsAggPeriod: 1m0s +--- +apiVersion: apps.sealos.io/v1beta1 +kind: Config +metadata: + name: calico +spec: + path: charts/calico/values.yaml + strategy: merge + data: | + installation: + enabled: true + kubernetesProvider: "" + calicoNetwork: + bgp: Disabled + ipPools: + - blockSize: 22 + cidr: 100.64.0.0/10 + encapsulation: VXLAN + natOutgoing: Enabled + nodeSelector: all() + - blockSize: 122 + cidr: fd85:ee78:d8a6:8607::1:0000/112 + encapsulation: VXLAN + natOutgoing: Enabled + nodeSelector: all() + nodeAddressAutodetectionV4: + interface: "eth.*|en.*|em.*" + nodeAddressAutodetectionV6: + interface: "eth.*|en.*|em.*" +``` + +
+ +4. 运行 `sealos apply -f Clusterfile` 部署集群。 + +5. 更多参考[Calico官网](https://docs.tigera.io/calico/latest/networking/ipam/ipv6) 和 [k8s官方文档](https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/dual-stack-support/) \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/image-build-standardized.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/image-build-standardized.md new file mode 100644 index 00000000000..aa61c9270a1 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/image-build-standardized.md @@ -0,0 +1,106 @@ +--- +sidebar_position: 1 +--- + +# 镜像构建与标准化目录配置 + +在开展 Sealos 镜像构建任务前,我们建议先构建一个符合规范的目录结构。这样能够使构建过程更加规范,易于管理,同时也能降低出错率。这篇文章将详细指导你如何创建这样一个目录结构,并解释每个目录的用途。 + +## 目录结构示例 + +一个完整的、符合规范的目录结构示例如下: + +```shell +. +├── charts +│   └── nginx +│   ├── Chart.lock +│   ├── charts +│   ├── Chart.yaml +│   ├── README.md +│   ├── templates +│   ├── values.schema.json +│   └── values.yaml +├── images +│   └── shim +│   └── nginxImages +├── init.sh +├── Kubefile +├── manifests +│   └── nginx +│   ├── deployment.yaml +│   ├── ingress.yaml +│   └── service.yaml +├── opt +│   └── helm +└── registry +``` + +## 目录描述 + +每个目录在构建过程中都扮演着特定的角色,以下是他们的详细描述: + +- `Kubefile` (必需):这个文件类似于 Dockerfile,是构建镜像的核心文件。它定义了构建过程中的各个步骤,如基础镜像选择、环境变量设置、文件复制等。 +- `manifests`:这个目录用于存放 Kubernetes 的 yaml 文件,这些文件描述了你的应用的配置信息,如 Pod、Service、Deployment 的配置。 +- `charts`:这个目录用于存放 Helm chart 文件,Helm chart 是 Kubernetes 的一个包管理工具,可以简化 Kubernetes 应用的部署和管理。 +- `images/shim`:这个目录用于存放无法从 yaml 文件或 Helm chart 中自动提取的镜像。在构建过程中,sealos 将自动拉取这些镜像。 +- `opt`:二进制文件存储在这里。 +- `registry`:这个目录用于存放构建过程中拉取到本地的镜像。在构建过程中,该目录将自动生成,无需手动创建。 +- `init.sh`:这个脚本在构建过程中由 GitHub Action 自动运行,你可以在这个脚本中编写一些自动化的工作,如初始化环境、预处理数据等。([cluster-image](https://github.com/labring-actions/cluster-image)的规则) + +## Kubefile 参数 + +`Kubefile` 文件是镜像构建的核心,它支持多种参数,以下是这些参数的详细解析: + +```shell +FROM labring/kubernetes:v1.24.0 +ENV version v1.1.0 +COPY manifests ./manifests +COPY registry ./registry +ENTRYPOINT ["kubectl apply -f manifests/tigera-operator.yaml"] +CMD ["kubectl apply -f manifests/custom-resources.yaml"] +``` + +各个参数的描述: + +- `FROM`:这个指令用于设置构建的基础镜像,所有的构建步骤都基于这个镜像进行。 +- `LABEL`: `LABEL`定义一些sealos集群镜像的内部配置。 + + - `check` 集群镜像运行前的一些检查脚本操作 + - `clean` 集群reset或者节点删除的清理脚本 + - `clean-registry` 集群reset时候的清理镜像仓库的脚本 + - `image` 集群的lvscare镜像地址(sealos的IPVS镜像) + - `init` 集群初始化的脚本 + - `init-registry` 集群初始化时启动容器镜像仓库的脚本 + - `sealos.io.type` 集群镜像类型,目前主要是rootfs、application和patch。 + - rootfs 是运行集群的基础镜像,比如kubernetes、kubernetes-docker这种包含镜像、二进制等集群所需的。(**每个节点都需要存在**) + - application 是应用镜像,比如calico、helm、istio等应用服务的镜像。(**只存储到master0节点**) + - patch是在rootfs镜像后需要调整的,是另一种修改rootfs镜像的方式(**还有一种方式是Config方式**),它会覆盖默认的集群运行的第一个镜像。 + + - `sealos.io.version` 镜像的版本号,目前开启的是v1beta1 + - `version` 集群的版本号,当前是kubernetes的版本号 + - `vip` 是VIP的地址,为修改IPVS的虚IP使用 + +- `ENV`:`ENV`指令将环境变量``设置为值``。(rootfs中默认会有一些默认的环境变量,可以修改rootfs中一些默认参数,比如镜像仓库的账号密码、docker、containerd的存储目录等等) + + 具体的集群镜像需要具体查看,`sealos inspect`镜像看一下对应的环境变量,不同版本的镜像略有不同。 + + - SEALOS_SYS_CRI_ENDPOINT: 当前集群镜像的criSocket (不同类型集群镜像可能不同) + - criData: cri的数据目录 + - defaultVIP: 默认的VIP地址 + - disableApparmor: 是否禁用apparmor (containerd有这个问题) + - registryConfig: 容器镜像仓库的配置目录 + - registryData: 容器镜像仓库的数据目录(因为是目录进行了挂载,其实这个配置没有实际意义,它实际还是存储在/var/lib/sealos下面) + - registryDomain: 默认镜像仓库的域名 + - registryPassword: 默认镜像仓库的密码 + - registryPort: 默认镜像仓库的密码 + - registryUsername: 默认镜像仓库的账户 + - sandboxImage: 默认cri启动的sandbox_image。(无需写repo只需要写镜像名称,eg: pasue:3.7) +- `COPY`:`COPY`指令从``复制新的文件或目录,并将它们添加到容器的文件系统路径``上。(**注意,需要把registry目录进行拷贝,否则集群没有容器镜像**) +- `ENTRYPOINT`:这个指令用于设置镜像的启动命令,当镜像启动时,这条命令会被执行。 +- `CMD`:这个指令也用于设置镜像的启动命令,但它与 ENTRYPOINT 指令的区别在于,如果用户在运行镜像时(`sealos run --cmd`)提供了启动命令,CMD 指令中的命令将会被覆盖。 + +在构建过程中,Sealos 还会自动设置一些内置的环境变量,包括(前缀为'SEALOS_SYS'的环境变量无法被修改): + +- SEALOS_SYS_KUBE_VERSION:Kubernetes的版本号,例如 v1.26.0 +- SEALOS_SYS_SEALOS_VERSION:Sealos的版本号,例如 4.1.3 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/images/build.png b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/images/build.png new file mode 100644 index 00000000000..d1ae7d6aead Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/images/build.png differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/images/registry-build.png b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/images/registry-build.png new file mode 100644 index 00000000000..485b531d28f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/images/registry-build.png differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/images/sealos-run.png b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/images/sealos-run.png new file mode 100644 index 00000000000..70ef65ffa13 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/images/sealos-run.png differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/sealos-run.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/sealos-run.md new file mode 100644 index 00000000000..6946a3bbc93 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/sealos-run.md @@ -0,0 +1,136 @@ +--- +sidebar_position: 2 +--- + +# Sealos Run 的工作原理 + +以下是 `sealos run` 命令的详细工作原理。为了帮助您更好地理解,我们将其分解为九个主要步骤。 + +## 1. 执行命令 + +首先,用户通过执行以下命令启动 Sealos: + +```bash +sealos run kubernetes:v1.23.8 +``` + +## 2. 执行 Pipeline + +命令执行后,Sealos 开始执行一系列相关的操作步骤,我们称之为 "Pipeline"。这个过程包括以下几个子步骤: + +### 2.1 节点检查 + +Sealos 会对所有节点进行检查,以确保它们都是可用的。例如,检查是否存在重复的主机名,以及所有节点的时间是否已经同步。 + +### 2.2 拉取镜像 + +接着,Sealos 从远程仓库拉取 Kubernetes 的镜像,并将其加载到本地存储。 + +### 2.3 渲染配置 + +然后,Sealos 会对拉取到的镜像的 rootfs(文件系统)进行配置渲染,这是为了准备后续的节点分发。 + +### 2.4 分发镜像文件 + +配置渲染完成后,Sealos 会将渲染后的 rootfs 文件分发到各个节点。 + +### 2.5 分发 Registry 目录 + +此外,Sealos 也会将镜像中的 registry 目录分发到对应的 registry 角色节点。Sealos 支持两种模式: + +- **scp模式**:直接通过 scp 将目录复制到每个节点,这种方式会占用大量的网络带宽。 +- **镜像同步模式**:使用 skopeo sdk 的镜像同步机制,能够实现增量镜像同步,从而节省网络带宽。该功能可通过环境变量 `SEALOS_REGISTRY_SYNC_EXPERIMENTAL=true` 来开启。 + +### 2.6 执行 Bootstrap + +Bootstrap 是关键步骤,包括以下操作: + +#### 2.6.1 添加 Host 解析 + +Sealos 会在每个节点上添加 registry 的 host 解析。 + +#### 2.6.2 执行 Registry-Init 脚本 + +在添加完 host 解析后,Sealos 会执行 registry-init 脚本。 + +#### 2.6.3 执行 Init 脚本 + +最后,Sealos 会执行 init 脚本,启动 Kubernetes 服务。 + +## 3. 执行 InitMaster0 + +Pipeline 执行完成后,Sealos 进入 InitMaster0 阶段。在此阶段,Sealos 会执行以下操作: + +### 3.1 生成 Kubeadm 配置 + +首先,Sealos 生成 Kubeadm 的初始化配置文件。 + +### 3.2 生成并分发证书文件 + +然后,Sealos 生成集群的所有 + +证书文件,并将它们分发到各个节点。 + +### 3.3 初始化 Master0 + +最后,Sealos 执行`kubeadm init`初始化 Master0 节点。 + +## 4. 执行 JoinMaster + +初始化完 Master0 节点后,Sealos 进入 JoinMaster 阶段。在此阶段,Sealos 会执行以下操作: + +### 4.1 同步 Kubeconfig + +首先,Sealos 将 Kubeconfig 文件同步到各个节点。 + +### 4.2 同步证书文件 + +接下来,Sealos 同步证书文件到各个节点。 + +### 4.3 生成 Join 配置 + +然后,Sealos 生成 JoinMaster 配置文件。 + +### 4.4 生成 Join 令牌 + +接着,Sealos 生成 Join 令牌。 + +### 4.5 执行 Join Master 流程 + +最后,Sealos 执行`kubeadm join`流程,让其他 Master 节点加入集群。 + +## 5. 执行 JoinNode + +所有 Master 节点加入集群后,Sealos 进入 JoinNode 阶段,执行以下操作: + +### 5.1 生成 Join 令牌 + +首先,Sealos 再次生成 Join 令牌。 + +### 5.2 生成 IPVS 规则 + +然后,Sealos 生成 IPVS 规则。 + +### 5.3 生成 Join 配置 + +接下来,Sealos 再次生成 JoinNode 配置。 + +### 5.4 执行 Join Node 流程 + +最后,Sealos 执行 Join Node 流程,让 Worker 节点加入集群。 + +## 6. 同步 IPVS + +所有节点加入集群后,Sealos 将 Master 的 IPVS 规则同步到所有节点。这里主要是通过 lvscare 的静态 pod,根据 Master 节点的数量同步静态 pod 的配置。 + +## 7. 执行 Guest 阶段 + +IPVS 规则同步完成后,Sealos 执行 Guest 阶段。这是执行集群镜像命令的阶段。 + +## 8. 写入 Clusterfile + +最后,Sealos 将最终的执行结果写入 Clusterfile。 + +这就是 `sealos run` 命令的工作原理。希望通过这篇文章,您能对 `sealos run` 命令有更深入的理解。以下是我们提到的全景图,以帮助您更好地理解整个流程。 + +![](images/sealos-run.png) diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/template-function.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/template-function.md new file mode 100644 index 00000000000..8cf77555612 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/advanced-guide/template-function.md @@ -0,0 +1,57 @@ +--- +sidebar_position: 9 +--- + +# 模板引入与函数增强 + +在 Sealos 的镜像构建过程中,"tmpl" 后缀的文件在 "etc"、"scripts" 和 "manifests" 这三个目录下的文件会被特殊处理。 + +1. "etc" 目录:这个目录通常用于存放配置文件。在构建过程中,Sealos 会对该目录下的 "tmpl" 后缀的文件进行模板渲染,渲染完成后的文件将被拷贝到集群镜像的相应目录下。 + +2. "scripts" 目录:这个目录通常用于存放执行脚本。Sealos 会对该目录下的 "tmpl" 后缀的文件进行模板渲染,生成的脚本将在集群镜像构建过程中被执行。 + +3. "manifests" 目录:这个目录通常用于存放 Kubernetes 资源清单文件。Sealos 会对该目录下的 "tmpl" 后缀的文件进行模板渲染,生成的清单文件将在集群镜像构建过程中被应用到 Kubernetes 集群中。 + +总的来说,这三个目录下的 "tmpl" 后缀文件在 Sealos 的镜像构建过程中都会被视为模板文件进行处理。这种处理方式提供了更多的灵活性,让我们可以在构建过程中动态生成配置、脚本或者 Kubernetes 资源清单。 + +在构建镜像时,我们支持 `template` 来让维护者完全控制生成的配置文件(模块渲染)。例如: + +```yaml +service: + name: {{ .serviceName }} + port: + {{- if typeIs "string" .servicePort }} + name: {{ .servicePort }} + {{- else if or (typeIs "int" .servicePort) (typeIs "float64" .servicePort) }} + number: {{ .servicePort | int }} + {{- end }} +``` + +请参考 Golang 的 [text/template](https://pkg.go.dev/text/template) 了解基础介绍和更多细节。 + +## 模板函数增强 + +此外,我们支持 `templateFunc` 来增强模板函数。例如: + +```yaml +shim: /var/run/image-cri-shim.sock +cri: /run/containerd/containerd.sock +address: http://{{ .registryDomain }}:{{ .registryPort }} +force: true +debug: false +image: /var/lib/image-cri-shim +{{ if and (ne .SEALOS_SYS_KUBE_VERSION "") (semverCompare "^1.26.0" .SEALOS_SYS_KUBE_VERSION) }}version: v1{{ else }}version: v1alpha2{{ end }} +timeout: 15m +auth: {{ .registryUsername }}:{{ .registryPassword }} +``` + +在这里我们使用 `semverCompare` 来检查用户是否运行在 k8s 版本 v1.26.0 或以上,如果是,生成 `version: v1`,否则生成 `version: v1alpha2`。 +有了这个支持,我们可以很轻松地用一个集群镜像文件管理多版本的 Kubernetes 支持。 + +### 一些最常用的模板函数 + +* [semverCompare](http://masterminds.github.io/sprig/semver.html) 比较语义版本,而不是字符串比较。 +* [default](http://masterminds.github.io/sprig/defaults.html) default 可以在值为空或未定义时提供一个默认值。 +* [toYaml](https://github.com/labring/sealos/blob/main/pkg/template/funcmap.go#L66) 将当前值(对象,映射,数组)显示为 yaml 格式的字符串。 + +完整的支持函数列表,请[点击这里](http://masterminds.github.io/sprig/)。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/images/sealos.webp b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/images/sealos.webp new file mode 100644 index 00000000000..0cc05e478e9 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/images/sealos.webp differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/lifecycle-management.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/lifecycle-management.md new file mode 100644 index 00000000000..24b9a600181 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/lifecycle-management.md @@ -0,0 +1,93 @@ +--- +sidebar_position: 0 +--- + +# K8s 集群生命周期管理 + +Sealos 提供一套强大的工具,使得用户可以便利地管理整个集群的生命周期。 + +## 功能介绍 + +使用 Sealos,您可以安装一个不包含任何组件的裸 Kubernetes 集群。此外,Sealos 还可以在 Kubernetes 之上,通过集群镜像能力组装各种上层分布式应用,如数据库、消息队列等。 + +Sealos 不仅可以安装一个单节点的 Kubernetes 开发环境,还能构建数千节点的生产高可用集群。 + +Sealos 具有自由伸缩集群、备份恢复、释放集群等功能,即使在离线环境中,Sealos 也能提供出色的 Kubernetes 运行体验。 + +## 主要特性 + +- 支持 ARM,v1.20 以上版本离线包支持 containerd 与 docker 集成 +- 提供 99 年证书,支持集群备份,升级 +- 不依赖 ansible、haproxy、keepalived,一个二进制工具,零依赖 +- 提供离线安装,不同 Kubernetes 版本只需使用不同的集群镜像 +- 高可用性由 ipvs 实现的 localLB 提供,占用资源少,稳定可靠,类似 kube-proxy 的实现 +- 使用 image-cri-shim 自动识别镜像名称,使离线交付更方便 +- 几乎兼容所有支持 systemd 的 x86_64 架构的环境 +- 轻松实现集群节点的增加/删除 +- 已有数万用户在线上环境使用 Sealos,稳定可靠 +- 支持集群镜像,自由组合定制你需要的集群,如 openebs 存储+数据库+minio 对象存储 +- 使用 buildah 的 sdk 实现对镜像标准统一,完全兼容 OCI 的标准 + +## 使用 Sealos 运行 Kubernetes 集群 + +使用 Sealos 运行一个 Kubernetes 集群非常简单,只需以下步骤: + +```bash +$ curl -sfL https://raw.githubusercontent.com/labring/sealos/v4.3.0/scripts/install.sh \ + | sh -s v4.3.0 labring/sealos +# 创建一个集群 +$ sealos run labring/kubernetes:v1.25.0-4.2.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \ + --masters 192.168.64.2,192.168.64.22,192.168.64.20 \ + --nodes 192.168.64.21,192.168.64.19 -p [your-ssh-passwd] +``` + +[![asciicast](https://asciinema.org/a/519263.svg)](https://asciinema.org/a/519263?speed=3) + +## 在集群上运行分布式应用 + +通过 `sealos run` 命令,您可以在集群上运行各种分布式应用,如数据库、消息队列、AI 能力,甚至企业级 SaaS 软件。例如: + +```shell +# MySQL 集群 +$ sealos run labring/mysql-operator:8.0.23-14.1 + +# Clickhouse 集群 +$ sealos run labring/clickhouse:0.18.4 + +# Redis 集群 +$ sealos run labring/redis-operator:3.1.4 +``` + +## 自定义集群 + +对于 Sealos 生态没有的集群镜像,用户可以方便地自己构建和定制属于自己的集群镜像。例如: + +[构建一个 ingress 集群镜像](/self-hosting/lifecycle-management/quick-start/build-ingress-cluster-image.md) + +您还可以定制一个完全属于自己的 Kubernetes: + +Sealfile: + +```shell +FROM kubernetes:v1.25.0 +COPY flannel-chart . +COPY mysql-chart . +CMD ["helm install flannel flannel-chart", "helm install mysql mysql-chart"] +``` + +```shell +sealos build -t my-kuberentes:v1.25.0 . +sealos run my-kuberentes:v1.25.0 ... +``` + +## 常见问题 + +**Sealos 是 Kubernetes 安装工具吗?** + +安装部署只是 Sealos 的一个基本功能,如同单机操作系统有 Boot 模块一样,Sealos 的 Boot 模块可以很好地管理 Kubernetes 在任何场景下的生命周期。 + +**Sealos 和 Rancher、KubeSphere 有什么区别?** + +Sealos 的设计理念是 "化整为零,自由组装,大道至简"。Sealos 利用 Kubernetes 的能力,以简单的方式提供给用户真正需要的东西。用户需要的不一定是 Kubernetes,用户需要的是具体的能力。 + +Sealos 是极其灵活的,不会给用户带来额外负担。它的形态取决于用户的需求和安装的应用。Sealos 的核心是分布式应用,所有应用都是一等公民。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-binary.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-binary.md new file mode 100644 index 00000000000..6433a19d058 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-binary.md @@ -0,0 +1,88 @@ +--- +sidebar_position: 4 +--- + +# 构建基于二进制文件的集群镜像 + +此文档主要介绍了如何使用 `sealos` 工具将单一二进制文件(例如 `helm` 或 `kustomize`)打包为集群镜像,并将它们通过在主节点上部署集群镜像进行安装。以 `helm` 为例,我们将详细介绍如何将二进制文件打包成集群镜像。 + +## 创建构建工作空间 + +首先,创建一个基础目录作为构建工作空间: + +```shell +$ mkdir ~/cluster-images +``` + +在工作空间中,创建一个 `opt` 目录用于存储二进制文件: + +```shell +$ cd cluster-images +$ mkdir opt/ +``` + +## 准备二进制文件 + +接下来,我们准备 `helm` 二进制文件。在此,我们从 [github release](https://github.com/helm/helm/releases) 中下载: + +```shell +wget https://get.helm.sh/helm-v3.10.1-linux-amd64.tar.gz +tar -zxvf helm-v3.10.1-linux-amd64.tar.gz +chmod a+x linux-amd64/helm +mv linux-amd64/helm opt/ +``` + +## 创建构建镜像所需的 `Sealfile` 文件 + +创建一个名为 `Sealfile` 的文件,内容如下: + +```shell +FROM scratch +COPY opt ./opt +CMD ["cp opt/helm /usr/bin/"] +``` + +目前的目录结构如下: + +``` +. +├── Sealfile +└── opt + └── helm +``` + +## 构建集群镜像 + +现在,一切准备就绪,你可以开始构建集群镜像了: + +```shell +sealos build -t labring/helm:v3.10.1 . +``` + +**注意:** 首先你需要在本地主机上安装 `sealos` 命令。 + +你可以查看构建日志来了解构建过程。 + +```shell +root@ubuntu:~/cluster-images# sealos build -t labring/helm:v3.10.1 . +... +``` + +查看构建的镜像,现在所有依赖的二进制文件都已经构建进集群镜像中: + +```shell +root@ubuntu:~/cluster-images# sealos images +labring/helm v3.10.1 19ed4a24f0fe 3 minutes ago 45.1 MB +``` + +## 推送镜像 + +你可以将镜像推送至任何 Docker 镜像仓库,下面的命令将镜像推送到 dockerhub: + +```shell +sealos push labring/helm:v3.10.1 +``` + +**注意:** 请使用 `sealos` 命令来操作集群镜像,不支持 Docker 命令。 + +如果你使用的是私有镜像仓库,可以使用 `sealos login` 命令登录你的镜像仓库,然后再推送或者拉取镜像 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-go_template.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-go_template.md new file mode 100644 index 00000000000..135698980bf --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-go_template.md @@ -0,0 +1,106 @@ +--- +sidebar_position: 5 +--- + +# 构建基于 go-template 的集群镜像 + +在构建集群镜像的过程中,我们可以使用 `--env` 选项通过sealos命令行传递一些变量。这些环境变量可以被Kubefile的 `CMD` 命令或者yaml文件模板所使用。 + +## 在 Kubefile 中使用环境变量 + +这个示例定义了一个 `SERVICE_TYPE` 变量,它允许用户在安装应用程序时自定义服务暴露类型,并将参数传递给CMD中的helm命令。 + +Kubefile 示例: + +```shell +FROM scratch +ENV SERVICE_TYPE "NodePort" +COPY charts charts +COPY registry registry +CMD ["helm upgrade --install nginx charts/nginx --namespace=nginx --create-namespace --set service.type=$(SERVICE_TYPE)"] +``` + +运行集群应用并设置一个自定义的 `SERVICE_TYPE=LoadBalancer`,如果不设置,它将默认为 NodePort。 + +```shell +sealos run labring/nginx:v1.23.1 --env SERVICE_TYPE=LoadBalancer +``` + +## 在Yaml文件中使用环境变量 + +准备一个简单的nginx服务的yaml文件,这个文件必须是 `*.tmpl` 扩展名,以便在运行 `sealos run --env` 命令时渲染。 + +```shell +$ cat manifests/service.yaml.tmpl +apiVersion: v1 +kind: Service +metadata: + name: nginx + labels: + name: nginx +spec: + type: {{ .serviceType }} + ports: + - port: 80 + nodePort: {{ .http_NodePort }} + name: http + - port: 443 + nodePort: {{ .https_NodePort }} + name: https + selector: + name: nginx +``` + +下面是一个Kubefile样例,你可以在这里设置默认的环境变量。 + +```shell +FROM scratch +ENV serviceType NodePort +ENV http_NodePort 30080 +ENV https_NodePort 30443 + +COPY manifests manifests +COPY registry registry +CMD ["kubectl apply -f manifests/service.yaml"] +``` + +当你构建镜像时,什么都不会发生,只有在运行应用程序时,它才会渲染。如果没有设置 `--env`,它将使用 Kubefile 的默认 ENV。 + +```shell +sealos run labring/nginx:1.23.1 --env serviceType=LoadBalancer --env http_NodePort=30080 --env https_NodePort=30443 +``` + +你会发现 sealos 会在主节点的本地路径上基于 `service.yaml.tmpl` 渲染一个新的yaml文件 `service.yaml`。 + +**注意** 新版本的应用的rootfs放到了`/var/lib/sealos/data/default/applications`目录,每个应用都有独立的目录。 + +```shell +root@node1:~# ls /var/lib/sealos/data/default/rootfs/manifests |grep service +service.yaml +service.yaml.tmpl +``` + +检查 yaml 内容: + +```shell +root@node1:~# cat /var/lib/sealos/data/default/rootfs/manifests/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: nginx + labels: + name: nginx +spec: + type: NodePort + ports: + - port: 80 + nodePort: 30080 + name: http + - port: 443 + nodePort: 30443 + name: https + selector: + name: nginx +``` + +**注意:**所有类型的文件都支持这个特性(文件名后缀是.tmpl且构建目录在etc、scripts和manifests),你可以自己尝试一下。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-helm_charts.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-helm_charts.md new file mode 100644 index 00000000000..dfcfc668aa8 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-helm_charts.md @@ -0,0 +1,235 @@ +--- +sidebar_position: 3 +--- + +# 构建基于 Helm Charts 的集群镜像 + +让我们以最简单的 nginx 应用程序为例,介绍如何基于 Helm Charts 构建一个基于 nginx 的集群镜像。 + +## 一、准备工作 + +创建一个用于构建工作的基础目录。 + +```shell +$ mkdir ~/cloud-images +``` + +创建一个 `charts` 目录来存储 Kubernetes nginx Helm Charts 文件。 + +```shell +$ cd cloud-images +$ mkdir charts +``` + +## 二、准备Helm Charts + +准备 nginx Helm Charts,这里我们使用 [bitnami 官方的 nginx Helm Charts](https://bitnami.com/stack/nginx),让我们将 Helm Chart 文件拉取到本地并解压到 `charts` 目录中。 + +```shell +helm repo add bitnami https://charts.bitnami.com/bitnami +helm search repo bitnami/nginx +helm pull bitnami/nginx --version=13.2.13 -d charts/ --untar +``` + +**注意:** 首先你应该安装 Helm 命令工具到本地主机。 + +现在,charts 目录的结构如下所示。 + +``` +charts/ +└── nginx + ├── Chart.lock + ├── charts + ├── Chart.yaml + ├── README.md + ├── templates + ├── values.schema.json + └── values.yaml +``` + +## 三、创建Kubefile + +创建一个名为 `Kubefile` 的文件用于镜像构建: + +```shell +$ cat Kubefile +FROM scratch +COPY charts charts +COPY registry registry +CMD ["helm install nginx charts/nginx --namespace=nginx --create-namespace"] +``` + +建议使用 `helm upgrade --install` 而不是 `helm install`,这样可以在以后更新应用程序时重复运行相同的命令。 + +你可以根据需要添加其他选项,例如通过 NodePort 暴露服务。 + +```shell +FROM scratch +COPY charts charts +COPY registry registry +CMD ["helm upgrade --install nginx charts/nginx --namespace=nginx --create-namespace --set service.type=NodePort"] +``` + +## 四、构建集群镜像 + +现在一切准备就绪,你可以开始构建集群镜像。 + +```shell +sealos build -t labring/nginx:v1.23.2 . +``` + +**注意:** 你应该首先将 sealos 命令安装到本地主机。 + +你可以查看构建日志。 + +```shell +root@ubuntu:~/cloud-images# sealos build -t labring/nginx:v1.23.2 . +2022-11-06T15:58:33 info lookup in path charts +2022-11-06T15:58:33 info sub chart is nginx +2022-11-06T15:58:33 warn if you access private registry,you must be 'sealos login' or 'buildah login' +2022-11-06T15:58:33 info pull images [docker.io/bitnami/nginx:1.23.2-debian-11-r29] for platform is linux/amd64 +Pulling image: docker.io/bitnami/nginx:1.23.2-debian-11-r29 +1d8866550bdd: Download complete +cbbfe6232a5b: Download complete +ed342369e859: Download complete +Status: images save success +2022-11-06T15:58:43 info output images [docker.io/bitnami/nginx:1.23.2-debian-11-r29] for platform is linux/amd64 +STEP 1/3: FROM scratch +STEP 2/3: COPY . . +STEP 3/3: CMD ["helm upgrade --install nginx charts/nginx --namespace=nginx --create-namespace --set service.type=NodePort"] +COMMIT labring/nginx:v1.23.2 +Getting image source signatures +Copying blob 9f5a861e0f8d done +Copying config 1b89695273 done +Writing manifest to image destination +Storing signatures +--> 1b896952734 +Successfully tagged localhost/labring/nginx:v1.23.2 +1b8969527343939d60859469708e5420758f7419a421304f81b5132669982de7 +2022-11-06T15:58:44 info + ___ ___ ___ ___ ___ ___ + /\ \ /\ \ /\ \ /\__\ /\ \ /\ \ + /::\ \ /::\ \ /::\ \ /:/ / /::\ \ /::\ \ + /:/\ \ \ /:/\:\ \ /:/\:\ \ /:/ / /:/\:\ \ /:/\ \ \ + _\:\~\ \ \ /::\~\:\ \ /::\~\:\ \ /:/ / /:/ \:\ \ _\:\~\ \ \ + /\ \:\ \ \__\ /:/\:\ \:\__\ /:/\:\ \:\__\ /:/__/ /:/__/ \:\__\ /\ \:\ \ \__\ + \:\ \:\ \/__/ \:\~\:\ \/__/ \/__\:\/:/ / \:\ \ \:\ \ /:/ / \:\ \:\ \/__/ + \:\ \:\__\ \:\ \:\__\ \::/ / \:\ \ \:\ /:/ / \:\ \:\__\ + \:\/:/ / \:\ \/__/ /:/ / \:\ \ \:\/:/ / \:\/:/ / + \::/ / \:\__\ /:/ / \:\__\ \::/ / \::/ / + \/__/ \/__/ \/__/ \/__/ \/__/ \/__/ + + Website :https://www.sealos.io/ + Address :github.com/labring/sealos +``` + +sealos 将自动从 charts 目录中提取镜像,将其拉取到本地并存储在 registry 目录中。 + +现在的目录结构如下所示: + +```shell +. +├── charts +│ └── nginx +│ ├── Chart.lock +│ ├── charts +│ ├── Chart.yaml +│ ├── README.md +│ ├── templates +│ ├── values.schema.json +│ └── values.yaml +├── Kubefile +└── registry + └── docker + └── registry +``` + +在本地查看构建的镜像,现在所有依赖的部署清单和镜像缓存都构建到了集群镜像中。 + +```shell +root@ubuntu:~/cloud-images# + + sealos images +labring/nginx v1.23.2 521c85942ee4 4 minutes ago 56.8 MB +``` + +你可以将镜像推送到任何 Docker 镜像仓库,下面的命令将其推送到 Docker Hub。 + +```shell +sealos push labring/nginx:v1.23.2 +``` + +**注意:** 请使用 sealos 命令操作集群镜像,不支持 Docker 命令。 + +如果你使用私有镜像仓库,只需在拉取或推送镜像之前使用 `sealos login` 命令登录到注册表。 + +```shell +sealos login docker.io -u xxx -p xxx + +sealos login registry.cn-hangzhou.aliyuncs.com -u xxx -p xxx +``` + +## 五、安装集群镜像 + +然后你可以在你的集群中运行集群镜像。 + +```shell +sealos run labring/nginx:v1.23.2 +``` + +helm 二进制命令将安装到你的 Kubernetes 集群的主节点上。 + +```shell +root@ubuntu:~# helm -n nginx ls +``` + +## 六、说明 + +默认情况下,在构建镜像时,sealos 只解析默认的 values.yml 文件,但是你也可以为 sealos 提供自定义的 values.yaml 文件。 + +**自定义 values 文件必须放在与你的 Chart 相同的目录中,并且必须以 `.values.yaml` 的形式命名,例如 `loki-stack.values.yaml`。** + +```shell +. +├── charts +│ ├── loki-stack +│ │ ├── charts +│ │ ├── Chart.yaml +│ │ ├── README.md +│ │ ├── requirements.lock +│ │ ├── requirements.yaml +│ │ ├── templates +│ │ └── values.yaml +│ └── loki-stack.values.yaml +├── init.sh +├── Kubefile +``` + +`loki-stack.values.yaml` 文件内容如下: + +```shell +$ cat charts/loki-stack.values.yaml +promtail: + enabled: false +fluent-bit: + enabled: true +grafana: + enabled: true +``` + +不同的 values 文件可能会输出不同的镜像列表,以使 sealos 能够在 `sealos build` 过程中自动解析镜像。 + +```shell +$ helm template charts/loki-stack/ -f charts/loki-stack/values.yaml|grep image: + image: "grafana/promtail:2.0.0" + image: "grafana/loki:2.0.0" + image: "bats/bats:v1.1.0" + +$ helm template charts/loki-stack/ -f charts/loki-stack.values.yaml|grep image: + image: "grafana/fluent-bit-plugin-loki:1.6.0-amd64" + image: "kiwigrid/k8s-sidecar:0.1.209" + image: "grafana/grafana:6.7.0" + image: "grafana/loki:2.0.0" + image: "bats/bats:v1.1.0" + image: bats/bats:v1.1.0 +``` diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-image-list.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-image-list.md new file mode 100644 index 00000000000..c9e33edaf74 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-image-list.md @@ -0,0 +1,79 @@ +--- +sidebar_position: 1 +--- + +# 构建基于镜像清单的集群镜像 + +本文将指导你如何使用镜像列表构建集群镜像,或使用现有的docker存储的tar包进行构建应用镜像。 + +## 镜像列表 构建 + +``` +. +├── Kubefile +├── cni +│   ├── custom-resources.yaml +│   └── tigera-operator.yaml +├── images +│   └── shim +│   └── CalicoImageList +└── registry + └── docker + └── registry +``` + +```dockerfile +FROM labring/kubernetes:v1.24.0 +COPY cni ./cni +COPY images ./images +COPY registry ./registry +CMD ["kubectl apply -f cni/tigera-operator.yaml","kubectl apply -f cni/custom-resources.yaml"] +``` + +说明: + +CalicoImageList 中的镜像列表将被拉取到本地,然后使用 `kubectl apply -f` 命令将其应用到集群中。 + +镜像列表目前支持: +- docker.io/calico/cni:v3.20.0 这种远程的镜像 +- containers-storage:docker.io/labring/coredns:v0.0.1 这种本地的OCI容器镜像 +- docker-daemon:docker.io/library/nginx:latest 这种本地的docker容器镜像 + + +## 镜像tar包 构建 + +``` +. +├── Kubefile +├── cni +│   ├── custom-resources.yaml +│   └── tigera-operator.yaml +├── images +│   └── skopeo +│   ├── calico.tar +│   └── tar.txt +└── registry + └── docker + └── registry +``` + +```dockerfile +FROM scratch +COPY cni ./cni +COPY images ./images +COPY registry ./registry +CMD ["kubectl apply -f cni/tigera-operator.yaml","kubectl apply -f cni/custom-resources.yaml"] +``` + +说明: + +tar.txt 中的配置会被拉取到本地并重定向镜像列表,然后使用 `kubectl apply -f` 命令将其应用到集群中。 +配置文件格式: + +``` +docker-archive:calico.tar@calico/cni:v3.20.0 +``` + +镜像列表目前支持: +- docker-archive 这种docker存储的镜像,仅支持单个镜像 +- oci-archive 这种oci存储的镜像,仅支持单个镜像 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-manifests.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-manifests.md new file mode 100644 index 00000000000..2618ff743b6 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-manifests.md @@ -0,0 +1,101 @@ +--- +sidebar_position: 2 +--- + +# 构建基于部署清单的集群镜像 + +本文档将详细介绍如何构建基于部署清单(Deployment Manifest)的集群镜像。我们将以一个简单的nginx应用为例来进行说明。 + +## 一、准备工作 + +1. 首先,创建一个基础目录作为构建工作区。 + +```shell +$ mkdir ~/cloud-images +``` + +2. 创建一个名为 `manifests` 的目录来存储 kubernetes nginx 部署 yaml 文件。 + +```shell +$ cd cloud-images +$ mkdir manifests +``` + +## 二、准备清单文件 + +在这个阶段,我们将准备一个简单的nginx kubernetes yaml文件。 + +```shell +$ cat manifests/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + selector: + matchLabels: + app: nginx + replicas: 2 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.23.1 + ports: + - containerPort: 80 +``` + +## 三、创建Kubefile + +在这个阶段,我们需要创建一个Kubefile文件,该文件将用于构建镜像。 + +```shell +FROM scratch +COPY manifests manifests +COPY registry registry +CMD ["kubectl apply -f manifests/deployment.yaml"] +``` + +## 四、构建集群镜像 + +在准备好所有必需的文件和目录后,我们可以开始构建集群镜像。 + +```shell +sealos build -t labring/nginx:v1.23.1 . +``` + +**注意:** 在开始构建前,您需要先在本地主机上安装 sealos 命令。 + +构建过程中,您可以查看构建日志。 + +## 五、验证镜像 + +在构建完毕后,可以通过下列命令查看构建的镜像: + +```shell +root@ubuntu:~/cloud-images# sealos images +labring/nginx v1.23.1 521c85942ee4 4 minutes ago 56.8 MB +``` + +## 六、推送镜像 + +最后,我们可以将构建好的镜像推送至任何Docker镜像仓库,以下命令将其推送至DockerHub。 + +```shell +sealos push labring/nginx:v1.23.1 +``` + +**注意:** 请使用 sealos 命令来操作集群镜像,Docker 命令不受支持。 + +如果你使用的是私有镜像仓库,只需要在拉取或推送镜像前使用 `sealos login` 登录仓库即可。 + +```shell +sealos login docker.io -u xxx -p xxx + +sealos login registry.cn-hangzhou.aliyuncs.com -u xxx -p xxx +``` + +至此,基于部署清单的集群镜像已经构建完成。 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-scp_exec.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-scp_exec.md new file mode 100644 index 00000000000..3426fd48571 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/build-image/build-image-scp_exec.md @@ -0,0 +1,127 @@ +--- +sidebar_position: 6 +--- + +# 使用 exec 和 scp 命令构建集群镜像 + +默认情况下,`sealos run xx` 只会在第一个主节点上运行命令和复制文件。当你希望在特定节点或所有节点上运行命令或复制文件时,你可以在构建集群镜像时使用 `sealos exec` 或 `sealos scp` 命令。 + +- sealos exec: 连接到一个或多个节点并运行任何 shell 命令; +- sealos scp: 连接到一个或多个节点并将本地文件复制到远程节点。 + +虽然你可以直接在宿主机上使用这些命令,但本文主要描述的是在使用 sealos build 构建集群镜像时如何使用这两个命令。 + +## sealos exec 示例 + +以下是构建一个 openebs 集群镜像的示例。在安装 openebs maystor 之前,需要在节点上执行一些初始化操作,你可以使用 sealos exec 来实现这一点。 + +首先,创建一个用于构建工作的基础目录。 + +```shell +$ mkdir ~/cloud-images +``` + +创建一个 `charts` 目录,用来存储 kubernetes nginx helm charts 文件。 + +```shell +$ cd cloud-images +``` + +创建一个名为 `Kubefile` 的文件,用于镜像构建: + +```shell +$ cat Kubefile +FROM scratch +COPY manifests manifests +COPY registry registry +COPY opt opt +COPY mayastor.sh mayastor.sh +CMD ["bash mayastor.sh"] +``` + +创建一个名为 `mayastor.sh` 的脚本文件,sealos exec 后面的 shell 命令将在所有节点上执行(在所有节点上创建 hugepage、加载内核模块),但其他命令只会在主节点上运行。 + +```shell +$ cat mayastor.sh +#!/usr/bin/env bash +set -e + +sealos exec " +echo vm.nr_hugepages = 1024 | sudo tee -a /etc/sysctl.d/mayastor.conf +sysctl -p +sudo modprobe -- nbd +sudo modprobe -- nvmet +sudo modprobe -- nvmet_rdma +sudo modprobe -- nvme_fabrics +sudo modprobe -- nvme_tcp +sudo modprobe -- nvme_rdma +sudo modprobe -- nvme_loop +cat < /tmp/buildimage/kubeadm.yml < /tmp/buildimage/Kubefile < +Clusterfile + +```yaml +apiVersion: apps.sealos.io/v1beta1 +kind: Cluster +metadata: + creationTimestamp: null + name: default +spec: + hosts: + - ips: + - 192.168.0.2:22 + - 192.168.0.3:22 + - 192.168.0.4:22 + roles: + - master + - amd64 + - ips: + - 192.168.0.5:22 + - 192.168.0.6:22 + - 192.168.0.7:22 + roles: + - node + - amd64 + image: + - labring/kubernetes:v1.24.0 + - labring/helm:v3.8.2 + - labring/calico:v3.24.1 + ssh: + passwd: xxx + pk: /root/.ssh/id_rsa + port: 22 + user: root +status: {} +``` + + + +2. 生成 Clusterfile 后,然后更新集群配置。例如,要修改 pods 的 CIDR 范围,就可以修改 `networking.podSubnet` 和 `spec.data.spec.calicoNetwork.ipPools.cidr` 字段。最终的 Clusterfile 会像是这样: + +
+Clusterfile + +```yaml +apiVersion: apps.sealos.io/v1beta1 +kind: Cluster +metadata: + creationTimestamp: null + name: default +spec: + hosts: + - ips: + - 192.168.0.2:22 + - 192.168.0.3:22 + - 192.168.0.4:22 + roles: + - master + - amd64 + - ips: + - 192.168.0.5:22 + - 192.168.0.6:22 + - 192.168.0.7:22 + roles: + - node + - amd64 + image: + - labring/kubernetes:v1.25.0 + - labring/helm:v3.8.2 + - labring/calico:v3.24.1 + ssh: + passwd: xxx + pk: /root/.ssh/id_rsa + port: 22 + user: root +status: {} +--- +apiVersion: kubeadm.k8s.io/v1beta2 +kind: ClusterConfiguration +networking: + podSubnet: 10.160.0.0/12 +--- +apiVersion: apps.sealos.io/v1beta1 +kind: Config +metadata: + name: calico +spec: + path: charts/calico/values.yaml + strategy: merge + data: | + installation: + enabled: true + kubernetesProvider: "" + calicoNetwork: + ipPools: + - blockSize: 26 + cidr: 10.160.0.0/12 + encapsulation: IPIP + natOutgoing: Enabled + nodeSelector: all() + nodeAddressAutodetectionV4: + interface: "eth.*|en.*" +``` + +
+ +3. 运行 `sealos apply -f Clusterfile` 启动集群。集群运行成功后会把 Clusterfile 保存到 `.sealos/default/Clusterfile` 文件中,可以修改其中字段来重新 apply 对集群进行变更。 + +**注意:** + +- 可以参考[官方文档](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-config/)或运行 `kubeadm config print init-defaults` 命令来打印 kubeadm 配置。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/run-cluster/run-cluster.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/run-cluster/run-cluster.md new file mode 100644 index 00000000000..30235afd65e --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/run-cluster/run-cluster.md @@ -0,0 +1,14 @@ +--- +sidebar_position: 0 +--- + +# Sealos 集群镜像运行 + +在这个目录中,我们提供了一系列详细的教程和资源,帮助您有效地运行和管理 Sealos 集群。以下是每个文件或子目录的简短概述: + +1. **集群初始化**:这部分提供了所有必需的步骤,以启动并初始化一个新的 Sealos 集群。它包括如何配置 Sealos,以及如何运行初始化命令等信息。 +2. **节点管理**:这个部分包括如何添加和移除集群节点,以及如何维护和管理集群节点的详细信息。 +3. **服务管理**:这部分包含了如何在 Sealos 集群上部署和管理各种服务的指南。它包括如何使用 Sealos 的命令行工具来管理服务,以及如何配置服务以满足你的特定需求。 +4. **实战示例**:这部分包含了各种实战示例,包括如何运行和管理各种应用,以及如何处理特定的运维问题。 + +我们希望这个目录可以为您在运行和管理 Sealos 集群时提供全方位的帮助。如果有任何问题或建议,欢迎随时联系我们。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/run-cluster/template-apply-cluster.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/run-cluster/template-apply-cluster.md new file mode 100644 index 00000000000..ae6bf478ad4 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/run-cluster/template-apply-cluster.md @@ -0,0 +1,64 @@ +--- +sidebar_position: 2 +--- + +# 模板配置安装 + +我们也可以使用 Go 模版语法来编写 Clusterfile(就像 [Helm](https://helm.sh/) 一样,但暂不支持部分模版函数,如 `include`/`tpl`/`require`/`lookup`)。 例如,创建 `Clusterfile.yaml` 如下: + +```yaml +apiVersion: apps.sealos.io/v1beta1 +kind: Cluster +metadata: + name: {{ .Values.clusterName }} +spec: + hosts: + - ips: {{ .Values.masters | toYaml | nindent 8 }} + roles: ["master", "amd64"] + {{- with .Values.nodes }} + - ips: {{ . | toYaml | nindent 8 }} + roles: ["node", "amd64"] + {{- end }} + image: {{ .Values.images | toYaml | nindent 4 }} + ssh: + passwd: {{ env "SSH_PASSWORD" .Values.ssh.passwd }} + pk: {{ default "~/.ssh/id_rsa" .Values.ssh.pk }} + port: {{ default 22 .Values.ssh.port | int }} + user: {{ default "root" .Values.ssh.user }} +--- +apiVersion: kubeadm.k8s.io/v1beta3 +kind: ClusterConfiguration +networking: + dnsDomain: {{ default "cluster.local" .Values.networking.dnsDomain }} + serviceSubnet: {{ default "10.96.0.0/18" .Values.networking.serviceSubnet }} + podSubnet: {{ default "100.64.0.0/17" .Values.networking.podSubnet }} +``` + +随后,创建一个自定义的 values 文件 `example.values.yaml`: + +```yaml +clusterName: default +images: + - dockerhub.tencentcloudcr.com/labring/kubernetes:v1.23.8 + - dockerhub.tencentcloudcr.com/labring/calico:v3.24.1 +masters: + - 10.74.16.27:22 + - 10.74.16.140:22 + - 10.74.16.101:22 +nodes: [] +ssh: + # passwd: notSetYet + pk: /path/to/private/key/file + port: 22 + user: root +networking: + dnsDomain: cluster.local + serviceSubnet: 10.96.0.0/18 + podSubnet: 100.64.0.0/17 +``` + +然后就可以像这样部署集群了: + +```shell +$ sealos apply -f Clusterfile.yaml --values example.values.yaml --set clusterName=testlocal --env SSH_PASSWORD=s3cret +``` diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/run-cluster/upgrade-cluster.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/run-cluster/upgrade-cluster.md new file mode 100644 index 00000000000..1a2cbe08276 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/operations/run-cluster/upgrade-cluster.md @@ -0,0 +1,48 @@ +--- +sidebar_position: 3 +--- + +# 如何升级集群 + +如果你想要升级你的 Kubernetes 集群,你只需要运行以下命令: + +```sh +sealos run labring/kubernetes:<新版本号> +``` + +确保你已经建立了集群。 + +## 实例说明 + +1. 假设你已经运行过以下命令: + +```sh +sealos run labring/kubernetes:v1.24.0 labring/calico:v3.22.1 --masters 192.168.64.8 --nodes 192.168.64.7 +``` + +2. 现在你想要升级集群到 v1.25.0,你可以这样操作: + +```sh +sealos run labring/kubernetes:v1.25.0 +``` + +在运行到 'kubeadm upgrade v1.25.0' 的时候,你将看到: + +```txt +[upgrade/version] You have chosen to change the cluster version to "v1.25.0" +[upgrade/versions] Cluster version: v1.24.0 +[upgrade/versions] kubeadm version: v1.25.0 +[upgrade] Are you sure you want to proceed? [y/N]: +``` + +输入 'y' 来继续升级。 + +如果**出现错误**,你可以再次运行命令 'sealos run labring/kubernetes:v1.25.0'。即使失败,它也能保证得到相同的结果。 + +## 注意事项 + +1. **升级不能跨过次版本号**。比如从 'v1.23.0' 升级到 'v1.25.0' 是不允许的。如果你确实需要从 'v1.23.0' 升级到 'v1.25.0',你可以分成两步来操作,比如先从 'v1.23.0' 升级到 'v1.24.0',然后再从 'v1.24.0' 升级到 'v1.25.0'。 + +2. 一旦升级成功,集群挂载的旧版本镜像就会被替换。添加主节点或工作节点将会应用新版本。 + +这就是升级 Kubernetes 集群的整个过程。如果你在升级过程中遇到任何问题,不要犹豫,尽快查阅相关文档或者寻求帮助。 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/quick-start/build-ingress-cluster-image.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/quick-start/build-ingress-cluster-image.md new file mode 100644 index 00000000000..30d2cfa8dc4 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/quick-start/build-ingress-cluster-image.md @@ -0,0 +1,65 @@ +--- +sidebar_position: 3 +--- + +# 构建一个 Ingress 集群镜像 + +这里展示了如何用 helm 构建一个 nginx-ingress 集群镜像。 + +## 下载 helm chart + +```shell +$ mkdir ingress-nginx && cd ingress-nginx +$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx +$ helm pull ingress-nginx/ingress-nginx +``` + +随后就能找到下载的 chart: + +```shell +$ ls +ingress-nginx-4.1.0.tgz +``` + +## 添加镜像列表 + +sealos 会下载镜像列表中的镜像并缓存到 registry 目录。 + +目录必须形如 `images/shim/[your image list filename]`: + +```shell +$ cat images/shim/nginxImages +k8s.gcr.io/ingress-nginx/controller:v1.2.0 +k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1 +``` + +## 编写 Dockerfile + +```Dockerfile +FROM scratch +COPY ../examples . +CMD ["helm install ingress-nginx ingress-nginx-4.1.0.tgz --namespace ingress-nginx --create-namespace"] +``` + +## 构建集群镜像 + +```shell +$ sealos build -f Dockerfile -t docker.io/fanux/ingress-nginx:v1.2.0 . +``` + +sealos 在构建的时候会自动添加镜像列表中的镜像依赖到集群镜像中,通过神奇的方式保存了里面依赖的 Docker 镜像。 +并且在到别的环境中运行的时候更神奇的自动检测集群中是否有 Docker 镜像,有的话自动下载,没有的话才会去 k8s.gcr.io 下载。 +用户无需修改 helm chart 中的 docker 镜像地址,这里用到了镜像缓存代理的黑科技。 + +## 推送到镜像 registry + +```shell +$ sealos login docker.io +$ sealos push docker.io/fanux/ingress-nginx:v1.2.0 +``` + +## 运行集群镜像 + +```shell +$ sealos run docker.io/fanux/ingress-nginx:v1.2.0 +``` diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/quick-start/deploy-kubernetes.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/quick-start/deploy-kubernetes.md new file mode 100644 index 00000000000..6d900af995a --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/quick-start/deploy-kubernetes.md @@ -0,0 +1,192 @@ +--- +sidebar_position: 2 +keywords: [K8s, K8s 安装, K8s 部署, K8s 离线安装, K8s 离线部署] +--- + +# 安装 K8s 集群 + +Sealos 支持安装 `amd64` 和 `arm64` 架构的 K8s 集群。 + +## 先决条件 + +首先需要[下载 Sealos 命令行工具](/self-hosting/lifecycle-management/quick-start/install-cli.md),sealos 是一个简单的 Golang 二进制文件,可以安装在大多数 Linux 操作系统中。 + +以下是一些基本的安装要求: + ++ 每个集群节点应该有不同的主机名。主机名不要带下划线。 ++ 所有节点的时间需要同步。 ++ 需要在 K8s 集群的**第一个 master 节点**上运行 `sealos run` 命令,目前**集群外的节点不支持集群安装**。 ++ 建议使用干净的操作系统来创建集群。**不要自己装 Docker!** ++ 支持大多数 Linux 发行版,例如:Ubuntu、CentOS、Rocky linux。 ++ 支持 [Docker Hub](https://hub.docker.com/r/labring/kubernetes/tags) 中的所有 Kubernetes 版本。 ++ 支持使用 Containerd 作为容器运行时。 ++ 在公有云上安装请使用**私有 IP**。 + +## 查看集群镜像 + +Sealos 所有的集群镜像都可以在 [cluster-image-docs](https://github.com/labring-actions/cluster-image-docs) 仓库里找到。除了推送到 Docker Hub 之外,这些镜像还被同步到了阿里云的镜像仓库。 + +Docker Hub 上可以通过以下链接查看 Sealos 所有的集群镜像:[https://hub.docker.com/u/labring](https://hub.docker.com/u/labring). + +使用 [Registry Explorer](https://explore.ggcr.dev/) 可以查看 K8s 集群镜像的所有版本,直接输入 `registry.cn-shanghai.aliyuncs.com/labring/kubernetes`,然后点击 “Submit Query”: + +![](images/registry-explorer.png) + +就会看到这个集群镜像的所有 tag。 + +Docker Hub 同理,输入 `docker.io/labring/kubernetes` 即可查看所有 tag。 + +:::info注意 + +K8s 的小版本号越高,集群越稳定。例如 v1.28.x,其中的 x 就是小版本号。建议使用小版本号比较高的 K8s 版本。到本文截止时间为止,v1.27 最高的版本号是 v1.27.7,而 v1.28 最高的版本号是 v1.28.3,所以**建议使用 v1.27.7**。你需要根据实际情况来选择最佳的 K8s 版本 + +::: + +## 安装 K8s 单机版 + +```shell +# sealos version must >= v4.1.0 +$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 --single +``` + +## 安装 K8s 集群 + +```shell +$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 \ + --masters 192.168.64.2,192.168.64.22,192.168.64.20 \ + --nodes 192.168.64.21,192.168.64.19 -p [your-ssh-passwd] +``` + +注意:labring/helm 应当在 labring/cilium 之前。 + +参数说明: + +| 参数名 | 参数值示例 | 参数说明 | +| --- | --- | --- | +| --masters | 192.168.0.2 | K8s master 节点地址列表 | +| --nodes | 192.168.0.3 | K8s node 节点地址列表 | +| --ssh-passwd | [your-ssh-passwd] | ssh 登录密码 | +|kubernetes | labring/kubernetes:v1.25.0 | K8s 集群镜像 | + +在干净的服务器上直接执行上面命令,不要做任何多余操作即可安装一个高可用 K8s 集群。 + +## 安装各种分布式应用 + +```shell +sealos run registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 # install helm +sealos run registry.cn-shanghai.aliyuncs.com/labring/openebs:v3.9.0 # install openebs +sealos run registry.cn-shanghai.aliyuncs.com/labring/minio-operator:v4.5.5 registry.cn-shanghai.aliyuncs.com/labring/ingress-nginx:4.1.0 +``` + +这样高可用的 Minio 等应用都有了,不用关心所有的依赖问题。 + +## 增加 K8s 节点 + +增加 node 节点: + +```shell +$ sealos add --nodes 192.168.64.21,192.168.64.19 +``` + +增加 master 节点: + +```shell +$ sealos add --masters 192.168.64.21,192.168.64.19 +``` + +## 删除 K8s 节点 + +删除 node 节点: + +```shell +$ sealos delete --nodes 192.168.64.21,192.168.64.19 +``` + +删除 master 节点: + +```shell +$ sealos delete --masters 192.168.64.21,192.168.64.19 +``` + +## 清理 K8s 集群 + +```shell +$ sealos reset +``` + + + +## 离线安装 K8s + +离线环境只需要提前导入镜像,其它步骤与在线安装一致。 + +首先在有网络的环境中导出集群镜像: + +```shell +$ sealos pull registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 +$ sealos save -o kubernetes.tar registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 +``` + +### 导入镜像并安装 + +将 kubernetes.tar 拷贝到离线环境, 使用 load 命令导入镜像即可: + +```shell +$ sealos load -i kubernetes.tar +``` + +剩下的安装方式与在线安装的步骤一致: + +```shell +$ sealos images # 查看集群镜像是否导入成功 +$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 # 单机安装,集群安装同理 +``` + +### 快速启动 K8s 集群 + +也可以不用 load 命令导入镜像,直接使用以下命令即可安装 K8s: + +```shell +$ sealos run kubernetes.tar # 单机安装,集群安装同理 +``` + +## 集群镜像版本支持说明 + +### 支持 Containerd 的 K8s + +推荐使用 Containerd 作为容器运行时 (CRI) 的集群镜像版本,Containerd 是一种轻量级、高性能的容器运行时,与 Docker 兼容。使用 Containerd 的 Kubernetes 镜像可以提供更高的性能和资源利用率。以下是支持 Containerd 的集群镜像版本支持说明: + +| K8s 版本 | Sealos 版本 | CRI 版本 | 集群镜像版本 | +| -------- | ----------------- | -------- | -------------------------- | +| `<1.25` | `>=v4.0.0` | v1alpha2 | labring/kubernetes:v1.24.0 | +| `>=1.25` | `>=v4.1.0` | v1alpha2 | labring/kubernetes:v1.25.0 | +| `>=1.26` | `>=v4.1.4-rc3` | v1 | labring/kubernetes:v1.26.0 | +| `>=1.27` | `>=v4.2.0-alpha3` | v1 | labring/kubernetes:v1.27.0 | +| `>=1.28` | `>=v5.0.0` | v1 | labring/kubernetes:v1.28.0 | + +根据 Kubernetes 版本的不同,您可以选择不同的 Sealos 版本和 CRI 版本。例如,如果您要使用 Kubernetes v1.26.0 版本,您可以选择 sealos v4.1.4-rc3 及更高版本,并使用 v1 CRI 版本。 + +### 支持 Docker 的 K8s + +当然,你也可以选择使用 Docker 作为容器运行时,以下是支持 Docker 的集群镜像版本支持说明: + +| K8s 版本 | Sealos 版本 | CRI 版本 | 集群镜像版本 | +| -------- | ----------------- | -------- | --------------------------------- | +| `<1.25` | `>=v4.0.0` | v1alpha2 | labring/kubernetes-docker:v1.24.0 | +| `>=1.25` | `>=v4.1.0` | v1alpha2 | labring/kubernetes-docker:v1.25.0 | +| `>=1.26` | `>=v4.1.4-rc3` | v1 | labring/kubernetes-docker:v1.26.0 | +| `>=1.27` | `>=v4.2.0-alpha3` | v1 | labring/kubernetes-docker:v1.27.0 | +| `>=1.28` | `>=v5.0.0` | v1 | labring/kubernetes-docker:v1.28.0 | + + +与支持 Containerd 的 Kubernetes 镜像类似,您可以根据 Kubernetes 版本的不同选择不同的 Sealos 版本和 CRI 版本。例如,如果您要使用 Kubernetes v1.26.0 版本,您可以选择 sealos v4.1.4-rc3 及更高版本,并使用 v1 CRI 版本。 + +### 支持 Containerd 的 k3s + +| K3s 版本 | Sealos 版本 | 集群镜像版本 | +|----------|------------|---------------------| +| `>=1.24` | `>=v5.0.0` | labring/k3s:v1.24.0 | + +## 总结 + +您可以根据自己的需求和偏好,在不同的镜像类型和版本中进行选择。同时,不要忘记查看 [更新日志](https://github.com/labring/sealos/blob/main/CHANGELOG/CHANGELOG.md),以了解各个版本的更新内容和修复问题。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/quick-start/images/registry-explorer.png b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/quick-start/images/registry-explorer.png new file mode 100644 index 00000000000..a9e28004026 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/quick-start/images/registry-explorer.png differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/quick-start/install-cli.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/quick-start/install-cli.md new file mode 100644 index 00000000000..99c91f281ac --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/quick-start/install-cli.md @@ -0,0 +1,100 @@ +--- +sidebar_position: 1 +keywords: [sealos, sealos 命令行, sealos 下载] +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# 下载 Sealos 命令行工具 + +你可以通过运行命令来获取版本列表: + +```shell +$ curl --silent "https://api.github.com/repos/labring/sealos/releases" | jq -r '.[].tag_name' +``` + +> 注意:在选择版本时,建议使用稳定版本例如 `v4.3.0`。像 `v4.3.0-rc1`、`v4.3.0-alpha1` 这样的版本是预发布版,请谨慎使用。 + +设置 `VERSION` 环境变量为 latest 版本号,或者将 `VERSION` 替换为您要安装的 Sealos 版本: + +```shell +$ VERSION=`curl -s https://api.github.com/repos/labring/sealos/releases/latest | grep -oE '"tag_name": "[^"]+"' | head -n1 | cut -d'"' -f4` +``` + +## 二进制自动下载 + +```shell + +$ curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/main/scripts/install.sh | PROXY_PREFIX=https://mirror.ghproxy.com sh -s ${VERSION} labring/sealos + +``` + +## 二进制手动下载 + + + + +```shell +$ wget https://mirror.ghproxy.com/https://github.com/labring/sealos/releases/download/${VERSION}/sealos_${VERSION#v}_linux_amd64.tar.gz \ + && tar zxvf sealos_${VERSION#v}_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin +``` + + + + +```shell +$ wget https://mirror.ghproxy.com/https://github.com/labring/sealos/releases/download/${VERSION}/sealos_${VERSION#v}_linux_arm64.tar.gz \ + && tar zxvf sealos_${VERSION#v}_linux_arm64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin +``` + + + + +## 包管理工具安装 + +### DEB 源 + +```shell +$ echo "deb [trusted=yes] https://apt.fury.io/labring/ /" | sudo tee /etc/apt/sources.list.d/labring.list +$ sudo apt update +$ sudo apt install sealos +``` + +### RPM 源 + +```shell +$ sudo cat > /etc/yum.repos.d/labring.repo << EOF +[fury] +name=labring Yum Repo +baseurl=https://yum.fury.io/labring/ +enabled=1 +gpgcheck=0 +EOF +$ sudo yum clean all +$ sudo yum install sealos +``` + +## 源码安装 + +### 前置依赖 +1. `linux` +2. `git` +3. `golang` 1.20+ +4. `libgpgme-dev libbtrfs-dev libdevmapper-dev` + +如果在 `arm64` 环境下需要添加 `:arm64` 后缀。 + +### 构建 + +```shell +# git clone the repo +$ git clone https://github.com/labring/sealos.git +# just make it +$ make build BINS=sealos +``` + +## 下一步 + +[安装 K8s 集群](/self-hosting/lifecycle-management/quick-start/deploy-kubernetes.md)。 + diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/Image-cri-shim/_category_.json b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/Image-cri-shim/_category_.json new file mode 100644 index 00000000000..950b839be0a --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/Image-cri-shim/_category_.json @@ -0,0 +1,3 @@ +{ + "position" : 3 +} diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/Image-cri-shim/image-cri-shim.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/Image-cri-shim/image-cri-shim.md new file mode 100644 index 00000000000..2a2fb7892ca --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/Image-cri-shim/image-cri-shim.md @@ -0,0 +1,121 @@ +--- +sidebar_position: 3 +--- + +# image-cri-shim 使用指南 + +## 工作原理 + +image-cri-shim 是一个基于 CRI (Container Runtime Interface) 和 kubelet 的 gRPC (Google Remote Procedure Call) shim。CRI 是 Kubernetes 中用于与容器运行时进行交互的接口,而 kubelet 是负责维护容器运行状态和节点级别的资源管理的 Kubernetes 组件。 + +image-cri-shim 的主要功能是自动识别镜像名称,让用户在使用 Kubernetes 部署容器时无需手动指定镜像名称。这样可以降低用户的操作难度,提高部署容器的便利性。 + +在实际使用中,image-cri-shim 可以作为一个中间件,接收来自 kubelet 的请求,然后将请求转发给容器运行时。通过自动识别镜像名称,image-cri-shim 可以简化容器镜像的部署流程,减轻用户的操作负担。 + +``` ++------------+ +----------------+ +-------------------+ +| User | | Kubelet | | image-cri-shim | +| (Kubernetes| | (Node agent) | | (Middleware) | +| Manifest) | | | | | ++-----+------+ +-------+--------+ +-------+-----------+ + | | | + | YAML Manifest | | + |---------------> | | + | | | + | | | + | | CRI Request | + | |------------------------> | + | | | + | | Image Name | + | | Auto-Recognition | + | | | + | | | + | | CRI Response | + | | <------------------------+ + | | | + | | | + | Container | | + | Deployment | | + | <----------------------| | + | | | + | | | ++------------+ +-------+--------+ +-------+-----------+ + +``` + +从上述流程图可以看出,用户创建一个包含容器信息的 Kubernetes YAML 清单,然后将该清单提交给 kubelet。kubelet 是 Kubernetes 节点上的代理,负责管理容器。 +接着,kubelet 将 CRI 请求发送给 image-cri-shim 中间件。image-cri-shim 的主要任务是自动识别镜像名称,它会处理这个 CRI 请求并获取相关的镜像信息。当 image-cri-shim 识别到镜像名称后,它会将 CRI 响应返回给 kubelet。 + +最后,kubelet 使用从 image-cri-shim 获取的镜像名称来部署容器。这个过程对用户是透明的,用户无需手动指定镜像名称,从而简化了容器部署流程并提高了便利性。 + +## 架构图 + +image-cri-shim 的架构如下图所示: + +![](images/image-cri-shim.png) + + +## 使用说明 + +```yaml +shim: /var/run/image-cri-shim.sock +cri: /run/containerd/containerd.sock +address: http://sealos.hub:5000 +force: true +debug: true +timeout: 15m +auth: admin:passw0rd + +registries: +- address: http://172.18.1.38:5000 + auth: admin:passw0rd +``` +这段配置文件是一个用于设置 image-cri-shim 的 YAML 格式文件。配置文件中包含了一些关键的参数,以下是每个参数的解释: + +1. shim: 指定 image-cri-shim 的 UNIX 套接字文件路径。这个路径用于与 kubelet 之间的通信。 +2. cri: 指定容器运行时(如 containerd)的 UNIX 套接字文件路径。image-cri-shim 会使用这个路径与容器运行时进行通信。 +3. address: 定义镜像仓库的地址。在本例中,镜像仓库地址为 http://sealos.hub:5000。 +4. force: 设置为 true 时,image-cri-shim 会在强制启动shim,无需等待cri启动后启动。 +5. debug: 设置为 true 时,启用调试模式,输出更多的日志信息。 +6. timeout: 定义镜像操作的超时时间。在本例中,超时时间为 15 分钟(15m)。 +7. auth: 定义用于访问镜像仓库的身份验证凭据。在本例中,用户名为 admin,密码为 passw0rd。 + +此外,配置文件还包含了一个 registries 列表,用于定义其他镜像仓库及其身份验证凭据。在这个例子中,只有一个其他仓库: +- address: 该仓库的地址为 http://172.18.1.38:5000。 +- auth: 用于访问该仓库的身份验证凭据。在本例中,用户名为 admin,密码为 passw0rd。 +这个配置文件为 image-cri-shim 提供了所需的信息,以便正确地与 kubelet 和容器运行时(如 containerd)进行通信,以及访问和管理镜像仓库。 + +注意: image-cri-shim 能够同时兼容 CRI API v1alpha2 和 v1。 + +### 管理服务 + +image-cri-shim 通常作为一个系统服务运行。要管理 image-cri-shim,您可以使用系统服务管理工具(如 systemctl)来启动、停止、重启或查看服务状态。首先,确保您已经正确地安装了 image-cri-shim 并将其配置为一个系统服务。 + +1. 启动服务: `systemctl start image-cri-shim` +2. 停止服务: `systemctl stop image-cri-shim` +3. 重启服务: `systemctl restart image-cri-shim` +4. 查看服务状态: `systemctl status image-cri-shim` + +### 日志管理 + +要查看 image-cri-shim 服务的日志,您可以使用 journalctl 命令。journalctl 是一个用于查询和显示系统日志的工具,它与 systemd 服务管理器一起使用。 + +以下是使用 journalctl 查看 image-cri-shim 服务日志的命令: + +```shell +journalctl -u image-cri-shim +``` + +这将显示 image-cri-shim 服务的全部日志。如果您希望实时查看日志,可以添加 -f 参数: + +```shell +journalctl -u image-cri-shim -f +``` + +此外,您还可以根据时间过滤日志。例如,如果您只想查看过去一小时的日志,可以使用以下命令: + +```shell +journalctl -u image-cri-shim --since "1 hour ago" +``` + +这些命令应该能帮助您查看和分析 image-cri-shim 服务的日志,从而更好地了解服务的运行状态和可能出现的问题。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/Image-cri-shim/images/image-cri-shim.png b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/Image-cri-shim/images/image-cri-shim.png new file mode 100644 index 00000000000..5c8d5f81b23 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/Image-cri-shim/images/image-cri-shim.png differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/lvscare/_category_.json b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/lvscare/_category_.json new file mode 100644 index 00000000000..e47d9e07a6d --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/lvscare/_category_.json @@ -0,0 +1,3 @@ +{ + "position" : 99 +} \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/lvscare/images/01.webp b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/lvscare/images/01.webp new file mode 100644 index 00000000000..0cc05e478e9 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/lvscare/images/01.webp differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/lvscare/lvscare.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/lvscare/lvscare.md new file mode 100644 index 00000000000..683793f0049 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/lvscare/lvscare.md @@ -0,0 +1,74 @@ +# LVScare 使用指南 + +## 介绍 + +LVScare是一款基于IPVS技术的轻量级负载均衡和健康检查工具,可以实时监控和管理后端服务。Sealos,一个云操作系统,它的生命周期管理是一个基于kubeadm的Kubernetes HA安装工具,适用于在任何Linux系统中安装和升级高可用Kubernetes集群。两者结合能实现Kubernetes master节点的高可用性。Sealos利用其生命周期管理能力,通过配合LVScare的轻量级,0依赖,高可用的特性,可以非常有效地保证Kubernetes集群的稳定性和可靠性。 + +### LVScare的工作原理与特点 + +LVScare通过IPVS实时监控后端服务(real servers)的健康状态。如果某个服务变得不可用,LVScare会立即将其权重设为0(用于TCP优雅终止),并在下一次检查期间从服务列表中移除。服务恢复正常后,LVScare会自动将其重新加入到服务列表。LVScare的这种设计使得它具备轻量级,0依赖,高可用的特性。占用资源少,稳定可靠,类似于kube-proxy的实现,可以通过ipvs实现的localLB保证服务的持续可用。 + +## Sealos与LVScare的集成 + +在Sealos中,我们利用了官方推荐的静态Pod的方式,自动配置和管理LVScare,以实现Kubernetes集群的高可用性。Sealos会在安装Kubernetes集群的过程中自动使用LVScare进行master节点的健康检查和负载均衡。这意味着,即使某个master节点出现故障,也不会影响Kubernetes集群的整体功能。 + +![](./images/01.webp) + +### 如何运行LVScare静态Pod + +首先,通过`sealctl static-pod`命令生成LVScare的配置,并将其放入`/etc/kubernetes/manifests`目录。这样,Kubernetes集群中的所有节点都能获取到这份配置。 + +```bash +lvscare care --vs 10.103.97.12:6443 --rs 192.168.0.2:6443 --rs 192.168.0.3:6443 --rs 192.168.0.4:6443 --interval 5 --mode route +``` + +### 生成和调整静态Pod配置 + +在需要在每个节点上启动LVScare时,我们可以使用以下命令生成静态Pod的配置: + +```bash +sealctl static-pod lvscare --vip 10.103.97.2:6443 --name lvscare --image lvscare:latest --masters 192.168.0.2:6443,192.168 + +.0.3:6443 --print +``` + +当master节点有变化时,Sealos只需重新执行`sealctl static-pod`命令即可调整master节点,简化了维护静态Pod的逻辑。在集群join节点之前,我们需要调用`sealctl ipvs`(该命令直接调用LVScare sdk)手动启动IPVS规则,维护好IPVS集群。节点join成功后,Kubernetes的静态Pod就可以接管IPVS规则了。 + +## 使用LVScare的优势 + +### 高可用性 + +结合LVScare,Sealos可以实现Kubernetes集群master节点的高可用性。 + +### 健康检查机制 + +LVScare的健康检查机制可以及时发现并处理问题,防止单节点故障引发的更大问题。 + +### 无缝集成 + +作为Sealos中的静态Pod,LVScare可以与Kubernetes集群其他部分无缝集成。 + +### 简化运维 + +Sealos自动配置和管理LVScare,大大简化了Kubernetes集群的运维工作。 + +## LVScare使用示例 + +请注意,所有的real server需要在同一主机上监听,并设置为`route`模式。然后,你可以在前台运行LVScare。例如: + +```bash +docker run -p 8081:80 --name echoserver1 -d cilium/echoserver +docker run -p 8082:80 --name echoserver2 -d cilium/echoserver +docker run -p 8083:80 --name echoserver3 -d cilium/echoserver +lvscare care --vs 169.254.0.1:80 --rs 127.0.0.1:8081 --rs 127.0.0.1:8082 --rs 127.0.0.1:8083 --logger DEBG --health-schem http --health-path / +``` + +## 清理 + +最后,你可以使用以下命令进行清理: + +```bash +lvscare care --vs 169.254.0.1:80 --logger DEBG -C +``` + +结论:LVScare是一款基于IPVS的轻量级负载均衡和健康检查工具,它能与Sealos无缝集成,极大地提高了Kubernetes集群的可用性和性能。试一试,看看LVScare如何帮助你更好地管理你的Kubernetes集群! diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/_category_.json b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/_category_.json new file mode 100644 index 00000000000..a788e786e6c --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/_category_.json @@ -0,0 +1,3 @@ +{ + "position" : 2 +} diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/cert.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/cert.md new file mode 100644 index 00000000000..9de055627c8 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/cert.md @@ -0,0 +1,31 @@ +--- +sidebar_position: 1 +--- + + +# cert 证书管理 + +`cert` 命令用于生成 Kubernetes 集群所需的证书文件。在 Kubernetes 集群中,证书用于确保组件之间的通信安全,例如 API server、kubelet 和 etcd 等。证书通过 TLS(Transport Layer Security)协议实现加密,以确保数据在传输过程中的保密性和完整性。 + +`sealctl cert` 命令可以根据提供的参数自动生成证书。这些参数包括节点 IP、节点名称、服务 CIDR、DNS 域以及可选的其他备用名称。通过生成并配置这些证书,您可以确保 Kubernetes 集群的安全通信。 + + + +``` +cert 命令用于生成 Kubernetes 证书。 + +参数: + --alt-names 备用名称,例如 sealos.io 或 10.103.97.2。可以包含多个备用名称。 + --node-name 节点名称,例如 master0。 + --service-cidr 服务网段,例如 10.103.97.2/24。 + --node-ip 节点的 IP 地址,例如 10.103.97.2。 + --dns-domain 集群 DNS 域,默认值为 cluster.local。 + --cert-path Kubernetes 证书文件路径,默认值为 /etc/kubernetes/pki。 + --cert-etcd-path Kubernetes etcd 证书文件路径,默认值为 /etc/kubernetes/pki/etcd。 + +示例: + sealctl cert --alt-names sealos.io --alt-names 10.103.97.2 \ + --node-name master0 --service-cidr 10.103.97.2/24 \ + --node-ip 10.103.97.2 --dns-domain cluster.local + +``` diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/cri.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/cri.md new file mode 100644 index 00000000000..cd36074f7b6 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/cri.md @@ -0,0 +1,48 @@ +--- +sidebar_position: 2 +--- + +# CRI 容器管理 + +`cri` 命令是用于管理和检查 Kubernetes 集群中的容器运行时(Container Runtime Interface,CRI)环境。容器运行时是负责运行容器的底层技术,如 Docker、containerd 或者 CRI-O 等。在 Kubernetes 中,容器运行时用于启动、停止和管理容器,以支持集群中的工作负载。 + +`sealctl cri` 命令提供了一组子命令,使您能够执行与容器运行时相关的各种操作,例如检查运行时是否是 Docker、是否正在运行,列出 Kubernetes 容器,删除容器,拉取镜像,检查镜像是否存在以及获取 CGroup 驱动信息等。 + +通过使用 `sealctl cri` 命令,您可以轻松地管理和检查 Kubernetes 集群中的容器运行时环境,确保其正确配置和正常运行。 + + + +```shell +sealctl cri [flags] +``` + + + +子命令: + +1. `socket`:检测 CRI 套接字。 + +```shell +sealctl cri socket +``` + +2. `cgroup-driver`:获取容器运行时的 cgroup 驱动。 + +```shell +sealctl cri cgroup-driver [--short] +``` + +- `--short`:仅打印结果。 + +全局参数: + +- `--socket-path`:CRI 套接字路径。 +- `--config`:CRI 配置文件。 + +示例: + +```shell +sealctl cri socket +sealctl cri cgroup-driver --short + +``` \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/hostname.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/hostname.md new file mode 100644 index 00000000000..a6d4451d071 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/hostname.md @@ -0,0 +1,20 @@ +--- +sidebar_position: 3 +--- + + +# hostname 获取主机名 + +获取操作系统的主机名: + +```shell +sealctl hostname +``` + +示例: + +```shell +sealctl hostname +``` + +执行此命令将返回操作系统的主机名。无需传递任何参数。 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/hosts.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/hosts.md new file mode 100644 index 00000000000..df7431ec469 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/hosts.md @@ -0,0 +1,59 @@ +--- +sidebar_position: 4 +--- + +# hosts 管理 + +`hosts` 命令是用于管理操作系统的 hosts 文件。hosts 文件是一个用于解析域名到 IP 地址的文件,通常在本地系统中用于覆盖 DNS 解析。通过修改 hosts 文件,您可以为一个特定的域名分配一个自定义的 IP 地址,而不必依赖 DNS 服务器。 + +`sealctl hosts` 提供了以下三个子命令来实现 hosts 文件的管理: + +1. `list`:列出当前 hosts 文件中的所有条目。 +2. `add`:向 hosts 文件中添加一个新的域名与 IP 地址映射。 +3. `delete`:从 hosts 文件中删除一个指定的域名与 IP 地址映射。 + +通过这些子命令,您可以方便地查看、添加和删除 hosts 文件中的映射,从而更好地控制域名到 IP 地址的解析。 + +1. `sealctl hosts list`:列出当前 hosts 文件中的条目。 + + 示例: + + ```shell + sealctl hosts list + ``` + + + +2. `sealctl hosts add`:向 hosts 文件中添加一个新条目。 + + 参数: + + - `--ip`:IP 地址(必填) + - `--domain`:域名(必填) + + 示例: + + ```shell + sealctl hosts add --ip 192.168.1.100 --domain example.com + ``` + +3. `sealctl hosts delete`:从 hosts 文件中删除一个条目。 + + 参数: + + - `--domain`:要删除的域名(必填) + + 示例: + + ```shell + sealctl hosts delete --domain example.com + ``` + +注意:您可以在任何 `hosts` 子命令后面添加 `--path` 参数来指定 hosts 文件的路径。默认路径为 `/etc/hosts`(Linux 系统)。 + +示例: + +```shell +sealctl hosts list --path /custom/path/hosts +``` + diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/ipvs.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/ipvs.md new file mode 100644 index 00000000000..b903d23e648 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/ipvs.md @@ -0,0 +1,72 @@ +--- +sidebar_position: 6 +--- + +# ipvs 管理 + +`ipvs` 命令用于创建和管理本地的 IPVS 负载均衡。IPVS(IP Virtual Server)是 Linux 内核中的一个模块,它允许在内核空间实现高性能的负载均衡。`ipvs` 命令通过管理虚拟服务器和真实服务器的映射关系,实现对服务的负载均衡。 + +`sealctl ipvs` 支持以下功能: + +1. 创建和管理虚拟服务器 (virtual server) 和真实服务器 (real server) 的映射关系。 +2. 提供健康检查功能,定期检查真实服务器的健康状态,并根据需要对其进行上下线操作。 +3. 支持两种代理模式:`route` 和 `link`。 +4. 支持配置代理调度算法(如轮询、加权轮询等)。 +5. 支持一次性创建代理规则(`--run-once` 标志)或持续运行并管理代理规则。 +6. 支持清理功能:通过 `-C` 或 `--clean` 标志,可以清除现有的 IPVS 规则并退出。 + +通过 `sealctl ipvs` 命令,用户可以轻松地在本地创建和管理高性能的负载均衡服务。 + +**用法** + +```shell +sealctl ipvs [flags] +``` + +**选项** + +- `-C`, `--clean`: 清除现有规则,然后退出。 +- `--health-insecure-skip-verify`: 跳过不安全请求的验证(默认为 true)。 +- `--health-path string`: 用于探测的 URL 路径(默认为 "/healthz")。 +- `--health-req-body string`: 健康检查器发送的请求体。 +- `--health-req-headers stringToString`: HTTP 请求头(默认为 [])。 +- `--health-req-method string`: HTTP 请求方法(默认为 "GET")。 +- `--health-schem string`: 探测器的 HTTP 方案(默认为 "https")。 +- `--health-status ints`: 有效状态码。 +- `-h`, `--help`: ipvs 帮助。 +- `-i`, `--iface string`: 要创建的虚拟接口的名称,与 kube-proxy 的行为相同(默认为 "lvscare")。仅在 mode=link 时启用。 +- `--interval durationOrSecond`: 健康检查间隔(默认为 0s)。 +- `--ip ip`: 作为路由网关的目标 IP,与 route 模式一起使用。 +- `--logger string`: 日志级别:DEBG/INFO(默认为 "INFO")。 +- `--masqueradebit int`: IPTables masquerade 位。仅在 mode=link 时启用。 +- `--mode string`: 代理模式:route/link(默认为 "route")。 +- `--rs strings`: 真实服务器地址,例如 192.168.0.2:6443。 +- `--run-once`: 创建代理规则并退出。 +- `--scheduler string`: 代理调度器(默认为 "rr")。 +- `--vs string`: 虚拟服务器地址,例如 169.254.0.1:6443。 + +**全局选项** + +- `--debug`: 启用调试日志。 +- `--show-path`: 启用显示代码路径。 + +**使用文档** + +要使用 `sealctl ipvs` 命令,请按照以下步骤操作: + +1. 为命令提供必要的选项和参数。 +2. 执行命令,将创建或管理本地 IPVS 负载均衡。 + +**示例** + +创建代理规则并退出: + +```shell +sealctl ipvs --vs 169.254.0.1:6443 --rs 192.168.0.2:6443 --run-once +``` + +清除现有 IPVS 规则: + +```shell +sealctl ipvs --clean +``` diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/registry.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/registry.md new file mode 100644 index 00000000000..dbe1b40640e --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/registry.md @@ -0,0 +1,48 @@ +--- +sidebar_position: 5 +--- + +# registry 镜像仓库 + +## Sealos:sealctl registry serve 命令详解与使用指南 + +在构建并管理 Docker 镜像仓库过程中,Sealos 提供了 `sealctl registry serve` 命令以方便用户进行相关操作。本文将详细介绍 `sealctl registry serve` 命令的使用方法和示例。 + +### 基本介绍 + +`sealctl registry serve` 命令的主要作用是启动一个 Docker 分发镜像仓库服务器,支持两种模式:`filesystem` 和 `inmem`。 + +1. **Filesystem 模式**:在此模式下,sealctl 将运行一个针对指定目录的 Docker 分发镜像仓库服务器。该模式下,镜像数据将存储在硬盘上。**该命令还用于sealos做增量镜像同步** + +2. **In-memory 模式**:在此模式下,sealctl 将运行一个内存中的 Docker 分发镜像仓库服务器。该模式下,镜像数据仅保存在内存中,进程退出后数据将丢失。 + +### 命令参数 + +`sealctl registry serve filesystem ` 命令支持以下参数: + +- `--disable-logging`: 禁用日志输出,默认为 false。 +- `--log-level`: 配置日志级别,默认为 'error'。 +- `-p, --port`: 服务器监听的端口,默认为随机未使用的端口。 + +### 使用示例 + +以下是一些 `sealctl registry serve` 命令的使用示例: + +#### 在文件系统中启动镜像仓库服务器 + +```bash +sealctl registry serve filesystem --port=5000 +``` + +以上命令将在端口5000上启动一个文件系统镜像仓库服务器。 + +#### 在内存中启动镜像仓库服务器 + +```bash +sealctl registry serve inmem +``` + +以上命令将启动一个内存镜像仓库服务器。该服务器在进程退出后,存储的数据将丢失。 + +通过 `sealctl registry serve` 命令,用户可以轻松地管理和操作 Docker 镜像仓库。无论是在开发环境,还是在生产环境中,它都是一个强大且易用的工具。 + diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/sealctl.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/sealctl.md new file mode 100644 index 00000000000..8ee151bd6dc --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/sealctl.md @@ -0,0 +1,68 @@ +--- +sidebar_position: 0 +--- + +# Sealctl 使用指南 + +Sealos 提供 sealctl 是使用 Sealos 与 集群节点进行操作的命令行工具。它包括以下几个子命令: + +1. `cert`:管理证书,用于生成、查看和更新TLS证书。 +2. `cri`:管理容器运行时接口(CRI)配置,例如Docker或containerd。 +3. `hostname`:查看或设置系统主机名。 +4. `hosts`:管理系统的hosts文件,用于定义静态主机名到IP地址映射。 +5. `ipvs`:管理IP虚拟服务器(IPVS)规则,用于负载均衡和代理。 +6. `registry`:管理镜像仓库,用于存储容器镜像仓库格式镜像以及镜像仓库管理。 +7. `static_pod`:管理静态Pod,可以创建静态Pod的配置。 +8. `token`:生成和管理访问令牌,用于授权访问Kubernetes集群。 + +通过这些子命令,您可以方便地管理和配置您的Sealos系统,实现对容器、镜像仓库、网络等各个方面的控制。 + + + + +# sealos 依赖命令 + +1. **添加Hosts** + + 在指定 IP 地址的节点上添加一个新的 hosts 记录。参数包括 IP 地址、主机名和域名。使用`sealctl hosts add `命令 + +2. **删除Hosts** + + 删除指定 IP 地址节点上的一个 hosts 记录。参数包括 IP 地址和域名。使用`sealctl hosts delete`命令 + +3. **hostname** + + 获取指定 IP 地址节点的主机名。 使用`sealctl hostname`命令 + +4. **IPVS负载均衡** + + 在指定 IP 地址的节点上配置 IPVS,实现负载均衡。参数包括节点 IP 地址、虚拟 IP 地址和主节点 IP 地址列表。 使用`sealctl ipvs`命令 + +5. **清空IPVS规则** + + 清除指定 IP 地址节点上的 IPVS 配置。参数包括节点 IP 地址和虚拟 IP 地址。 使用`sealctl ipvs`命令 + +6. **静态POD生成** + + 在指定 IP 地址的节点上部署一个静态 Pod(lvscare)。参数包括节点 IP 地址、虚拟 IP 地址、Pod 名称、镜像名称和主节点 IP 地址列表。使用`sealctl static-pod lvscare`命令 + +7. **处理集群交互认证的token** + + 为指定 IP 地址的节点生成一个 token。参数包括节点 IP 地址、配置文件和证书密钥。使用`sealctl token`命令 + +8. **获取节点的cgroup** + + 获取指定 IP 地址节点的cri CGroup 信息。 使用`sealctl cri cgroup`命令 + +9. **获取节点的cri-socket** + + 获取指定 IP 地址节点的 cri Socket 信息。 使用`sealctl cri socket`命令 + +10. **在节点生成https自签名证书** + + 为指定 IP 地址的节点生成证书。参数包括节点 IP 地址、备用名称列表、主机 IP 地址、主机名、服务 CIDR 和 DNS 域名。 使用`sealctl cert` 命令 + +11. **节点启动registry** + +​ 在指定节点启动regsitry,为进行增量镜像同步。使用`sealctl registry serve`命令 + diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/static-pod.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/static-pod.md new file mode 100644 index 00000000000..0b6e8450802 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/static-pod.md @@ -0,0 +1,41 @@ +--- +sidebar_position: 7 +--- + +# static-pod 配置 + +`static-pod` 命令用于生成静态 Pod,这些 Pod 是由 kubelet 直接管理的,而不是通过 API 服务器。静态 Pod 在某些场景下非常有用,比如设置和管理 Kubernetes 集群中的控制平面组件。 + +`sealctl static-pod` 命令提供了一种简便的方法,用于生成用于特定目的的静态 Pod 配置文件。目前,它主要支持生成 `lvscare` 静态 Pod,`lvscare` 是一种用于管理 IPVS 规则的工具。 + +使用 `sealctl static-pod lvscare`,您可以根据指定的参数(如 VIP、主节点地址、镜像名称等)生成 `lvscare` 静态 Pod YAML 文件。然后,该文件可以存储在 kubelet 的静态 Pod 路径下,kubelet 将自动创建和管理相应的 Pod。 + + + +**用法** + +```shell +sealctl static-pod lvscare [flags] +``` + +**选项** + +- `--vip`: 默认 VIP IP(默认为 "10.103.97.2:6443")。 +- `--name`: 生成 lvscare 静态 Pod 名称。 +- `--image`: 生成 lvscare 静态 Pod 镜像(默认为 `sealos.hub:5000/sealos/lvscare:latest`)。 +- `--masters`: 生成 master 地址列表。 +- `--print`: 是否打印 YAML。 + +**示例** + +生成 lvscare 静态 Pod 文件并打印 YAML: + +```shell +sealctl static-pod lvscare --vip 10.103.97.2:6443 --name lvscare --image lvscare:latest --masters 192.168.0.2:6443,192.168.0.3:6443 --print +``` + +如果没有使用 `--print` 选项,将直接生成配置文件到 `/etc/kubernetes/manifests` 并启用静态 Pod: + +```shell +sealctl static-pod lvscare --vip 10.103.97.2:6443 --name lvscare --image lvscare:latest --masters 192.168.0.2:6443,192.168.0.3:6443 +``` diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/tar&&untar.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/tar&&untar.md new file mode 100644 index 00000000000..a37f10ccb64 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/tar&&untar.md @@ -0,0 +1,60 @@ +--- +sidebar_position: 9 +--- + +# tar 与 untar 详解 + +Sealos 提供了 `sealctl tar` 和 `sealctl untar` 命令以便于用户进行文件或文件夹的压缩和解压。本文将详细介绍这两个命令的使用方法。 + +## sealctl tar 命令 + +`sealctl tar` 命令的主要作用是将指定路径的目录压缩成归档文件。注意,这将剥离父目录。 + +**命令参数:** + +- `--clear`:是否在压缩完成后删除源文件,默认为 false。 +- `--compression`:压缩算法,可用选项有 tar/gzip/zstd/disable,默认为 disable。 +- `-o, --output`:归档文件的路径。 + +**基本用法:** + +```bash +sealctl tar [flags] [options] +``` + +## sealctl untar 命令 + +`sealctl untar` 命令的主要作用是在指定路径 `src` 查找匹配 glob 模式的归档文件,并在 `dst` 路径进行解压。 + +**命令参数:** + +- `--clear`:是否在解压完成后删除源文件,默认为 false。 +- `-o, --output`:解压归档文件的路径。 + +**基本用法:** + +```bash +sealctl untar [flags] [options] +``` + +## 使用示例 + +以下是一些 `sealctl tar` 和 `sealctl untar` 命令的使用示例: + +**创建一个压缩文件:** + +```bash +sealctl tar --output=/path/to/archive.tar /path/to/source +``` + +以上命令将 `source` 目录压缩为 `archive.tar` 文件。 + +**解压一个压缩文件:** + +```bash +sealctl untar --output=/path/to/destination /path/to/archive.tar +``` + +以上命令将 `archive.tar` 文件解压到 `destination` 目录。 + +通过 `sealctl tar` 和 `sealctl untar` 命令,用户可以轻松地进行文件或文件夹的压缩和解压操作。这两个命令在文件管理中,尤其是在备份和迁移文件时,都是非常有用的工具。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/token.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/token.md new file mode 100644 index 00000000000..8a9c08571ae --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealctl/token.md @@ -0,0 +1,38 @@ +--- +sidebar_position: 8 +--- + +# token 管理 + +`sealctl token` 命令的主要目的是为了生成一个用于连接主节点(master)和工作节点(node)的 token。在 Kubernetes 集群中,当您想要将一个新的工作节点加入到集群时,通常需要提供一个 token 作为身份验证。这个 token 确保只有拥有正确 token 的工作节点才能加入到集群中。 + +`sealctl token` 命令通过接收配置文件(可选)和证书密钥(可选)作为参数,生成一个用于身份验证的 token。在默认情况下,如果不提供配置文件和证书密钥,命令会使用内置的默认设置来生成 token。 + +总之,`sealctl token` 命令用于生成一个用于身份验证的 token,允许工作节点安全地加入到 Kubernetes 集群中。使用这个命令可以简化节点加入集群的过程,确保集群的安全性。 + + +**用法** + +```shell +sealctl token [config] [certificateKey] +``` + +**参数** + +- `config`: 配置文件(可选)。 +- `certificateKey`: 证书密钥(可选)。 + +**示例** + +使用默认参数生成 token: + +```shell +sealctl token +``` + +使用自定义配置文件和证书密钥生成 token: + +```shell +sealctl token my-config my-certificate-key +``` + diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/_category_.json b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/_category_.json new file mode 100644 index 00000000000..c9cb98244eb --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/_category_.json @@ -0,0 +1,3 @@ +{ + "position" : 1 +} diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/app-cluster-image.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/app-cluster-image.md new file mode 100644 index 00000000000..ec858e07d4c --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/app-cluster-image.md @@ -0,0 +1,41 @@ +--- +sidebar_position: 11 +--- + +# 应用集群镜像使用指南 + +Sealos 提供了一个名为 [cluster-image](https://github.com/labring-actions/cluster-image) 的仓库,该仓库在 GitHub 上用于构建并发布 Kubernetes 集群的应用镜像。这些镜像可以通过提交代码到这个仓库来创建,并可以发布到 `docker.io/labring/` 作为官方的应用镜像。它支持构建 Docker 容器镜像以及应用的集群镜像。 + +## 镜像的类型 + +仓库支持三种类型的镜像构建: + +- **APP集群镜像**:主要是构建应用镜像,使用 GitHub Action,会同时支持 amd64 和 arm64 架构。 +- **配置集群镜像**:主要是构建配置镜像,使用 GitHub Action,没有容器镜像不区分架构,一般是一些脚本相关的配置或者覆盖默认的配置镜像。 +- **Docker镜像**:主要是构建容器镜像,使用 GitHub Action,会同时支持 amd64 和 arm64 架构。 + +## 镜像构建的工作流程 + +你可以直接在 GitHub 仓库中创建 Issue 来触发镜像的构建。这里提供了几个示例可以参考: + +- `/imagebuild_dockerimages helm v3.8.2 Key1=Value1,Key2=Value2` +- `/imagebuild_configs coredns v0.0.1` +- `/imagebuild_apps helm v3.8.2` + +每种类型的镜像构建命令的格式为 `/imagebuild_<类型> <应用名称> <版本> [Key=Value,...]`,其中 `<类型>` 是 `dockerimages`、`configs` 或 `apps`, `<应用名称>` 和 `<版本>` 分别代表应用的名称和版本,`[Key=Value,...]` 是可选的buildArg参数,仅用于 `dockerimages` 类型。 + +## 镜像配置的存放位置 + +你可以在 `applications/<应用名称>/<版本>/` 目录下放置你的配置文件,包括 Dockerfile、Kubefile 和 init.sh 等。init.sh 脚本通常用于下载一些依赖的二进制文件,如 helm、kubectl-minio 等。你可以选择使用 Dockerfile 或 Kubefile 来编写你的镜像构建逻辑。 + +## 镜像构建规则 + +对于每种类型的镜像,构建规则略有不同。通常,你需要在应用的目录下创建不同的子目录并放置不同类型的文件,然后 Sealos 会根据这些文件来构建镜像。具体的规则如下: + +1. `charts` 目录:放置一些集群镜像需要的 Helm chart,Kubernetes 会根据扫描的 chart 获取镜像并构建 + +出 registry 目录放到与 Kubefile 同级的目录。 +2. `manifests` 目录:直接放置一些 Kubernetes yaml 配置,Kubernetes 会扫描 manifests 目录所有的镜像并构建出 registry 目录放到与 Kubefile 同级的目录。 +3. `images/shim` 目录:主要存储一些额外的镜像列表并构建出 registry 目录放到与 Kubefile 同级的目录。 +4. 如果需要模板,在 `etc`、`charts`、`manifests` 放置一些以 `.tmpl` 结尾的文件可以被 `sealos run` 环境变量渲染后去掉 `.tmpl`,比如渲染之前是 `aa.yaml.tmpl`,渲染后为 `aa.yaml`。请注意文件名不要与现有的文件冲突。 +5. `registry` 必须放在与 Kubefile 同级的目录,否则无法拷贝到 master0 的私有仓库。制作镜像时也需要注意这一点。不要把 registry 存放到 chart 里,否则 helm 扫描可能会很慢,可能导致 OOM。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/add.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/add.md new file mode 100644 index 00000000000..f5f6e79bfc9 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/add.md @@ -0,0 +1,60 @@ +--- +sidebar_position: 4 +--- + +# add 集群节点添加 + +`sealos add` 是 Sealos 命令行工具中的一个命令,主要用于向集群中添加节点。本指南将详细介绍其使用方法和选项。 + +**注意要保证控制节点的个数为奇数个以保证etcd可以正常选举** + +## 基本用法 + +### 添加节点 + +要向集群中添加节点,可以使用 `--nodes` 选项: + +```bash +sealos add --nodes x.x.x.x +``` + +在上述命令中,`x.x.x.x` 应替换为你想要添加的节点的 IP 地址。 + +### 添加控制节点 + +要向集群中添加控制节点,可以使用 `--masters` 选项: + +```bash +sealos add --masters x.x.x.x +``` + +### 同时添加控制节点和节点 + +如果你想同时向集群中添加控制节点和节点,可以同时使用 `--masters` 和 `--nodes` 选项: + +```bash +sealos add --masters x.x.x.x --nodes x.x.x.x +sealos add --masters x.x.x.x-x.x.x.y --nodes x.x.x.x-x.x.x.y +``` + +## 选项 + +`sealos add` 命令提供了以下选项: + +- `--cluster='default'`: 要执行加入操作的集群的名称。默认为 `default`。 + +- `--masters=''`: 要加入的主节点。 + +- `--nodes=''`: 要加入的节点。 + +每个选项后都可以跟随一个参数。 + +## 使用示例 + +以下是一个使用示例,该示例向集群中添加了 IP 地址为 `192.168.0.2` 的节点: + +```bash +sealos add --nodes 192.168.0.2 +``` + +以上就是 `sealos add` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/apply.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/apply.md new file mode 100644 index 00000000000..defa546ea78 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/apply.md @@ -0,0 +1,84 @@ +--- +sidebar_position: 1 +--- + +# apply 启动集群 + +`sealos apply` 是 Sealos 命令行工具中的一个重要命令,用于在 Kubernetes 集群中运行集群镜像。本指南将详细介绍其使用方法和选项。 + +## 基本用法 + +`sealos apply` 命令的基本用法如下: + +```shell +$ sealos apply -f Clusterfile +``` + +Clusterfile 内容: + +```yaml +apiVersion: apps.sealos.io/v1beta1 +kind: Cluster +metadata: + name: default +spec: + # 服务器 IP 地址列表和角色 + hosts: + - ips: + - 192.168.0.2:22 + - 192.168.0.3:22 + - 192.168.0.4:22 + roles: + - master + - amd64 + - ips: + - 192.168.0.5:22 + - 192.168.0.6:22 + - 192.168.0.7:22 + roles: + - node + - amd64 + image: + - labring/kubernetes:v1.25.0 + - labring/helm:v3.8.2 + - labring/calico:v3.24.1 + ssh: + passwd: xxx + pk: /root/.ssh/id_rsa + port: 22 + user: root +``` + +这条命令会根据指定的 `Clusterfile` 文件在 Kubernetes 集群中运行集群镜像。 + +## 选项 + +`sealos apply` 命令提供了多种选项,用于定制命令的行为: + +- `-f, --Clusterfile='Clusterfile'`: 指定要应用的集群文件。默认为 `Clusterfile`。 +- `--config-file=[]`: 指定自定义Config文件的路径,用于替换或者修改资源。 +- `--env=[]`: 设置在命令执行过程中要使用的环境变量。 +- `--set=[]`: 在命令行上设置值,一般是替换模板的值。 +- `--values=[]`: 指定要应用到 `Clusterfile` 的values文件,一般是用于模板方式。 + +每个选项后面都可以跟随一个或多个参数。多个参数之间用逗号分隔。 + +例如,你可以使用 `--set` 选项在命令行上设置一些值: + +```shell +sealos apply -f Clusterfile --set key1=value1,key2=value2 +``` + +这条命令会将 `key1` 和 `key2` 的值设置为 `value1` 和 `value2`,然后应用 `Clusterfile`。 + +同样,你也可以使用 `--values` 选项指定一个值文件: + +```shell +sealos apply -f Clusterfile --values values.yaml +``` + +这条命令会根据 `values.yaml` 文件中的值应用 `Clusterfile`。 + +**更多示例请参考[启动镜像](/self-hosting/lifecycle-management/operations/run-cluster/)** + +以上就是 `sealos apply` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/build.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/build.md new file mode 100644 index 00000000000..4cf6b5ca5ae --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/build.md @@ -0,0 +1,69 @@ +--- +sidebar_position: 6 +--- + +# build 构建镜像 + +Sealos 的 `build` 命令用于使用 Sealfiles、Kubefiles、Dockerfiles 或 Containerfiles 中的指令构建 OCI 镜像。这是 Sealos 构建集群镜像的基础命令。 + +如果没有指定任何参数,Sealos 将使用当前工作目录作为构建上下文,并查找指令文件。如果不存在 Sealfile、Kubefile、Dockerfile 或 Containerfile,则构建失败。 + +下面是一些主要的 `build` 选项: + +1. `--all-platforms`:尝试为所有基础镜像平台构建镜像。 +2. `--authfile`:认证文件的路径。 +3. `--build-arg`:向构建器提供的 `argument=value`。 +4. `--build-context`:向构建器提供额外构建上下文的 `argument=value`。 +5. `--creds`:访问 registry 使用的 `[username[:password]]`。 +6. `-D, --disable-compression`:默认不压缩图层。 +7. `--env`:为镜像设置环境变量。 +8. `-f, --file`:Dockerfile 的 `pathname 或 URL`。 +9. `--force-rm`:即使构建不成功,也始终在构建后删除中间容器。 +10. `--format`:构建的镜像的清单和元数据的 `format`。 +11. `--from`:用于替换 Containerfile 中第一条 FROM 指令的值的镜像名称。 +12. `--http-proxy`:传递 HTTP Proxy 环境变量。 +13. `--isolation`:使用的进程隔离 `type`。可以是 'oci' 或 'chroot'。 +14. `--max-pull-procs`:拉取时使用的最大 goroutine 数量。 +15. `--platform`:设置镜像的 OS/ARCH/VARIANT 为提供的值,而不是主机的当前操作系统和架构。 +16. `--pull`:从 registry 拉取镜像,如果新的或存储中不存在,则拉取,如果 false,只有在不存在时才拉取镜像,如果 always,即使命名的镜像存在于存储中,也拉取镜像,如果 never,只使用存储中可用的镜像。 +17. `-q, --quiet`:克制不宣布构建指令和镜像读/写进度。 +18. `--retry`:在执行 push/pull 失败时重试的次数。 +19. `--retry-delay`:在 push/pull 失败时重试的延迟。 +20. `--rm`:在成功构建后删除中间容器。 +21. `--save-image`:保存从特定目录解析的镜像,以 registry 格式存储。 +22. `--sign-by`:使用指定 `FINGERPRINT` 的 GPG 密钥签名镜像。 +23. `-t, --tag`:应用到构建镜像的标签 `name`。 + +24. `--target`:设置要构建的目标构建阶段。 +25. `--timestamp`:将创建的时间戳设置为指定的 epoch 秒,以允许确定性构建,默认为当前时间。 + +这些选项可以灵活地应对多种构建需求,包括针对特定平台的构建、环境变量设置、构建上下文管理、镜像签名等。使用 `--save-image` 选项,Sealos 可以自动识别镜像列表(包括从镜像列表、Helm charts、manifests 中解析出的镜像)并保存为 registry 格式。 + +进程隔离模式 `--isolation` 支持 'oci' 和 'chroot' 两个参数。如果本地支持 OCI,可以选择 'oci' 模式;如果不支持 OCI,应该使用 'chroot' 模式。 + +`--save-image` 是 Sealos 构建命令的一个选项,这个选项的作用是在构建过程中自动查找并保存需要的镜像。在 Sealos 中,构建一个镜像可能涉及到其他依赖镜像。这些依赖镜像可能来自镜像列表、Helm charts 或 集群 manifests。当使用 `--save-image` 选项时,Sealos 将根据构建上下文,自动解析这些依赖并将其保存为 Docker Registry 格式。 + +例如,以下是一个使用 `--save-image` 选项的示例: + +```bash +sealos build -t myapp:v1.0.0 -f Dockerfile . +``` + +在这个示例中,Sealos 将使用当前目录作为构建上下文,从 Dockerfile 文件中读取构建指令,并尝试构建出一个标记为 `myapp:v1.0.0` 的镜像。同时,Sealos 将解析 Dockerfile 文件中所有 `FROM` 指令引用的基础镜像,并将这些镜像保存下来。这些镜像将以 Docker Registry 的格式保存,可以被直接推送到 Docker Registry 中。 + +如果你的构建上下文中还包含了 Helm charts 或 集群manifests,Sealos 也会解析这些文件中引用的镜像,并将这些镜像一并保存。 + +总的来说,`--save-image` 选项为 Sealos 的构建过程提供了一种自动处理依赖镜像的方式,大大提高了构建镜像的便捷性和效率。 + +下面有一些详细的示例: + +- [基于镜像清单构建](/self-hosting/lifecycle-management/operations/build-image/build-image-image_list.md) +- [基于部署清单构建](/self-hosting/lifecycle-management/operations/build-image/build-image-manifests.md) +- [基于helm-charts构建](/self-hosting/lifecycle-management/operations/build-image/build-image-helm_charts.md) +- [基于二进制构建](/self-hosting/lifecycle-management/operations/build-image/build-image-binary.md) +- [基于go-template构建](/self-hosting/lifecycle-management/operations/build-image/build-image-go_template.md) +- [基于exec和scp构建](/self-hosting/lifecycle-management/operations/build-image/build-image-scp_exec.md) + +通过 Sealos `build` 命令,可以基于多种指令文件构建 OCI 镜像,为sealos提供所需的镜像。这个过程包括处理 Dockerfile 或其他指令文件中的各种指令,如 `FROM`、`RUN`、`ADD` 等,以及处理镜像层次、镜像标签等。构建过程也包括拉取基础镜像、运行命令、保存结果等步骤。每一个步骤都可以通过上述的选项进行详细的控制和定制,以满足不同的构建需求。 + +以上就是 `sealos build` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/cert.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/cert.md new file mode 100644 index 00000000000..c41a88581f6 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/cert.md @@ -0,0 +1,44 @@ +--- +sidebar_position: 3 +--- + +# cert 更新集群证书 + +`sealos cert` 是 Sealos 命令行工具中的一个命令,主要用于在集群中更新 API 服务器的证书。本指南将详细介绍其使用方法和选项。 + +## 基本用法 + +要在证书中添加域名或 IP,可以使用 `--alt-names` 选项: + +```bash +sealos cert --alt-names sealos.io,10.103.97.2,127.0.0.1,localhost +``` + +在上述命令中,`sealos.io,10.103.97.2,127.0.0.1,localhost` 应替换为你想要添加的域名和 IP 地址。 + +**注意**:在执行此操作之前,你最好先备份旧的证书。 + +执行 `sealos cert` 命令后,会更新集群 API 服务器的证书,你无需手动重启 API 服务器,sealos会自动帮你重启服务。 + +## 选项 + +`sealos cert` 命令提供了以下选项: + +- `--alt-names=''`: 在证书中添加域名或 IP,例如 `sealos.io` 或 `10.103.97.2`。 + +- `-c, --cluster='default'`: 要执行 exec 操作的集群的名称。默认为 `default`。 + +每个选项后都可以跟随一个参数。 + +## 校验证书 + +更新证书后,你可以使用以下命令进行校验: + +```bash +kubectl -n kube-system get cm kubeadm-config -o yaml +openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text +``` + +上述命令将获取 kube-system 命名空间中的 kubeadm-config 配置映射,并显示 apiserver.crt 证书的详细信息。 + +以上就是 `sealos cert` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/commands.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/commands.md new file mode 100644 index 00000000000..cff45b9b383 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/commands.md @@ -0,0 +1,56 @@ +--- +sidebar_position: 0 +--- + +# Sealos 命令说明 + +## 集群管理命令 + +- `apply`:使用 Clusterfile 在 Kubernetes 集群内运行集群镜像。 +- `cert`:更新 Kubernetes API 服务器的证书。 +- `run`:轻松运行云原生应用。 +- `reset`:重置集群中的所有内容。 +- `status`:查看 Sealos集群 的状态。 + +## 节点管理命令 + +- `add`:将节点添加到集群中。 +- `delete`:从集群中删除节点。 + +## 远程操作命令 + +- `exec`:在指定节点上执行 shell 命令或脚本。 +- `scp`:将文件复制到指定节点的远程位置。 + +## 实验性命令 + +- `registry`:与镜像仓库相关的命令。 + +## 容器和镜像命令 + +- `build`:使用 Sealfile 或 Kubefile 中的指令构建镜像。 +- `create`:创建集群,但不运行 CMD,用于检查镜像。 +- `inspect`:检查容器或镜像的配置。 +- `images`:列出本地存储中的镜像。 +- `load`:从文件中加载镜像。 +- `login`:登录到容器仓库。 +- `logout`:登出容器仓库。 +- `manifest`:操作清单列表和镜像索引。 +- `merge`:合并多个镜像为一个。 +- `pull`:从指定位置拉取镜像。 +- `push`:将镜像推送到指定的目标。 +- `rmi`:从本地存储中删除一个或多个镜像。 +- `save`:将镜像保存到存档文件中。 +- `tag`:为本地镜像添加一个附加名称。 + +## 其他命令 + +- `completion`:为指定的 shell 生成自动补全脚本。 +- `docs`:生成 API 参考。 +- `env`:打印 Sealos 使用的所有环境信息。 +- `gen`:生成具有所有默认设置的 Clusterfile。 +- `version`:打印版本信息。 + +Sealos 的 `--debug` 参数是一个全局参数,用于开启调试模式,以便在出现问题时能更详细地了解系统的运行情况。 + +有关安装说明,请参见[下载 Sealos 命令行工具](/self-hosting/lifecycle-management/quick-start/install-cli.md); 如需安装 Kubernetes 集群,请参见[安装 Kubernetes 集群](/self-hosting/lifecycle-management/quick-start/deploy-kubernetes.md)。 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/create.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/create.md new file mode 100644 index 00000000000..03cf8cf9d07 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/create.md @@ -0,0 +1,43 @@ +--- +sidebar_position: 6 +--- + +# create 创建工作目录 + +`sealos create` 是 Sealos 命令行工具中的一个命令,主要用于在不执行 CMD 的情况下创建集群工作目录,以便审查镜像。本指南将详细介绍其使用方法和选项。 + +## 基本用法 + +`sealos create` 命令用于创建集群工作目录,但不实际运行,主要用于调试或测试,它可以输出集群镜像的地址,你可以校验集群镜像内容是否与预期一致。 + +```bash +sealos create docker.io/labring/kubernetes:v1.24.0 +``` + +在上述命令中,`clustername` 代表你要创建的集群的名称。 + +## 选项 + +`sealos create` 命令提供了以下选项: + +- `-c, --cluster='default'`: 要创建但不实际运行的集群的名称。默认为 `default`。 + +- `--platform='linux/arm64/v8'`: 将镜像的操作系统/架构/版本设置为提供的值,而不是主机的当前操作系统和架构(例如 `linux/arm`)。 + +- `--short=false`: 如果为真,只打印挂载路径。 + +- `-e, --env=[]`: 指定渲染模板文件时使用的环境变量。 + +每个选项后都可以跟随一个参数。 + +## 示例 + +例如,你可以使用以下命令创建一个名为 `mycluster` 的集群,但不实际运行它: + +```bash +sealos create -e registryPort=8443 docker.io/labring/kubernetes:v1.24.0 +``` + +此命令将创建一个镜像名称为 `docker.io/labring/kubernetes:v1.24.0` 的集群工作目录,并输出集群镜像的地址。`-e registryPort=8443` 选项指定了在渲染模板文件时使用的环境变量,其中 `registryPort` 被设置为 `8443`。请注意,这个示例中集群并没有被实际运行。 + +以上就是 `sealos create` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/delete.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/delete.md new file mode 100644 index 00000000000..6072f79d58a --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/delete.md @@ -0,0 +1,68 @@ +--- +sidebar_position: 4 +--- + +# delete 集群节点删除 + +`sealos delete` 是 Sealos 命令行工具中的一个命令,主要用于从集群中移除节点。本指南将详细介绍其使用方法和选项。 + +**注意要保证控制节点的个数为奇数个以保证etcd可以正常选举** + +## 基本用法 + +### 删除节点 + +要从集群中删除节点,可以使用 `--nodes` 选项: + +```bash +sealos delete --nodes x.x.x.x +``` + +在上述命令中,`x.x.x.x` 应替换为你想要删除的节点的 IP 地址。如果不小心删除了错误的节点,可以使用 `sealos add` 命令恢复它: + +```bash +sealos add --nodes x.x.x.x +``` + +### 删除控制节点 + +要从集群中删除控制节点,可以使用 `--masters` 选项: + +```bash +sealos delete --masters x.x.x.x +``` + +请注意,如果指定了 `--masters` 参数,sealos 将删除你的控制节点。 + +### 删除控制节点和节点 + +如果你想同时删除控制节点和节点,可以同时使用 `--masters` 和 `--nodes` 选项: + +```bash +sealos delete --masters x.x.x.x --nodes x.x.x.x +sealos delete --masters x.x.x.x-x.x.x.y --nodes x.x.x.x-x.x.x.y +``` + +## 选项 + +`sealos delete` 命令提供了以下选项: + +- `--cluster='default'`: 执行删除操作应用的集群的名称。默认为 `default`。 + +- `--force=false`: 可以输入一个 `--force` 标志以强制删除节点。 + +- `--masters=''`: 要移除的控制节点。 + +- `--nodes=''`: 要移除的节点。 + +每个选项后都可以跟随一个参数。 + +## 使用示例 + +以下是一个使用示例,该示例删除了 IP 地址为 `192.168.0.2` 的节点: + +```bash +sealos delete --nodes 192.168.0.2 +``` + +以上就是 `sealos delete` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/env.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/env.md new file mode 100644 index 00000000000..89ea851ea94 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/env.md @@ -0,0 +1,39 @@ +--- +sidebar_position: 7 +--- + +# env 环境变量 + +`sealos env` 是 Sealos 命令行工具中的一个命令,用于展示目前sealos支持的环境变量以及当前的环境变量值。 + +## 基本用法 + +### 查看环境变量 + +要查看环境变量,可以使用 `sealos env` 命令: + +```bash +sealos env +``` + +### 查看环境变量以及说明 + +要查看环境变量以及说明,可以使用 `sealos env -v` 命令: + +```bash +sealos env -v +``` + + +## 如何设置环境变量 + +```shell +BUILDAH_LOG_LEVEL=debug sealos images +``` + +```shell +SEALOS_REGISTRY_SYNC_EXPERIMENTAL=true sealos build -t xxx . +``` + + +以上就是 `sealos env` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/exec.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/exec.md new file mode 100644 index 00000000000..7b0f955021f --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/exec.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 5 +--- + +# exec 执行命令 + +`sealos exec` 是 Sealos 命令行工具中的一个命令,用于在指定的集群节点上执行 Shell 命令或脚本。本指南将详细介绍其使用方法和选项。 + +## 基本用法 + +基本的 `sealos exec` 命令格式如下: + +```bash +sealos exec "shell command or script" +``` + +在上述命令中,`shell command or script` 是你要在集群节点上执行的 Shell 命令或脚本。 + +## 选项 + +`sealos exec` 命令提供了以下选项: + +- `-c, --cluster='default'`: 要在其上执行命令的集群的名称。默认为 `default`。 + +- `--ips=[]`: 在具有指定 IP 地址的节点上运行命令。 + +- `-r, --roles='':`: 在具有指定角色的节点上运行命令。目前支持 master,node,registry + +每个选项后都可以跟随一个或多个参数。 + +## 示例 + +例如,你可以使用以下命令在默认集群的所有节点上查看 `/etc/hosts` 文件的内容: + +```bash +sealos exec "cat /etc/hosts" +``` + +如果你想在名为 `my-cluster` 的集群的 `master` 和 `node` 角色的节点上查看 `/etc/hosts` 文件的内容,可以使用以下命令: + +```bash +sealos exec -c my-cluster -r master,node "cat /etc/hosts" +``` + +如果你只想在 IP 地址为 `172.16.1.38` 的节点上查看 `/etc/hosts` 文件的内容,可以使用以下命令: + +```bash +sealos exec -c my-cluster --ips 172.16.1.38 "cat /etc/hosts" +``` + +以上就是 `sealos exec` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/gen.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/gen.md new file mode 100644 index 00000000000..2df2301ef04 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/gen.md @@ -0,0 +1,49 @@ +--- +sidebar_position: 3 +--- + +# gen 生成集群配置 + +Sealos 的 `gen` 命令是用于生成 Kubernetes 集群的配置文件(Clusterfile),这个配置文件可以在之后通过 `sealos apply` 命令来应用。`gen` 命令可以帮助用户快速生成一个基本的配置文件,用户可以在此基础上根据自己的需求进行修改和调整。 + +下面是 `sealos gen` 命令的基本使用方法和一些常见的示例: + +1. 生成一个默认配置的单节点集群: + + ```bash + sealos gen labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 + ``` + +注意:labring/helm 应当在 labring/calico 之前。 + +2. 生成一个包含多个镜像、指定了主节点和工作节点的集群: + + ```bash + sealos gen labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \ + --masters 192.168.0.2,192.168.0.3,192.168.0.4 \ + --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --passwd 'xxx' + ``` + +注意:labring/helm 应当在 labring/calico 之前。 + +3. 指定 SSH 端口,对于所有服务器使用相同的 SSH 端口: + + ```bash + sealos gen labring/kubernetes:v1.24.0 --masters 192.168.0.2,192.168.0.3,192.168.0.4 \ + --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --port 24 --passwd 'xxx' + ``` + + 对于使用不同 SSH 端口的服务器: + + ```bash + sealos gen labring/kubernetes:v1.24.0 --masters 192.168.0.2,192.168.0.3:23,192.168.0.4:24 \ + --nodes 192.168.0.5:25,192.168.0.6:25,192.168.0.7:27 --passwd 'xxx' + ``` + +在生成了 Clusterfile 之后,用户可以根据自己的需求来修改这个文件。添加或修改环境变量;修改集群cidr配置。完成修改后,用户就可以通过 `sealos apply` 命令来根据这个配置文件来创建或更新集群了。 + +示例说明: + +- [自定义配置安装](/self-hosting/lifecycle-management/operations/run-cluster/gen-apply-cluster.md) + +以上就是 `sealos gen` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/images.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/images.md new file mode 100644 index 00000000000..ad080890832 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/images.md @@ -0,0 +1,65 @@ +--- +sidebar_position: 6 +--- + +# image 镜像列表 + +Sealos 的 `images` 命令主要用于查看本地存储的镜像。用户可以通过它来查看本地所有的镜像,或者筛选查看特定的镜像。该命令支持多种参数,可以帮助用户更方便的查看和管理镜像。 + +## 基本用法 + +基本的 `sealos images` 命令将显示所有非中间阶段的本地镜像,例如: + +```bash +sealos images +``` + +这将显示本地存储的所有最终阶段镜像。 + +## 示例 + +以下是 `sealos images` 命令的一些常见示例: + +1. 显示所有镜像,包括构建的中间镜像: + + ```bash + sealos images --all + ``` + +2. 显示特定镜像: + + ```bash + sealos images [imageName] + ``` + +3. 以指定的 Go 模板格式显示镜像: + + ```bash + sealos images --format '{{.ID}} {{.Name}} {{.Size}} {{.CreatedAtRaw}}' + ``` + +## 参数 + +以下是 `sealos images` 命令的一些常用参数: + +- `-a, --all`:显示所有镜像,包括构建过程中的中间镜像。 + +- `--digests`:显示镜像的摘要。 + +- `-f, --filter`:根据提供的条件过滤输出结果。 + +- `--format`:使用 Go 模板对镜像进行美化打印。 + +- `--history`:显示镜像的命名历史。 + +- `--json`:以 JSON 格式输出。 + +- `--no-trunc`:不截断输出。 + +- `-n, --noheading`:不打印列标题。 + +- `-q, --quiet`:只显示镜像 ID。 + +通过组合使用这些参数,用户可以轻松地获取和管理本地存储的镜像。例如,使用 `--all` 参数可以查看所有镜像,包括中间镜像;使用 `--filter` 参数可以根据特定条件过滤镜像;使用 `--json` 参数可以以 JSON 格式输出镜像信息,方便进行程序化处理等。 + +以上就是 `sealos images` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/inspect.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/inspect.md new file mode 100644 index 00000000000..bed4b134332 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/inspect.md @@ -0,0 +1,79 @@ +--- +sidebar_position: 6 +--- + +# inspect 详细信息 + +Sealos 的 `inspect` 命令主要用于查看构建容器或已构建镜像的配置信息。该命令支持查看镜像或容器的详细信息,包括其元数据、环境变量、启动命令等。 + +## 基本用法 + +使用 `sealos inspect` 命令查看指定容器或镜像的配置信息。例如,查看指定容器的配置: + +```bash +sealos inspect containerID +``` + +或者查看指定镜像的配置: + +```bash +sealos inspect --type image imageWithTag +``` + +## 示例 + +以下是 `sealos inspect` 命令的一些常见示例: + +1. 查看容器配置: + + ```bash + sealos inspect containerID + ``` + +2. 查看镜像配置: + + ```bash + sealos inspect --type image imageWithTag + ``` + +3. 查看镜像ID的配置信息: + + ```bash + sealos inspect --type image @imageID # 或直接输入imageID, '@' 是可选的 + ``` + +4. 查看远程镜像仓库的配置信息: + + ```bash + sealos inspect --type image docker://alpine:latest + ``` + +5. 查看本地OCI归档文件中镜像的配置信息: + + ```bash + sealos inspect --type image oci-archive:/abs/path/of/oci/tarfile.tar + ``` + +6. 查看本地Docker归档文件中镜像的配置信息: + + ```bash + sealos inspect --type image docker-archive:/abs/path/of/docker/tarfile.tar + ``` + +7. 使用 Go 模板格式显示镜像环境变量: + + ```bash + sealos inspect --format '{{.OCIv1.Config.Env}}' alpine + ``` + +## 参数 + +以下是 `sealos inspect` 命令的一些常用参数: + +- `-f, --format`:使用 Go 模板格式显示输出结果。**模板结构代码[InspectOutput](https://github.com/labring/sealos/blob/f8a17787822714c5fdf21f2a75cc86fadb88adfa/pkg/buildah/inspect.go#L189)** + +- `-t, --type`:指定查看的类型,可以是容器(`container`)或镜像(`image`)。 + +根据你的需要,你可以结合使用这些参数,以获取特定的配置信息。例如,使用 `-t` 参数可以指定你想要查看的是容器的配置信息还是镜像的配置信息;使用 `-f` 参数,可以定义特定的输出格式,方便对输出结果进行处理或解析。 + +以上就是 `sealos inspect` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/load.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/load.md new file mode 100644 index 00000000000..d85772714ac --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/load.md @@ -0,0 +1,25 @@ +--- +sidebar_position: 6 +--- + +# load 加载镜像 + +`sealos load` 是一个用来从存档文件中加载镜像的命令。这对于需要从已有的存档文件中导入镜像非常有用,尤其是在没有网络连接的环境中。 + +## 用法: + +`sealos load [flags] [options]` + +## 参数: + +以下是 `sealos load` 命令的参数: + +- `-i, --input=''`: 从 tar 存档文件中加载镜像。 + +## 示例: + +- 从一个存档文件中加载镜像:`sealos load -i myimage.tar` + +注意,在使用 `sealos load` 命令时,你需要确保指定的存档文件存在,并且格式正确。如果你在导入镜像时遇到问题,你可能需要检查你的存档文件,以确保它们没有被损坏或格式化错误。 + +以上就是 `sealos load` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/login.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/login.md new file mode 100644 index 00000000000..cec64c82b0d --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/login.md @@ -0,0 +1,39 @@ +--- +sidebar_position: 6 +--- + +# login 登录仓库 + +`sealos login` 命令用于在指定服务器上登录容器注册表。登录注册表后,你可以拉取、推送镜像。 + +## 用法: + +`sealos login [flags] [options] registryName` + +## 参数: + +以下是 `sealos login` 命令的参数: + +- `--authfile=''`: 身份验证文件的路径。可以使用环境变量 REGISTRY_AUTH_FILE 来覆盖。 + +- `--cert-dir=''`: 使用指定路径的证书来访问镜像仓库。 + +- `--get-login=true`: 返回注册表的当前登录用户。 + +- `-k, --kubeconfig=''`: 使用 kubeconfig 登录到 sealos 镜像仓库 hub.sealos.io。 + +- `-p, --password=''`: 注册表的密码。 + +- `--password-stdin=false`: 从标准输入获取密码。 + +- `-u, --username=''`: 注册表的用户名。 + +- `-v, --verbose=false`: 将更详细的信息写入标准输出。 + +## 示例: + +- 登录到 quay.io 注册表:`sealos login -u myusername -p mypassword quay.io ` + +注意,在使用 `sealos login` 命令时,你需要确保提供了正确的用户名和密码,否则登录过程可能会失败。如果你在登录过程中遇到问题,你可能需要检查你的用户名和密码,以确保它们没有输入错误或被遗忘。 + +以上就是 `sealos login` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/logout.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/logout.md new file mode 100644 index 00000000000..843b157a1ba --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/logout.md @@ -0,0 +1,26 @@ +--- +sidebar_position: 6 +--- + +# logout 登出仓库 + +`sealos logout` 命令用于在指定服务器上移除本地缓存的镜像仓库的账号和密码。 + +## 用法: + +`sealos logout [flags] [options] registryName` + +## 参数: + +以下是 `sealos logout` 命令的参数: + +- `--authfile=''`: 身份验证文件的路径。可以使用环境变量 REGISTRY_AUTH_FILE 来覆盖。 + +- `-a, --all=false`: 删除所有的认证信息。 + + +## 示例: + +- 登出到 quay.io 镜像仓库:`sealos logout quay.io ` + +以上就是 `sealos logout` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/manifest.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/manifest.md new file mode 100644 index 00000000000..52d7809bc1b --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/manifest.md @@ -0,0 +1,20 @@ +--- +sidebar_position: 6 +--- + +# manifest 镜像清单 + +Sealos 的 `manifest` 命令用于创建、修改和推送 manifest 列表和镜像索引。这些功能主要用于处理镜像的多架构支持。在 Docker 和 OCI 镜像规范中,manifest 列表(也被称为 "fat manifest")或镜像索引允许一个镜像标签(如 `myimage:latest`)在多种硬件架构(如 amd64, arm64, ppc64le 等)上都能使用。 + +以下是一些主要的 `manifest` 子命令: + +1. `create`:创建新的 manifest 列表或镜像索引。例如:`sealos manifest create localhost/list` +2. `add`:将镜像添加到 manifest 列表或镜像索引中。例如:`sealos manifest add localhost/list localhost/image` +3. `annotate`:在 manifest 列表或镜像索引的条目中添加或更新信息。例如:`sealos manifest annotate --annotation A=B localhost/list localhost/image` +4. `inspect`:显示 manifest 列表或镜像索引的内容。例如:`sealos manifest inspect localhost/list` +5. `push`:将 manifest 列表或镜像索引推送到 registry。例如:`sealos manifest push localhost/list transport:destination` +6. `remove` 和 `rm`:从 manifest 列表或镜像索引中移除条目,或者完全删除 manifest 列表或镜像索引。例如:`sealos manifest remove localhost/list sha256:entryManifestDigest` 或 `sealos manifest rm localhost/list` + +通过 `sealos manifest` 命令,可以灵活地管理 manifest 列表或镜像索引,为多架构的 Docker 或 OCI 镜像提供支持。用户可以根据自己的需求,创建自定义的 manifest 列表,方便在不同的硬件架构上部署和运行 Docker 镜像。 + +用户如果想通过manifest命令构建多架构镜像,可以参考文档[构建支持多架构的集群镜像](/self-hosting/lifecycle-management/operations/build-image/build-multi-arch-image.md) diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/merge.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/merge.md new file mode 100644 index 00000000000..e6f01f2dfc8 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/merge.md @@ -0,0 +1,21 @@ +--- +sidebar_position: 6 +--- + +# merge 合并镜像 + +Sealos 的 `merge` 命令的主要作用是将多个镜像合并为一个。它通过读取各个输入镜像的 Dockerfile,将其中的命令和层次结构合并到一个新的镜像中。这个命令的运行逻辑很像 `build` 命令,许多参数也是相同的。 + +这个功能在多个镜像有共享层的情况下非常有用,因为它可以减少镜像的大小,节省存储空间。同时,由于合并后的镜像包含了多个镜像的全部功能,所以它可以帮助简化应用部署。 + +以下是 `sealos merge` 的基本使用示例: + +```bash +sealos merge -t new:0.1.0 kubernetes:v1.19.9 mysql:5.7.0 redis:6.0.0 +``` + +在这个示例中,`kubernetes:v1.19.9`、`mysql:5.7.0` 和 `redis:6.0.0` 这三个镜像被合并为一个新的镜像 `new:0.1.0`。 + +`sealos merge` 命令提供了丰富的选项来定制合并过程,例如 `--all-platforms` 用于尝试为所有基础镜像平台构建镜像,`--build-arg` 用于向构建器提供参数,`--no-cache` 用于禁用现有的缓存镜像,等等。 + +请注意,`sealos merge` 命令会根据各个输入镜像的 Dockerfile 来构建新的镜像,所以如果输入镜像的 Dockerfile 不兼容,或者有任何构建错误,那么这个命令可能会失败。在使用 `sealos merge` 命令时,请确保你了解每个输入镜像的 Dockerfile,并根据需要进行调整。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/pull.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/pull.md new file mode 100644 index 00000000000..6f52bed1a00 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/pull.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 6 +--- + +# pull 拉取镜像 + +`sealos pull` 是一个非常有用的命令,它可以从容器镜像仓库下载镜像并将其存储在本地。用户可以通过镜像的标签(tag)或摘要(digest)来获取镜像。如果没有指定标签,那么会默认下载带有 'latest' 标签(如果存在)的镜像。 + +通过使用这个命令,用户可以方便地从远程仓库下载所需的镜像,极大地提高了工作效率。 + +## 用法: + +`sealos pull [flags] [options] imageName` + +## 参数: + +以下是 `sealos pull` 命令的参数: + +- `-a, --all-tags=false`: 下载仓库中所有带有标签的镜像。 + +- `--authfile=''`: 认证文件的路径。可以使用环境变量 REGISTRY_AUTH_FILE 进行覆盖。 + +- `--cert-dir=''`: 用于访问镜像仓库的证书的指定路径。 + +- `--creds=''`: 使用 `[username[:password]]` 访问镜像仓库。 + +- `--decryption-key=[]`: 解密镜像所需要的密钥。 + +- `--platform=[linux/arm64/v8]`: 选择镜像时,优先使用指定的 OS/ARCH,而不是当前操作系统和架构。 + +- `--policy='missing'`: 设置策略,可选的值包括 'missing', 'always', 'never'。 + +- `-q, --quiet=false`: 在拉取镜像时,不输出进度信息。 + +- `--remove-signatures=false`: 在拉取镜像时,不复制签名。 + +- `--retry=3`: 在拉取失败时的重试次数。 + +- `--retry-delay=2s`: 拉取失败时,重试之间的延迟。 + +## 示例: + +- 拉取一个镜像:`sealos pull my-image:latest` + +- 从 Docker 守护进程拉取一个镜像:`sealos pull docker-daemon:my-image:tag` + +- 从特定的仓库拉取一个镜像:`sealos pull myregistry/myrepository/my-image:tag` + +- 拉取多个镜像:`sealos pull imageID1 imageID2 imageID3` + +以上就是 `sealos push` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/push.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/push.md new file mode 100644 index 00000000000..9f5241bfd1d --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/push.md @@ -0,0 +1,107 @@ +--- +sidebar_position: 6 +--- + +# push 上传镜像 + +`sealos push` 是 Sealos 命令行工具中的一个命令,用于将镜像推送到指定的位置。这个命令在你需要将本地 Docker 镜像推送到远程镜像仓库的时候特别有用。本指南将详细介绍其使用方法。 + +## 基本用法 + +基本的 `sealos push` 命令格式如下: + +```bash +sealos push IMAGE_ID DESTINATION +``` + +在上述命令中,`IMAGE_ID` 是你想要推送的镜像的 ID,而 `DESTINATION` 是你想要推送到的位置。 `DESTINATION` 使用 "transport:details" 格式,如果未指定,将复用源 IMAGE 作为 DESTINATION。 + +在 Sealos 中,传输方式定义了源镜像和目标镜像在复制过程中的格式和位置。以下是 Sealos 支持的各种传输方式: + +1. `containers-storage`: 此传输方式用于存储和管理在本地运行的容器。例如,使用 Podman 或 CRI-O 创建的容器的镜像。 + +2. `dir`: 这种传输方式将镜像存储在本地文件系统的一个目录中,该目录结构符合 OCI 布局。 + +3. `docker`: 这种传输方式用于与 Docker 注册表进行交互,如 Docker Hub 或任何其他兼容的私有注册表。 + +4. `docker-archive`: 此传输方式将镜像存储为一个本地的 Docker tar 文件(`.tar`),这是 Docker 的原生格式。 + +5. `docker-daemon`: 这种传输方式用于与本地 Docker 守护程序交互,可以从 Docker 守护程序中提取镜像,或者将镜像推送到 Docker 守护程序。 + +6. `oci`: 该传输方式将镜像存储在一个符合 OCI 布局的目录中,它是一种开放的容器镜像格式。 + +7. `oci-archive`: 这种传输方式将镜像存储为一个本地的 OCI tar 文件(`.tar`)。 + +8. `ostree`: 这种传输方式将镜像存储在 OSTree 存储库中,这是一种支持原子升级和回滚的文件系统。 + +9. `sif`: 这是 Singularity SIF 格式,主要用于高性能计算和数据密集型应用。 + +示例: + +- 将一个镜像推送到 Docker 注册表:`sealos push my-image:latest docker://my-registry.example.com/my-image:latest` + +- 将一个镜像从 Docker 守护程序导出:`sealos push docker-daemon:my-image:latest dir:/path/to/save/` + +- 将一个镜像推送到本地的容器存储:`sealos push my-image:latest containers-storage:my-new-image:latest` + +## 示例 + +例如,你可以使用以下命令将一个镜像推送到 `registry.example.com` 的仓库: + +```bash +sealos push my_image_id docker://registry.example.com/my_repository:my_tag +``` + +## 可选参数 + +- `--all`: 该参数用于推送清单列表引用的所有镜像。 + +- `--authfile`: 该参数用于指定身份验证文件的路径。 可以使用 REGISTRY_AUTH_FILE 环境变量进行覆盖。 + +- `--cert-dir`: 该参数用于指定访问注册表所需的证书的路径。 + +- `--compression-format`: 该参数用于指定要使用的压缩格式。 + +- `--compression-level`: 该参数用于指定要使用的压缩级别。 + +- `--cr-option` 参数是用于控制是否将镜像的自定义资源(Custom Resource,简称 CR)推送到目标镜像仓库的。 + + 具体来说,这个参数的可选值包括: + + - "yes": 将会把镜像以及其关联的 CR 都推送到目标镜像仓库。 + + - "no": 仅推送镜像,而不推送任何 CR。 + + - "only": 仅推送 CR,不推送镜像本身。 + + - "auto": 根据镜像和 CR 的实际状态自动决定是否推送。例如,如果 CR 有更改或者不存在于目标仓库,就会被推送。 + + 请注意,这个参数主要在处理包含自定义资源(如 Kubernetes CRD 对象)的镜像时使用,它能够让你更加灵活地控制镜像和 CR 的推送过程。 + +- `--creds`: 该参数用于访问注册表,使用 `[username[:password]]` 形式。 + +- `--digestfile`: 该参数在复制图像后,将结果图像的摘要写入文件。 + +- `-D`, `--disable-compression`: 该参数用于不压缩层。 + +- `--encrypt-layer`: 该参数用于指定要加密的层,0 索引层索引支持负索引(例如,0 是第一层,-1 是最后一层)。 如果未定义,则在指定 encryption-key 标志时将加密所有层。 + +- `--encryption-key`: 该参数用于指定加密图像所需的密钥,与加密协议一起使用(例如,jwe:/path/to/key.pem)。 + +- `-f`, `--format`: 该参数用于指定目标中要使用的清单类型(oci, v2s1, 或 v2s2)(默认是源的清单类型,带回退)。 + +- `-q`, `--quiet`: 该参数用于在推送图像时不输出进度信息。 + +- `--remove-signatures`: 该参数用于在推送图像时不复制签名。 + +- `--retry + +`: 该参数用于指定在推送/拉取失败时的重试次数。 + +- `--retry-delay`: 该参数用于指定在推送/拉取失败时重试之间的延迟。 + +- `--rm`: 该参数用于在推送成功后删除清单列表。 + +- `--sign-by`: 该参数用于使用指定的 `FINGERPRINT` 的 GPG 密钥签名图像。 + +以上就是 `sealos push` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/registry.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/registry.md new file mode 100644 index 00000000000..746b32a8f87 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/registry.md @@ -0,0 +1,232 @@ +--- +sidebar_position: 8 +--- + +# registry 镜像仓库命令 + +## Sealos:sealos registry save 命令详解与使用指南 + +`registry save` 命令用于将远程的 Docker 镜像拉取到本地并保存在指定的目录中。这对于在离线或者内网环境中部署容器镜像特别有用。 + +在执行 `registry save` 命令时,将自动获取 `sealos login` 认证信息进行仓库认证。 + +**使用说明** + +1. 使用context自动获取镜像 + + 使用默认方式拉取并保存镜像。这种模式会自动解析 `charts` 目录、`manifests` 目录和 `images` 目录以获取镜像列表。 + + **使用示例** + + ```shell + sealos registry save --registry-dir=/tmp/registry1 my-context + ``` + + +2. 指定镜像列表方式 + + 使用参数传入镜像列表 + + **使用示例** + + ```shell + sealos registry save --registry-dir=/tmp/registry2 --images=docker.io/library/busybox:latest + ``` + +**选项** + +以下选项适用于 `save` 命令及其子命令: + +- `--max-procs`: 拉取镜像时使用的最大并行进程数。 +- `--registry-dir`: 保存镜像的本地目录。 +- `--arch`: 镜像的目标架构,例如:`amd64`、`arm64` 等。 +- `--images`: 需要拉取并保存的镜像列表,以逗号分隔。例如:"my-image1:latest,my-image2:v1.0"。 + +## Sealos:sealos registry serve 命令详解与使用指南 + +在管理 Docker 镜像仓库过程中,Sealos 提供了 `sealos registry serve` 命令以方便用户进行相关操作。本文将详细介绍 `sealos registry serve` 命令的使用方法和示例。 + +### 基本介绍 + +`sealos registry serve` 命令的主要作用是启动一个 Docker 分发镜像仓库服务器,支持两种模式:`filesystem` 和 `inmem`。 + +1. **Filesystem 模式**:在此模式下,sealctl 将运行一个针对指定目录的 Docker 分发镜像仓库服务器。该模式下,镜像数据将存储在硬盘上。 + +2. **In-memory 模式**:在此模式下,sealctl 将运行一个内存中的 Docker 分发镜像仓库服务器。该模式下,镜像数据仅保存在内存中,进程退出后数据将丢失。 + +### 命令参数 + +`sealos registry serve filesystem ` 命令支持以下参数: + +- `--disable-logging`: 禁用日志输出,默认为 false。 +- `--log-level`: 配置日志级别,默认为 'error'。 +- `-p, --port`: 服务器监听的端口,默认为随机未使用的端口。 + +### 使用示例 + +以下是一些 `sealos registry serve` 命令的使用示例: + +#### 在文件系统中启动镜像仓库服务器 + +```bash +sealos registry serve filesystem --port=5000 +``` + +以上命令将在端口5000上启动一个文件系统镜像仓库服务器。 + +#### 在内存中启动镜像仓库服务器 + +```bash +sealos registry serve inmem +``` + +以上命令将启动一个内存镜像仓库服务器。该服务器在进程退出后,存储的数据将丢失。 + +通过 `sealctl registry serve` 命令,用户可以轻松地管理和操作 Docker 镜像仓库。无论是在开发环境,还是在生产环境中,它都是一个强大且易用的工具。 + + +## Sealos:sealos registry passwd 命令详解与使用指南 + +在管理 Docker 镜像仓库过程中,Sealos 提供了 `sealos registry passwd` 命令以方便用户对集群registry进行密码修改。它提供了一种简便的方法,帮助用户修改 registry 的密码。 + +### 基本用法 + +使用 `sealos registry passwd` 命令来修改registry的密码。 + +```bash +sealos registry passwd +``` + +### 参数 + +以下是 `sealos registry passwd` 命令的参数: + +- `-c, --cluster-name`:集群名称,默认为'default'。 + +- `-f, --cri-shim-file-path`:镜像 cri shim 文件路径,如果为空将不会更新镜像 cri shim 文件。默认路径为'/etc/image-cri-shim.yaml'。 + +- `-p, --htpasswd-path`:registry 密码文件路径。默认路径为'/etc/registry/registry_htpasswd'。 + +### 使用步骤 + +1. 执行 `sealos registry passwd` 命令,可以根据需要指定参数来进行配置。 + +2. 根据命令提示,输入新的密码。 + +3. 命令执行成功后,registry 的密码将被修改为新的密码。 + +### 演示说明 + +[![asciicast](https://asciinema.org/a/Qu05jah4ZZmjMuFR4vHEKvBsQ.svg)](https://asciinema.org/a/Qu05jah4ZZmjMuFR4vHEKvBsQ) + +**在使用过程中,会让用户选择registry类型** + +- registry: 二进制启动,执行`systemctl restart registry`进行重启镜像仓库。 +- containerd: containerd启动,执行"nerdctl restart sealos-registry"进行重启镜像仓库。 +- docker: docker启动,执行"docker restart sealos-registry"进行重启镜像仓库。 + +### 注意事项 + +**修改 registry 密码后,修改Clusterfile中的registry密码** +修改 registry 密码后,所有使用该 registry 的节点和服务都需要更新配置,以使用新的密码进行身份验证。否则,它们将无法从该 registry 拉取或推送镜像。 + +如果你不确定如何更新节点和服务的配置,建议在修改 registry 密码之前,先查阅相关文档或者寻求专业的技术支持。 + +## Sealos:`sealos registry sync` 命令详解与使用指南 + +Sealos 的 `registry sync` 命令可帮助您在两个 registry 之间同步所有镜像。这不仅可以用于镜像的迁移,还可以备份您的镜像。 + +### 命令基本用法 + +执行 `sealos registry sync` 命令来进行镜像同步: + +```bash +sealos registry sync source dst +``` + +这里的 `source` 表示源 registry 的地址,而 `dst` 是目标 registry 的地址。 + +例如,您想将地址为 127.0.0.1:41669 的 registry 中的所有镜像同步到地址为 sealos.hub:5000 的 registry,您应执行以下命令: + +```bash +sealos registry sync 127.0.0.1:41669 sealos.hub:5000 +``` + +### 认证与权限 + +在执行 `sealos registry sync` 命令之前,请确保您具有访问源 registry 和目标 registry 的权限。可以使用`sealos login`对registry进行认证登录。 + +### 同步过程 + +请注意,镜像同步可能需要一些时间,这取决于镜像的数量和大小,以及网络的速度。在同步过程中,请保持网络的连通性,并确保在同步完成之前不要中断命令的执行。 + +重要的是,`sealos registry sync` 命令支持增量同步,已经存在于目标 registry 的镜像不会重新同步。 + +### 参数选项 + +`sealos registry sync` 命令还提供了一些参数选项,允许您更精细地控制同步过程: + +- `--override-arch ARCH`:使用指定的 `ARCH` 替代当前机器的架构来选择镜像。 + +- `--override-os OS`:使用指定的 `OS` 替代当前操作系统来选择镜像。 + +- `--override-variant VARIANT`:使用指定的 `VARIANT` 替代当前的架构变种来选择镜像。 + +- `-a` 或 `--all`:如果源镜像是一个列表,同步所有镜像。这对异构环境下特别有用,因为默认情况下,只会同步当前架构的镜像。 + +例如,如果您想同步所有架构的镜像,可以添加 `-a` 参数: + +```bash +sealos registry sync -a 127.0.0.1:41669 sealos.hub:5000 +``` + +以上就是 `sealos registry sync` 命令的详细说明与使用指南。希望这些信息能帮助您更好地理解和使用这个命令。如果您在使用过程中遇到任何问题,欢迎随时提问。 + +## Sealos:`sealos registry copy` 命令详解与使用指南 + +Sealos 的 `registry copy` 命令用于将指定镜像从一个 registry 复制到另一个 registry。这能帮助您在不同的 registry 之间进行镜像的迁移或备份。 + +### 命令基本用法 + +使用 `sealos registry copy` 命令来进行镜像的复制: + +```bash +sealos registry copy source-image dst +``` + +这里的 `source-image` 表示源镜像的全名(包括地址和镜像名),`dst` 是目标 registry 的地址。 + +例如,要将名为 `127.0.0.1:41669/my-image:tag` 的镜像复制到地址为 `sealos.hub:5000` 的 registry,您可以执行以下命令: + +```bash +sealos registry copy 127.0.0.1:41669/my-image:tag sealos.hub:5000 +``` + +### 认证与权限 + +在执行 `sealos registry copy` 命令之前,请确保您具有访问源镜像和目标 registry 的权限。可以使用`sealos login`对registry进行认证登录。 + +### 复制过程 + +请注意,镜像复制可能需要一些时间,这取决于镜像的大小,以及网络的速度。在复制过程中,请保持网络的连通性,并确保在复制完成之前不要中断命令的执行。 + +### 参数选项 + +`sealos registry copy` 命令提供了一些参数选项,允许您更精细地控制复制过程: + +- `--override-arch ARCH`:使用指定的 `ARCH` 替代当前机器的架构来选择镜像。 + +- `--override-os OS`:使用指定的 `OS` 替代当前操作系统来选择镜像。 + +- `--override-variant VARIANT`:使用指定的 `VARIANT` 替代当前的架构变种来选择镜像。 + +- `-a` 或 `--all`:如果源镜像是一个列表,复制所有镜像。这对异构环境下特别有用,因为默认情况下,只会复制当前架构的镜像。 + +例如,如果您想复制所有架构的镜像,可以添加 `-a` 参数: + +```bash +sealos registry copy -a 127.0.0.1:41669/my-image:tag sealos.hub:5000 +``` + + +以上就是 `sealos registry` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/reset.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/reset.md new file mode 100644 index 00000000000..611df9bae44 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/reset.md @@ -0,0 +1,61 @@ +--- +sidebar_position: 2 +--- + +# reset 重置集群 + +`sealos reset` 是 Sealos 命令行工具中的一个命令,用于重置整个集群。这个命令在你想要彻底清空集群数据或者重建集群的时候特别有用。本指南将详细介绍其使用方法。 + +## 基本用法 + +基本的 `sealos reset` 命令格式如下: + +```bash +sealos reset --cluster cluster_name +``` + +在上述命令中,`cluster_name` 是你想要重置的集群的名称。 + +## 示例 + +例如,你可以使用以下命令重置名为 `mycluster` 的集群: + +```bash +sealos reset --cluster mycluster +``` + +## 可选参数 + +- `--force`: 该参数用于强制重置集群,即使集群重置操作未能成功完成。 + +```bash +sealos reset --cluster mycluster --force +``` + +- `--masters`: 该参数用于指定要重置的 master 节点。 + +```bash +sealos reset --cluster mycluster --masters master1 +``` + +- `--nodes`: 该参数用于指定要重置的工作节点。 + +```bash +sealos reset --cluster mycluster --nodes node1 node2 +``` + +- `-p`, `--passwd`: 该参数用于提供密码进行身份验证。 + +- `-i`, `--pk`: 该参数用于指定用于公钥认证的身份(私钥)读取的文件。 + +- `--pk-passwd`: 该参数用于解密 PEM 编码私钥的口令。 + +- `--port`: 该参数用于指定要连接的远程主机的端口。 + +- `-u`, `--user`: 该参数用于指定要作为身份验证的用户名。 + +```bash +sealos reset --cluster mycluster --user username --pk /root/.ssh/id_rsa --pk-passwd yourpassword +``` + +以上就是 `sealos reset` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/rmi.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/rmi.md new file mode 100644 index 00000000000..7114566351d --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/rmi.md @@ -0,0 +1,53 @@ +--- +sidebar_position: 6 +--- + +# rmi 删除本地镜像 + +`sealos rmi` 是 Sealos 命令行工具中的一个命令,用于删除本地存储的一个或多个镜像。这个命令可以帮助你清理无用或者过时的镜像,节省存储空间。本指南将详细介绍其使用方法。 + +## 基本用法 + +基本的 `sealos rmi` 命令格式如下: + +```bash +sealos rmi imageID +``` + +在上述命令中,`imageID` 是你想要删除的镜像的 ID。 + +## 示例 + +例如,你可以使用以下命令删除 ID 为 `imageID` 的镜像: + +```bash +sealos rmi imageID +``` + +如果你想要删除多个镜像,只需要在命令行中列出所有的镜像 ID,例如: + +```bash +sealos rmi imageID1 imageID2 imageID3 +``` + +## 可选参数 + +- `-a`, `--all`: 该参数用于删除所有镜像。使用此选项时,命令将不接受任何镜像 ID。 + +```bash +sealos rmi --all +``` + +- `-f`, `--force`: 该参数用于强制删除镜像,以及使用该镜像的任何容器。 + +```bash +sealos rmi --force imageID +``` + +- `-p`, `--prune`: 该参数用于修剪悬挂的镜像(没有标签且没有被任何容器引用的镜像)。 + +```bash +sealos rmi --prune +``` + +以上就是 `sealos rmi` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/run.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/run.md new file mode 100644 index 00000000000..03117703b6d --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/run.md @@ -0,0 +1,84 @@ +--- +sidebar_position: 1 +--- + +# run 运行集群镜像 + +Sealos 的 `run` 命令是一个强大且灵活的工具,它支持集群初始化、应用安装、多镜像执行,单机集群等操作。下面是对于 `sealos run` 命令及其参数的详细解释和一些使用示例。 + +## 命令概览 + +``` +sealos run --masters [arg] --nodes [arg] [Options] +``` + +`` 参数是您想要在集群中运行的 Docker 镜像名称和版本。`--masters` 和 `--nodes` 是您想要运行这个镜像的 master 节点和 node 节点的 IP 列表。 + +### 选项解释 + +- `--cluster='default'`: 要运行操作的集群名称。 + +- `--cmd=[]`: 覆盖镜像中的 CMD 指令。 + +- `--config-file=[]`: 自定义配置文件的路径,用于替换资源。 + +- `-e, --env=[]`: 在命令执行期间设置的环境变量。 + +- `-f, --force=false`: 强制覆盖此集群中的应用。 + +- `--masters=''`: 要运行的 master 节点。 + +- `--nodes=''`: 要运行的 node 节点。 + +- `-p, --passwd=''`: 使用提供的密码进行认证。 + +- `-i, --pk='/root/.ssh/id_rsa'`: 选择从其中读取公钥认证身份的私钥文件。 + +- `--pk-passwd=''`: 解密 PEM 编码的私钥的密码。 + +- `--port=22`: 远程主机的连接端口。 + +- `-t, --transport='oci-archive'`: 从 tar 归档文件加载镜像传输。(可选值: oci-archive, docker-archive) + +- `-u, --user=''`: 认证的用户名。 + +## 示例 + +1. 创建集群到您的裸机服务器,指定 IP 列表: +``` +sealos run labring/kubernetes:v1.24.0 --masters 192.168.0.2,192.168.0.3,192.168.0.4 \ + --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --passwd 'xxx' +``` + +2. 多镜像运行: +``` +sealos run labring/kubernetes:v1.24.0 labring/helm:v3.11.3 calico:v3.24.6 \ + --masters 192.168.64.2,192.168.64.22,192.168.64.20 --nodes 192.168.64.21,192.168.64.19 +``` + +3. 指定服务器的 InfraSSH 端口: +``` +sealos run labring/kubernetes:v1.24.0 --masters 192.168.0.2,192.168.0.3,192.168.0.4 \ + --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --port 24 --passwd 'xxx' +``` + +4. 自定义 VIP Kubernetes 集群: +``` +sealos run -e defaultVIP=10.103.97.2 labring/kubernetes:v1.24.0 --masters 192.168.0.2,192.168.0.3,192.168.0.4 \ + --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --passwd 'xxx' +``` + +5. 创建单节点 Kubernetes 集群: +``` +sealos run labring/kubernetes:v1.24.0 +``` + +6. 使用自定义环境变量创建集群: +``` +sealos run -e DashBoardPort=8443 mydashboard:latest --masters 192.168.0.2,192.168.0.3,192.168.0.4 \ + --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --passwd 'xxx' +``` + +这些示例展示了 `sealos run` 命令的强大和灵活性,可以根据您的需求进行定制和调整。 + +更多示例请参考 [运行集群](/self-hosting/lifecycle-management/operations/run-cluster.md)。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/save.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/save.md new file mode 100644 index 00000000000..cea21ca7351 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/save.md @@ -0,0 +1,39 @@ +--- +sidebar_position: 6 +--- + +# save 保存镜像 + +`sealos save` 是 Sealos 命令行工具中的一个命令,用于将镜像保存到归档文件中。这个命令可以帮助你方便地备份和迁移你的镜像。本指南将详细介绍其使用方法。 + +## 基本用法 + +基本的 `sealos save` 命令格式如下: + +```bash +sealos save -o outputFilename imageName +``` + +在上述命令中,`outputFilename` 是你想要保存的归档文件的名称,`imageName` 是你想要保存的镜像的名称。 + +## 示例 + +例如,你可以使用以下命令将名为 `labring/kubernetes:latest` 的镜像保存到一个名为 `kubernetes.tar` 的归档文件中: + +```bash +sealos save -o kubernetes.tar labring/kubernetes:v1.24.0 +``` + +## 可选参数 + +- `--format`: 这个参数用于指定保存镜像的传输方式。目前可用的选项有 `oci-archive` 和 `docker-archive`、`oci-dir`,`docker-dir`。默认值是 `oci-archive`。 +- `-m`: 这个参数可以同时保存多个镜像,但是仅限于`docker-archive`格式。 + +例如,你可以使用以下命令将名为 `labring/kubernetes:latest` 的镜像以 `docker-archive` 的方式保存到一个名为 `kubernetes.tar` 的归档文件中: + +```bash +sealos save -o kubernetes.tar --format docker-archive labring/kubernetes:v1.24.0 +sealos save -o kubernetes.tar -m --format docker-archive labring/kubernetes:v1.24.0 labring/helm:v3.5.0 +``` + +以上就是 `sealos save` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/scp.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/scp.md new file mode 100644 index 00000000000..1508424fb4f --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/scp.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 5 +--- + +# scp 拷贝文件 + +`sealos scp` 是 Sealos 命令行工具中的一个命令,用于将文件复制到指定的集群节点。本指南将详细介绍其使用方法和选项。 + +## 基本用法 + +基本的 `sealos scp` 命令格式如下: + +```bash +sealos scp "source file path" "destination file path" +``` + +在上述命令中,`source file path` 是你要复制的文件的本地路径,`destination file path` 是你要将文件复制到的远程节点路径。 + +## 选项 + +`sealos scp` 命令提供了以下选项: + +- `-c, --cluster='default'`: 要将文件复制到其上的集群的名称。默认为 `default`。 + +- `--ips=[]`: 将文件复制到具有指定 IP 地址的节点。 + +- `-r, --roles='':`: 将文件复制到具有指定角色的节点。 + +每个选项后都可以跟随一个或多个参数。 + +## 示例 + +例如,你可以使用以下命令将本地的 `/root/aa.txt` 文件复制到默认集群的所有节点的 `/root/dd.txt`: + +```bash +sealos scp "/root/aa.txt" "/root/dd.txt" +``` + +如果你想在名为 `my-cluster` 的集群的 `master` 和 `node` 角色的节点上复制文件,可以使用以下命令: + +```bash +sealos scp -c my-cluster -r master,node "/root/aa.txt" "/root/dd.txt" +``` + +如果你只想在 IP 地址为 `172.16.1.38` 的节点上复制文件,可以使用以下命令: + +```bash +sealos scp -c my-cluster --ips 172.16.1.38 "/root/aa.txt" "/root/dd.txt" +``` + +以上就是 `sealos scp` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/tag.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/tag.md new file mode 100644 index 00000000000..c3e250cc344 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/commands/tag.md @@ -0,0 +1,33 @@ +--- +sidebar_position: 6 +--- + +# tag 添加镜像名称 + +`sealos tag` 是 Sealos 命令行工具中的一个命令,用于给本地存储的镜像添加一个或多个附加名称。这个命令可以帮助你更好地管理你的镜像。本指南将详细介绍其使用方法。 + +## 基本用法 + +基本的 `sealos tag` 命令格式如下: + +```bash +sealos tag imageName newName +``` + +在上述命令中,`imageName` 是你要操作的镜像的名称,`newName` 是你想要添加的新标签。 + +## 示例 + +例如,你可以使用以下命令给名为 `imageName` 的镜像添加一个新的名称 `firstNewName`: + +```bash +sealos tag imageName firstNewName +``` + +你也可以一次添加多个名称,例如,添加 `firstNewName` 和 `SecondNewName` 两个名称: + +```bash +sealos tag imageName firstNewName SecondNewName +``` + +以上就是 `sealos tag` 命令的使用指南,希望对你有所帮助。如果你在使用过程中遇到任何问题,欢迎向我们提问。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/kubernetes-cluster-image.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/kubernetes-cluster-image.md new file mode 100644 index 00000000000..f09d34f7bf1 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/kubernetes-cluster-image.md @@ -0,0 +1,55 @@ +--- +sidebar_position: 10 +--- + +# Kubernetes 集群镜像说明文档 + +本文档主要介绍 Sealos 官方提供的 rootfs 类型集群镜像,包括镜像名称、镜像类型以及镜像版本等方面的说明。 + +## 镜像名称 + +Sealos 官方发布的集群镜像主要包括以下几种: + +1. kubernetes:使用 containerd 作为容器运行时(CRI)的 Kubernetes 镜像。 +2. kubernetes-docker:使用 docker 作为容器运行时(CRI)的 Kubernetes 镜像。 +3. kubernetes-crio:使用 crio 作为容器运行时(CRI)的 Kubernetes 镜像。 + +目前,Sealos 主要提供了 Kubernetes 相关的镜像,而其他类型的集群镜像,如 k3s、k0s 等,尚未提供。 + +## 镜像类型 + +根据容器运行时(CRI)的不同,Sealos 提供了不同类型的 Kubernetes 集群镜像: + +1. 使用 containerd 作为 CRI 的 Kubernetes 镜像。 +2. 使用 docker 作为 CRI 的 Kubernetes 镜像。 +3. 使用 crio 作为 CRI 的 Kubernetes 镜像。 + +用户可以根据自己的需求和偏好,选择合适的镜像类型。 + +## 镜像版本 + +Sealos 官方提供的集群镜像有多个版本可供选择,例如: + +### 1. 开发版(Development version) + +适用于想要尝试项目最新功能的用户。开发版可能包含尚未经过完整测试的新功能和改进,因此可能不够稳定。 + +示例:`v1.26(v1.26-amd64/v1.26-arm64)` + +### 2. 最新版(Latest version) + +通常比开发版更稳定,但可能不包含所有的新功能。这是推荐给大多数用户使用的版本。 + +示例:`v1.26.0(v1.26.0-amd64/v1.26.0-arm64)` + +### 3. 发布版(Release version,包含历史版本) + +包含了历史版本的发布版。发布版通常经过了严格的测试,被认为是稳定的。 + +示例:`v1.26.0-4.1.5(v1.26.0-4.1.5-amd64/v1.26.0-4.1.5-arm64)` `4.1.5`是sealos对应版本号 + +在选择镜像版本时,用户需要根据自己的需求和偏好来选择适合的版本。另外,Sealos 还提供了针对不同处理器架构的子版本,以满足用户在不同硬件平台上的需求。 + +## 总结 + +本文档对 Sealos 官方提供的 rootfs 类型集群镜像进行了说明,包括镜像名称、镜像类型以及镜像版本等方面。用户可以根据自己的需求和偏好,在不同的镜像类型和版本中进行选择,以便在 Kubernetes 集群中运行容器。 diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/sealos.md b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/sealos.md new file mode 100644 index 00000000000..69c2cc67ce9 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/lifecycle-management/reference/sealos/sealos.md @@ -0,0 +1,16 @@ +--- +sidebar_position: 0 +--- + +# Sealos 使用指南 + +Sealos 是一个统一的云操作系统,用于管理云原生应用。它提供了一系列命令行工具来帮助用户管理 Kubernetes 集群,管理节点,远程操作,管理容器和镜像,以及其他一些功能。下面是这些命令的详细介绍: + +本章节主要介绍 Sealos 的使用指南以及集群镜像相关说明。 + +- Sealos使用指南: 有关每个命令的详细信息,包括所有受支持的参数和子命令, 请参阅 [sealos](/self-hosting/lifecycle-management/reference/sealos/commands.md) 参考文档。 +- 集群镜像: + - [Rootfs集群镜像](/self-hosting/lifecycle-management/reference/sealos/kubernetes-cluster-image.md) + - [Application集群镜像](/self-hosting/lifecycle-management/reference/sealos/app-cluster-image.md) + + diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/QA.md b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/QA.md new file mode 100644 index 00000000000..eb8b12389da --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/QA.md @@ -0,0 +1,110 @@ +--- +sidebar_position: 3 +--- + +# 常见问题 + +在部署及使用 Sealos Cloud 过程中,您可能会遇到各种问题。为了更好地帮助您解决这些问题,我们对常见问题进行了总结,并提供了详细的答案和解决方法。 + +## 部署问题 + +下面总结了部署过程中可能遇到的问题及解决方法,假如您遇到了其他问题,请在 [Sealos 社区](https://forum.laf.run/)中联系我们。 + +### Q1:iptables / ip_forward 问题 + +**问题描述**:在部分操作系统中,iptables 或 IPv4 IP 转发默认未启用,例如旧版本的 Centos、RHEL 等。这可能导致部署过程中无法正常创建 +iptables 规则或转发数据包,从而导致集群无法正常启动。 + +**解决方法**:需要在每个节点上执行以下命令,以启用 iptables 和 IP 转发: + +```shell +$ modprobe br_netfilter +$ echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables +$ echo 1 > /proc/sys/net/ipv4/ip_forward +``` + +### Q2:系统内核问题 + +- **问题描述**:如果系统内核版本过低,可能导致集群无法正常启动。低版本内核也可能导致依赖 MongoDB 5.0 的应用无法正常运行。 +- **解决方法**:在部署前,请确保系统内核版本至少为 5.4 或更高。 + +### Q3:系统资源问题 + +- **问题描述**:系统资源紧张可能会导致部署过程中出现卡顿或停滞,当您等待过久时,请检查系统资源是否足够。 +- **解决方法**:使用命令 `kubectl describe nodes` 查看节点资源状态。一般情况下可以从 CPU、内存、存储等方向排查系统资源是否充足。 + +### Q4:网络问题 + +- **问题描述**: 在部署过程中,服务器的不当配置可能会引发多种网络问题,例如: + 1. http_proxy / https_proxy 环境变量配置; + 2. 服务器防火墙配置; + 3. 服务器路由配置; +- **解决方法**: 遇到网络问题时,请检查以上配置是否正确。 + +## 证书及域名相关问题 + +### 证书更新 + +在您使用 Sealos 过程中,证书是保障集群安全的重要组成部分。以下是详细的证书更新步骤,这些步骤可以帮助您在证书即将过期时顺利更新: + +1. **备份旧证书**: + + 在主节点 `master0` 上,您需要先备份当前使用的证书。这是一个防止更新过程中出现问题而导致证书丢失的重要步骤。使用以下命令进行备份: + + ```shell + $ kubectl get secret -n sealos-system wildcard-cert -o yaml > cert-backup.yaml + ``` + + 此命令会将名为 `wildcard-cert` 的证书以 YAML 格式保存到文件 `cert-backup.yaml` 中。 + +2. **保存新证书**: + + 将您已经准备好的新证书文件保存到 `master0` 节点上。确保新的证书文件(通常是 `.crt` 和 `.key` 文件)在节点上的某个位置。 + +3. **更新证书**: + + 使用以下脚本来更新证书。您需要替换脚本中的 `` 和 ``,以指向您的新证书文件和密钥文件的实际路径。 + + ```shell + #!/bin/bash + # 设置变量 + CRT_FILE= + KEY_FILE= + + # 将证书和密钥文件内容进行Base64编码 + CRT_BASE64=$(cat $CRT_FILE | base64 -w 0) + KEY_BASE64=$(cat $KEY_FILE | base64 -w 0) + + # 构建部分更新的JSON对象 + PATCH_JSON='{"data":{"tls.crt":"'$CRT_BASE64'","tls.key":"'$KEY_BASE64'"}}' + + # 使用kubectl patch命令更新Secret + kubectl patch secret wildcard-cert -n sealos-system -p $PATCH_JSON + ``` + + 这个脚本的主要作用是将新证书的内容编码为 Base64 格式,并使用 `kubectl patch` 命令更新 Kubernetes 集群中的相应 Secret + 对象。 + +### 域名更换 + +域名更换是一个更加复杂的过程,因为它通常涉及到集群内多个组件和服务的配置更改。目前,我们尚未在文档中提供域名更换的详细教程。不过,我们计划在未来推出 +Sealos 集群管理面板,该面板将提供更加简便的方法来替换集群域名和证书。 + +请注意,域名更换通常需要对集群的网络配置进行深入了解,并且可能涉及到 DNS +设置、服务发现等多个方面。因此,建议在执行此类操作时,确保您具备相应的技术知识或咨询专业人士的帮助。 + +### 用户注册开关 + +关闭用户注册: + +```shell +kubectl get cm -n sealos desktop-frontend-config -o yaml | sed 's/signUpEnabled: true/signUpEnabled: false/g' | kubectl apply -f - +kubectl rollout restart deployment desktop-frontend -n sealos +``` + +开启用户注册: + +```shell +kubectl get cm -n sealos desktop-frontend-config -o yaml | sed 's/signUpEnabled: false/signUpEnabled: true/g' | kubectl apply -f - +kubectl rollout restart deployment desktop-frontend -n sealos +``` diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/chrome-certificate-1.jpg b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/chrome-certificate-1.jpg new file mode 100644 index 00000000000..680d572141b Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/chrome-certificate-1.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/chrome-certificate-2.jpg b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/chrome-certificate-2.jpg new file mode 100644 index 00000000000..8b6a354702c Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/chrome-certificate-2.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/firefox-export-certificate-1.png b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/firefox-export-certificate-1.png new file mode 100644 index 00000000000..6e2c46692cf Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/firefox-export-certificate-1.png differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/firefox-export-certificate-2.jpg b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/firefox-export-certificate-2.jpg new file mode 100644 index 00000000000..a99aaeaf5a0 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/firefox-export-certificate-2.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/firefox-export-certificate-3.jpg b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/firefox-export-certificate-3.jpg new file mode 100644 index 00000000000..8a42e6c08c8 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/firefox-export-certificate-3.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/safari-export-certificate-1.jpg b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/safari-export-certificate-1.jpg new file mode 100644 index 00000000000..3a211ccd3e1 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/safari-export-certificate-1.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/safari-export-certificate-2.jpg b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/safari-export-certificate-2.jpg new file mode 100644 index 00000000000..357d5880dbe Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/safari-export-certificate-2.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/safari-export-certificate-3.jpg b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/safari-export-certificate-3.jpg new file mode 100644 index 00000000000..9c33c03204f Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/safari-export-certificate-3.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-cost-center.jpg b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-cost-center.jpg new file mode 100644 index 00000000000..e8e59ccb870 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-cost-center.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate.jpg b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate.jpg new file mode 100644 index 00000000000..97dbcc274b2 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate1.png b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate1.png new file mode 100644 index 00000000000..3f1bfaebdc2 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate1.png differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate2.png b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate2.png new file mode 100644 index 00000000000..7c33e2693e9 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate2.png differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate3.png b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate3.png new file mode 100644 index 00000000000..609a653a4f1 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate3.png differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate4.png b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate4.png new file mode 100644 index 00000000000..6c6a20aadb7 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license-activate4.png differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license.png b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license.png new file mode 100644 index 00000000000..aa820a06c10 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/sealos-license.png differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/windows-trust-certificate.jpg b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/windows-trust-certificate.jpg new file mode 100644 index 00000000000..243d0d2d558 Binary files /dev/null and b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/images/windows-trust-certificate.jpg differ diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/install-object-storage.md b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/install-object-storage.md new file mode 100644 index 00000000000..cade1f86851 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/install-object-storage.md @@ -0,0 +1,43 @@ +--- +sidebar_position: 2 +--- + +# 部署对象存储 + +下载 helm 图表。 + +```bash +curl -O https://raw.githubusercontent.com/minio/operator/master/helm-releases/operator-5.0.6.tgz +``` + +安装 minio-operator。 + +```bash +helm install --namespace minio-system --create-namespace minio-operator operator-5.0.6.tgz +``` + +安装 Minio、Controller 等。 + +```bash +# DOMAIN 是 Sealos 集群的域名 +# 环境变量设置 Minio 管理员账户(默认的 Minio 管理员账户为 username/passw0rd) +# -e minioAdminUser={16位随机大小写字符串} -e minioAdminPassword={32位随机大小写字符串} +sealos run ghcr.io/labring/sealos-cloud-objectstorage:latest -e cloudDomain={DOMAIN} +``` + +# 卸载对象存储 + +安装「对象存储」失败,可以使用脚本清理残留资源,卸载「对象存储」也可以使用脚本清理。 + +```bash +#!/usr/bin/env bash +set +e + +kubectl delete app objectstorage -n app-system +kubectl delete ns objectstorage-system objectstorage-frontend +helm uninstall minio-operator -n minio-system +kubectl delete ns minio-system +kubectl delete crd objectstoragebuckets.objectstorage.sealos.io objectstorageusers.objectstorage.sealos.io +kubectl delete clusterrole objectstorage-manager-role objectstorage-metrics-reader objectstorage-proxy-role +kubectl delete clusterrolebinding objectstorage-manager-rolebinding objectstorage-proxy-rolebinding +``` \ No newline at end of file diff --git a/docs/5.0/i18n/zh-Hans/self-hosting/sealos/installation.md b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/installation.md new file mode 100644 index 00000000000..34755fe2860 --- /dev/null +++ b/docs/5.0/i18n/zh-Hans/self-hosting/sealos/installation.md @@ -0,0 +1,428 @@ +--- +sidebar_position: 1 +toc_max_heading_level: 5 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Sealos 集群部署 + +export const Highlight = ({children, color}) => ( + + {children} + +); + +:::tip + +大规模集群以及企业生产环境强烈建议使用 [Sealos 私有云的企业版或者定制版](/self-hosting)。 + +::: + +## 准备工作 + +### 服务器 + +以下是一些基本的要求: + +- 每个集群节点应该有不同的主机名。 +- 所有节点的时间需要同步。 +- 建议使用干净的操作系统来创建集群。**不要自己装 Docker!** +- 支持大多数 Linux 发行版,例如:Ubuntu、Debian、CentOS、Rocky linux。 +- **系统内核版本在 5.4 及以上**。 +- **必须使用 root 用户安装!** + +推荐配置: + +推荐使用 Ubuntu 22.04 LTS 操作系统,内核版本在 5.4 及以上,配置如下: + +| 操作系统 | 内核版本 | CPU | 内存 | 存储 | Masters | Nodes | +|------------------|-------|-----|------|-------|---------|-------| +| Ubuntu 22.04 LTS | ≥ 5.4 | 8C | 16GB | 100GB | 奇数台 | 任意 | + +:::info注意 +Kubernetes 和 Sealos Cloud 的系统组件在每个 Master 节点上大约需要 2 核心(2c)和 2GB 内存(2g),在每个 Node 节点上则需要大约 +1 核心(1c)和 1GB 内存(1g),请确保集群中每个节点都有足够的计算资源以支持系统组件的运行。 +::: + +### 网络 + ++ 所有节点之间网络互通; ++ 需要在 Kubernetes 集群的**第一个 Master 节点**上执行脚本,目前**集群外的节点不支持集群安装**; ++ 所有节点之间可以互相通信。 + +### 域名 + ++ 需要一个域名用于访问 Sealos 及相关服务; ++ 如果您没有域名,可以使用 `nip.io` 提供的免费域名服务。 + +### 证书 + +Sealos 需要使用证书来保证通信安全,默认在您不提供证书的情况下我们会使用 [cert-manager](https://cert-manager.io/docs/) 来自动签发证书。 + +如果您能提供证书,证书需要解析下列域名 (假设您提供的域名为:cloud.example.io): + +- `*.cloud.example.io` +- `cloud.example.io` + +## 安装步骤 + +为了便于部署,我们提供了一个一键安装脚本。该脚本可以从零开始部署 Sealos 集群,也可以在已有的 Kubernetes 集群上部署 Sealos +集群(在已有集群上执行时请谨慎操作)。 + +:::info注意 + +该脚本只支持在 “使用 Sealos 安装的 Kubernetes 集群” 上部署 Sealos 集群,暂不支持其他方式部署的 Kubernetes。 + +关于如何使用 Sealos 部署 Kubernetes +集群,可以参考:[安装 Kubernetes 集群](/self-hosting/lifecycle-management/quick-start/deploy-kubernetes.md) +,支持 [Docker Hub](https://hub.docker.com/r/labring/kubernetes/tags) 中的几乎所有 Kubernetes 版本(**暂不支持 1.28 及以上版本 +**)。 + +::: + +如果您的机器还没有安装过 Kubernetes,**建议直接使用该脚本连同 Kubernetes 和 Sealos 集群一起安装。** + +根据您的域名情况,可以分为以下几种安装方式: + +### 1、无公网域名,也不想自定义域名 + +如果您没有公网域名,也不需要自定义域名,可以选择直接使用 `nip.io` 提供的免费域名服务。`nip.io` 是一个免费的通配符 DNS 服务,它可以将动态分配的 IP 地址映射到一个固定的子域名上,特别适合用于本地开发环境。具体的工作原理为: + +您可以使用任何 IP 地址作为 `nip.io` 子域名的一部分,而 `nip.io` 会将它解析回相应的 IP 地址。例如,如果你有一个内网 IP 地址 `192.168.1.10`,你可以使用 `192.168.1.10.nip.io` 作为域名,所有向这个域名发送的请求都会被解析到 `192.168.1.10` 这个 IP 地址上。这样就无需修改本地 hosts 文件,也不需要搭建内网 DNS 服务,直接通过这个域名就能访问内网服务了。 + +使用 nip.io 作为 Sealos 的域名非常简单,只需在第一个 Master 节点上执行以下命令,并根据提示输入参数: + +```bash +$ curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/v5.0.0-beta5/scripts/cloud/install.sh -o /tmp/install.sh && bash /tmp/install.sh \ + --cloud-version=v5.0.0-beta5 \ + --image-registry=registry.cn-shanghai.aliyuncs.com --zh \ + --proxy-prefix=https://mirror.ghproxy.com +``` + +当需要你输入 Sealos Cloud 域名时,你需要输入这种格式的域名:`[ip].nip.io`,其中 [ip] 是你的 Master 节点 IP。 + +安装完成后,终端会输出 Sealos 访问域名以及用户名和密码,例如: + +```bash +Sealos cloud login info: +Cloud Version: latest +URL: https://10.214.210.102.nip.io +admin Username: admin +admin Password: sealos2023 +``` + +### 2、有公网域名,想公网访问 + +如果你有自己的公网域名,并且想通过公网访问 Sealos,那你就需要准备好公网受信任的 SSL/TLS 证书。你可以通过 acme.sh 等工具自动签发证书,也可以从域名提供商处下载免费证书或者购买商业证书。 + +:::info注意 +如果你的公网 IP 在国内,那么域名必须要备案! +::: + +准备好域名证书后,需要将证书放到第一个 Master 节点的某个目录中,例如 `/root/certs/`。 + +:::info注意 + +您还需要在域名服务商处添加一条该域名的 A 记录,地址解析到第一个 Master 节点的公网 IP 地址。同时还需要添加一条泛解析记录,将该域名的子域名也解析到第一个 Master 节点的公网 IP 地址。 + +例如 (假设你的域名是 `cloud.example.io`,假设你的 Master 节点公网地址是 `192.168.1.10`): + +```bash +cloud.example.io A 192.168.1.10 +*.cloud.example.io A 192.168.1.10 +``` + +::: + +然后在第一个 Master 节点上执行以下命令,并根据提示输入参数: + +```bash +$ curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/v5.0.0-beta5/scripts/cloud/install.sh -o /tmp/install.sh && bash /tmp/install.sh \ + --cloud-version=v5.0.0-beta5 \ + --image-registry=registry.cn-shanghai.aliyuncs.com --zh \ + --proxy-prefix=https://mirror.ghproxy.com \ + --cloud-domain= \ + --cert-path= \ + --key-path= +``` + ++ `` 需要替换成你自己的公网域名。 ++ `` 需要替换成你的证书位置,通常是 `.crt` 或 `.pem` 文件。例如:`/root/certs/example.crt`。 ++ `` 需要替换成你的私钥位置,通常是 `.key` 或 `.pem` 文件。例如:`/root/certs/example.key`。 + +### 3、有公网域名,想内网访问 + +如果您有自己的公网域名,但是只有内网 IP,或者只想在内网访问 Sealos,那您只需要在域名服务商处添加一条该域名的 A 记录,地址解析到第一个 Master 节点的内网 IP 地址。同时还需要添加一条泛解析记录,将该域名的子域名也解析到第一个 Master 节点的内网 IP 地址。 + +例如 (假设你的域名是 `cloud.example.io`,假设你的 Master 节点内网地址是 `192.168.1.10`): + +```bash +cloud.example.io A 192.168.1.10 +*.cloud.example.io A 192.168.1.10 +``` + +然后在第一个 Master 节点上执行以下命令,并根据提示输入参数: + +```bash +$ curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/v5.0.0-beta5/scripts/cloud/install.sh -o /tmp/install.sh && bash /tmp/install.sh \ + --cloud-version=v5.0.0-beta5 \ + --image-registry=registry.cn-shanghai.aliyuncs.com --zh \ + --proxy-prefix=https://mirror.ghproxy.com \ + --cloud-domain= +``` + +其中 `` 需要替换成你自己的公网域名。 + +安装过程中 Sealos 会使用 [cert-manager](https://cert-manager.io/docs/) 来自签名证书。 + +### 4、无公网域名,但想自定义域名 + +如果您没有公网域名,但是需要自定义域名,那么就需要在内网自建 DNS,然后将自定义域名解析到第一个 Master 节点的内网 IP 地址。 + +:::note + +假设您的第一个 Master 节点的内网 IP 地址为 `192.168.1.10`。假设您的域名为 `cloud.example.io`。 + +::: + +可以考虑使用 CoreDNS 来自建 DNS 服务,参考配置: + +```nginx +(global_cache) { + cache { + # [5, 60] + success 65536 3600 300 + # [1, 10] + denial 8192 600 60 + prefetch 1 60m 10% + } +} + +.:53 { + errors + health + ready + + import global_cache + + template IN A cloud.example.io { + answer "{{ .Name }} 60 IN A 192.168.1.10" + fallthrough + } + + forward . 223.5.5.5 + + log + loop + reload 6s +} +``` + +这样不管您访问 `cloud.example.io` 还是 `*.cloud.example.io` 都会解析到第一个 Master 节点的内网 IP 地址。 + +然后在第一个 Master 节点上执行以下命令,并根据提示输入参数: + +```bash +$ curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/v5.0.0-beta5/scripts/cloud/install.sh -o /tmp/install.sh && bash /tmp/install.sh \ + --cloud-version=v5.0.0-beta5 \ + --image-registry=registry.cn-shanghai.aliyuncs.com --zh \ + --proxy-prefix=https://mirror.ghproxy.com \ + --cloud-domain= +``` + +其中 `` 需要替换成你自己的自定义域名。 + +安装过程中 Sealos 会使用 [cert-manager](https://cert-manager.io/docs/) 来自签名证书。 + +## 信任自签名证书 + +如果您选择了上面提供的安装方式中的 1 或 3 或 4,那么您的证书默认是不受浏览器信任的,当你访问 Sealos Cloud 时,浏览器会提示下面的信息: + +![](images/chrome-certificate-1.jpg) + +即使点击继续访问,进入 Sealos Cloud 之后也无法正常显示 App 图标,无法打开 App。 + +![](images/chrome-certificate-2.jpg) + +我们需要导出自签名证书,并让系统信任自签名证书。步骤如下。 + +### 导出自签名证书 + +各个浏览器导出自签名证书的步骤略有不同。以下是在一些常用浏览器中导出自签名证书的步骤: + +#### Chrome (以及基于 Chromium 的浏览器如新版 Edge 和 Brave) + +1. 在浏览器地址栏左侧点击 “不安全” 字样。 +2. 点击 “证书无效”,这将打开一个证书信息窗口。 +3. 在打开的证书窗口中,切换到 “详细信息” 标签页。 +4. 在 “详细信息” 标签页中,找到并点击 “导出”。 +5. 选择一个文件名和保存位置,然后完成导出过程。 + +#### Firefox + +1. 点击页面中的 “高级”。 + + ![](images/firefox-export-certificate-1.png) + +2. 然后点击 “查看证书”。 + + ![](images/firefox-export-certificate-2.jpg) + +3. 在证书页面中点击 “PEM (证书)”。 + + ![](images/firefox-export-certificate-3.jpg) + +#### Safari + +1. 点击页面中的 “显示详细信息”。 + + ![](images/safari-export-certificate-1.jpg) + +2. 然后点击 “查看此证书”。 + + ![](images/safari-export-certificate-2.jpg) + +3. 在证书视图中,可以看到一个带有证书链的窗口。 + + ![](images/safari-export-certificate-3.jpg) + +4. 拖动红框圈出来的证书到桌面或文件夹中,证书就会被导出了。 + +### 信任自签名证书 + +#### macOS + +在 macOS 上信任自签名证书可以使用以下命令: + +```bash +# 假设证书保存在 ~/Downloads/10.214.210.102.nip.io.cer +$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/Downloads/10.214.210.102.nip.io.cer +``` + +您也可以通过以下步骤来操作: + +##### 1、添加证书到钥匙串 + +1. 启动**钥匙串访问** (Keychain Access) 应用程序,点击左侧 “系统钥匙串” 下方的 “系统” 类别。 +2. 然后打开 “访达”,进入证书保存位置,**双击证书文件**:这通常是一个 `.cer`,`.crt`,或 `.pem` 文件。 +3. 输入您的用户名和密码以允许修改。 +4. 证书现在应该已经被添加到您的钥匙串中。 + +##### 2、信任证书 + +1. 在钥匙串访问中,从 “系统” 类别的列表中找到刚刚添加的自签名证书,并双击它。 +2. 在打开的窗口中,展开 “信任” 部分。 +3. 在 “当使用此证书时” 选项旁边,有一个下拉菜单,默认设置可能是 “使用系统默认值”。要信任证书,请改为 “始终信任”。 +4. 关闭证书信息窗口,系统可能会提示您验证您的用户名和密码,以确认更改。 +5. 现在,证书已经被标记为受信任。 + +:::info注意 + +自签名证书不由第三方证书颁发机构 (CA) 颁发,因此,其他设备也不会信任该证书。如果您是在公司或组织内部使用自签名证书,可能需要在每个需要信任此证书的设备上手动进行上述步骤。 + +::: + +#### Windows + +1. 在根证书文件点鼠标右键,选择 “安装证书”。 +2. 选择 “当前用户” 或者 “本地计算机”,下一步 +3. “将所有的证书都放入下列存储”,“浏览”,“受信任的根证书颁发机构”,“确定”,下一步。 +4. 完成,“是”,确定。 + +![](images/windows-trust-certificate.jpg) + +#### Linux + +Linux 不同发行版更新根证书存储的命令不一样,用来保存私有证书的路径也不一样。需要先复制自签名 CA 证书到特定路径,再运行命令更新根证书存储。 + + + + + ```bash + # Debian/Ubuntu/Gentoo + # - 安装 + $ sudo cp root_ca.crt /usr/local/share/ca-certificates/root_ca.crt + # update-ca-certificates 会添加 /etc/ca-certificates.conf 配置文件中指定的证书 + # 另外所有 /usr/local/share/ca-certificates/*.crt 会被列为隐式信任 + $ sudo update-ca-certificates + + # - 删除 + $ sudo rm /usr/local/share/ca-certificates/root_ca.crt + $ sudo update-ca-certificates --fresh + ``` + + + + + ```bash + # CentOS/Fedora/RHEL + $ yum install ca-certificates + # 启用动态 CA 配置功能: + $ update-ca-trust force-enable + $ cp root_ca.crt /etc/pki/ca-trust/source/anchors/ + $ update-ca-trust + ``` + + + + + ```bash + # Alpine + $ apk update && apk add --no-cache ca-certificates + $ cp root_ca.crt /usr/local/share/ca-certificates/ + $ update-ca-certificates + ``` + + + + + ```bash + # OpenSUSE/SLES + $ cp root_ca.crt /etc/pki/trust/anchors/ + $ update-ca-certificates + ``` + + + + +## 激活集群 + +集群安装完成后,默认只有 5 元的额度,你需要激活集群以获取赠送的 299 元余额。步骤如下: + +1. 首先点击桌面的「许可证」打开许可证应用: + + ![](images/sealos-license.png) + +2. 然后点击「激活/购买」: + + ![](images/sealos-license-activate.jpg) + + 然后浏览器会跳转到 License 页面,并跳出一个弹窗: + + ![](images/sealos-license-activate1.png) + +3. 如果你还没有在该页面创建过集群,就点击「理立即开始」创建一个集群;如果你已经创建过集群了,只需要点击「已有集群」便会跳转到已有集群。 + + 跳转到集群列表之后。你就会看到集群已经被激活了: + + ![](images/sealos-license-activate2.png) + +4. 点击 「License 管理」,然后下载免费赠送的价值 299 元的 License: + + ![](images/sealos-license-activate3.png) + +5. 然后回到 Sealos 集群的「许可证」应用界面,点击「上传 License 文件」: + + ![](images/sealos-license-activate4.png) + + 选择刚刚下载的 License 文件进行上传,然后点击右下角的「激活 License」,便可激活 License。激活成功后,集群中的余额就变成了 304 元。 + + ![](images/sealos-cost-center.jpg) \ No newline at end of file diff --git a/docs/5.0/img/ai-applications/c++.png b/docs/5.0/img/ai-applications/c++.png new file mode 100644 index 00000000000..f21cf1e1b2d Binary files /dev/null and b/docs/5.0/img/ai-applications/c++.png differ diff --git a/docs/5.0/img/ai-applications/python.png b/docs/5.0/img/ai-applications/python.png new file mode 100644 index 00000000000..485d3f04b62 Binary files /dev/null and b/docs/5.0/img/ai-applications/python.png differ diff --git a/docs/5.0/img/ai-applications/sealos4-run-k8s-2.png b/docs/5.0/img/ai-applications/sealos4-run-k8s-2.png new file mode 100644 index 00000000000..4c139126058 Binary files /dev/null and b/docs/5.0/img/ai-applications/sealos4-run-k8s-2.png differ diff --git a/docs/5.0/img/ai-applications/sealos4-run-k8s-3.png b/docs/5.0/img/ai-applications/sealos4-run-k8s-3.png new file mode 100644 index 00000000000..79208c3fc11 Binary files /dev/null and b/docs/5.0/img/ai-applications/sealos4-run-k8s-3.png differ diff --git a/docs/5.0/img/ai-applications/sealos4-run-k8s.png b/docs/5.0/img/ai-applications/sealos4-run-k8s.png new file mode 100644 index 00000000000..4e2f8f750c2 Binary files /dev/null and b/docs/5.0/img/ai-applications/sealos4-run-k8s.png differ diff --git a/docs/5.0/img/app-launchpad-1-zh.jpg b/docs/5.0/img/app-launchpad-1-zh.jpg new file mode 100644 index 00000000000..56c9a434ddc Binary files /dev/null and b/docs/5.0/img/app-launchpad-1-zh.jpg differ diff --git a/docs/5.0/img/app-launchpad-1.jpg b/docs/5.0/img/app-launchpad-1.jpg new file mode 100644 index 00000000000..c93e8368db9 Binary files /dev/null and b/docs/5.0/img/app-launchpad-1.jpg differ diff --git a/docs/5.0/img/app-launchpad-zh.png b/docs/5.0/img/app-launchpad-zh.png new file mode 100644 index 00000000000..b9a1af059e1 Binary files /dev/null and b/docs/5.0/img/app-launchpad-zh.png differ diff --git a/docs/5.0/img/app-launchpad.png b/docs/5.0/img/app-launchpad.png new file mode 100644 index 00000000000..e0afc48fffd Binary files /dev/null and b/docs/5.0/img/app-launchpad.png differ diff --git a/docs/5.0/img/bytebase.webp b/docs/5.0/img/bytebase.webp new file mode 100644 index 00000000000..164aff68ff5 Binary files /dev/null and b/docs/5.0/img/bytebase.webp differ diff --git a/docs/5.0/img/database-zh.jpg b/docs/5.0/img/database-zh.jpg new file mode 100644 index 00000000000..8fb5b1a33e2 Binary files /dev/null and b/docs/5.0/img/database-zh.jpg differ diff --git a/docs/5.0/img/database.jpg b/docs/5.0/img/database.jpg new file mode 100644 index 00000000000..1394172749d Binary files /dev/null and b/docs/5.0/img/database.jpg differ diff --git a/docs/5.0/img/laf-zh.jpg b/docs/5.0/img/laf-zh.jpg new file mode 100644 index 00000000000..457cda0050b Binary files /dev/null and b/docs/5.0/img/laf-zh.jpg differ diff --git a/docs/5.0/img/laf.jpg b/docs/5.0/img/laf.jpg new file mode 100644 index 00000000000..85d7f1ccd0e Binary files /dev/null and b/docs/5.0/img/laf.jpg differ diff --git a/docs/5.0/img/metering/metering-1.png b/docs/5.0/img/metering/metering-1.png new file mode 100644 index 00000000000..4b9a6d1e58e Binary files /dev/null and b/docs/5.0/img/metering/metering-1.png differ diff --git a/docs/5.0/img/metering/metering-2.png b/docs/5.0/img/metering/metering-2.png new file mode 100644 index 00000000000..380614649ac Binary files /dev/null and b/docs/5.0/img/metering/metering-2.png differ diff --git a/docs/5.0/img/metering/metering-3.png b/docs/5.0/img/metering/metering-3.png new file mode 100644 index 00000000000..696eefab1fb Binary files /dev/null and b/docs/5.0/img/metering/metering-3.png differ diff --git a/docs/5.0/img/metering/metering-4.png b/docs/5.0/img/metering/metering-4.png new file mode 100644 index 00000000000..9acbce58235 Binary files /dev/null and b/docs/5.0/img/metering/metering-4.png differ diff --git a/docs/5.0/img/postgresql.webp b/docs/5.0/img/postgresql.webp new file mode 100644 index 00000000000..5df4a51d09e Binary files /dev/null and b/docs/5.0/img/postgresql.webp differ diff --git a/docs/5.0/img/sealos-app-store-1.jpg b/docs/5.0/img/sealos-app-store-1.jpg new file mode 100644 index 00000000000..9f4d148e453 Binary files /dev/null and b/docs/5.0/img/sealos-app-store-1.jpg differ diff --git a/docs/5.0/img/sealos-app-store-2.jpg b/docs/5.0/img/sealos-app-store-2.jpg new file mode 100644 index 00000000000..df5aeabc8bf Binary files /dev/null and b/docs/5.0/img/sealos-app-store-2.jpg differ diff --git a/docs/5.0/img/sealos-desktop-zh.webp b/docs/5.0/img/sealos-desktop-zh.webp new file mode 100644 index 00000000000..bead9952834 Binary files /dev/null and b/docs/5.0/img/sealos-desktop-zh.webp differ diff --git a/docs/5.0/img/sealos-desktop.webp b/docs/5.0/img/sealos-desktop.webp new file mode 100644 index 00000000000..a35a02d3634 Binary files /dev/null and b/docs/5.0/img/sealos-desktop.webp differ diff --git a/docs/5.0/img/sealos-left-dark.png b/docs/5.0/img/sealos-left-dark.png new file mode 100644 index 00000000000..4893d1b4bd2 Binary files /dev/null and b/docs/5.0/img/sealos-left-dark.png differ diff --git a/docs/5.0/img/sealos-left.png b/docs/5.0/img/sealos-left.png new file mode 100644 index 00000000000..91e67b39b3f Binary files /dev/null and b/docs/5.0/img/sealos-left.png differ diff --git a/docs/5.0/img/sealos-qr-code-300.png b/docs/5.0/img/sealos-qr-code-300.png new file mode 100644 index 00000000000..01c74221563 Binary files /dev/null and b/docs/5.0/img/sealos-qr-code-300.png differ diff --git a/docs/5.0/img/sealos-qr-code.jpg b/docs/5.0/img/sealos-qr-code.jpg new file mode 100644 index 00000000000..a93bda5e93e Binary files /dev/null and b/docs/5.0/img/sealos-qr-code.jpg differ diff --git a/docs/5.0/img/templates-zh.jpg b/docs/5.0/img/templates-zh.jpg new file mode 100644 index 00000000000..a4de6a217cf Binary files /dev/null and b/docs/5.0/img/templates-zh.jpg differ diff --git a/docs/5.0/img/templates.jpg b/docs/5.0/img/templates.jpg new file mode 100644 index 00000000000..62bcc2efbd8 Binary files /dev/null and b/docs/5.0/img/templates.jpg differ diff --git a/docs/5.0/img/terminal-zh.webp b/docs/5.0/img/terminal-zh.webp new file mode 100644 index 00000000000..8f3e086e9fe Binary files /dev/null and b/docs/5.0/img/terminal-zh.webp differ diff --git a/docs/5.0/img/terminal.webp b/docs/5.0/img/terminal.webp new file mode 100644 index 00000000000..60954399596 Binary files /dev/null and b/docs/5.0/img/terminal.webp differ diff --git a/docs/5.0/sidebar.json b/docs/5.0/sidebar.json new file mode 100644 index 00000000000..f77e8eb293d --- /dev/null +++ b/docs/5.0/sidebar.json @@ -0,0 +1,244 @@ +[ + "Intro", + { + "type": "category", + "label": "快速开始", + "link": { + "type": "generated-index" + }, + "collapsible": true, + "collapsed": false, + "items": [ + { + "type": "autogenerated", + "dirName": "quick-start" + } + ] + }, + { + "type": "category", + "label": "用户文档", + "link": { + "type": "generated-index" + }, + "collapsible": true, + "collapsed": false, + "items": [ + { + "type": "category", + "label": "系统功能", + "link": { + "type": "generated-index" + }, + "collapsible": true, + "collapsed": true, + "items": [ + { + "type": "autogenerated", + "dirName": "user-doc/system-function" + } + ] + }, + { + "type": "category", + "label": "应用", + "link": { + "type": "generated-index" + }, + "collapsible": true, + "collapsed": true, + "items": [ + { + "type": "autogenerated", + "dirName": "user-doc/application" + } + ] + }, + { + "type": "category", + "label": "数据库", + "link": { + "type": "generated-index" + }, + "collapsible": true, + "collapsed": true, + "items": [ + { + "type": "autogenerated", + "dirName": "user-doc/database" + } + ] + }, + { + "type": "category", + "label": "对象存储", + "link": { + "type": "generated-index" + }, + "collapsible": true, + "collapsed": true, + "items": [ + { + "type": "autogenerated", + "dirName": "user-doc/objectstorage" + } + ] + }, + { + "type": "category", + "label": "定时任务", + "link": { + "type": "generated-index" + }, + "collapsible": true, + "collapsed": true, + "items": [ + { + "type": "autogenerated", + "dirName": "user-doc/cronjob" + } + ] + }, + { + "type": "category", + "label": "管理与配置", + "link": { + "type": "generated-index" + }, + "collapsible": true, + "collapsed": true, + "items": [ + { + "type": "autogenerated", + "dirName": "user-doc/control" + } + ] + } + ] + }, + { + "type": "category", + "label": "开发者指南", + "link": { + "type": "generated-index" + }, + "collapsible": true, + "collapsed": false, + "items": [ + { + "type": "category", + "label": "系统设计", + "link": { + "type": "generated-index" + }, + "collapsible": true, + "collapsed": true, + "items": [ + { + "type": "autogenerated", + "dirName": "developer-guide/system-design" + } + ] + }, + { + "type": "category", + "label": "私有化部署", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "category", + "label": "部署Sealos", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "autogenerated", + "dirName": "developer-guide/self-hosting/sealos" + } + ] + }, + { + "type": "category", + "label": "K8s 集群生命周期管理", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "category", + "label": "快速开始", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "autogenerated", + "dirName": "developer-guide/self-hosting/lifecycle-management/quick-start" + } + ] + }, + { + "type": "category", + "label": "操作说明", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "autogenerated", + "dirName": "developer-guide/self-hosting/lifecycle-management/operations" + } + ] + }, + { + "type": "category", + "label": "进阶指南", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "autogenerated", + "dirName": "developer-guide/self-hosting/lifecycle-management/advanced-guide" + } + ] + }, + { + "type": "category", + "label": "参考", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "autogenerated", + "dirName": "developer-guide/self-hosting/lifecycle-management/reference" + } + ] + }, + "developer-guide/self-hosting/lifecycle-management/QA" + ] + } + ] + } + ] + }, + { + "type": "category", + "label": "资源", + "link": { + "type": "generated-index" + }, + "collapsible": true, + "collapsed": false, + "items": [ + { + "type": "autogenerated", + "dirName": "resources" + } + ] + } +] \ No newline at end of file diff --git a/docs/website/docusaurus.config.js b/docs/website/docusaurus.config.js index a2be223f078..666ac6d0548 100644 --- a/docs/website/docusaurus.config.js +++ b/docs/website/docusaurus.config.js @@ -32,12 +32,12 @@ const config = { /** @type {import('@docusaurus/preset-classic').Options} */ ({ docs: { - path: "../4.0/docs", + path: "../5.0/docs", sidebarPath: require.resolve("./sidebars.js"), // Please change this to your repo. // Remove this to remove the "edit this page" links. editUrl: ({ versionDocsDirPath, docPath, locale }) => - "https://github.com/labring/sealos/tree/main/docs/4.0/" + + "https://github.com/labring/sealos/tree/main/docs/5.0/" + (locale === "en" ? `${versionDocsDirPath}` : `i18n/${locale}`) + `/${docPath}`, editLocalizedFiles: false, diff --git a/docs/website/package.json b/docs/website/package.json index 821e4a51786..795c36a658b 100644 --- a/docs/website/package.json +++ b/docs/website/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "sync-zh-files": "mkdir -p i18n/zh-Hans/docusaurus-plugin-content-docs/current && cp -r ../4.0/i18n/zh-Hans/* i18n/zh-Hans/docusaurus-plugin-content-docs/current/ && cp ../4.0/i18n/zh-Hans/current.json i18n/zh-Hans/docusaurus-plugin-content-docs/current.json && cp ../4.0/code.json i18n/zh-Hans/code.json && mkdir -p i18n/zh-Hans/docusaurus-plugin-content-blog && cp -r ../blog/zh-Hans/* i18n/zh-Hans/docusaurus-plugin-content-blog/ && cp ../blog/zh-Hans/options.json i18n/zh-Hans/docusaurus-plugin-content-blog/options.json", + "sync-zh-files": "mkdir -p i18n/zh-Hans/docusaurus-plugin-content-docs/current && cp -r ../5.0/i18n/zh-Hans/* i18n/zh-Hans/docusaurus-plugin-content-docs/current/ && cp ../5.0/i18n/zh-Hans/current.json i18n/zh-Hans/docusaurus-plugin-content-docs/current.json && cp ../5.0/code.json i18n/zh-Hans/code.json && mkdir -p i18n/zh-Hans/docusaurus-plugin-content-blog && cp -r ../blog/zh-Hans/* i18n/zh-Hans/docusaurus-plugin-content-blog/ && cp ../blog/zh-Hans/options.json i18n/zh-Hans/docusaurus-plugin-content-blog/options.json", "docusaurus": "docusaurus", "start": "yarn sync-zh-files && tsc && docusaurus start", "start-zh": "yarn write-translations-zh && tsc && docusaurus start --locale zh-Hans", diff --git a/docs/website/sidebars.js b/docs/website/sidebars.js index 1d66ee339a7..b92669e956a 100644 --- a/docs/website/sidebars.js +++ b/docs/website/sidebars.js @@ -9,7 +9,7 @@ Create as many sidebars as you want. */ -const sidebar = require('../4.0/sidebar.json') +const sidebar = require('../5.0/sidebar.json') // @ts-check